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















