agent-Specialization/SUB_AGENT_IMPLEMENTATION_PLAN.md

383 lines
9.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 子智能体实现方案
## 概述
将 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. **对话记录保留**:便于调试和审计