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。