查看其他语言版本

DeerFlow系列之番外篇:deerflow_agent体系

本文深入探讨了DeerFlow Agent体系的架构设计与核心价值。文章详细解析了Agent在自动化工作流中的角色,阐述了其如何通过智能调度与任务执行能力,解决复杂业务场景下的自动化挑战。通过对DeerFlow Agent模块化组件及交互机制的分析,为开发者提供了构建高效、可扩展自动化代理的实践指南,是理解DeerFlow生态进阶功能的关键技术指南。

NSSA Team
#DeerFlow #Agent #自动化工作流 #人工智能 #技术专题

DeerFlow 中的 Agent 体系:Lead Agent、自建 Agent 与 Subagent

这篇文章试图回答一个在理解 DeerFlow 时几乎绕不过去的问题:
Lead Agent、你在系统里创建的自建 Agent,以及运行时里的 Subagent,到底是什么关系?它们谁负责控制,谁负责表达角色,谁负责执行子任务?

基于当前仓库实现,一个比较准确的结论是:

DeerFlow 不是”多个平级 agent 互相对话”的架构,而是”一个主控 Lead Agent + 若干角色化自建 Agent 配置 + 若干被调度的内置 Subagent 执行体”的架构。

换句话说,当前系统里真正的高层 orchestrator 只有一个,那就是 Lead Agent
自建 Agent 不是另一个独立引擎,而是 Lead Agent 的一种角色化运行模式
而 Subagent 则是 Lead Agent 为了拆解复杂任务而拉起的子执行单元


一、先看全貌:三者的总体关系

下面这张图先给出 DeerFlow 当前 Agent 体系的总轮廓。

Mermaid 图表

这张图表达的是:

所以,如果你把它想象成一个组织结构,更像:


二、Lead Agent:系统里真正的”总控代理”

DeerFlow 的主控入口在:

这意味着,系统里真正被创建出来并运行的主 LangGraph agent,就是这一个。

1. Lead Agent 到底做什么

Lead Agent 做的不是某一个具体业务动作,而是装配整个运行时。它会:

如果用流程图来看,它大致是这样:

Mermaid 图表

2. 为什么说它是最高层 orchestrator

因为在当前代码实现里,并没有另一个”更高一级 agent”去统一管理多个 agent。
真正负责协调、拆解、汇总和最终输出的,始终是 Lead Agent 本身。

它不是其中一个角色,而是整个系统的运行控制点


三、自建 Agent:不是另一个引擎,而是 Lead Agent 的”角色配置”

很多人第一次看 DeerFlow,会把”创建 agent”理解成”创建了一个新的独立代理实例”。
但从当前实现看,这种理解并不准确。

DeerFlow 里的自建 Agent,本质上是:

通过 agent_name 指定某个 agent 目录,然后读取该目录下的 config.yamlSOUL.md,把这些信息注入到 Lead Agent 的创建过程里。

相关配置加载逻辑在:

1. 自建 Agent 的核心配置来源

一个自建 Agent 目录通常会包含:

它们分别承担不同职责:

可以画成这样:

Mermaid 图表

2. 自建 Agent 能控制什么

根据 AgentConfig,它至少可以决定:

其中 skills 的语义很重要:

这说明你创建的 agent,本质是在定义一个”工作身份”:

3. 自建 Agent 不是独立 orchestrator

这一点最关键。

自建 Agent 虽然有自己的:

但它并不是平级于 Lead Agent 的另一个总控节点。
它本质上只是让 Lead Agent 以某种身份运行。

更准确地说:

自建 Agent = Lead Agent 的角色模板,而不是 Lead Agent 的替代品。

所以它和 Lead Agent 的关系应该这样理解:

Mermaid 图表


四、Subagent:被 Lead Agent 调度出来执行子任务的”小代理”

如果说自建 Agent 解决的是”我希望这个主代理以什么角色工作”,
那么 Subagent 解决的是另一个问题:

当任务很复杂时,谁去并行地执行被拆分出来的子任务?

答案就是 Subagent。

相关实现主要在:

1. 当前系统里的 Subagent 是哪些

从当前注册表看,内置 Subagent 主要有两个:

这说明当前可被调度的 subagent,是系统内置的执行单元,而不是”任意自建 agent 自动成为 subagent”。

2. Subagent 是怎么被调度出来的

Lead Agent 在需要时会通过 task 工具,把一个子任务交给 SubagentExecutor
然后由执行器在后台线程池中运行,并最终把结果带回。

执行链路可以简化成这样:

Mermaid 图表

3. Subagent 的功能定位

Subagent 的工作不是”代表系统回答用户”,而是:

它更像一个临时派出的专项执行小组。


五、Subagent 与 Subagent 之间会不会相互通信?

从当前实现看,不会直接通信

SubagentExecutor 里,subagent 的初始状态非常轻量:

这意味着:

所以它们之间的关系不是横向互联,而是星型回流:

Mermaid 图表

注意这里没有:

因为当前并没有 Subagent 之间的点对点通信机制。


六、自建 Agent 与 Subagent 不是一回事

这是很多人在 DeerFlow 里最容易混淆的点。

自建 Agent 解决的是”角色问题”

例如:

它回答的是:

“Lead Agent 应该以什么身份工作?“

Subagent 解决的是”执行问题”

例如:

它回答的是:

“复杂任务拆出来之后,谁去执行这些子任务?”

所以二者是完全不同的层:

Mermaid 图表


七、那多个自建 Agent 能不能相互协作?

如果你的问题是:

DeerFlow 内部有没有一个原生机制,让 custom agent A 直接调用 custom agent B,再让 custom agent C 汇总?

那么当前答案是:没有。

系统里没有看到这些能力:

当前系统真正存在的是:

因此 DeerFlow 当前更像:

Mermaid 图表

而不是:

Mermaid 图表


八、如果想让多个自建 Agent 协作,现实可行的办法是什么?

虽然 DeerFlow 目前不提供”原生多自建-agent 编排框架”,但你仍然可以做间接协作

方案一:由外部系统做流程编排

你可以在外部应用里控制:

  1. 先用 agent_name = rag-analyst
  2. 再用 agent_name = code-reviewer
  3. 再用 agent_name = writer

这种方式里,DeerFlow 每次运行仍然只有一个 Lead Agent,只是外层 orchestrator 在切换角色。

方案二:通过共享文件实现角色交接

同一个线程下有共享的:

于是你可以让:

这本质上是 file-based handoff,不是 agent-to-agent direct messaging。

方案三:直接用 Lead Agent + Subagent

如果你真正的需求是”把大任务拆开并行做”,那更贴近 DeerFlow 当前原生设计的方法,通常不是堆多个自建 agent,而是让 Lead Agent 去调度内置 Subagent。


九、应该怎样用一句话记住这套结构

我建议你记成下面这句话:

Lead Agent 是总控,Custom Agent 是角色模板,Subagent 是执行单元。

再展开一点:


十、最后的总结

如果只保留一个最关键的判断,那就是:

DeerFlow 当前并不是一个”多个自建 agent 原生互相通信与编排”的系统。它更像一个以 Lead Agent 为中心的单核控制架构:Lead Agent 是主控 orchestrator,自建 Agent 是它的角色化配置,而 Subagent 是它调度出来的子任务执行体。

用最后一张图收尾会最清晰:

Mermaid 图表


参考依据

本文判断主要依据以下实现:

分享文章

相关文章