2025 年:如何構(gòu)建有效的智能體
本篇文章來自Anthropic,我用大模型給翻譯了一下,以下是全文。
過去一年里,我們與數(shù)十個(gè)團(tuán)隊(duì)合作,跨行業(yè)構(gòu)建大型語言模型(LLM)智能體。通常,最成功的實(shí)施案例并不是使用復(fù)雜的框架或?qū)iT的庫(kù)。相反,它們是用簡(jiǎn)單、可組合的模式來構(gòu)建的。
在這篇文章中,我們分享了從與客戶合作及自行構(gòu)建智能體中學(xué)到的經(jīng)驗(yàn),并為開發(fā)者提供了構(gòu)建高效智能體的實(shí)用建議。
什么是智能體?
“Agent”可以通過多種方式定義。一些客戶將智能體定義為完全自主的系統(tǒng),這些系統(tǒng)在較長(zhǎng)時(shí)間內(nèi)獨(dú)立運(yùn)行,使用各種工具完成復(fù)雜任務(wù)。另一些客戶則用這個(gè)詞來描述更規(guī)范的實(shí)現(xiàn),這些實(shí)現(xiàn)遵循預(yù)定義的工作流程。在 Anthropic,我們將所有這些變體歸類為智能體系統(tǒng),但在工作流程和智能體之間劃定了重要的架構(gòu)區(qū)別:
- 工作流程是通過預(yù)定義的代碼路徑來編排LLMs和工具的系統(tǒng)。
- 另一方面,智能體(Agents)是這樣的系統(tǒng):大型語言模型(LLMs)在其中動(dòng)態(tài)地指導(dǎo)自己的流程和工具使用,保持對(duì)如何完成任務(wù)的控制。
下面,我們將詳細(xì)探討這兩種類型的智能體系統(tǒng)。在附錄 1(“實(shí)踐中的智能體”)中,我們描述了客戶在使用這類系統(tǒng)時(shí)發(fā)現(xiàn)特別有價(jià)值的兩個(gè)領(lǐng)域。
智能體可分成兩種:一種是工作流智能體,一種是自主智能體
何時(shí)(以及何時(shí)不)使用智能體
使用LLMs構(gòu)建應(yīng)用程序時(shí),我們建議盡可能尋找最簡(jiǎn)單的解決方案,僅在需要時(shí)增加復(fù)雜性。這可能意味著根本不需要構(gòu)建智能體系統(tǒng)。代理系統(tǒng)通常會(huì)以更高的延遲和成本來?yè)Q取更好的任務(wù)性能,你應(yīng)該考慮何時(shí)這種權(quán)衡是合理的。
當(dāng)需要更多的復(fù)雜性時(shí),工作流程為明確定義的任務(wù)提供了可預(yù)測(cè)性和一致性,而當(dāng)需要大規(guī)模的靈活性和模型驅(qū)動(dòng)的決策時(shí),智能體通常是更好的選擇。然而,對(duì)于許多應(yīng)用來說,通過檢索和上下文示例優(yōu)化單個(gè)大型語言模型(LLM)調(diào)用通常已經(jīng)足夠了。
何時(shí)以及如何使用框架
有許多框架使得智能體系統(tǒng)更易于實(shí)現(xiàn),包括:
LangChain的LangGraph ;
Amazon Bedrock 的 AI 智能體框架
Rivet,一個(gè)拖放式 GUI LLM工作流構(gòu)建器;
以及Vellum,另一個(gè)用于構(gòu)建和測(cè)試復(fù)雜工作流程的 GUI 工具。
這些框架通過簡(jiǎn)化標(biāo)準(zhǔn)的低級(jí)任務(wù)(如調(diào)用大型語言模型(LLM)、定義和解析工具以及將調(diào)用串聯(lián)在一起)來使入門變得容易。然而,它們通常會(huì)創(chuàng)建額外的抽象層,這可能會(huì)使底層提示和響應(yīng)變得難以調(diào)試。它們還可能讓人產(chǎn)生增加復(fù)雜性的誘惑,而實(shí)際上一個(gè)更簡(jiǎn)單的設(shè)置就足夠了。
我們建議開發(fā)者首先直接使用大型語言模型(LLM)API:許多模式可以用幾行代碼實(shí)現(xiàn)。如果你確實(shí)使用了框架,請(qǐng)確保你理解底層代碼。對(duì)底層機(jī)制的錯(cuò)誤假設(shè)是客戶錯(cuò)誤的常見來源。
查看我們的實(shí)用指南以獲取一些示例實(shí)現(xiàn)。(https://github.com/anthropics/anthropic-cookbook/tree/main/patterns/agents)
構(gòu)建模塊、工作流程和智能體
在本節(jié)中,我們將探討在生產(chǎn)環(huán)境中常見的智能體系統(tǒng)模式。我們將從基礎(chǔ)構(gòu)建塊——增強(qiáng)型大型語言模型(LLM)開始,逐步增加復(fù)雜性,從簡(jiǎn)單的組合工作流到自主代理。
構(gòu)建模塊:增強(qiáng)的LLM
智能體系統(tǒng)的基本構(gòu)建模塊是一個(gè)LLM,通過檢索、工具和記憶等增強(qiáng)功能進(jìn)行擴(kuò)展。我們當(dāng)前的模型(Claude)能夠主動(dòng)利用這些能力——生成自己的搜索查詢、選擇合適的工具,并決定保留哪些信息。
增強(qiáng)的LLM
我們建議重點(diǎn)關(guān)注實(shí)施的兩個(gè)關(guān)鍵方面:根據(jù)您的具體用例定制這些功能,并確保它們?yōu)槟腖LM提供一個(gè)簡(jiǎn)單、文檔齊全的接口。雖然實(shí)現(xiàn)這些增強(qiáng)功能的方法有很多,但一種方法是通過我們最近發(fā)布的模型上下文協(xié)議,該協(xié)議允許開發(fā)者通過簡(jiǎn)單的客戶端實(shí)現(xiàn)與不斷增長(zhǎng)的第三方工具生態(tài)系統(tǒng)集成。
在本文的剩余部分,我們將假設(shè)每個(gè)LLM調(diào)用都能訪問這些增強(qiáng)功能。
工作流程:提示鏈
提示鏈將任務(wù)分解為一系列步驟,其中每個(gè)LLM調(diào)用處理前一個(gè)調(diào)用的輸出。您可以在任何中間步驟添加程序化檢查(見下圖中的“gate”),以確保過程仍在正軌上。
提示鏈工作流程
何時(shí)使用此工作流:何時(shí)使用此工作流:當(dāng)任務(wù)可以輕松且清晰地分解為固定的子任務(wù)時(shí),這種工作流最為理想。主要目標(biāo)是通過使每個(gè)LLM調(diào)用成為一個(gè)更簡(jiǎn)單的任務(wù),以犧牲延遲為代價(jià)來?yè)Q取更高的準(zhǔn)確性。
提示鏈有用的示例:生成營(yíng)銷文案,然后將其翻譯成另一種語言。撰寫文檔大綱,檢查大綱是否符合特定標(biāo)準(zhǔn),然后根據(jù)大綱編寫文檔。
代碼示例:
工作流程:路由
路由對(duì)輸入進(jìn)行分類并將其引導(dǎo)至專門的后續(xù)任務(wù)。這種工作流程允許關(guān)注點(diǎn)分離,并構(gòu)建更專業(yè)的提示。如果沒有這種工作流程,針對(duì)一種輸入的優(yōu)化可能會(huì)損害其他輸入的性能。
何時(shí)使用此工作流程:路由適用于復(fù)雜任務(wù),這些任務(wù)具有明顯不同的類別,更適合分開處理,并且分類可以通過LLM或更傳統(tǒng)的分類模型/算法準(zhǔn)確處理。
路由有用的示例:
將不同類型的客戶服務(wù)查詢(一般問題、退款請(qǐng)求、技術(shù)支持)引導(dǎo)至不同的下游流程、提示和工具。
將簡(jiǎn)單/常見問題路由到較小的模型(如 Claude 3.5 Haiku),將困難/不常見的問題路由到更強(qiáng)大的模型(如 Claude 3.5 Sonnet),以優(yōu)化成本和速度。
工作流程:并行化
LLMs 有時(shí)可以同時(shí)處理一個(gè)任務(wù),并通過編程方式聚合它們的輸出。這種工作流程,即并行化,表現(xiàn)為兩種關(guān)鍵變體:
分段:將任務(wù)分解為并行運(yùn)行的獨(dú)立子任務(wù)。
投票:多次運(yùn)行同一任務(wù)以獲得多樣化的輸出。
何時(shí)使用此工作流程:當(dāng)劃分的子任務(wù)可以并行化以加快速度,或需要多個(gè)視角或嘗試以獲得更高置信度的結(jié)果時(shí),并行化是有效的。對(duì)于具有多重考慮的復(fù)雜任務(wù),LLMs通常在每個(gè)考慮由單獨(dú)的LLM調(diào)用處理時(shí)表現(xiàn)更好,這樣可以對(duì)每個(gè)特定方面進(jìn)行集中關(guān)注。
并行化有用的示例:
分段:
- 實(shí)施防護(hù)措施,其中一個(gè)模型實(shí)例處理用戶查詢,而另一個(gè)模型則篩選其中的不當(dāng)內(nèi)容或請(qǐng)求。這種方法通常比讓同一個(gè)LLM調(diào)用同時(shí)處理防護(hù)措施和核心響應(yīng)表現(xiàn)更好。
- 自動(dòng)化評(píng)估以評(píng)估LLM性能,其中每個(gè)LLM調(diào)用評(píng)估模型在給定提示下性能的不同方面。
投票:
- 審查一段代碼以查找漏洞,其中多個(gè)不同的提示會(huì)審查并在發(fā)現(xiàn)問題時(shí)標(biāo)記代碼。
- 評(píng)估給定內(nèi)容是否不當(dāng),通過多個(gè)提示評(píng)估不同方面或要求不同的投票閾值以平衡誤報(bào)和漏報(bào)。
工作流程:協(xié)調(diào)器-工作者
在協(xié)調(diào)者-工作者工作流中,一個(gè)中央LLM動(dòng)態(tài)地分解任務(wù),將它們分配給工作者LLMs,并綜合它們的結(jié)果。
何時(shí)使用此工作流:此工作流非常適合那些無法預(yù)測(cè)所需子任務(wù)的復(fù)雜任務(wù)(例如,在編碼中,需要更改的文件數(shù)量以及每個(gè)文件中更改的性質(zhì)可能取決于任務(wù))。盡管它在拓?fù)浣Y(jié)構(gòu)上相似,但與并行化的關(guān)鍵區(qū)別在于其靈活性——子任務(wù)并非預(yù)先定義,而是由協(xié)調(diào)器根據(jù)具體輸入確定。
編排器-工作者模式有用的示例:
- 每次對(duì)多個(gè)文件進(jìn)行復(fù)雜更改的編碼產(chǎn)品。
- 搜索涉及從多個(gè)來源收集和分析信息以尋找可能相關(guān)信息的任務(wù)。
工作流程:評(píng)估者-優(yōu)化器
在評(píng)估器-優(yōu)化器工作流程中,一個(gè)LLM調(diào)用生成響應(yīng),而另一個(gè)在循環(huán)中提供評(píng)估和反饋。
何時(shí)使用此工作流程:當(dāng)我們有明確的評(píng)估標(biāo)準(zhǔn),并且迭代改進(jìn)能帶來可衡量的價(jià)值時(shí),此工作流程尤為有效。適合的兩個(gè)標(biāo)志是,首先,當(dāng)人類明確表達(dá)其反饋時(shí),LLM 的響應(yīng)可以得到明顯改善;其次,LLM 能夠提供此類反饋。這類似于人類作家在創(chuàng)作一份精煉文檔時(shí)可能經(jīng)歷的迭代寫作過程。
評(píng)估優(yōu)化器有用的示例:
- 文學(xué)翻譯中存在一些細(xì)微差別,譯者LLM可能最初未能捕捉到,但評(píng)估者LLM可以提供有益的批評(píng)。
- 需要多輪搜索和分析以收集全面信息的復(fù)雜搜索任務(wù),評(píng)估者決定是否需要進(jìn)行進(jìn)一步搜索。
Agents 智能體
智能體在生產(chǎn)中逐漸嶄露頭角,隨著關(guān)鍵能力的成熟——理解復(fù)雜輸入、參與推理和規(guī)劃、可靠地使用工具以及從錯(cuò)誤中恢復(fù)。智能體的工作始于人類用戶的命令或互動(dòng)討論。一旦任務(wù)明確,智能體便獨(dú)立規(guī)劃和操作,可能會(huì)返回給人類以獲取更多信息或判斷。在執(zhí)行過程中,智能體在每一步從環(huán)境中獲取“真實(shí)情況”(如工具調(diào)用結(jié)果或代碼執(zhí)行)以評(píng)估其進(jìn)展至關(guān)重要。智能體隨后可以在檢查點(diǎn)或遇到阻礙時(shí)暫停以獲取人類反饋。任務(wù)通常在完成時(shí)終止,但為了保持控制,也常見包含停止條件(如最大迭代次數(shù))。
智能體可以處理復(fù)雜的任務(wù),但它們的實(shí)現(xiàn)通常很簡(jiǎn)單。它們通常只是LLMs在循環(huán)中根據(jù)環(huán)境反饋使用工具。因此,清晰而周到地設(shè)計(jì)工具集及其文檔至關(guān)重要。我們?cè)诟戒?2(“提示工程你的工具”)中擴(kuò)展了工具開發(fā)的最佳實(shí)踐。
何時(shí)使用智能體:智能體可用于開放式問題,這些問題難以或無法預(yù)測(cè)所需的步驟數(shù)量,且無法硬編碼固定路徑。LLM可能會(huì)運(yùn)行多個(gè)回合,你必須對(duì)其決策能力有一定程度的信任。智能體的自主性使其成為在可信環(huán)境中擴(kuò)展任務(wù)的理想選擇。
智能體的自主性意味著更高的成本和錯(cuò)誤累積的可能性。我們建議在沙盒環(huán)境中進(jìn)行廣泛測(cè)試,并設(shè)置適當(dāng)?shù)姆雷o(hù)措施。
智能體有用的示例:
以下示例來自我們自己的實(shí)現(xiàn):
一個(gè)編碼智能體,用于解決 SWE-bench 任務(wù),這些任務(wù)涉及根據(jù)任務(wù)描述對(duì)多個(gè)文件進(jìn)行編輯;
參考我們的“computer use”實(shí)現(xiàn),其中 Claude 使用計(jì)算機(jī)完成任務(wù)。
編碼智能體的高級(jí)流程
結(jié)合并自定義這些模式
這些構(gòu)建模塊并非一成不變。它們是開發(fā)者可以根據(jù)不同使用場(chǎng)景塑造和組合的常見模式。與任何LLM功能一樣,成功的關(guān)鍵在于衡量性能并迭代實(shí)現(xiàn)。重申一遍:只有在明顯改善結(jié)果時(shí),才應(yīng)考慮增加復(fù)雜性。
總結(jié)
在LLM領(lǐng)域的成功并不在于構(gòu)建最復(fù)雜的系統(tǒng),而在于構(gòu)建適合您需求的正確系統(tǒng)。從簡(jiǎn)單的提示開始,通過全面評(píng)估進(jìn)行優(yōu)化,只有在更簡(jiǎn)單的解決方案不足時(shí),才添加多步驟的智能體系統(tǒng)。
在實(shí)現(xiàn)智能體時(shí),我們嘗試遵循三個(gè)核心原則:
1、保持智能體設(shè)計(jì)的簡(jiǎn)潔性。
2、優(yōu)先考慮透明度,明確展示智能體的規(guī)劃步驟。
3、精心設(shè)計(jì)您的智能體-計(jì)算機(jī)界面(ACI),通過全面的工具文檔和測(cè)試。
框架可以幫助您快速入門,但在進(jìn)入生產(chǎn)階段時(shí),不要猶豫減少抽象層并使用基本組件進(jìn)行構(gòu)建。遵循這些原則,您可以創(chuàng)建不僅功能強(qiáng)大,而且可靠、可維護(hù)并贏得用戶信任的智能體。
由 Erik Schluntz 和 Barry Zhang 撰寫。本作品借鑒了我們?cè)?Anthropic 構(gòu)建智能體的經(jīng)驗(yàn)以及客戶分享的寶貴見解,對(duì)此我們深表感激。
參考:
