ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0px 0.2em;color: rgb(255, 255, 255);background: rgb(15, 76, 129);">Multi-Agent-WorkflowingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;display: flex;align-items: center;gap: 0.5em;color: rgb(87, 171, 90);">TipingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;display: block;letter-spacing: 0.1em;color: rgb(63, 63, 63);">多代理工作流架构,不同的专业代理协作处理用户查询,并生成一份全面的研究报告 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;color: rgb(63, 63, 63);"> ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;margin: 0.1em auto 0.5em;border-radius: 4px;" title="null"/>ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding-left: 8px;color: rgb(63, 63, 63);">Agent 职责和能力ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">DeerFLow 的多智能体工作流程由五个专业智能体组成,以下是它们特定的角色以及责任 | ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;padding: 0.25em 0.5em;color: rgb(63, 63, 63);word-break: keep-all;"> | ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;padding: 0.25em 0.5em;color: rgb(63, 63, 63);word-break: keep-all;"> | ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;padding: 0.25em 0.5em;color: rgb(63, 63, 63);word-break: keep-all;"> | | 处理问候和闲聊,对用户请求进行分类,将研究查询路由到Planner | | | | | | | | | | | | |
Coordinator Agent将用户的请求分为三类 - • 交给 Planner:研究问题、事实查询,会被进一步处理
Planner Agent将复杂查询分解为可管理的步骤,以便创建详细的研究计划 - 2. 若上下文不足,则创建一个结构化的研究计划,包含具体步骤
- 3. 将步骤分类为“研究”(网络搜索)或处理(计算任务)
- 4. 限制计划的步骤数量,最大思考步数(默认为 3 次)
Researcher Agent执行需要收集信息的研究步骤 - 1. 使用内置工具,如
web_search_tool和crawl_tool
Coder Agent执行涉及到 Python 代码的数据处理
Reporter Agent负责所有收集的信息综合成完整的最终报告 工作流执行过程 工作流配置 | | | | | | | | | | | | | enable_background_investigation | | | | | |
提示到 Agent 的映射将代理的提示映射到定义其行为的实际代码文件  计划结构化和步骤执行 步骤类型和执行步骤分为研究、处理两种类型 StepType.RESEARCH - • 需要进行网络搜索
need_web_search: true - • 由 Researcher Agenet 执行,使用网络搜索和爬取工具
StepType.PROCESSING - • 不需要进行网络搜索
need_web_search: false - • 由 Coder Agent 执行,使用 Python 进行数据处理
工具整合DeerFlow 集成了代理可用于收集信息和处理数据的各种工具 内置工具动态工具加载随着 MCP支持通过 MCP 动态加载其他工具  这里给出 GitHub 趋势存储库的 MCP 示例 "mcp_settings":{ "servers":{ "mcp-github-trending":{ "transport":"stdio", "command":"uvx", "args":["mcp-github-trending"], "enabled_tools":["get_github_trending_repositories"], "add_to_agents":["researcher"] } } }
Data FlowTip 本文的记录数据的流转,用户输入到最终研究报告的产出,前后端交互时的消息、事件、状态,以及每个组件内的内部数据转换
Data Flow 的预览 前端 Data Flow用户输入作为 API Request sendMessage 函数(web/src/core/store/store.ts 76-154)的处理流程如下: - 1. 创建新的用户消息,生成唯一 ID,并将其添加到 Zustand 状态存储
- 2. 设置存储中检索聊天设置,使用
getChatStreamSettings() - 3. 使用用户消息和配置参数发起 API 调用,调用
chatStream() - 4. 在对话期间将前端状态设置为“responding”
chat 的 Stream 参数包括如下 | | | | | | | | | | | enable_background_investigation | | | |
事件处理与状态管理前端使用 Zustand 来管理应用状态,关键状态组件包括  当后端接收到事件时,它们会被处理并更新上述状态 - • tool_call_result:更新工具调用结果
以下这些状态更新函数用于管理聊天、研究过程中的状态变化,确保前端能够正确显示对话和研究进度 - • appendMessage:向存储中添加新消息
- • updateMessage:使用新内容更新现有消息
- • updateMessages:批量更新多个消息
- • setOngoingResearch:跟踪当前研究会话
- • openResearch:控制 UI 中显示的研究内容
API 通信前后端通过 SSE 进行流式响应,支持两种模式 - • 常规模式(Regular mode):发送实际请求到后端,获取实时响应
- • 回放模式(Replay mode):使用预录的响应进行演示或测试
 后端 Data Flow请求处理当后端接收到聊天请求时,通过/api/chat/stream断点进行处理 - • 启动 StreamResponse,使用
_astream_workflow_generator()处理请求并生成流式响应
 工作流事件生成_astream_workflow_generator()职责如下
- 3. 将 LangGraph 事件转换为 SSE(服务器发送事件)
 LangGraph 状态流管理 Agent 节点之间的状态转换,每个节点处理当前状态,并返回一个对象,该对象用于更新状态并引导工作流进入下一个节点  LangGraph 的状态对象包含 | | | | | | | | | | | | | | | | | enable_background_investigation | |
数据结构Message 结构Message 是 DeerFlow 系统的主要数据结构,在前后端之间流动 ChatEvent 结构从后端流式传递到前端的事件具有如下结构 { "event":"<event_type>", "data":"<JSON 数据>" }
其中 event_type 可以是: - • message_chunk:来自代理的文本内容
- • tool_call_chunks:工具调用的部分内容
- • tool_call_result:工具执行的结果
ChatRequest 结构从前端传递到后端的请求结构如下 { "messages":[{"role":"user","content":"string"}], "thread_id":"string", "auto_accepted_plan":true, "max_plan_iterations":3, "max_step_num":5, "interrupt_feedback":"string", "enable_background_investigation":true, "mcp_settings":{ "servers":{ "server_name":{ "transport":"string", "command":"string", "args":["string"], "url":"string", "env":{"key":"value"}, "enabled_tools":["string"], "add_to_agents":["string"] } } } }
|