在智能體工具開發領域,構建動作空間始終是一項極具挑戰性的任務。以Claude為例,它借助工具調用來執行操作,在Claude API中,開發者有多種方式利用原語構建工具,像bash、skills以及近期新增的代碼執行功能等。這給開發者帶來了諸多思考:究竟該如何為智能體設計工具?是僅依賴代碼執行或bash這類單一工具,還是為智能體可能遇到的每個用例都配備一個工具?面對50個工具的情況又該如何處理?
為了深入理解模型的思維,不妨將自己想象成面對一道難題的解題者。比如面對一道復雜的數學題,選擇何種工具解題取決于自身技術水平。紙張是最基礎的選擇,但手動計算會受到諸多限制;計算器能提升效率,但需要掌握高級操作;計算機功能強大且速度快,可前提是要懂得如何編寫和執行代碼。這一思路為智能體工具設計提供了有益框架,即要根據智能體的能力提供合適的工具。不過,確定智能體的能力并非易事,需要開發者集中精力,仔細研讀智能體的輸出,不斷進行實驗,嘗試從智能體的角度看待問題。
在構建Claude Code的過程中,開發者積累了不少經驗。其中,改進AskUserQuestion工具就是重要一環。在構建該工具時,目標是提升Claude的提問能力,也就是通常所說的啟發能力。雖然Claude本身能夠直接提問,但回答這些問題往往會耗費過多時間。為了降低這種交流摩擦,增加用戶與Claude之間的交流帶寬,開發者進行了多次嘗試。
最初,開發者嘗試向ExitPlanTool添加參數,在計劃旁邊羅列一系列問題。雖然這是最容易實現的方案,但卻讓Claude感到困惑。因為同時要求制定計劃和提出相關問題,一旦用戶回答與計劃內容沖突,Claude就難以處理,甚至可能需要兩次調用ExitPlanTool。于是,開發者轉而嘗試修改Claude的輸出指令,采用稍作修改的markdown格式提問,例如要求輸出帶有括號中替代選項的要點問題列表,然后解析并格式化顯示在用戶界面上。盡管Claude能夠較好地輸出這種格式,但并不穩定,有時會附加額外句子、省略選項或采用完全不同的格式。最終,開發者決定創建一個AskUserQuestion工具,Claude可在任何時候調用,尤其在計劃模式期間會被特別提示。當工具觸發時,會顯示一個模態框展示問題,并阻止智能體循環,直到用戶回答。這個工具不僅能提示Claude進行結構化輸出,確保為用戶提供多個選項,還為用戶提供了組合使用的方法,比如可在代理式SDK中調用或在技能中引用。而且,Claude似乎很樂意調用這個工具,輸出效果良好。不過,這并非Claude Code中啟發能力的最終形式,因為適用于一個模型的方法未必適用于其他模型。
隨著模型的發展,工具也需要不斷更新。以任務和待辦事項工具為例,Claude Code首次發布時,為了讓模型保持正常運行,開發者為Claude提供了TodoWrite工具,用于編寫或更新待辦事項并展示給用戶。但即便如此,Claude仍時常忘記職責。為此,開發者每5個回合插入系統提醒,提醒Claude其目標。然而,隨著模型改進,它們不再需要頻繁提醒待辦事項列表,反而覺得其存在是限制。例如,Opus 4.5在使用子智能體方面表現出色,但子智能體如何在共享待辦事項列表中進行協調成為新問題。鑒于此,開發者用任務工具取代了TodoWrite工具。待辦事項主要用于保持模型正常運行,而任務工具則側重于幫助智能體相互溝通。任務可以包含依賴關系,在子智能體之間共享更新,模型還能對其進行更改和刪除。由此可見,隨著模型功能增強,曾經需要的工具可能會成為限制,開發者需要不斷回顧對工具需求的假設。這也凸顯了堅持支持功能配置文件相似的模型的重要性。
在智能體工具中,搜索工具對Claude至關重要,它能幫助Claude構建自身上下文。Claude Code首次推出時,采用RAG向量數據庫查找Claude的上下文。雖然RAG功能強大且速度快,但需要索引和設置,在不同環境中可能不穩定。更重要的是,Claude被動接受上下文,而非主動尋找。后來,開發者為Claude提供了Grep工具,使其能夠搜索代碼庫并自行構建上下文。隨著Claude越來越聰明,在合適的工具輔助下,它構建環境的能力不斷提升。引入智能體技能后,開發者正式定義了漸進式披露概念,允許智能體通過探索逐步發現相關上下文。Claude可以讀取技能文件,這些文件又能引用其他模型可遞歸讀取的文件。技能的一個常見用途是為Claude添加更多搜索功能,如告知其如何使用API或查詢數據庫。在一年時間里,Claude從無法自主構建上下文,發展到能夠在多層文件中進行嵌套搜索,精準找到所需上下文。如今,漸進式披露成為在不添加工具的情況下為Claude添加新功能的常用技術。
以Claude Code指南智能體為例,Claude Code目前擁有約20個工具,開發者不斷思考是否需要保留所有工具,因為添加新工具會增加模型的選擇難度。例如,開發者發現Claude對Claude Code的使用方法了解不足,若將所有信息放在系統提示中,雖能解決問題,但考慮到用戶很少詢問相關信息,這會增加上下文冗余,干擾Claude Code編寫代碼的主要工作。于是,開發者嘗試漸進式披露方法,先給Claude一個文檔鏈接,讓其下載搜索信息。雖然有效,但Claude會將大量結果放入上下文以尋找正確答案,而實際只需答案本身。為此,開發者構建了Claude Code指南子智能體,當用戶詢問Claude自身相關問題時,Claude會被提示調用該子智能體。子智能體有關于如何搜索文檔以及返回內容的詳細說明。盡管這一方案并非完美,Claude有時仍會感到困惑,但在回答如何設置自身等問題時,表現比以前好很多。通過這種方式,開發者在不添加工具的情況下,豐富了Claude的動作空間。
為模型設計工具并非遵循嚴格規則的科學,更像是一門藝術,它取決于所使用的模型、智能體的目標以及所處環境。開發者需要不斷進行實驗,仔細研讀成果,勇于嘗試新事物,學會從智能體的角度看待問題。











