Technical Guide
14. Sub-agents 源码:子 Agent 是怎么创建和汇总的
从 subagents/registry、executor、status_contract、token_collector 看子 Agent 的注册、执行、状态和结果汇总。
这一篇看哪些文件
子 Agent 相关目录:
backend/packages/harness/deerflow/subagents/
建议先看:
registry.py
executor.py
config.py
status_contract.py
token_collector.py
builtins/
registry.py:有哪些子 Agent
registry 解决的是“系统里有哪些可用子 Agent”。
如果你要新增一个子 Agent,先看它是怎么注册、命名和暴露给主 Agent 的。
executor.py:子任务怎么跑
executor 负责实际执行。
读这个文件时关注:
输入怎么传入
上下文怎么隔离
结果怎么返回
异常怎么处理
这决定了子 Agent 是可靠分工,还是不可控黑盒。
status_contract.py:状态怎么约定
多 Agent 最怕状态混乱。
status_contract.py 这类文件会定义子 Agent 运行中应该怎么表达状态。
如果前端要展示进度,或者主 Agent 要判断子任务是否完成,这类约定就很关键。
token_collector.py:成本和上下文
子 Agent 会消耗 token,也会产生中间结果。
token collector 说明 DeerFlow 在关注成本和上下文规模。
这对长任务尤其重要。
builtins:内置子 Agent
目录:
subagents/builtins/
里面有 bash_agent、general_purpose 这类内置实现。
不要直接照抄。先看它们怎么定义职责和边界。
这一篇你要记住
子 Agent 源码主线是:
注册 → 执行 → 状态 → 结果回收 → 成本控制
下一篇把研究任务拆给多个 Agent。
和 middleware 的关系
子 Agent 不只在 subagents/ 目录里。
你还要留意 Agent middleware 中是否有对子 Agent 数量、状态、token 或调用方式的限制。
例如项目里存在 subagent limit 相关 middleware,说明系统需要防止子 Agent 被无限创建。
改源码时的注意点
新增子 Agent 时,不要只加一个实现文件。
还要确认:
是否注册到 registry
配置是否可被读取
执行器是否能调用
状态是否能被前端或主 Agent 识别
token 和错误是否被收集
少任何一环,表面上“子 Agent 文件存在”,实际任务里可能用不起来。
读源码的目标
读完这部分源码,你不需要记住每个函数。
你需要知道:子 Agent 从哪里注册、在哪里执行、结果怎么回到主 Agent。