【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
英文地址,請注明出處:http://en.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機器學習知識,包括機器學習概述,特征工程(數據…