- backend/ <- The python code for your custom component- frontend/ <- The javascript code for your custom component- demo/ <- A sample app using your component. Modify this!- pyproject.toml <- Used to build the package and specify package metadata.
Daddy Makers
SW, HW, CG, ART, 건설, 건축 메이크 과정을 정리, 공유하는 블로그입니다 - 대디 메이커
2025년 4월 4일 금요일
Gradio HTML Javascript 렌더링 방법
2025년 3월 29일 토요일
딥시크(deep seek) 오픈소스 코드 및 구조 분석하기
공개된 소스 코드를 보니 굳이 실행을 위한 패키지 설치는 할 필요 없을 것 같다. 일단, 오픈소스가 아니다. 단순히, inference 추론 코드만 공개되어 있다(어그로). 오픈소스라면, 최소한, train 학습 코드와 기본 데이터셋 정도는 공개되어야 한다(언론이 왜 오픈소스라 난리였는지 사실 이해가 안되는...).
- embed: 입력 임베딩 처리: 입력으로 제공된 토큰 텐서를 임베딩 레이어를 통해 변환하여 초기 입력 표현을 생성한다.
- freqs_cis: 로터리 임베딩 계산: 주파수 정보를 담고 있는 로터리 임베딩 텐서를 시퀀스 길이에 맞게 선택하여, 위치 정보를 모델에 제공한다. 위치임베딩이란 기법도 이미 트랜스포머스 논문(Google, 2017)에 구현된 것이다.
- mask: 시퀀스 길이가 1보다 클 경우, 미래 정보가 영향을 미치지 않도록 상삼각형 형태의 마스크를 생성한다. 마스크는 모델이 언어 생성 시 현재 시점 이전의 정보만을 활용하게 한다.
- Transformer 레이어 통과: 모델 내부의 여러 Transformer 레이어를 입력 데이터가 순차적으로 통과하며, 각 레이어에서 입력 표현이 갱신된다.
- norm: 출력 정규화 및 최종 표현 추출. 마지막 Transformer 레이어의 출력을 정규화하고, 시퀀스의 마지막 토큰에 해당하는 표현을 추출한다.
- logits: 로짓 계산. 추출된 최종 표현을 출력 레이어(헤드)에 전달하여 로짓, 즉 예측값을 계산한다. 이는 각 토큰에 대한 다음 단어 또는 출력값의 확률 분포를 나타낸다.
다만, 실행 속도 등 최적화를 위해 병렬처리, torch.einsum 함수를 이용해 GPU 연산을 직접 이용해 트랜스포머 어텐션 모델 QKV 코사인 유사도 계산하는 등의 노력을 하고 있다(이 또한 이미 알려진 것).
더 파보았지만, 딥시크에서 주장하는 것은 오픈소스가 아닌 오픈웨이트 모델에 더 가까워보인다. 세계적인 홍보와 언론의 관심에 비해 무늬만 MIT라이센스 오픈소스가 아닌지 의문이다.
- 언론에서 말하는 것과는 상당한 차이가 있는 딥시크 기술 오픈소스였다. 대부분 이미 개발된 오픈소스를 가져다 쓴 것으로 보인다. 앞에 언급한 몇몇 성능 최적화 부분은 좋은 접근인 것이나, 메타(페북)의 라마(Llama)가 공개한 기술에 비하면 비교할 만한 것이 아니다.
- 중국은 확실히 홍보(x10배)에 천재적인 능력(약팔이)이 있다(진심으로).
- 중국이 잘하는 선진국(미국) 기술 가져와 자국것으로 포장해 저가로 파는 기술은 세계 최고다.
- deepseek-ai/DeepSeek-V3, huggingface
- DeepSeek-V3
- Why DeepSeek V3 is considered open-source? : r/LocalLLaMA
- The Triton Inference Server provides an optimized cloud and edge inferencing solution
- Introduction - Triton documentation
- deepseek-ai/DeepSeek-V3
- OpenAI says DeepSeek ‘inappropriately’ copied ChatGPT – but it’s facing copyright claims too
- Mixture of Experts
- Sparse Mixture of Experts Language Model
- Openness in Language Models: Open Source vs Open Weights vs Restricted Weights
- 中 AI 딥시크, 챗GPT 제치고 美앱스토어 1위…실리콘밸리 충격, 연합뉴스
- [거꾸로 읽는 경제] 중국 딥시크 V3모델 출시
- 딥시크, AI 모델 V3 업데이트 버전 공개
2025년 3월 28일 금요일
인공지능 AI 에이전트 표준 프로토콜 MCP 분석 및 사용하기
- MCP 호스트는 MCP 프로토콜을 통해 서비스에 액세스할 수 있는 애플리케이션이다. Claude 데스크톱 앱, AI 에이전트/CLI, 커서 IDE 등이 이에 해당하며, LLM(로컬 또는 원격)을 활용하여 다양한 작업을 수행한다.
- MCP 클라이언트는 MCP 서버와 연결하기 위해 호스트 애플리케이션과 통합된 클라이언트이다.
- MCP 서버는 MCP 프로토콜을 통해 특정 기능을 노출하는 응용 프로그램 또는 프로그램이다. 서버는 Docker 컨테이너, JVM, Node.js(UV/UVX) 프로세스에서 실행될 수 있으며, MCP 커뮤니티에서 제공하는 사전 구축된 서버를 활용할 수도 있다.
- 로컬 데이터 소스는 로컬 시스템에 존재하는 데이터베이스 또는 파일 시스템이다.
- 원격 서비스는 웹 API를 통해 액세스할 수 있는 GitHub, Brave Search와 같은 외부 리소스이다.
도구 검색 및 호출 방법
- Introduction - Model Context Protocol
- Model Context Protocol (MCP) - Anthropic
- Creating Intelligent Agent with OpenAI Agents SDK and Autogen MCP Tools and Memory, Minyang Chen, 2025, Medium
- Unlocking Local AI: Using Ollama with Agents, DataStax, 2025, Medium
- How to use MCP tools with a PydanticAI Agent, Finn Andersen, 2025, Medium
- The official Python SDK for Model Context Protocol servers and clients
- Simplified Guide for Model Context Protocol (MCP)
- python_mcp_agent
- How to Build MCP Servers with the OpenAI Agents SDK
- Claude MCP로 엔지니어링 업무 자동화하기
- MCP in Agent AI: Hype or Standard-Bearer, Senthil, 2025, Medium
- MCP-Demo
- JSON-RPC_메시지포맷 - Model Context Protocol (MCP) 개발 방법
- uv - 파이썬 관리에 필요한 단 하나의 툴
오픈 마누스(manus) AI 에이전트 설치, 사용 및 구조 분석하기
- 로컬에서 AI 에이전트 실행
- 여러 도구 및 API 통합: 외부 API, 로컬 모델 및 자동화 도구를 연결, 호출
- 워크플로우 사용자 지정: AI가 복잡한 다단계 상호 작용을 효율적으로 처리
- 여러 LLM 지원: LLaMA, Mistral 및 Mixtral과 같은 인기 있는 개방형 모델 모델과 호환
- 자동화 향상: 내장 메모리 및 계획 기능을 통해 OpenManus는 코딩, 문서 처리, 연구 등을 지원
참고로, Google의 에이전트 백서에 보면, 생성형 AI 에이전트는 목표 달성을 위해 세상을 관찰하고 스스로 행동하는 자율적인 애플리케이션으로 설명된다. 명시적인 지시가 없어도 스스로 판단하고 능동적으로 목표에 접근할 수 있다. 이러한
에이전트는 행동과 의사결정을 위한 인지 아키텍처를 갖추며, 핵심 구성 요소는 다음 그림과 같이 사용자
입력에 대한 추론 역할을 하는 모델(보통, 혰와 같은 LLM), 입력에 대해 필요한 기능들을 제공하는 도구(Tools), 그리고, 어떤 도구들을 호출할지 조율하는 오케스트레이션 이 세 가지로 이루어진다.
AI 에이전트 구성요소(Agents, Google, 2024)
pydantic, openai, fastapi, tiktoken, html2text, unicorn, googlesearch-python, playwright, docker
실행결과는 많이 알려진 프롬프트를 제외하고는 그다지 품질이 좋지는 않다. 그럼에도, 나름 많은 스타를 깃허브에서 얻고 있는 오픈 마누스의 에이전트의 구조를 분석하는 것은 의미가 있어 보여, 좀 더 자세히 코드를 확인해 본다.
I need a 7-day Japan itinerary for April 15-23 from Seattle, with a $2500-5000 budget for my fiancée and me. We love historical sites, hidden gems, and Japanese culture (kendo, tea ceremonies, Zen meditation). We want to see Nara's deer and explore cities on foot. I plan to propose during this trip and need a special location recommendation. Please provide a detailed itinerary and a simple HTML travel handbook with maps, attraction descriptions, essential Japanese phrases, and travel tips we can reference throughout our journey.
- call main() # 메인 호출
- prompt = input() # 프롬프트 입력
- Manus.BaseAgent.run(prompt) # 프롬프트 입력에 따른 에이전트 도구들 실행
- update_memory() # 과거 입출력 저장
- max_steps 만큼 아래 루프 반복 # default max_steps = 20
- step_result = ReActAgent.step() # 에이전트 도구 단계별 실행
- should_act = think() # 무슨 도구를 순서대로 호출할 지 LLM통해 정보얻음
- recent_messages = memory.messages[-3:]
- Manus.BrowserAgent.ToolCallAgent.think() # 도구 선택 추론
- extract current browser page information # 웹화면 정보 사용
- response = LLM.ask_tool() # 추론 시 LLM 사용
- check token limit # 토큰 한계 체크
- response = ChatCompletion(params) # LLM 호출
- return response[0].message # 결과 리턴
- return response
- act() # 에이전트 도구가 선택되었으니, 이를 실행
- tool_callls 에 담긴 도구 호출 명령에 따른 도구들 실행 루프 수행
- ToolCallAgent.execute_tool(command) # 도구 실행
- args = json.loads(command) # 예. web_search. '7-day tour'
- ToolCollection.execute(args) # 도구집합에서 해당도구실행
- BrowserUseTool.execute(args) # 쿼리검색 후 link 리턴
- _ensure_browser_initialized() #브라우저 초기화
- links = WebSearch.execute(args.query) # 웹서치
- page = get_current_page() # 페이지정보
- result = page.goto(url_to_navigate)
- return ToolResult(args, result) # 검색결과 수집
- return observation(result)
- tool_msg = 도구 실행 명령 및 함수 정보
- memory.add_message(tool_msg) # 메모리 업데이트
- results.append(result)
- return results # 결과리턴
1. 프로그램 시작: 메인 함수 호출2. 프롬프트 입력: 사용자로부터 프롬프트 입력3. 에이전트 실행: BaseAgent가 입력을 기반으로 동작 시작4. 메모리 업데이트: 과거 입력/출력 내용을 memory에 저장5. 에이전트 루프 실행 (기본 max_steps = 20)5.1. 단계 실행 (Step): ReActAgent가 현재 단계 처리 시작5.2. 다음 행동 판단 (Think)5.2.1. 최근 메시지 3개 불러오기5.2.2. LLM을 통해 다음 행동(도구 호출 여부 등) 추론5.3. Think: 도구 선택 판단5.3.1. BrowserAgent가 어떤 도구를 쓸지 결정5.3.2. 현재 브라우저 페이지 정보 추출5.3.3. 필요 시 LLM에 도구 사용 목적 질의 (ask_tool)5.3.4. 토큰 한계 체크5.4. LLM 호출 및 응답5.4.1. ChatCompletion으로 명령 생성5.4.2. 생성된 메시지 반환5.5. Act: 도구 실행 (Act)5.5.1. 도구 호출 명령(command)을 파싱 (예: JSON)반복 (모든 명령에 대한 도구 실행):5.5.2. 도구 실행 수행5.5.2.1. ToolCollection에서 해당 도구 실행5.5.2.2. 브라우저 초기화 (_ensure_browser_initialized)5.5.2.3. 웹 검색 수행 (WebSearch.execute)5.5.2.4. 페이지 이동 및 정보 추출 (page.goto)5.5.3. 도구 결과 처리5.5.3.1. ToolResult로 실행 결과 정리5.5.3.2. observation 형태로 결과 정리5.6. 메모리 및 결과 저장5.6.1. 도구 실행 정보 및 결과를 memory에 저장5.6.2. 결과 리스트에 추가6. 최종 결과 반환: 누적된 결과 또는 마지막 응답을 사용자에게 반환
"Based on user needs, proactively select the most appropriate tool or combination of tools. For complex tasks, you can break down the problem and use different tools step by step to solve it. After using each tool, clearly explain the execution results and suggest the next steps."
SYSTEM_PROMPT = ("You are OpenManus, an all-capable AI assistant, aimed at solving any task presented by the user. You have various tools at your disposal that you can call upon to efficiently complete complex requests. Whether it's programming, information retrieval, file processing, or web browsing, you can handle it all.""The initial directory is: {directory}")NEXT_STEP_PROMPT = """Based on user needs, proactively select the most appropriate tool or combination of tools. For complex tasks, you can break down the problem and use different tools step by step to solve it. After using each tool, clearly explain the execution results and suggest the next steps."""
결론적으로 핵심만 요약해 보면, 다음과 같은 방식으로 에이전트가 실행되는 것을 확인 할 수 있다.
- 사용자 프롬프트 입력
- LLM 이 프롬프트를 통해 어떤 에이전트 도구들을 실행할 지 결정. 도구 정보 반환
- 도구 호출 정보에 따라, 현재 등록된 도구들을 호출. 결과 파일은 workspace에 저장
- 도구 호출 결과는 메모리에 저장. 이는 LLM 이 도구를 호출할 때 참고 컨텐츠로 재사용
- 사용자 프롬프트 요구사항(목표)을 만족할 때까지 앞의 내용 반복
소프트웨어 공학적으로는 디자인패턴 중 strategy pattern (ToolCollection, BaseTool) 을 사용하고 있다. 나머진 일반적인 OOAD 구조이다.
BaseTool 클래스는 execute 메서드를 공통으로 가지며, 이를 상속한 각 도구 클래스들(Terminal, FileSaver, MCPClientTool, WebSearch, DomService, BrowserUseTool 등)은 시스템 명령 실행, 파일 저장, 브라우저 제어 등 특정 기능을 담당한다. 각 도구는 ToolCollection에 집합되어 있으며, tool_map을 통해 관리되고 execute를 통해 실행된다.
ToolCallAgent는 think 메서드를 통해 어떤 도구를 사용할지 판단하고, 판단 결과를 ToolCollection에 전달하여 해당 도구를 실행한다. ReActAgent는 step, think, act 메서드를 통해 LLM 기반 추론과 도구 실행 흐름을 단계적으로 처리하며, BaseAgent는 이를 상속받아 step 단위의 실행 흐름을 제공한다. Manus 객체는 최상위 제어자로서 전체적인 에이전트의 동작을 통제하며 think 메서드를 통해 추론을 담당한다. BrowserAgent는 BrowserUseTool과 관련된 think 역할을 수행한다.
BrowserUseTool은 WebSearch와 DomService를 포함하며 웹 페이지 탐색, 클릭, 입력 등의 브라우저 상의 조작을 담당한다. DomService는 클릭, 스크롤, 탭 전환 등 구체적인 DOM 제어 명령을 담당하며, 오른쪽 enum 박스는 이 DomService가 수행할 수 있는 구체적인 명령어 목록을 나열한 것이다.
LLM 클래스는 ask_tool, ask_with_images, ask 등의 메서드를 제공하며, 도구 선택 판단 또는 일반 자연어 추론을 위한 언어 모델 호출 기능을 수행한다. LLM이 사용하는 모델은 gpt-4-vision, gpt-4.0, claude-3 계열 등으로 구성된 멀티모달 모델 리스트에 명시되어 있다.
전체 구조는 에이전트가 사용자 입력을 받아 LLM을 통해 판단하고, 적절한 도구를 선택하여 실행하며, 이를 반복적으로 수행하는 다단계 추론 및 실행 체계를 중심으로 구성되어 있다.
- Agents, Kaggle
- OpenManus: the Open-Source Alternative to Manus AI
- OpenManus: No fortress, purely open ground. OpenManus is Coming.
- OpenManus-RL: A live stream development of RL tunning for LLM agents
- Manus AI: The Best Autonomous AI Agent Redefining Automation and Productivity
- The First General AI Agent Unveiled, 2025, Medium
- Manus use cases
- Exploring Manus AI Agent. Autonomous AI Revolution and How to Get… , Naveen Krishnan, 2025, Towards AI
- Langflow, Low-code AI builder for agentic and RAG applications
- Langflow is a powerful tool for building and deploying AI-powered agents and workflows
- OpenManus reddit