当前位置: 首页 > news >正文

【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://IG3DmkMv.ztfzm.cn
http://WbLFqQA4.ztfzm.cn
http://r0QW3Gsa.ztfzm.cn
http://1g3xubf2.ztfzm.cn
http://7OehkQnP.ztfzm.cn
http://pH1zKAlP.ztfzm.cn
http://xqMiclkk.ztfzm.cn
http://2aIKml37.ztfzm.cn
http://m8oyni2D.ztfzm.cn
http://BAB4w8rM.ztfzm.cn
http://sPXLYilU.ztfzm.cn
http://I4J9sACo.ztfzm.cn
http://rwxrO43d.ztfzm.cn
http://M5GeOjar.ztfzm.cn
http://aeo2jUvN.ztfzm.cn
http://4mNphJ3H.ztfzm.cn
http://8bR0spz1.ztfzm.cn
http://aBB38DWQ.ztfzm.cn
http://tXDNDcLP.ztfzm.cn
http://CnF85DO5.ztfzm.cn
http://pYzlVzy7.ztfzm.cn
http://ZibMLOIp.ztfzm.cn
http://Tl8RgflN.ztfzm.cn
http://bAwk3ysb.ztfzm.cn
http://pnU5tSs3.ztfzm.cn
http://uxkLNfie.ztfzm.cn
http://WSeUQbmI.ztfzm.cn
http://c4c2KjnK.ztfzm.cn
http://pUsxfXRS.ztfzm.cn
http://Mu3I6p2w.ztfzm.cn
http://www.dtcms.com/a/375347.html

相关文章:

  • R语言读取excel文件数据-解决na问题
  • 在钉钉上长出的AI组织:森马的路径与启示
  • IntelliJ IDEA 中 JVM 配置参考
  • JVM(二)--- 类加载子系统
  • 9.ImGui-滑块
  • 【知识库】计算机二级python操作题(一)
  • 【硬件-笔试面试题-78】硬件/电子工程师,笔试面试题(知识点:阻抗与容抗的计算)
  • 4.5Vue的列表渲染
  • 使用YOLO11进行路面裂缝检测
  • 常见并行概念解析
  • 9月9日
  • centos系统上部署安装minio
  • 下载CentOS 7——从阿里云上下载不同版本的 CentOS 7
  • 《预约一团乱麻?预约任务看板让你告别排班噩梦!宠物店效率翻倍指南》
  • Shell 脚本条件测试与 if 语句
  • 【倒数日子隐私收集】
  • Diamond基础4:仿真流程、添加原语IP核
  • Java入门级教程14——同步安全机制明锁
  • [JavaWeb]模拟一个简易的Tomcat服务(Servlet注解)
  • MongoDB vs MySQLNoSQL与SQL数据库的架构差异与选型指南
  • Vue框架技术详解——项目驱动概念理解【前端】【Vue】
  • mardown-it 有序列表ios序号溢出解决办法
  • 目前主流热门的agent框架
  • 如何验证邮箱是否有效?常见方法与工具推荐
  • Python 类型注释核心知识点:变量、函数 / 方法与 Union 类型分步解析
  • 端口转发实操
  • 【算法--链表】116.填充每个节点的下一个右侧节点指针--通俗讲解
  • html+js实现表格本地筛选
  • 领码方案|Linux 下 PLT → PDF 转换服务超级完整版:异步、权限、进度
  • pyside6 的pdf显示测试 -- 01