
阿里妹導讀
本文主要從規劃的重要性、工具設計的作用、最佳化實踐、適用場景幾個方面講述在構建多工具智慧體(Agent)系統時,透過引入結構化的“思考與規劃”工具和合理的提示工程,能夠顯著提升模型解決問題的效率和效果。
為什麼需要規劃
根據 Anthropic 和 OpenAI 的建議,對於多工具的 Agent 智慧體,讓模型在呼叫工具前規劃都能有效提升效果。
OpenAI
OpenAI 透過引導顯式規劃[1]使得(SWE-bench)透過率提高了4%,OpenAI 是透過 Prompt 引導模型思考,Prompt 如下:
You MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully.
翻譯:你在每次呼叫函式之前必須進行充分的規劃,並且在每次函式呼叫之後必須對結果進行充分的反思。不要僅僅透過不斷呼叫函式來完成整個過程,因為這樣會削弱你解決問題和深度思考的能力。

Anthropic
Anthropic 的辦法[2]是讓模型呼叫思考工具,並提供示例,讓模型呼叫工具前/呼叫工具後思考。思考工具的定義如下:
{
"name":"think",
"description":"Use the tool to think about something. It will not obtain new information or change the database, but just append the thought to the log. Use it when complex reasoning or some cache memory is needed.",
"input_schema":{
"type":"object",
"properties":{
"thought":{
"type":"string",
"description":"A thought to think about."
}
},
"required":["thought"]
}
}
Anthropic 使用 τ-bench 基準測試評估了"思考"工具,該基準專門用於測試模型在真實客戶服務場景中使用工具的能力:
1.基線:無“思考”工具,無擴充套件思考模式;
2.單獨擴充套件思考模式:即使用模型的推理模式;
3.單獨“思考”工具;
4."思考"工具+針對任務領域最佳化的提示;
結果顯示,當 Claude 3.7 在基準測試的“航空”和“零售”客戶服務領域有效運用“思考”工具時,效能獲得了顯著提升:
-
航空領域:經過最佳化的"think"工具在 pass^1 指標上達到了 0.570,而基線僅為 0.370——相對提升了 54%;
-
零售領域:單獨使用“think”工具達到了 0.812,而基線為 0.783。

我們選擇的方案
我們最終選擇了使用 Anthropic 的工具方案,讓模型思考和規劃。原因是 OpenAI 並不是單純透過 Prompt 指令讓模型規劃,他們還通過後訓練讓模型嚴格遵循這一指令。而我們使用開源模型,沒有經過微調的話,指令遵循的效果肯定會打折,而以工具的形式能夠提升遵循能力:
1.模型呼叫工具有固定的格式,例如引數的 thought, plan, action,透過工具呼叫能夠讓模型以更結構化的方式輸出,不會遺漏;
2.「呼叫xx工具」是一個可明確執行和評判的指令,而「做一個規劃」是一個模糊的指令,相對來說以工具的形式指令遵循效果更好,尤其是在複雜 prompt 和多工具的場景。
當然類 manus 的方案透過鏈路工程讓規劃和執行分離(如下圖),Agent 系統的規劃和遵循規劃的能力肯定會更好,尤其是針對15分鐘甚至30分鐘以上的長程任務。但是不是所有場景都需要類 manus 的長程任務規劃,我在這裡介紹的方案比較輕量,適用於快速任務(期望完成任務的時間較短)。

OpenManus 架構,planning 和 Agent 執行隔離
在螞蟻集團內部的 Agent 平臺:
Agent 實現
這裡以我們內部 Agent 平臺為示例介紹如何實現,瞭解原理之後用 LangChain 或者市面上的 Agent 平臺也能復現。
選擇恰當的模型
目前 DeepSeek V3 Function Call 模型在規劃和工具呼叫方面能力是較強的。

生成多樣性引數建議配置為0.3
請使用端到端模式,在該模式下,使用者輸入 query 之後,系統會迴圈呼叫模型,由模型決策使用工具或者直接回復。在以下兩種情況會停止迴圈:
1.模型不再呼叫工具,而是直接回復;
2.模型呼叫次數(不是工具呼叫次數)達到設定的上限。

端到端的迴圈模式
問題:為什麼使用 DeepSeek V3 而不是 DeepSeek R1?
回答:因為 DeepSeek R1 的思考時間特別長,而且根據 DeepSeek 的論文和我們的經驗,R1 在多工具呼叫的能力並不是非常突出。相反,V3 的工具呼叫和遵循能力都比 R1 好,而且延時較低。
工具配置
思考工具配置
參考 Anthropic 的思考工具和 Sequential Thinking MCP [3],我們定義的思考和規劃工具如下:
{
"name":"思考和規劃",
"id":"think_and_plan"
"description":"這是用於系統化思考與規劃的工具,支援使用者在面對複雜問題或任務時,分階段梳理思考、規劃和行動步驟。工具強調思考(thought)、計劃(plan)與實際行動(action)的結合,透過編號(thoughtNumber)追蹤過程。該工具不會獲取新資訊或更改資料庫,只會將想法附加到記憶中。當需要複雜推理或某種快取記憶時,可以使用它。",
"input_schema":{
"type":"object",
"properties":{
"thought":{
"type":"string",
"description":"當前的思考內容,可以是對問題的分析、假設、洞見、反思或對前一步驟的總結。強調深度思考和邏輯推演,是每一步的核心。"
},
"plan":{
"type":"string",
"description":"針對當前任務擬定的計劃或方案,將複雜問題分解為多個可執行步驟。"
},
"action":{
"type":"string",
"description":"基於當前思考和計劃,建議下一步採取的行動步驟,要求具體、可執行、可驗證,可以是下一步需要呼叫的一個或多個工具。"
},
"thoughtNumber":{
"type":"string",
"description":"當前思考步驟的編號,用於追蹤和回溯整個思考與規劃過程,便於後續覆盤與最佳化。"
}
},
"required":["thought","plan","action","thoughtNumber"]
}
}
你可以直接新增內建工具「思考和規劃」,不支援流式輸出思考內容;或者複製工作流模板的「思考和規劃」,支援流式輸出思考內容,然後根據自己的需求調整工具定義。

選擇內建工具

複製工作流模板,支援自定義
並行呼叫配置
從上面模型選擇的介面可以看到,我們打開了並行工具呼叫,在模型的一次呼叫中可以輸出多個工具。
什麼是並行呼叫
如下圖,tool A 和 tool B 是呼叫一次模型,輸出了兩個工具,模型在輸出 tool B 的時候並不會拿到 tool A 的執行結果,這種情況就是並行呼叫,適合沒有依賴關係的工具呼叫。
例如使用者問「北京和上海哪裡比較熱」,模型可以並行呼叫兩次天氣工具。
第二次呼叫模型輸出 tool C 的時候,模型的上下文已經拿到了 tool A 和 tool B 工具的執行結果,這種情況適合工具之間有依賴的場景。
例如使用者問「螞蟻A空間附近有什麼好吃的」,模型需要先呼叫座標轉換工具獲取 A 空間的經緯度,再呼叫周邊搜尋工具。

在實踐上,區分並行工具和序列工具,對模型智慧的要求是比較高的,所以我們預設關閉並行呼叫,模型只能一個一個工具呼叫,否則在上面的例子裡有些模型可能不等座標工具返回經緯度,自己幻覺了執行結果繼續呼叫周邊搜尋。甚至 GPT-4.1 的 Prompt 說明書裡面,OpenAI 也說了工具並行呼叫可能有不符合預期的情況,這時可以關閉。
我們在 DeepSeek V3 0324 體驗下來,發現 V3 的工具呼叫能力還是很強的,大家可以結合自己的業務測試。
業務工具
根據你的任務,選擇任務需要的工具。例如我們要做深度搜索,那麼就可以新增搜尋工具和網頁瀏覽工具。
Prompt 配置

prompt如下:
<instruction>
1. 你是一個 agent,請持續呼叫工具直至完美完成使用者的任務,停止呼叫工具後,系統會自動交還控制權給使用者。請只有在確定問題已解決後才終止呼叫工具。
2. 請善加利用你的工具收集相關資訊,絕對不要猜測或編造答案。
3. 「思考和規劃」是一個系統工具,在每次呼叫其他任務工具之前,你必須**首先呼叫思考和規劃工具**:針對使用者的任務詳細思考和規劃,並對之前工具呼叫的結果進行深入反思(如有),輸出的順序是thought, plan, action, thoughtNumber。
- 「思考和規劃」工具不會獲取新資訊或更改資料庫,只會將你的想法儲存到記憶中。
- 思考完成之後不需要等待工具返回,你可以繼續呼叫其他任務工具,你一次可以呼叫多個任務工具。
- 任務工具呼叫完成之後,你可以停止輸出,系統會把工具呼叫結果給你,你必須再次呼叫思考和規劃工具,然後繼續呼叫任務工具,如此迴圈,直到完成使用者的任務。
</instruction>
請注意:這部分 prompt 僅描述 Agent 如何呼叫「思考和規劃」的工具,你還需要在這個基礎上繼續完善 prompt,讓 Agent 知道如何呼叫你的業務工具。可以分系統 prompt 和工具描述兩部分。
業務 prompt
在上述內建 prompt 的基礎上,告訴模型針對什麼任務呼叫什麼工具,尤其是需要多工具配置的任務,需要詳細描述先呼叫什麼工具,再呼叫什麼工具。例如在資料分析的 Agent,程式碼直譯器和表格資料概覽的工具需要互相配合:
## 1. 程式碼直譯器(Python)(適用於專項分析和視覺化)
### **何時使用**
- 使用者需要針對 **特定維度、類別或時間段** 的資料進行分析。
- 需要執行 **複雜計算**(如資料聚合、迴歸分析、機器學習預測等)。
- 需要進行 **資料視覺化**(折線圖、柱狀圖、餅圖、散點圖等)。
### **呼叫方式**
- 在呼叫 **程式碼直譯器** 前,必須先使用 **表格資料概覽**工具,檢查資料結構,確保程式碼能正確處理資料。
- 使用程式碼直譯器時,請使用 pandas 庫讀取檔案。使用者提供的檔案路徑 file_path 在 /tmp/guest/ 目錄下,不要使用其他工具輸出的變數,也不要使用片段的資料。
- 程式碼直譯器在輸出圖表的同時,請列印相關的資料,方便大模型和使用者進行分析。
---
## 2. 表格資料概覽(僅用於輔助程式碼直譯器)
對任意 DataFrame 進行 全面的資料概覽與質量檢查,適用於任何 Excel/CSV 表格,快速瞭解資料概況。,幫助發現數據問題(如缺失值、異常值、重複行)。幫助發現數據問題(如缺失值、異常值、重複行)。作為資料清理和分析的第一步,為後續資料處理提供依據。分析資料包括:
1. 資料基本資訊(形狀、資料型別、記憶體佔用)。
2. 每列的唯一值數量(識別分類欄位的多樣性)。
3. 預覽資料(前 5 行 + 隨機 5 行,檢查資料分佈)。
4. 數值型列的統計資訊(均值、標準差、最大/最小值等)。
5. 非數值型列的統計資訊(類別分佈,最常見值等)。
6. 時間列範圍檢查(如果有 datetime 型別列,會輸出最小和最大日期)。
7. 缺失值統計(識別資料是否有空值)。
8. 重複行統計(檢查資料是否有完全重複的行)。
9. 數值列的相關性分析(計算相關係數矩陣)。
### **何時使用**
- 需要了解 **資料結構**(欄位名、資料型別、示例行)以便 **程式碼直譯器** 正確執行。
- **僅在呼叫程式碼直譯器前使用**,不會單獨呼叫。
工具描述
以下是來自 Anthropic 的建議[4]:
無論你構建的是哪種智慧代理系統,工具都可能成為代理的重要組成部分。工具讓 Agent 能夠透過 API 中精確指定的結構和定義與外部服務及 API 進行互動。當 Agent 響應時,如果計劃呼叫工具,它會在 API 響應中包含一個工具呼叫指令。工具定義和規範應與整體提示詞一樣受到提示工程的高度重視。
一個經驗法則是,考慮在人機互動(HCI)上投入了多少精力,就應計劃投入同等精力來打造良好的智慧體-計算機介面(ACI,即模型看到的工具描述和引數)。以下是一些實現建議:
1.站在模型的角度思考。根據描述和引數,使用這個工具是否一目瞭然,還是需要仔細斟酌?如果是後者,那麼模型很可能也會遇到同樣的問題。優秀的工具定義通常包含使用示例、邊界情況、輸入格式要求,並明確與其他工具的區分界限。
2.如何調整引數名稱或描述使其更加清晰?想象這是在為團隊中的初級開發者撰寫一份完美的文件註釋。當使用多個相似工具時,這一點尤為重要。
3.測試模型使用工具的方式:在工作臺中執行大量輸入示例,觀察模型容易犯哪些錯誤,並持續迭代改進。
4.為你的工具實施防呆設計:透過調整引數設定,降低犯錯的可能性。
在構建 SWE-bench 智慧體時,我們(Anthropic)實際投入更多精力最佳化工具而非整體提示。例如發現當智慧體離開根目錄後,模型在使用相對路徑工具時容易出錯。為此我們將工具改為強制要求絕對路徑——結果發現模型能完美運用這種方法。
使用推理模型有同樣的效果嗎?
思考工具的作用是讓推理模型先思考再呼叫工具,如果我們直接用推理模型,例如 Qwen3,效果是不是一樣的呢?
第一節介紹 Anthropic 的實驗結果表明,claude-sonnet-3.7 在非推理模式下使用思考工具,效果相比單純的推理模式更好。
實驗沒有分析原因,我猜測有幾個可能:
1.prompt 無法干預推理模型輸出的思維鏈過程——推理模型的後訓練一般只針對最終輸出的結果,思維鏈的空間是由模型自由探索——而使用思考工具可以 prompt 大模型,提供 few shot 示例指導模型在特定的垂直領域該如何思考。
2.一般 chat template 會把推理模型的歷史思考內容在上下文中刪掉(Claude 是保留模型第一次呼叫工具前輸出的思考內容,後續不再開啟思考,參看Claude 文件[5]),而使用思考工具,模型可以在多工具呼叫的過程中任意使用,並且保留在上下文中,這對複雜的多工具呼叫是有益處的。
後續我們也會基於 Qwen3 實驗哪種方法在複雜任務的工具呼叫效果最好,敬請期待。
參考連結:
[1]https://github.com/openai/openai-cookbook/blob/main/examples/gpt4-1_prompting_guide.ipynb
[2]https://www.anthropic.com/engineering/claude-think-tool
[3]https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking
[4]https://www.anthropic.com/engineering/building-effective-agents
[5]https://docs.anthropic.com/en/docs/build-with-claude/context-windows#the-context-window-with-extended-thinking-and-tool-use
雲原生企業級資料湖
基於物件儲存 OSS 構建的資料湖,可對接多種資料輸入方式,儲存任何規模的結構化、半結構化、非結構化資料,打破資料湖孤島。
點選閱讀原文檢視詳情。