給 Agent 一雙真正好用的手:工具設計比工具數量更重要

作者:AI神經
日期:2026年5月20日 上午7:08
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

工具設計比工具數量更重要:畀Agent一對真正好用嘅手

整理版摘要

呢篇文章係Agent科普系列嘅第四篇,作者想講清楚一個核心問題:Agent工具嘅設計比接幾多API更重要。好多團隊拼命接API,但Agent依然用唔好,因為工具冇為模型設計好操作界面。作者指出,工具設計嘅本質係畀Agent設計操作枱,要清楚邊界、參數、錯誤信息,令Agent可以正確調用、出錯後修正。

文章引入咗ACI(Agent-Computer Interface)概念,強調工具要「可理解、可約束、可修復」。與其暴露底層API,不如封裝成任務動作,例如createRefundCase。失敗時唔好只回錯誤碼,要具體講係「缺少訂單號」定「金額超出可退範圍」。另外,工具太多會令上下文爆滿,所以有Tool Search同Programmatic Tool Calling呢啲策略。

最後,作者用LangChain嘅@tool例子展示好工具嘅設計:工具名貼近任務、參數收緊、錯誤可修。常見誤區係以為將API暴露出去就算完成,其實說明含糊、參數寬鬆、失敗信息貧瘠,都會變成Agent嘅能力問題。總括嚟講,工具設計嘅目標係令Agent少猜、少誤用、能修正。

  • 工具設計比工具數量更重要,關鍵係令Agent穩定理解、正確調用、出錯後修正。
  • 採用ACI原則,將工具設計成面向Agent嘅操作界面,避免底層接口味,轉為任務動作味。
  • 好工具清楚邊界、結構化錯誤、可修復;差工具含糊參數,逼Agent靠猜。
  • Tool SearchProgrammatic Tool Calling可減少上下文負擔,提升調用穩定性。
  • 使用LangChain嘅@tool裝飾器,明確args_schema,提供可執行錯誤提示,係可行動嘅設計方法。
整理重點

工具對Agent嘅真正價值

一句話講清楚:工具對Agent嘅價值,唔在於「接咗幾多API」,而在於佢能唔可以被穩定理解、正確調用、出錯後繼續修正。一個Agent再識判斷,如果只能講唔做得,價值都好有限。查數據、發消息、改文件、下訂單,都要靠工具完成。

於是好多團隊開始拼命接能力:十幾個搜索接口、幾十個業務API、各種數據庫同腳本入口。數量睇起嚟好壯觀,效果卻未必同步變好。

對人嚟講,「呢個接口大概用得」已經夠;對Agent嚟講,名字、參數、返回值同錯誤信息,都會影響佢下一步係咪行得啱

工具設計,本質係畀Agent設計操作界面

整理重點

好工具 vs 差工具:Agent唔係猜謎選手

假設你畀Agent一個叫process嘅工具,只寫一句「處理用戶請求」,參數裏面仲有幾個含義不明嘅字段。人類工程師或者可以靠經驗估出嚟,Agent就好容易傳錯參數、選錯時機,失敗咗仲唔知點改。

傳錯參數、選錯時機、失敗唔識改

  • 好工具:清楚嘅邊界——佢做啲咩、唔做啲咩,參數必填項明確,失敗時返回結構化錯誤,仲教埋下一步點補救。
  • 差工具:說明含糊、參數寬鬆、失敗訊息貧瘠,Agent只能靠亂猜。

與其將四個數據庫接口原樣暴露,不如提供一個清楚嘅createRefundCase

失敗時唔好只回400,最好直接講係「缺少訂單號」定「金額超出可退範圍

整理重點

ACI:面向Agent嘅交互界面

一個好有用嘅思路叫ACIAgent-Computer Interface),佢關注嘅唔係頁面靚唔靚,而係模型能唔能快速理解目標、約束同後果。

可理解、可約束、可修復,比「能調通」更重要

工具要少啲「底層接口味」,多啲「任務動作味」。例如將退款相關嘅底層操作封裝成一個createRefundCase,唔係逐個數據庫接口暴露。

ACI係畀Agent設計操作界面嘅核心框架

整理重點

工具太多?Tool Search同Programmatic Tool Calling幫到手

工具太多都會帶嚟新問題,令上下文爆滿。Tool Search會先檢索候選工具,再將少量相關工具放入上下文,避免每輪都將整套工具箱攤開。

Tool Search:檢索+篩選,減少上下文負擔

另一種做法叫Programmatic Tool Calling,畀Agent將多個動作組織成一段程序式調用,處理成批讀取、篩選、彙總時更省輪次更穩。

Programmatic Tool Calling:將多個動作組織成一段程序,提升穩定性

LangChain風格工具設計範例 python
from langchain.tools import tool
from pydantic import BaseModel, Field

class RefundInput(BaseModel):
 order_id: str = Field(description="訂單編號")
 amount: float = Field(description="退款金額")

@tool(args_schema=RefundInput)
def create_refund_case(order_id: str, amount: float) -> str:
 """創建退款案例,成功時返回案例ID,失敗時返回錯誤描述"""
 if not order_id:
 return "錯誤:缺少訂單號,請提供有效訂單編號"
 if amount > 1000:
 return "錯誤:金額超出可退範圍(上限1000),請調整金額"
 case_id = f"REF-{order_id}"
 return f"成功創建退款案例:{case_id}"

呢段代碼展示咗三件事:工具名貼近任務,參數收緊,錯誤可修。

args_schema越清楚,模型越唔容易亂填

失敗時畀出可執行提示,Agent先知下一步要核對訂單號,唔係機械重試

整理重點

常見誤區:以為暴露API就算完成工具設計

現實裏,好多問題並唔係模型唔識用工具,而係工具冇為模型被使用呢件事做好準備。

說明含糊、參數寬鬆、失敗信息貧瘠,最後都會變成Agent嘅「能力問題

工具設計嘅目標:令Agent少猜、少誤用、能修正,而唔係單純接多啲接口



一句話講清楚:工具對Agent嘅價值,唔在於「接咗幾多API」,而在於佢夠唔夠穩定被理解、正確調用、出錯之後繼續修正

一個Agent再識判斷,如果剩係得把口冇手做,價值都有限。查數據、發信息、改文件、落訂單,都要靠工具去做。於是好多團隊開始瘋狂接功能:十幾個搜索接口、幾十個業務API、各種數據庫同腳本入口。數量睇落好壯觀,效果就未必同步變好。

對人嚟講,「呢個接口大概用得」已經夠喇;對Agent嚟講,名、參數、回傳值同錯誤信息,都會影響佢下一步行唔行得啱。工具設計,本質上係俾Agent設計操作介面

差嘅工具,會逼到Agent變咗猜謎選手

假設你俾Agent一個叫 process 嘅工具,剩係寫一句「處理用戶請求」,參數裏面仲有幾個意思唔明嘅字段。人類工程師或者可以靠經驗估出嚟,Agent就好容易傳錯參數、揀錯時機,失敗之後仲唔知點樣改。

一個好工具通常有清楚嘅邊界:佢做啲乜,唔做啲乜;邊啲參數必填;失敗時回傳邊一類結構化錯誤;下一步要點樣補救。咁樣Agent先至可以好似睇得明掣同提示語咁,將動作穩陣咁做完。
差工具與好工具對比圖差工具同好工具對比圖

工具越清楚,Agent越少靠估。

好工具,往往更接近「Agent嘅操作枱」

一個好有用嘅思路叫 ACI,可以理解成「面向Agent嘅交互介面」。佢關注嘅唔係頁面靚唔靚,而係模型能唔能夠快速理解目標、約束同後果。

工具要少啲「底層接口味」,多啲「任務動作味」。與其將四個數據庫接口原整暴露出去,不如提供一個清楚嘅 createRefundCase;失敗時亦都唔好剩係回 400,最好直接講明係「欠訂單號」定係「金額超出可退範圍」。可理解、可約束、可修復,比「駁得通」更重要。

工具太多,都會帶嚟新嘅問題

Tool Search 會先檢索候選工具,再將少量相關工具放入上下文,避免每輪都將成套工具箱攤開。

仲有一種做法叫 Programmatic Tool Calling,俾Agent將多個動作組織成一段程序式調用。處理成批讀取、篩選、彙總時,咁樣更省輪次,亦都更穩。

用一段代碼睇出差別

下面呢段LangChain風格嘅Python淨係展示三件事:工具名貼近任務,參數收緊,錯誤可修

圖片

呢度冇將「退款」拆成一堆底層動作,而係用LangChain嘅 @tool 將目標、參數同執行函數放埋一齊。args_schema 越清楚,模型越唔容易亂填;失敗時除咗錯誤碼,仲畀埋可執行提示,Agent先至知下一步要核對訂單號,而唔係機械式重試。

常見誤區:將API暴露出去,就當工具設計完成

現實入面,好多問題並唔係模型唔識用工具,而係工具冇為模型被使用呢件事做好準備。說明含糊、參數寬鬆、失敗信息貧瘠,最後都會變成Agent嘅「能力問題」。新員工攞到一部冇標籤嘅操作枱,掣再多,都辦唔好事

當工具開始真正用得,Agent就會逐漸積累跨任務嘅經驗:邊啲規則長期有效,邊啲過程值得保留,邊啲內容只係暫存。呢個帶我哋去下一篇:記憶要點樣分層,先唔會越儲越亂

工具設計嘅目標,係令Agent少啲估、少啲誤用、能夠修正,而唔係單純將接口駁得更多。




Agent科普系列:
【第一篇】控制流:睇明Agent同Workflow嘅第一道分界線
【第二篇】Agent應該睇到啲乜:上下文工程決定判斷質素



一句話說清楚:工具對 Agent 的價值,不在於“接了多少 API”,而在於它能不能被穩定理解、正確調用、出錯後繼續修正

一個 Agent 再會判斷,如果只能說不能做,價值也很有限。查數據、發消息、改文件、下訂單,都要靠工具完成。於是很多團隊開始拼命接能力:十幾個搜索接口、幾十個業務 API、各種數據庫和腳本入口。數量看起來很壯觀,效果卻未必同步變好。

對人來說,“這個接口大概能用”已經夠了;對 Agent 來說,名字、參數、返回值和錯誤信息,都會影響它下一步能不能走對。工具設計,本質上是在給 Agent 設計操作界面

差工具,會把 Agent 逼成猜謎選手

假設你給 Agent 一個叫 process 的工具,只寫一句“處理用戶請求”,參數裏還有幾個含義不明的字段。人類工程師也許能靠經驗猜出來,Agent 則很容易傳錯參數、選錯時機,失敗後還不知道該怎麼改。

一個好工具通常有清楚的邊界:它做什麼,不做什麼;哪些參數必填;失敗時返回哪一類結構化錯誤;下一步該怎麼補救。這樣 Agent 才能像看懂按鈕和提示語一樣,把動作穩穩做完。
差工具與好工具對比圖差工具與好工具對比圖

工具越清楚,Agent 越少靠猜。

好工具,往往更接近“Agent 的操作枱”

一個很有用的思路叫 ACI,可以把它理解成“面向 Agent 的交互界面”。它關注的不是頁面漂不漂亮,而是模型能否快速理解目標、約束和後果。

工具要少一些“底層接口味”,多一些“任務動作味”。與其把四個數據庫接口原樣暴露出去,不如提供一個清楚的 createRefundCase;失敗時也別隻回 400,最好直接說明是“缺少訂單號”還是“金額超出可退範圍”。可理解、可約束、可修復,比“能調通”更重要。

工具太多,也會帶來新的問題

Tool Search 會先檢索候選工具,再把少量相關工具放進上下文,避免每輪都把整套工具箱攤開。

還有一種做法叫 Programmatic Tool Calling,讓 Agent 把多個動作組織成一段程序式調用。處理成批讀取、篩選、彙總時,這樣更省輪次,也更穩。

用一段代碼看出差別

下面這段 LangChain 風格的 Python 只展示三件事:工具名貼近任務,參數收緊,錯誤可修

圖片

這裏沒有把“退款”拆成一堆底層動作,而是用 LangChain 的 @tool 把目標、參數和執行函數放在一起。args_schema 越清楚,模型越不容易亂填;失敗時除了錯誤碼,還給出可執行提示,Agent 才知道下一步該核對訂單號,而不是機械重試。

常見誤區:把 API 暴露出來,就算工具設計完成

現實裏,很多問題並不是模型不會用工具,而是工具沒有為模型被使用這件事做好準備。說明含糊、參數寬鬆、失敗信息貧瘠,最後都會變成 Agent 的“能力問題”。新員工拿到一台沒有標籤的操作枱,按鈕再多,也辦不好事

當工具開始真正可用,Agent 就會逐漸積累跨任務的經驗:哪些規則長期有效,哪些過程值得保留,哪些內容只該暫存。這把我們帶到下一篇:記憶該怎麼分層,才不會越存越亂

工具設計的目標,是讓 Agent 少猜、少誤用、能修正,而不是單純把接口接得更多。




Agent 科普系列:
【第一篇】控制流:看懂 Agent 和 Workflow 的第一道分界線
【第二篇】Agent 該看到什麼:上下文工程決定判斷質量