agent-Specialization/agentskills/sub-agent-guide/SKILL.md
JOJO c08c4ab141 docs(agentskills): 更新子智能体使用指南
- 强调阻塞/后台模式的唯一判断标准是运行期间有没有别的事情要做
- 强调大范围搜索/调查前必须先自己进行浅层搜索
- 重写示例:国产开源智能体调研、程序 bug 定位
- 拆分后台模式场景:单个子智能体用阻塞,多个子智能体用后台并等待通知
2026-07-11 20:40:27 +08:00

355 lines
15 KiB
Markdown
Raw 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.

---
name: sub-agent-guide
description: 子智能体使用指南。创建子智能体之前必须阅读此技能。子智能体仅用于并行处理独立的“非代码编写”任务(如项目初步探索、网络搜索与信息收集、程序测试执行)。关键限制:子智能体之间无法通信,看不到主对话历史。严格禁止将子智能体用于项目代码编写、代码修改、重构或实现功能。
---
# 子智能体使用指南
## 核心原则
**一个子智能体 = 一个完整的独立任务**
子智能体拥有完整工具能力,但与主智能体和其他子智能体完全隔离。它们看不到你的对话历史,无法互相通信,只能通过文件系统共享信息。
**硬性限制:子智能体严格禁止用于项目代码编写/修改。**
## 何时使用
**适合(推荐):**
- **项目初期探索**:快速梳理目录结构、模块职责、运行方式,形成初步认知
- **占用大量上下文的网络搜索和信息收集**:竞品调研、资料汇总、文档整理、新闻/资料比对
- **重要**:进行大范围搜索或调查前,必须先自己进行一次浅层搜索/调查,摸清关键词、主要来源和任务边界,再创建子智能体并给出精确指导。
- **程序测试与验证**:执行测试命令、收集日志、汇总失败用例与错误模式
- **并行独立的文档/分析任务**:生成说明文档、运行报告、排查清单
**不适合:**
- 任务之间需要频繁协调(子智能体无法互相通信)
- 简单快速的任务(创建子智能体有开销)
- 需要你参与决策的任务(子智能体是自主运行的)
- 任何项目代码编写、代码修改、代码重构、功能实现任务(必须由主智能体处理)
- 任何会直接改动项目源码的开发工作
## 任务描述的艺术
子智能体看不到你的对话历史task 参数是它收到的唯一指令。
**关键要素:**
1. **明确的目标** - 要做什么,产出什么
2. **清晰的范围** - 操作哪些文件/目录
3. **具体的交付物** - 生成什么文件,放在哪里
4. **完成标准** - 什么算完成
**好的示例:**
```
# 代码定位任务
用户反馈了一个程序 bug登录时偶尔报 500 错误。
1. 先自己阅读项目结构,确认技术栈和登录相关模块位置
2. 复现或定位错误触发条件,理解问题表现
3. 创建子智能体:在 src/auth/、src/middleware/、src/api/login/ 等目录中查找可能导致 500 的代码路径
4. 子智能体交付可疑文件列表和代码位置,生成 bug_location.md
# 网络调研任务
用户要求调查国产开源智能体功能:
1. 先自己进行一次浅层搜索,列出当前主要的国产开源智能体(如 AgentScope、DB-GPT、ModelScope-Agent 等)
2. 根据初步结果,为每个候选智能体创建独立的子智能体,分别调研其功能特性、架构设计、适用场景
3. 每个子智能体生成独立报告
4. 最后由你整合对比,生成 overall_comparison.md
# 系统信息收集
收集当前计算机的硬件和系统信息:
1. CPU 架构、型号、核心数
2. GPU 型号、显存、驱动版本
3. 内存大小、系统版本
4. 保存为 system_info.md
```
**避免:**
- ❌ "帮我分析一下认证代码" - 太模糊
- ❌ "如果发现问题请告诉我" - 子智能体无法与你交互
- ❌ "先做 A然后等我确认再做 B" - 子智能体是一次性执行的
## 交付目录设计
`deliverables_dir` 必须是**不存在的新目录**,子智能体会把所有成果放在这里。
**命名建议:**
```
sub_agent_results/task_description/ # 清晰描述任务
sub_agent_results/module_a_docs/ # 按模块组织
sub_agent_results/test_auth_report/ # 按测试/报告组织
```
**避免:**
- ❌ 使用已存在的目录(会报错)
- ❌ 使用绝对路径(必须是相对于项目根目录的相对路径)
- ❌ 使用通用名称如 "output" "result"(多个子智能体会冲突)
## 执行模式:阻塞 vs 后台
子智能体有两种执行模式,通过 `run_in_background` 参数控制:
### 阻塞模式run_in_background=false默认
**行为:**
- 创建子智能体后,你会**停止输出**,等待它完成
- 完成后结果直接在工具返回中给出,继续你的工作
- 不会有额外的系统通知消息
**何时使用:**
- ✅ 快速任务(预计 < 1 分钟
- 需要立即使用结果的任务
- 单个子智能体没有其他并行工作
**示例:**
```python
# 快速信息搜集,立即需要结果
create_sub_agent(
agent_id=1,
summary="搜索 Python 3.12 新特性",
task="搜索并整理 Python 3.12 的主要新特性,生成 python312.md",
deliverables_dir="research/python312",
run_in_background=false, # 阻塞等待
timeout_seconds=300
)
# 工具返回后,你可以立即读取 research/python312/python312.md
```
### 后台模式run_in_background=true
**行为:**
- 创建子智能体后工具**立即返回**你可以继续做其他事情
- 子智能体在后台运行完成后系统会**自动插入一条 user 消息**通知你
- 你会在对话中看到类似"这是一句系统自动发送的user消息用于通知你子智能体已经运行完成..."
**完成通知机制说明:**
- 后台子智能体完成的通知是系统自动插入的 user 消息前缀 `[系统通知|sub_agent]`不依赖手动调用任何轮询接口
- 你只需在收到通知后直接查看交付目录即可系统会把所有必需信息一并带上
**何时使用:**
- 需要同时创建多个子智能体
- 创建后你有其他工作可以先做回答用户问题处理其他任务
**后台模式下你应该做什么:**
**情况 A运行子智能体期间需要做别的事情**
```python
# 创建多个后台任务
create_sub_agent(agent_id=1, task="...", run_in_background=true, ...)
create_sub_agent(agent_id=2, task="...", run_in_background=true, ...)
# 立即告诉用户并继续其他工作
"我已经启动了2个子智能体在后台并行工作预计需要10-15分钟。在等待期间我可以先帮你处理其他事情。"
# 然后你可以:
# - 回答用户的其他问题
# - 处理其他任务
# - 阅读代码、分析问题
# - 运行其他工具
# 子智能体完成时会自动插入一条 system 消息通知你
```
**情况 B运行子智能体期间不需要做别的事情且只需要一个子智能体**
```python
# 只有单个子智能体,且期间没有其他工作,直接使用阻塞模式
create_sub_agent(agent_id=1, task="大规模日志分析", run_in_background=false, timeout_seconds=1800)
# 等待工具返回后,直接读取交付目录处理结果
```
**情况 C运行子智能体期间不需要做别的事情但需要同时创建多个子智能体**
```python
# 多个子智能体同时运行,即使自己暂时没事做,也全部使用后台模式
create_sub_agent(agent_id=1, task="分析前端认证实现", deliverables_dir="analysis/frontend_auth", run_in_background=true, ...)
create_sub_agent(agent_id=2, task="分析后端鉴权实现", deliverables_dir="analysis/backend_auth", run_in_background=true, ...)
# 告诉用户预计时间
"我已启动2个子智能体并行分析认证与鉴权实现预计需要10-15分钟。系统会在完成后自动通知我届时我会立即整合结果并回复你。"
# 然后停止工作和输出,等待系统通知
# 每个子智能体完成后,系统都会自动发送一条 user 消息通知你
```
**重要提示:**
- 系统会自动处理通知你只需要在收到通知消息后处理结果即可
- 如果你正在执行工具调用系统会延迟通知避免打断你的工作流
- 不论运行中还是空闲通知一律是带 `[系统通知|sub_agent]` 前缀的 user 消息运行中只是通知不触发新一轮回复空闲时等同于一条新输入会触发回复
- 后台完成由上述系统通知负责不要再依赖任何手动等待流系统会在能插入消息时自动通知你
### 模式选择决策树
```
任务预计耗时 < 1 分钟?
├─ 是 → 使用阻塞模式run_in_background=false
└─ 否 → 需要同时创建多个子智能体?
├─ 是 → 使用后台模式run_in_background=true然后停止输出等待系统通知
└─ 否 → 创建后你有没有其他工作可以先做?
├─ 是 → 使用后台模式run_in_background=true继续处理其他工作
└─ 否 → 使用阻塞模式run_in_background=false
```
> **核心判断标准**:选择阻塞模式还是后台模式,**唯一标准是创建子智能体后你自己还有没有别的事情要做**,和子智能体本身被用来做什么任务无关。不要因为任务是“搜索”就一定用后台,也不要因为任务是“分析”就一定用阻塞。
## 并行执行模式
创建多个子智能体时确保它们的任务**完全独立**
```python
# ✅ 好的并行:各自独立,使用后台模式
create_sub_agent(agent_id=1, task="生成模块 A 的文档", deliverables_dir="docs/module_a", run_in_background=true, ...)
create_sub_agent(agent_id=2, task="生成模块 B 的文档", deliverables_dir="docs/module_b", run_in_background=true, ...)
# 告诉用户:"已启动2个子智能体并行生成文档预计10分钟完成。系统会在完成后自动通知我。"
# 然后你可以继续做其他事情,或者停止输出等待通知
# ✅ 好的并行:信息搜集
# 先自己浅层搜索,列出 3-5 个国产开源智能体
# 然后为每个智能体创建独立的子智能体并行调研
create_sub_agent(agent_id=1, task="调研 AgentScope 的功能特性、架构和适用场景", deliverables_dir="research/agentscope", run_in_background=true, ...)
create_sub_agent(agent_id=2, task="调研 DB-GPT 的功能特性、架构和适用场景", deliverables_dir="research/dbgpt", run_in_background=true, ...)
create_sub_agent(agent_id=3, task="调研 ModelScope-Agent 的功能特性、架构和适用场景", deliverables_dir="research/modelscope_agent", run_in_background=true, ...)
# 等系统自动通知全部完成后,你再整合生成对比报告
# ✅ 好的并行:系统调研
create_sub_agent(agent_id=1, task="分析前端认证实现", deliverables_dir="analysis/frontend_auth", run_in_background=true, ...)
create_sub_agent(agent_id=2, task="分析后端鉴权实现", deliverables_dir="analysis/backend_auth", run_in_background=true, ...)
# 系统会在每个完成时发送通知,你可以逐个处理或等全部完成
```
```python
# ❌ 不好的并行:需要协作
create_sub_agent(agent_id=1, task="收集日志", ...)
create_sub_agent(agent_id=2, task="基于子智能体1的日志结论生成报告", ...) # 依赖子智能体1的结果
# 子智能体2不知道子智能体1什么时候完成无法协调
```
## 常见陷阱
### 1. 期望子智能体协作
**错误:**
```python
create_sub_agent(agent_id=1, task="收集 A 类日志并通知子智能体2")
create_sub_agent(agent_id=2, task="等待子智能体1完成然后汇总 B 类报告")
```
子智能体之间无法通信如果任务有依赖应该
- 方案1顺序执行等第一个完成后再创建第二个
- 方案2让一个子智能体完成整个流程
### 2. 忘记子智能体看不到对话历史
**错误:**
```python
# 你在对话中说:"我们要排查认证流程问题"
create_sub_agent(task="按照我们讨论的方案排查认证流程")
```
**正确:**
```python
create_sub_agent(task="""
排查 src/auth/ 目录认证流程:
- 梳理认证相关入口、调用链和关键配置
- 运行现有测试并记录失败项
- 生成诊断报告auth_diagnosis.md
- 不允许修改任何项目源码
""")
```
### 3. 超时时间设置不当
子智能体超时后会被强制终止已完成的工作可能丢失
**经验值:**
- 文档生成600-900
- 信息搜集/网络调研900-1800
- 大规模分析1800-3600
宁可设置得长一些也不要让子智能体因超时而前功尽弃
### 4. agent_id 重复使用
同一对话中每个 agent_id 只能使用一次如果子智能体失败需要重试必须使用新的 agent_id
```python
create_sub_agent(agent_id=1, ...) # 失败了
# ❌ create_sub_agent(agent_id=1, ...) # 会报错
# ✅ create_sub_agent(agent_id=2, ...) # 使用新的 ID
```
## 检查结果
### 阻塞模式下
工具返回中直接包含结果
```python
result = create_sub_agent(agent_id=1, run_in_background=false, ...)
if result["success"]:
# 读取交付目录中的文件
deliverables = result["deliverables_dir"]
# 处理生成的文件...
else:
# 检查失败原因
if result["status"] == "timeout":
# 考虑增加 timeout_seconds 重试
else:
# 查看 result["message"] 了解失败原因
```
### 后台模式下
等待系统自动插入的通知消息
**如果你继续工作**会收到 system 消息
```
✅ 子智能体1 任务摘要:搜索 Python 3.12 新特性 已完成。
调用了15次
阅读了8次文件
编辑了2次文件
搜索了3次内容
查看了5个网页
运行了2个指令
运行了245秒
已搜索并整理 Python 3.12 的主要新特性...
交付目录research/python312
```
**如果你停止输出**会收到 user 消息
```
这是一句系统自动发送的user消息用于通知你子智能体已经运行完成
子智能体1 (搜索 Python 3.12 新特性) 已完成任务。
已搜索并整理 Python 3.12 的主要新特性...
运行了245秒
交付目录research/python312
```
收到通知后读取交付目录中的文件并处理结果
## thinking_mode 选择
- `fast`常规任务文档生成信息搜集数据分析
- `thinking`需要深度推理的任务架构设计复杂算法分析安全审计
大多数情况下使用 `fast` 即可
## 总结
子智能体的本质是**并行执行完全独立的任务**。
**关键要点:**
1. **执行模式选择**运行子智能体期间没有别的事情要做且只创建一个子智能体 阻塞模式需要同时创建多个子智能体或期间有其他工作可以先做 后台模式
2. **后台模式下**创建后继续工作或停止输出系统会自动通知完成
3. **任务独立性**子智能体之间无法通信确保任务完全独立
4. **任务描述**子智能体看不到对话历史task 参数必须包含所有信息
如果你发现自己在设计子智能体之间的协作流程那可能不应该使用子智能体而应该自己顺序执行这些步骤