# agent-ts **Repository Path**: watt1010/agent-ts ## Basic Information - **Project Name**: agent-ts - **Description**: js版本的manus - **Primary Language**: TypeScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-08 - **Last Updated**: 2026-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenManus (TypeScript 版) OpenManus 的 TypeScript 实现版本。这是一个通用的 AI Agent,能够根据用户指令,通过调用各种工具(如执行 Python 代码、浏览网页、编辑文件等)来完成复杂的任务。 ## 📁 项目结构 主要的代码结构如下: * **`src/main.ts`**: 程序入口。负责解析命令行参数,获取用户输入,初始化 Agent 并启动任务循环。 * **`src/agent/`**: Agent 的核心逻辑实现。 * `manus.ts`: **Manus Agent** 的具体实现。它是用户交互的主要对象,集成了多种工具(Python执行、浏览器操作等),并配置了特定的系统提示词。 * `toolcall.ts`: **ToolCallAgent** 类。实现了基于工具调用的 Agent 逻辑,负责与 LLM 交互以决策是否调用工具以及调用哪些工具。 * `base.ts`: **BaseAgent** 抽象基类。定义了 Agent 的标准生命周期(`run` 循环)、状态管理(`IDLE`, `RUNNING`, `FINISHED`)和记忆系统(`Memory`)。 * `react.ts`: 实现了 ReAct (Reasoning and Acting) 模式的逻辑(作为 `ToolCallAgent` 的父类)。 * **`src/tool/`**: 工具集。包含各种具体能力的实现,如 `pythonExecute` (执行代码), `browserUseTool` (浏览器自动化), `strReplaceEditor` (文件编辑) 等。 * `toolCollection.ts`: 负责管理和注册所有可用工具,并提供统一的执行接口。 * **`src/llm.ts`**: 大语言模型接口封装,负责与 OpenAI 等模型服务进行通信。 * **`src/utils/`**: 通用工具函数,如日志记录器 (`logger.ts`)。 ## 🛠️ 核心原理 OpenManus 的工作原理基于 **ReAct (Reasoning + Acting)** 模式,通过大语言模型 (LLM) 作为“大脑”来规划和执行任务。 1. **感知 (Perception)**: Agent 维护一个 `Memory`(记忆)对象,记录了所有的对话历史,包括系统指令、用户输入、AI 的思考过程以及工具执行的结果。 2. **思考 (Thinking)**: 在每一步 (`step`) 中,Agent 将当前的上下文(System Prompt + Memory)发送给 LLM。LLM 根据预定义的工具定义 (`ToolCollection`),决定是直接回复用户,还是需要调用一个或多个工具来辅助完成任务。 3. **行动 (Acting)**: * 如果 LLM 返回了工具调用请求(Tool Calls),`ToolCallAgent` 会解析这些请求。 * 通过 `ToolCollection` 找到对应的工具实例并执行。 * 工具的执行结果(Output)会被捕获并作为 `Observation`(观察结果)存回 `Memory`。 4. **循环 (Loop)**: 上述过程在一个 `while` 循环中不断重复,直到: * Agent 认为任务已完成并调用 `terminate` 工具。 * 达到最大执行步数 (`maxSteps`)。 * 发生不可恢复的错误。 ## 🔄 调用流程 1. **初始化**: * 用户运行程序。 * `main.ts` 创建 `Manus` 实例。 * `Manus` 初始化配置的工具(如连接 MCP 服务器)。 2. **接收指令**: * 通过命令行参数 `--prompt` 或交互式输入获取用户任务。 3. **执行循环 (`agent.run`)**: * **Step 1**: Agent 思考。LLM 分析用户需求,假设用户要求“查询天气”,LLM 可能会生成一个调用浏览器工具的指令。 * **Step 2**: Agent 执行工具。Agent 启动浏览器,访问天气网站,抓取数据。 * **Step 3**: Agent 观察。工具返回天气数据字符串。 * **Step 4**: Agent 再次思考。LLM 看到天气数据,认为信息充足,生成最终回复:“今天的天气是...” 4. **结束**: * 输出最终结果,Agent 清理资源(如关闭浏览器进程)。 ## 🚀 启动方法 ### 1. 安装依赖 确保你已经安装了 Node.js 环境。 ```bash npm install ``` ### 2. 配置环境 (根据项目实际情况,可能需要配置 `.env` 文件以设置 API Key 等,具体参考代码中的 `src/config.ts` 或相关文档) ### 3. 运行 **交互式模式**: 直接运行,程序会提示你输入任务。 ```bash npm start ``` 或者使用 `ts-node`: ```bash npx ts-node src/main.ts ``` **命令行参数模式**: 直接通过参数传入任务。 ```bash npm start -- --prompt "在当前目录下创建一个名为 hello.txt 的文件,内容为 'Hello World'"