如果你看过DeerFlow 2.0 能干什么那篇科普,你已经知道它能"一天干完你一周的活"。但这篇文章要回答的是另一个问题:它是怎么做到的?

DeerFlow 2.0 的核心是一套多智能体系统(MAS),由字节跳动开源,GitHub 上线 24 小时登顶热榜,目前已有 37k+ stars。它的架构设计有几个值得深入分析的工程决策,本文逐一拆解。

一、整体架构:四层角色分工

graph LR User["用户输入"] --> Coordinator["Coordinator\n无状态·路由"] Coordinator -->|"复杂任务"| Planner["Planner\n有状态·拆解"] Coordinator -->|"简单问答"| DirectReply["直接回复"] Planner --> Researcher["Researcher\n搜索/摘要"] Planner --> Coder["Coder\n代码/数据"] Researcher --> Reporter["Reporter\n汇总报告"] Coder --> Reporter Reporter --> Output["最终输出"]

DeerFlow 2.0 的多智能体系统由四个核心角色组成:

角色职责状态
Coordinator接收用户输入,判断任务类型,路由到 Planner 或直接回复无状态
Planner将复杂任务拆解为步骤列表,动态修订计划有状态
Research TeamResearcher(搜索/摘要)+ Coder(代码执行/数据分析)有状态
Reporter汇总所有步骤结果,生成最终报告无状态

这个结构和多智能体系统的本质与代价里分析的 Orchestrator-Worker 模式高度吻合,但 DeerFlow 2.0 做了一个关键的额外设计:Planner 和 Coordinator 是分开的两个角色

为什么要把 Coordinator 和 Planner 拆开?

很多 MAS 实现会把"接收任务"和"拆解任务"合并成一个 Agent,逻辑上更简单。DeerFlow 2.0 选择拆开,背后有明确的工程理由:

把两者合并,意味着每次路由判断都要携带完整的任务状态,Token 消耗会显著上升。拆开之后,Coordinator 的每次调用成本可以压缩到 Planner 的 1/10 以下。

二、Planner 的推理机制:不是简单的 Chain-of-Thought

graph LR subgraph standard["标准 ReAct"] T1["Thought"] --> A1["Action"] --> O1["Obs"] --> T1 end subgraph deerflow["DeerFlow 2.0"] T2["Thought"] --> A2["Action"] --> O2["Obs"] --> T2 O2 --> PR{"需修订?"} PR -->|"是"| Revise["修订计划"] --> T2 PR -->|"否"| Next["继续"] end

DeerFlow 2.0 的 Planner 使用的是改造过的 ReAct(Reasoning + Acting)框架,但加入了一个标准 ReAct 没有的机制:计划修订循环(Plan Revision Loop)

标准 ReAct 的循环是:

Thought → Action → Observation → Thought → ...

DeerFlow 2.0 的 Planner 在此基础上增加了一个外层循环:

graph LR Input["任务输入"] --> InitPlan["生成初始计划\n(步骤列表)"] InitPlan --> HumanReview["Human-in-the-Loop\n人工审查"] HumanReview -->|"接受"| Execute["交 Research Team 执行"] HumanReview -->|"修改意见"| Revise["Planner 修订计划"] Revise --> HumanReview Execute --> StepResult["步骤执行结果"] StepResult --> PlanCheck{"计划是否\n需要调整?"} PlanCheck -->|"是"| Revise PlanCheck -->|"否"| NextStep["执行下一步"] NextStep --> StepResult

这个设计解决了一个真实的生产问题:LLM 生成的初始计划经常在执行到一半时发现前提假设是错的

比如,用户要求"分析 2026 年 AI 芯片市场格局",Planner 可能在第一步搜索后发现某个关键数据源已经不可访问,这时候继续按原计划执行会浪费大量 Token。计划修订循环允许 Planner 在执行过程中动态调整后续步骤,而不是盲目执行到底。

Human-in-the-Loop 的工程意图

DeerFlow 2.0 的 Human-in-the-Loop 不是简单的"让用户点确认"。它的触发逻辑有明确的条件:

触发条件说明
初始计划生成后必触发,让用户确认任务理解是否正确
计划步骤超过 N 步可配置阈值,默认 5 步以上触发
涉及外部写操作如发送邮件、写入文件,必触发
Planner 置信度低于阈值LLM 输出的 logprob 低于设定值时触发
💡
第四个条件是最有价值的设计——它把"什么时候需要人介入"从主观判断变成了可量化的工程指标。这在大多数开源 Agent 框架里是缺失的。

三、Research Team:工具链与 RAG 集成

Research Team 由 Researcher 和 Coder 两个 Agent 组成,分工明确:

两者共享一个工具注册表(Tool Registry),工具调用通过统一接口抽象,底层实现可替换。

Researcher 的工具链

工具类型用途
Tavily Search搜索 API主力搜索引擎,支持深度搜索模式
Jina Reader网页解析将网页转为 LLM 友好的 Markdown
DuckDuckGo搜索 APITavily 的备用方案(免费)
arXiv API学术搜索论文检索专用
Python REPL代码执行Coder Agent 专用

DeerFlow 2.0 的工具调用不是简单的"搜一次就用",而是实现了一个多轮搜索精炼机制

第一轮搜索 → 提取关键实体 → 针对实体做第二轮精确搜索 → 交叉验证 → 输出

这个机制的代价是显而易见的:Token 消耗会随搜索轮次线性增长。根据 DeerFlow 官方 GitHub 的 benchmark 数据,一个中等复杂度的研究任务(约 5 个子问题)平均消耗约 80,000-120,000 tokens,按 GPT-4o 定价约合 0.4-0.6 美元/次。

RAG 在 DeerFlow 2.0 中的位置

DeerFlow 2.0 支持接入本地知识库,但它的 RAG 实现和 Dify、FastGPT 这类平台有本质区别:

平台型 RAG(Dify/FastGPT):用户上传文档 → 向量化存储 → 检索时召回相关片段 → 注入 Prompt

DeerFlow 2.0 的 RAG:本地知识库作为 Researcher 的一个工具,和网络搜索工具平级,由 Planner 决定什么时候调用哪个工具

💡
这个设计的优势是灵活性——Planner 可以根据任务性质动态决定"先查本地知识库,再用网络搜索补充"。劣势是调试难度更高,因为工具选择逻辑完全依赖 LLM 的判断,不透明。

四、Token 经济学:一次深度研究任务的成本结构

根据 DeerFlow GitHub 仓库的 benchmark 测试数据(测试模型:GPT-4o,任务:生成一份 2000 字的行业研究报告),各 Agent 的 Token 消耗占比大致如下:

几个值得关注的数字:

对于关注 Agent 生产架构与 Token 成本控制的开发者来说,这个分布有一个重要启示:如果你想降低 DeerFlow 类系统的运行成本,优化 Researcher 的搜索策略比优化其他任何部分都更有效

本地模型替换的可行性

DeerFlow 2.0 支持通过 OpenAI 兼容接口接入本地模型(如 Qwen2.5-72B、DeepSeek-V3)。但根据社区测试反馈,本地模型在以下两个环节表现明显弱于 GPT-4o:

  1. Planner 的计划质量:本地模型生成的计划步骤更容易出现逻辑跳跃,需要更多人工修订轮次
  2. Researcher 的信息过滤:本地模型对搜索结果的相关性判断准确率约低 15-20%,导致噪声信息更多进入最终报告
⚠️
用本地模型跑 DeerFlow 2.0,需要在 Planner 的 system prompt 上做更多工程调优,不是开箱即用的。

五、API 部署:从本地运行到生产服务

DeerFlow 2.0 多智能体系统概念架构氛围图

DeerFlow 2.0 提供了完整的 API 部署方案,核心是一个基于 FastAPI 的后端服务。

graph LR Client["客户端\n(Web UI / API 调用)"] --> FastAPI["FastAPI 后端\n:8000"] FastAPI --> AgentRuntime["Agent Runtime\n(LangGraph 状态机)"] AgentRuntime --> LLMProvider["LLM Provider\n(OpenAI / 本地模型)"] AgentRuntime --> ToolRegistry["Tool Registry\n(搜索/代码执行/RAG)"] AgentRuntime --> StateStore["状态存储\n(Redis / 内存)"] FastAPI --> StreamSSE["SSE 流式输出\n实时推送执行状态"]

DeerFlow 2.0 的 API 部署有几个值得关注的设计细节:

流式输出(SSE):Agent 执行过程中的每个步骤状态都通过 Server-Sent Events 实时推送给客户端,用户不需要等待整个任务完成才能看到进展。这对于一个可能运行 5-10 分钟的深度研究任务来说,是必要的用户体验设计。

状态持久化:默认使用内存存储任务状态,生产环境建议切换到 Redis。任务状态包括:当前执行步骤、已完成步骤的结果、工具调用历史、Human-in-the-Loop 的等待状态。

并发限制:DeerFlow 2.0 默认不限制并发任务数,但由于每个任务的 LLM 调用是串行的(Planner → Researcher → Reporter),高并发场景下的瓶颈在 LLM API 的速率限制,而不在 DeerFlow 本身。

最小化部署配置

# 克隆仓库
git clone https://github.com/bytedance/deer-flow.git
cd deer-flow

# 配置环境变量
cp .env.example .env
# 编辑 .env,填入 OPENAI_API_KEY 和 TAVILY_API_KEY

# 启动后端服务
pip install -r requirements.txt
python server.py

# 启动前端(可选)
cd web && npm install && npm run dev

生产环境部署建议加上:

六、开源协议与商业使用边界

DeerFlow 2.0 使用 Apache 2.0 协议开源,这意味着:

Apache 2.0 是目前商业友好度最高的开源协议之一,这也是 DeerFlow 2.0 在企业用户中接受度较高的原因之一。

七、局限性:这套架构在哪里会出问题

1. 长任务的状态膨胀问题
当一个研究任务包含超过 10 个子步骤时,Planner 需要在每次修订时携带所有历史步骤的结果,上下文窗口压力显著上升。DeerFlow 2.0 目前没有实现自动的上下文压缩机制,这是一个已知的工程债。

2. 工具调用失败的级联效应
如果 Researcher 的某个搜索工具返回空结果或超时,Planner 的计划修订逻辑可能进入无限循环(不断尝试同一个失败的工具)。需要在部署时配置合理的超时和重试上限。

3. Human-in-the-Loop 的延迟问题
在全自动化场景(如定时任务)中,Human-in-the-Loop 的等待会阻塞整个流程。DeerFlow 2.0 支持配置 auto_approve=true 跳过人工确认,但这会失去对计划质量的把控。

总结

DeerFlow 2.0 的架构设计有几个值得借鉴的工程决策:Coordinator/Planner 分离降低路由成本、计划修订循环提升执行鲁棒性、Human-in-the-Loop 的量化触发条件。这些不是"字节特有"的设计,而是在生产环境中跑多智能体系统时普遍需要面对的问题的解法。

如果你在评估是否要基于 DeerFlow 2.0 构建自己的研究型 Agent,核心问题是:你的任务是否需要多轮搜索精炼?如果是,DeerFlow 2.0 的架构值得深入研究;如果你的任务是单次查询+生成,用更轻量的框架会更合适。

延伸阅读

想了解 DeerFlow 2.0 能做什么(而不是怎么做),可以看字节悄悄造了个"超级员工"那篇科普。

对多智能体系统的成本结构感兴趣,Multi-Agent 不是把多个 AI 堆在一起有更系统的分析框架。