# 子智能体实现方案 ## 概述 将 easyagent (Node.js) 集成为主智能体的子智能体系统,支持后台并行执行独立任务。 ## 核心设计 ### 1. 工具定义 #### create_sub_agent - 创建子智能体 **参数:** - `agent_id` (int, 必需): 子智能体编号 1-99,同一对话中唯一 - `summary` (str, 必需): 任务摘要 10-30 字 - `task` (str, 必需): 详细任务描述,包括目标、要求、交付内容、工作范围 - `deliverables_dir` (str, 可选): 交付目录相对路径,默认 `sub_agent_results/agent_{agent_id}` - `run_in_background` (bool, 默认 false): 是否后台运行 - `timeout_seconds` (int, 默认 600): 超时时间 60-3600 秒 **何时使用后台运行:** - 任务耗时较长(预计超过 5 分钟) - 可以继续处理其他工作,不需要立即使用结果 - 多个独立任务可以并行执行 **何时使用阻塞运行(默认):** - 任务较快(几分钟内完成) - 后续工作依赖子智能体的结果 - 需要立即查看和使用输出 **返回格式(阻塞模式):** ```json { "success": true, "agent_id": 1, "status": "completed", "summary": "生成API文档", "message": "子智能体1 已完成任务", "deliverables_dir": "docs/api", "deliverables_files": ["api.md", "endpoints.json"], "result_summary": "已生成 API 文档,包含 15 个端点的详细说明。", "sub_conversation_id": "conv_abc123", "stats": { "runtime_seconds": 120, "files_read": 8, "searches": 3, "web_pages": 0, "commands": 2 } } ``` **返回格式(后台模式):** ```json { "success": true, "agent_id": 1, "status": "running", "summary": "生成API文档", "message": "子智能体1 已启动,正在后台运行", "deliverables_dir": "docs/api", "sub_conversation_id": "conv_abc123", "background": true } ``` #### terminate_sub_agent - 终止子智能体 **参数:** - `agent_id` (int, 必需): 要终止的子智能体编号 **返回格式:** ```json { "success": true, "agent_id": 1, "status": "terminated", "message": "子智能体1 已被终止", "partial_results": true, "deliverables_dir": "docs/api" } ``` #### get_sub_agent_status - 查询子智能体状态 **参数:** - `agent_ids` (list[int], 必需): 要查询的子智能体编号列表 **返回格式:** ```json { "success": true, "agents": [ { "agent_id": 1, "summary": "生成API文档", "status": "running", "runtime_seconds": 45, "files_read": 5, "searches": 2, "web_pages": 0, "commands": 1, "last_action": "正在读取 src/api/routes.py", "deliverables_dir": "docs/api" } ] } ``` #### finish_task - 完成任务(子智能体工具) **参数:** - `success` (bool, 必需): 任务是否成功完成 - `summary` (str, 必需): 完成摘要 50-200 字,说明完成了什么、生成了哪些文件、关键发现 **返回格式:** ```json { "success": true, "message": "任务已完成,子智能体即将退出", "will_terminate": true } ``` ### 2. 执行流程 #### 阻塞模式(run_in_background=false) ``` 主智能体调用 create_sub_agent ↓ 启动 Node.js 子进程(easyagent 批处理模式) ↓ 子进程读取任务文件和系统提示 ↓ 子进程执行对话循环 ↓ 子进程调用 finish_task 或超时 ↓ 主智能体读取输出文件 ↓ 返回结果给主智能体 ``` #### 后台模式(run_in_background=true) ``` 主智能体调用 create_sub_agent ↓ 启动 Node.js 子进程(easyagent 批处理模式) ↓ 立即返回 "running" 状态 ↓ 主智能体继续工作 ↓ 每次工具执行后,检查子智能体是否完成 ↓ 如果完成,插入 system 消息通知 ↓ 继续调用 API ↓ 如果主智能体完成但子智能体未完成,设置对话状态 ↓ 轮询等待子智能体完成 ↓ 完成后发送 user 消息触发新一轮 ``` ### 3. 消息拼接 #### 初始 user 消息(发送给子智能体) ``` 你是子智能体 {agent_id},负责以下任务: 【任务摘要】 {summary} 【任务详情】 {task} 【交付目录】 {deliverables_dir} 【要求】 1. 完成任务后,将所有结果文件放到交付目录 2. 使用 finish_task 工具提交任务完成报告 3. 任务超时时间:{timeout_seconds} 秒 现在开始执行任务。 ``` #### 完成通知(system 消息,工具执行后) ``` 子智能体{agent_id} ({summary}) 已完成。 运行时间:{runtime_seconds}秒 阅读了 {files_read} 个文件 搜索了 {searches} 次 查看了 {web_pages} 个网页 运行了 {commands} 个指令 交付目录:{deliverables_dir} 结果摘要:{result_summary} ``` #### 完成通知(user 消息,主智能体空闲时) ``` 子智能体{agent_id} ({summary}) 已完成任务。 {result_summary} 交付目录:{deliverables_dir} ``` ### 4. 兜底机制 如果子智能体输出结束但未调用 finish_task,自动发送 user 消息: ``` 如果你已经完成了任务,请调用 finish_task 工具提交完成报告。如果还没有完成,请继续执行任务。 ``` ### 5. 子智能体 System Prompt ``` 你是一个专注的子智能体,负责独立完成分配的任务。 # 身份定位 你是主智能体创建的子智能体,拥有完整的工具能力(读写文件、执行命令、搜索网页等)。你的职责是专注完成分配的单一任务,不要偏离任务目标。 # 工作流程 1. **理解任务**:仔细阅读任务描述,明确目标和要求 2. **制定计划**:规划完成任务的步骤 3. **执行任务**:使用工具完成各个步骤 4. **生成交付**:将所有结果文件放到指定的交付目录 5. **提交报告**:使用 finish_task 工具提交完成报告并退出 # 工作原则 ## 专注性 - 只完成分配的任务,不要做额外的工作 - 不要尝试与用户对话或询问问题 - 遇到问题时,在能力范围内解决或在报告中说明 ## 独立性 - 你与主智能体共享工作区,可以访问所有文件 - 你的工作范围应该与其他子智能体不重叠 - 不要修改任务描述之外的文件 ## 效率性 - 直接开始工作,不要过度解释 - 合理使用工具,避免重复操作 - 注意超时限制,在时间内完成核心工作 ## 完整性 - 确保交付目录中的文件完整可用 - 生成的文档要清晰、格式正确 - 代码要包含必要的注释和说明 # 交付要求 所有结果文件必须放在指定的交付目录中,包括: - 主要成果文件(文档、代码、报告等) - 支持文件(数据、配置、示例等) - 不要在交付目录外创建文件 # 完成任务 任务完成后,必须调用 finish_task 工具: - success: 是否成功完成 - summary: 完成摘要(说明做了什么、生成了什么) 调用 finish_task 后,你会立即退出,无法继续工作。 # 工具使用 你拥有以下工具能力: - read_file: 读取文件内容 - write_file / edit_file: 创建或修改文件 - search_workspace: 搜索文件和代码 - run_command: 执行终端命令 - web_search / extract_webpage: 搜索和提取网页内容 - finish_task: 完成任务并退出(必须调用) # 注意事项 1. **不要无限循环**:如果任务无法完成,说明原因并提交报告 2. **不要超出范围**:只操作任务描述中指定的文件/目录 3. **不要等待输入**:你是自主运行的,不会收到用户的进一步指令 4. **注意时间限制**:超时会被强制终止,优先完成核心工作 # 当前环境 - 工作区路径: {workspace} - 系统: {system} - 当前时间: {current_time} 现在开始执行任务。 ``` ### 6. 对话记录存储 子智能体的对话记录保存在:`{deliverables_dir}/.subagent/conversations.json` 格式: ```json { "agent_id": 1, "summary": "生成API文档", "created_at": "2026-03-10T12:00:00Z", "completed_at": "2026-03-10T12:02:00Z", "messages": [ {"role": "system", "content": "..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}, ... ], "stats": { "runtime_seconds": 120, "files_read": 8, "searches": 3, "web_pages": 0, "commands": 2, "token_usage": {"prompt": 1000, "completion": 500, "total": 1500} } } ``` ### 7. 文件结构 ``` project/ ├── sub_agent_results/ │ └── agent_1/ │ ├── .subagent/ │ │ └── conversations.json # 对话记录 │ ├── api.md # 交付文件 │ ├── endpoints.json │ └── ... ├── docs/ │ └── api/ │ ├── .subagent/ │ │ └── conversations.json │ ├── api.md │ └── ... └── ... ``` ### 8. 限制和约束 1. **最多 5 个并发子智能体** 2. **禁止多个子智能体操作相同文件或目录** 3. **禁止子智能体间的工作重叠** 4. **超时后强制终止,已生成的部分结果保留** 5. **切换对话会强制终止所有子智能体** ### 9. 实现步骤 1. ✅ 复制 easyagent 代码到 `easyagent/` 目录 2. ✅ 创建 `easyagent/src/batch/index.js` 批处理入口 3. ⏳ 修改 `SubAgentManager` 使用新的批处理模式 4. ⏳ 添加工具定义到 `core/tool_config.py` 5. ⏳ 修改主智能体的工具执行逻辑 6. ⏳ 添加后台任务轮询机制 7. ⏳ 添加对话状态管理(子智能体运行中) 8. ⏳ 测试和调试 ## 关键改进点 1. **简化参数**:去掉 reference_files、delivery_mode、reason 等不必要参数 2. **清晰的后台机制**:默认阻塞,明确说明何时用后台 3. **详细的统计信息**:工具使用次数一目了然 4. **智能通知**:system 消息(工具执行后)+ user 消息(主智能体空闲时) 5. **防止冲突**:工具描述中明确禁止重叠工作 6. **兜底机制**:自动提醒调用 finish_task 7. **对话记录保留**:便于调试和审计