01Bread Agent · 第 9 章
总进度 9 / 33子 Agent(终章)
到现在我们的 agent 已经会读文件、写文件、跑 shell、能多轮聊、能持久化。但有一类任务它处理得吃力: 调研类 。
2026-09-28约 45 分钟540 行代码难度 ★★★
如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。
1. 把一项调研交给子助手
到现在我们的 agent 已经会读文件、写文件、跑 shell、能多轮聊、能持久化。但有一类任务它处理得吃力:调研类。
用户:"分析一下这个项目的结构,说说每个 Python 文件大概是做什么的"
主 agent 要做这事,会:
- 调
list_dir看目录 - 调
read_file读 main.py - 调
read_file读 agent.py - 调
read_file读 tools.py - ... 读 6 个文件
- 把所有读到的内容整合后回答你
读完这些文件后,全文和工具记录都会留在主助手的 messages 里。后续每次请求都要携带更多内容。如果当前只需要一份项目结构说明,可以让另一个助手完成阅读,再把结论交回来。
本章就把这项调研交给一个有独立消息列表的子 Agent。
你
│
▼
┌────────────────────────┐
│ 主 Agent │ 工具集: read/write/list/shell/spawn_research_agent
│ │
│ 决定调研 ─────┐ │
└─────────────────┼──────┘
│
▼
┌───────────────────────┐
│ 子 Agent (research) │ 工具集: 只能 read_file / list_dir(受限)
│ │
│ ... 循环 ... │
│ ... 返回 200 字报告 │
└────────┬──────────────┘
│
▼
字符串报告 回填到主 agent 的 messages
主助手主要接收简短报告,文件全文留在子助手的消息历史中。这样能减少主对话需要携带的内容,但报告是否完整、是否遗漏细节,仍要检查。
<!-- bread-visual:start -->
<!-- bread-visual:end -->图解: 子助手有独立消息列表,只把调研报告带回主助手。 没有注册的工具不能调用;子助手也有自己的步数上限。
2. 跑起来
cd ch08_subagent
python main.py
启动后试这一题:
你 > 分析一下当前目录里都有什么 Python 文件,每个文件是做什么的
预期输出大致如下:
[hook:log] 即将调用 spawn_research_agent 参数={'question': '分析当前目录下的 Python 文件...'}
┌─ [subagent] 开始调研: 分析当前目录下的 Python 文件...
│ [subagent] list_dir({'path': '.'})
│ [subagent] read_file({'path': 'agent.py'})
│ [subagent] read_file({'path': 'tools.py'})
│ [subagent] read_file({'path': 'subagent.py'})
└─ [subagent] 调研完成 (480 chars)
AI > 当前目录有 6 个 Python 文件:
- main.py: REPL 入口
- agent.py: Agent 类的核心实现
- tools.py: 工具定义
- subagent.py: 子 agent 实现
- hooks.py: 钩子系统
- session.py: 会话持久化
关键观察:
- 主 agent 自己只调了 1 次工具(
spawn_research_agent) - 子 agent 在
┌─...└─里自己内部循环调了多次工具 - 主 agent 拿到的只有一段简洁的报告,主 messages 没被 6 个文件全文撑爆
<!-- bread-practice:start -->
实操画面对照
试读到这里 · 后续内容已封存
关注公众号,继续把这章学完
在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。