【Agent】DeerFlow Planner:执行流程与架构设计(基于真实 Trace 深度解析)

本文档系统阐述 DeerFlow 中 Planner 的职责边界、端到端执行流程、关键节点设计、数据结构、容错与人审机制,以及与研究/编码子代理的协同方式。面向开发与运维读者,帮助快速理解与调优 Planner 相关链路。

时序图(Sequence Diagram)

在这里插入图片描述

1. 角色与职责

  • 协调器 coordinator:识别用户请求类型;将研究类问题通过工具信号 handoff_to_planner 路由给 Planner;必要时在规划前触发“背景检索”。
  • 规划器 planner:依据严格的规划提示词与结构化输出模式,产出 Plan(包含步骤、类型与是否需要检索等元数据)。
  • 人审 human_feedback:对 Plan 进行人工把关;支持接受或要求修改。
  • 研究者 researcher:执行 research 类型步骤(检索/爬取/RAG)。
  • 工程师 coder:执行 processing 类型步骤(计算/编程/数据加工)。
  • 报告器 reporter:将已收集的信息与分析组织成最终报告。

2. 工作流与时序

  1. User → Coordinator:用户提出研究类问题(任意语言,保持同语回复)。
  2. Coordinator → Tool Call:LLM 绑定 handoff_to_planner 工具。若判断为研究请求,则调用该工具(可携带 localeresearch_topic)。
  3. 可选 Background Investigation:当启用 enable_background_investigation=true 时,协调器先进入 background_investigator 节点进行“轻量背景检索”,将结果拼入 Planner 提示(作为额外用户消息)。
  4. Planner:在“结构化输出”模式下生成 Plan JSON。若 has_enough_context=true,直接跳转 Reporter;否则转到人审。
  5. Human Feedback(中断):向外部发出 “Please Review the Plan.” 的可恢复中断;等待 [ACCEPTED][EDIT_PLAN] 开头的回执。
  6. Research Team:当被接受后,进入 research_team 协作执行;依据首个未完成步骤的 step_type,转给 researchercoder 节点,并循环直至步骤完成或回到 Planner 迭代。
  7. Reporter:按设定的报告风格,组织生成最终报告内容并返回。

3. 核心数据结构

  • Plan(src/prompts/planner_model.py
    • locale: string:输出语言;继承用户输入或由 Coordinator 传入。
    • has_enough_context: boolean:严格判定当前是否信息充足。为 true 时可跳过研究直接成稿。
    • thought: string:对用户需求的复述与规划思路。
    • title: string:任务标题。
    • steps: Step[]:最多 max_step_num 个步骤(默认 3)。
  • Step
    • need_search: boolean:是否需要外部检索/抓取。
    • title: stringdescription: string:步骤名与需采集/处理的具体数据点。
    • step_type: "research" | "processing":研究或加工;决定路由至 researcher/coder
    • execution_res?: string:步骤执行产出,由执行节点回填。

4. 关键节点实现要点

  • Coordinator(src/graph/nodes.py

    • 使用 get_llm_by_type(AGENT_LLM_MAP["coordinator"]) 绑定 handoff_to_planner 工具;
    • 若工具被调用,则路由至 planner 或(在启用背景检索时)background_investigator
    • 工具参数中的 localeresearch_topic 会覆盖当前状态。
  • Background Investigator(可选)

    • 依据 SELECTED_SEARCH_ENGINE(Tavily 或其它)执行简要检索;
    • 将结果拼入 Planner 的输入消息,提高初次规划质量与召回范围。
  • Planner

    • 采用结构化输出(JSON Mode);basic 模式直接 with_structured_output(Plan),其它模式走流式拼接;
    • 对 JSON 做 repair_json_output + json.loads 容错;
    • 分支:
      • has_enough_context=true:校验为 Plan 对象,goto=reporter
      • 否则:将“原始 JSON 字符串”暂存到 current_plangoto=human_feedback
  • Human Feedback(中断)

    • 仅接受以下前缀的回执:
      • [ACCEPTED]:通过;
      • [EDIT_PLAN]:携带修改意见,回到 Planner 迭代;
    • 其它值将抛出类型错误,避免不明状态。
  • Researcher / Coder

    • Researcher:need_search=trueresearch 步骤,提供“检索工具 + 爬取工具 +(可选)RAG 本地检索工具”;
    • Coder:processing 步骤,负责统计、计算、程序化分析与结构化数据产出;
    • 两者将执行结果写回 execution_res,并将观察结果纳入 observations 供后续步骤使用。
  • Reporter

    • 根据 report_style(如 academic/popular_science)生成成稿;
    • 添加表格/引用提示,规范输出格式与引用规范。

5. 配置项与默认值

  • max_plan_iterations:默认 1;超过即直接进入 Reporter,避免无限循环。
  • max_step_num:默认 3;Planner 必须在限定步数内覆盖关键信息面。
  • max_search_results:默认 3;影响检索结果数量与速度。
  • enable_deep_thinking:默认 false;启用后 Planner 选用“reasoning”类模型。
  • enable_background_investigation(State 层):默认 true;可关闭以缩短首轮延迟。
  • AGENT_RECURSION_LIMIT(env):研究/编码子代理的递归深度,默认 25,非法值自动回落。

6. 容错与兜底

  • JSON 解析失败:
    • 首次失败:goto=__end__(防止无效循环);
    • 非首次失败:goto=reporter(使用已有信息成稿)。
  • 规划超限:当 plan_iterations >= max_plan_iterations,直接 goto=reporter
  • 无工具调用:Coordinator 未调用任何工具 → 终止执行(__end__),写日志排查提示词或模型配置。

7. 设计原则与最佳实践

  • 严格的“上下文充足性”判定:宁缺毋滥,缺数据则规划下一步收集;
  • 研究/加工解耦:
    • research 仅采集与溯源,不做计算;
    • processing 仅做计算与结构化加工,不做外网检索;
  • 逐步累积 observations,在后续步骤与 Reporter 复用;
  • 对外提供明确的人审接口,确保关键节点的质量把关与可控性。

8. 参考 Plan 模板(含 processing)

{"locale": "zh-CN","has_enough_context": false,"thought": "对用户研究需求的简要复述与拆解思路","title": "主题名称","steps": [{"need_search": true,"title": "历史沿革与核心研发方向","description": "收集公司成立背景、阶段性技术演进、关键研发里程碑、投入强度。","step_type": "research"},{"need_search": true,"title": "现有技术能力与指标","description": "采集架构方案、团队构成、专利与测评、典型案例等定量+定性信息。","step_type": "research"},{"need_search": true,"title": "同行对比与趋势","description": "与同赛道 3–5 家进行横向对比;收集专家/媒体/投研观点。","step_type": "research"},{"need_search": false,"title": "指标归并与结构化输出","description": "将采集信息做指标口径统一、表格化对比、评分与结论归纳。","step_type": "processing"}]
}

9. 人审回执格式

  • 接受执行(继续):
[ACCEPTED] 按当前 Plan 执行。
  • 需要修改(回到 Planner):
[EDIT_PLAN] 请在步骤 3 后新增 1 步 processing:用于指标归并、横向表格对比与评分输出。

10. 与业务落地的建议

  • description 中显式列出“首选信息源清单”(官网/企信/专利/测评/投研等)与“指标口径”;
  • 结合 resources 注入本地资料,强制 researcher 先用本地检索工具;
  • 根据需求切换 report_style(如学术体 vs. 通俗体),确保对外输出一致性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96339.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后端接口防止XSS漏洞攻击

有这样一个场景,首先构建一个docx文件并插入超链接(恶意的链接),上传到文件服务器后获取对应的文件filekey。现在我们提供一个预览接口,通过filekey便可以预览,在根据filekey转html文档返回给页面的时候由于…

4.1Vue基本使用

1.使用Vue-引入 Vue 的本质,就是一个 JavaScript 的库: 刚开始我们不需要把它想象的非常复杂; 我们就把它理解成一个已经帮我们封装好的库; 在项目中可以引入并且使用它即可。 那么安装和使用 Vue 这个 JavaScript 库有哪些方式呢? 方式一:在页面中通过 CDN 的方式来引…

CAD绘图:杂项

一、样式标注管理器 新建CAD图纸的样式标注是定死的,需要手动去改变合适的大小 1)命令行中直接输入“D”,打开样式标注管理器 2)点击“修改”,可以改变其颜色,线条样式以及文字大小、颜色、字体等 3)若想添加字体: a)在网上下载需要的字体 b)右键Auto CAD图标(…

Git上有更新而本地无更新时的解决方案

问题分析 分支名称不匹配:你尝试推送到 main 分支,但你当前在 master 分支上远程仓库有新内容:远程仓库包含你本地没有的提交,需要先拉取 解决方案 方法1:继续使用 master 分支 # 1. 先拉取远程更改 git pull origin m…

用于骨盆骨折复位与固定自动术前手术规划的基于几何的端到端流水线|文献速递-最新医学人工智能文献

Title题目An End-to-End Geometry-Based Pipeline forAutomatic Preoperative Surgical Planning ofPelvic Fracture Reduction and Fixation用于骨盆骨折复位与固定自动术前手术规划的基于几何的端到端流水线01文献速递介绍骨盆骨折及其术前规划相关研究背景与本文方法 骨盆骨…

【导航】OS复习

【OS】操作系统概述-CSDN博客 【OS】PV-CSDN博客 【OS】进程与线程-CSDN博客 【OS】文件管理-CSDN博客 【OS】IO_检查用户io请求的合法性-CSDN博客

Google Nano-banana AI模型图像生成能力实证分析:基于47个案例的系统化技术验证

Google Nano-banana AI模型官方示例库(Awesome-Nano-Banana🍌-images),通过系统化分析47个技术案例,实证验证其在图像生成、编辑与转换任务中的核心能力。所有测试基于Apache 2.0开源许可的公开案例数据集,…

MySQL 多表操作与复杂查询:深入理解多表关系和高级查询

大家好!今天我们要深入探讨 MySQL 中两个非常重要的主题——多表操作 和 复杂查询。一. 多表操作什么是多表操作?在实际应用中,数据通常分布在多个表中,需要通过多表操作来获取完整信息。比如,一个学生表和一个课程表之…

Java入门级教程7——eclipse新建Maven项目,创建和连接数据库,创建数据库表

目录 1.若没有Maven项目,可以选择新建 2.添加Maven依赖 3.数据库的创建 3.1 新建连接 --> 创建数据库 3.2 创建数据库表 4.连接数据库 1.若没有Maven项目,可以选择新建 步骤一:点击 File --> New --> Project 步骤二&#xf…

请求库-axios

Axios 是一个基于 Promise 的 HTTP 客户端库,用于浏览器和 Node.js 环境。它支持发送异步 HTTP 请求,并提供了简洁的 API 来处理请求和响应。1、安装axios因为axios是一个第三方库,所以在使用之前我们需要先安装第三方模块。安装 Axios 需通过…

电子烟的4种屏幕驱动集成语音方案介绍

目前电子烟在全球市场的表现非常不错,很多国产电子烟厂家都有非常不错的产品,而屏幕驱动方案是电子烟智能化的重要组成部分,今天就给大家带来电子烟的4种主流屏幕驱动方案(含2025年最新版方案)。​  方案一、LED显示方案语音播报集成方案 W…

无法加载 DLL“xxxxxxx.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

(无法加载 DLL“xxxxxxx.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。) 这个错误: 无法加载 DLL“ZH_P2P_Libx64.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E) 意味着你的程序在运行时试图加载一个名为 xxxxxxx.dll 的动态链接库&#…

Flask/Django 生产部署:Gunicorn vs Nginx,Windows 与 Linux 实战指引

Flask/Django 生产部署:Gunicorn vs Nginx,Windows 与 Linux 实战指引 TL;DR Gunicorn:Python WSGI 应用服务器,运行 Flask/Django(Linux 用)。Nginx:反向代理/网关(TLS、静态、限流…

Nginx 优化与防盗链全解析:从性能调优到资源保护

Nginx 优化与防盗链全解析:从性能调优到资源保护 文章目录Nginx 优化与防盗链全解析:从性能调优到资源保护一、基础安全优化:隐藏版本号1.1 查看当前版本号1.2 两种隐藏/修改方案方案一:修改配置文件(快速隐藏&#xf…

HOT100--Day20--39. 组合总和,22. 括号生成,79. 单词搜索

HOT100–Day20–39. 组合总和,22. 括号生成,79. 单词搜索 每日刷题系列。今天的题目是《力扣HOT100》题单。 题目类型:回溯。 关键:掌握排列,组合。记得回溯。可以重复选的话,下一层index从哪里开始&#x…

高并发场景下的“命令执行”注入绕道记

环境:CentOS 8 OpenResty 1.21 PHP-FPM 8.0 背景:营销团队上线了一个“图片裁剪”接口,参数直接拼进 shell_exec,结果被打成“矿机”。1. 发现:流量突增 30 倍,却不见数据库慢查询 iftop -i eth0出站 1.8…

【modbus学习】

Modbus通信(源于施耐德)串行链路:RTU(传输大量数据,适合工业)、ASCII(少量数据,适合计算机)TCP/IP:TCP(传输严谨,效率低)、…

Redis单线程模型为什么快?

Redis的单线程模型指的是redis只使用一个线程来出来所有的命令式指令,但是不是意味着redis内部就只使用一个线程来处理所有的任务。都知道redis是一个客户端-服务器的程序,那么redis就只有一个服务器,但是有多个客户端,就像mysql一…

前端安全攻防:XSS, CSRF 等常见威胁的防范与检测指南

在如今高度互联的 Web 应用世界里,前端安全不再是可有可无的选项,而是构建可信赖、健壮应用的基石。随着 Web 技术的发展,攻击者们也变得越来越狡猾,前端遭受的攻击手段层出不穷。其中,跨站脚本攻击 (XSS) 和跨站请求伪…

Scikit-learn Python机器学习 - 特征降维 压缩数据 - 特征选择 - 移除低方差特征(VarianceThreshold)

锋哥原创的Scikit-learn Python机器学习视频教程: 2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据…