構(gòu)建有效的智能體
從上下文構(gòu)建、意圖識別,到工具鏈調(diào)用與反饋機(jī)制,如何讓智能體真正“有效”,是每一個(gè)AI產(chǎn)品人必須面對的挑戰(zhàn)。本文從產(chǎn)品視角出發(fā),系統(tǒng)拆解智能體構(gòu)建的關(guān)鍵要素與設(shè)計(jì)邏輯,幫助你在AI落地的復(fù)雜語境中,找到可控、可用、可演進(jìn)的路徑。
athroupic公司發(fā)布了自己的建造Agent的經(jīng)驗(yàn)分享,下面是翻譯。
在過去的一年里,我們與數(shù)十個(gè)跨行業(yè)構(gòu)建大語言模型(LLM)智能體的團(tuán)隊(duì)展開了合作。一貫的情況是,最成功的實(shí)現(xiàn)并非使用復(fù)雜的框架或?qū)iT的庫。相反,他們采用的是簡單、可組合的模式進(jìn)行構(gòu)建。
在這篇文章中,我們分享了與客戶合作以及自行構(gòu)建智能體的經(jīng)驗(yàn),并為開發(fā)者提供了構(gòu)建有效智能體的實(shí)用建議。
什么是代理?
“智能體”可以通過多種方式來定義。一些客戶將智能體定義為能夠在較長時(shí)間內(nèi)獨(dú)立運(yùn)行的完全自主系統(tǒng),它們使用各種工具來完成復(fù)雜任務(wù)。另一些客戶則用這個(gè)術(shù)語來描述遵循預(yù)定義工作流程的更具規(guī)范性的實(shí)現(xiàn)方式。在Anthropic,我們將所有這些變體歸類為**智能體系統(tǒng)**,但在工作流程和**智能體**之間做出了重要的架構(gòu)區(qū)分:
- 工作流是通過預(yù)定義代碼路徑編排大語言模型(LLM)和工具的系統(tǒng)。
- 另一方面,智能體是指大語言模型(LLM)動態(tài)地指導(dǎo)自身流程和工具使用,對如何完成任務(wù)保持控制的系統(tǒng)。
下面,我們將詳細(xì)探討這兩種類型的能動系統(tǒng)。在附錄1(“實(shí)踐中的能動者”)中,我們描述了兩個(gè)領(lǐng)域,客戶在這些領(lǐng)域中發(fā)現(xiàn)使用此類系統(tǒng)具有特殊價(jià)值。
何時(shí)(以及何時(shí)不)使用代理
在使用大語言模型(LLMs)構(gòu)建應(yīng)用程序時(shí),我們建議盡可能找到最簡單的解決方案,僅在必要時(shí)增加復(fù)雜性。這可能意味著根本不構(gòu)建智能體系統(tǒng)。智能體系統(tǒng)通常會用延遲和成本來換取更好的任務(wù)性能,你應(yīng)該考慮這種權(quán)衡在何時(shí)是合理的。
當(dāng)需要處理更多復(fù)雜情況時(shí),工作流能為定義明確的任務(wù)提供可預(yù)測性和一致性,而當(dāng)需要大規(guī)模的靈活性和基于模型的決策時(shí),智能體則是更好的選擇。然而,對于許多應(yīng)用來說,通過檢索和上下文示例優(yōu)化單個(gè)大語言模型調(diào)用通常就足夠了。
何時(shí)以及如何使用框架
有許多框架可以使智能體系統(tǒng)更易于實(shí)現(xiàn),其中包括:
- LangGraph來自LangChain;
- 亞馬遜bedrock的AI代理框架;
- Rivet,一款拖放式GUILLM工作流構(gòu)建器;以及
- Vellum,另一個(gè)用于構(gòu)建和測試復(fù)雜工作流的GUI工具。
這些框架通過簡化標(biāo)準(zhǔn)的底層任務(wù)(如調(diào)用大語言模型、定義和解析工具以及將調(diào)用鏈接在一起),使入門變得容易。然而,它們往往會創(chuàng)建額外的抽象層,這可能會掩蓋底層的提示和響應(yīng),使其更難調(diào)試。當(dāng)簡單的設(shè)置就足夠時(shí),它們也可能會讓人忍不住增加復(fù)雜性。
我們建議開發(fā)者先直接使用大語言模型(LLM)API:許多模式只需幾行代碼就能實(shí)現(xiàn)。如果確實(shí)使用了框架,請確保你理解其底層代碼。對底層代碼的錯(cuò)誤假設(shè)是客戶出錯(cuò)的常見原因。
查看我們的操作指南,了解一些示例實(shí)現(xiàn)。
構(gòu)建模塊、工作流和代理
在本節(jié)中,我們將探討在生產(chǎn)環(huán)境中所見到的代理系統(tǒng)的常見模式。我們將從基礎(chǔ)構(gòu)建模塊——增強(qiáng)型大語言模型(LLM)開始,逐步增加復(fù)雜性,從簡單的組合式工作流到自主代理。
構(gòu)建模塊:增強(qiáng)型大語言模型
能動系統(tǒng)的基本構(gòu)建模塊是通過檢索、工具和記憶等增強(qiáng)功能得到強(qiáng)化的大語言模型(LLM)。我們目前的模型可以積極利用這些能力——生成自己的搜索查詢、選擇合適的工具,并確定要保留哪些信息。
增強(qiáng)型大語言模型
我們建議重點(diǎn)關(guān)注實(shí)施的兩個(gè)關(guān)鍵方面:根據(jù)您的特定用例定制這些功能,并確保它們?yōu)槟拇笳Z言模型(LLM)提供一個(gè)易于使用且文檔完善的接口。雖然有許多方法可以實(shí)現(xiàn)這些增強(qiáng)功能,但一種方法是通過我們最近發(fā)布的模型上下文協(xié)議,它允許開發(fā)人員通過簡單的客戶端實(shí)現(xiàn)與不斷發(fā)展的第三方工具生態(tài)系統(tǒng)集成。
在本文的其余部分,我們將假設(shè)每個(gè)大語言模型調(diào)用都可以使用這些增強(qiáng)功能。
工作流:提示鏈
提示鏈將任務(wù)分解為一系列步驟,其中每個(gè)大語言模型(LLM)調(diào)用都會處理前一個(gè)調(diào)用的輸出。你可以在任何中間步驟添加編程檢查(見下圖中的“門”),以確保流程仍在正軌上。
提示鏈工作流
何時(shí)使用此工作流程:此工作流程非常適合任務(wù)可以輕松、清晰地分解為固定子任務(wù)的情況。主要目標(biāo)是通過使每個(gè)大語言模型調(diào)用成為更簡單的任務(wù),以犧牲延遲為代價(jià)來換取更高的準(zhǔn)確性。
提示鏈有用的示例:
- 生成營銷文案,然后將其翻譯成另一種語言。
- 撰寫文檔大綱,檢查大綱是否符合特定標(biāo)準(zhǔn),然后根據(jù)大綱撰寫文檔。
工作流:路由
路由對輸入進(jìn)行分類,并將其導(dǎo)向?qū)iT的后續(xù)任務(wù)。這種工作流程有助于分離關(guān)注點(diǎn),并構(gòu)建更專業(yè)的提示。如果沒有這種工作流程,針對某一種輸入進(jìn)行優(yōu)化可能會影響對其他輸入的性能。
路由工作流程
何時(shí)使用此工作流程:路由適用于復(fù)雜任務(wù),這些任務(wù)存在不同的類別,分開處理效果更佳,并且分類可以由大語言模型(LLM)或更傳統(tǒng)的分類模型/算法準(zhǔn)確處理。
路由有用的示例:
- 將不同類型的客戶服務(wù)咨詢(一般問題、退款請求、技術(shù)支持)引導(dǎo)至不同的下游流程、提示和工具。
- 將簡單/常見的問題路由到Claude3.5Haiku等較小的模型,將困難/不常見的問題路由到Claude3.5Sonnet等更強(qiáng)大的模型,以優(yōu)化成本和速度。
工作流:并行化
大語言模型(LLMs)有時(shí)可以同時(shí)處理一項(xiàng)任務(wù),并通過編程方式聚合其輸出。這種工作流程,即并行化,主要有兩種變體:
- 分段:將任務(wù)分解為并行運(yùn)行的獨(dú)立子任務(wù)。
- 投票:多次運(yùn)行同一任務(wù)以獲得不同的輸出。
并行化工作流
何時(shí)使用此工作流程:當(dāng)劃分的子任務(wù)可以并行化以提高速度時(shí),或者當(dāng)需要多個(gè)視角或嘗試以獲得更可靠的結(jié)果時(shí),并行化是有效的。對于需要多方面考慮的復(fù)雜任務(wù),當(dāng)每個(gè)方面都通過單獨(dú)的大語言模型(LLM)調(diào)用處理時(shí),大語言模型通常表現(xiàn)更好,這樣可以專注于每個(gè)特定方面。
并行化有用的示例:1)分段:
- 實(shí)施護(hù)欄機(jī)制,即一個(gè)模型實(shí)例處理用戶查詢,而另一個(gè)模型實(shí)例對查詢進(jìn)行篩查,以識別不適當(dāng)?shù)膬?nèi)容或請求。這種方式往往比讓同一個(gè)大語言模型(LLM)調(diào)用同時(shí)處理護(hù)欄和核心響應(yīng)的效果更好。
- 自動執(zhí)行評估以評估大語言模型(LLM)的性能,其中每次大語言模型調(diào)用都會評估模型在給定提示下性能的不同方面。
2)投票:
- 審查一段代碼是否存在漏洞,其中幾個(gè)不同的提示會對代碼進(jìn)行審查,如果發(fā)現(xiàn)問題就會標(biāo)記出來。
- 評估給定內(nèi)容是否不當(dāng),通過多個(gè)提示評估不同方面或要求不同的投票閾值,以平衡誤報(bào)和漏報(bào)。
工作流:編排器-工作器
在編排器-工作器工作流中,中央大語言模型(LLM)動態(tài)地分解任務(wù),將其委派給工作器大語言模型(LLM),并綜合它們的結(jié)果。
編排器-工作器工作流
何時(shí)使用此工作流:此工作流非常適合那些無法預(yù)測所需子任務(wù)的復(fù)雜任務(wù)(例如,在編碼中,需要更改的文件數(shù)量以及每個(gè)文件中更改的性質(zhì)可能取決于任務(wù))。雖然在拓?fù)浣Y(jié)構(gòu)上相似,但與并行化的關(guān)鍵區(qū)別在于其靈活性——子任務(wù)不是預(yù)先定義的,而是由編排器根據(jù)特定輸入來確定。
編排器-工作器有用的示例:
- 每次對多個(gè)文件進(jìn)行復(fù)雜更改的編碼產(chǎn)品。
- 搜索涉及從多個(gè)來源收集和分析信息以查找可能相關(guān)信息的任務(wù)。
工作流程:評估器 – 優(yōu)化器
在評估器-優(yōu)化器工作流程中,一個(gè)大語言模型調(diào)用生成響應(yīng),而另一個(gè)則在循環(huán)中提供評估和反饋。
評估器-優(yōu)化器工作流程
何時(shí)使用此工作流程:當(dāng)我們有明確的評估標(biāo)準(zhǔn),且迭代優(yōu)化能帶來可衡量的價(jià)值時(shí),此工作流程尤為有效。兩個(gè)適配的標(biāo)志是,首先,當(dāng)人類明確表達(dá)反饋時(shí),大語言模型(LLM)的響應(yīng)能得到明顯改善;其次,大語言模型(LLM)能夠提供此類反饋。這類似于人類作者在撰寫潤色文檔時(shí)可能經(jīng)歷的迭代寫作過程。
評估器優(yōu)化器有用的示例:
- 文學(xué)翻譯中存在一些細(xì)微差別,翻譯大語言模型(LLM)可能一開始無法捕捉到,但評估大語言模型(LLM)可以提供有用的批評意見。
- 復(fù)雜的搜索任務(wù),需要多輪搜索和分析才能收集全面的信息,由評估者決定是否有必要進(jìn)行進(jìn)一步的搜索。
代理
隨著大語言模型(LLMs)在關(guān)鍵能力——理解復(fù)雜輸入、進(jìn)行推理和規(guī)劃、可靠地使用工具以及從錯(cuò)誤中恢復(fù)——方面的成熟,智能體正在生產(chǎn)環(huán)境中嶄露頭角。智能體的工作要么始于人類用戶的指令,要么始于與人類用戶的交互式討論。一旦任務(wù)明確,智能體就會獨(dú)立進(jìn)行規(guī)劃和操作,可能會向人類尋求更多信息或判斷。在執(zhí)行過程中,智能體在每一步都從環(huán)境中獲取“地面實(shí)況”(如工具調(diào)用結(jié)果或代碼執(zhí)行情況)以評估其進(jìn)展,這一點(diǎn)至關(guān)重要。智能體隨后可以在檢查點(diǎn)或遇到阻礙時(shí)暫停,以獲取人類反饋。任務(wù)通常在完成時(shí)終止,但為了保持控制,也常設(shè)置停止條件(如最大迭代次數(shù))。
智能體可以處理復(fù)雜的任務(wù),但其實(shí)現(xiàn)方式往往很直接。它們通常只是基于環(huán)境反饋在循環(huán)中使用工具的大語言模型(LLM)。因此,清晰且周全地設(shè)計(jì)工具集及其文檔至關(guān)重要。我們在附錄2(“工具的提示工程”)中詳細(xì)闡述了工具開發(fā)的最佳實(shí)踐。
自主代理
何時(shí)使用智能體:智能體可用于開放式問題,在這些問題中,很難或不可能預(yù)測所需的步驟數(shù)量,并且無法硬編碼固定路徑。大語言模型可能會進(jìn)行多作,并且你必須在一定程度上信任其決策能力。智能體的自主性使其非常適合在可信環(huán)境中擴(kuò)展任務(wù)。
智能體的自主性意味著更高的成本,以及錯(cuò)誤疊加的可能性。我們建議在沙盒環(huán)境中進(jìn)行廣泛測試,并設(shè)置適當(dāng)?shù)姆雷o(hù)措施。
代理有用的示例:
以下示例來自我們自己的實(shí)現(xiàn):
- 用于解決SWE-bench任務(wù)的編碼代理,這些任務(wù)涉及根據(jù)任務(wù)描述對多個(gè)文件進(jìn)行編輯;
- 我們的“計(jì)算機(jī)使用”參考實(shí)現(xiàn),其中Claude使用計(jì)算機(jī)來完成任務(wù)。
編碼代理的高級流程
組合并定制這些模式
這些構(gòu)建模塊并非規(guī)定性的。它們是開發(fā)者可以塑造和組合以適應(yīng)不同用例的常見模式。與任何大語言模型(LLM)功能一樣,成功的關(guān)鍵在于衡量性能并對實(shí)現(xiàn)進(jìn)行迭代。重申一下:只有在復(fù)雜性明顯改善結(jié)果時(shí),才應(yīng)考慮增加復(fù)雜性。
摘要
在大語言模型(LLM)領(lǐng)域取得成功,并非在于構(gòu)建最復(fù)雜的系統(tǒng),而是在于構(gòu)建適合你需求的系統(tǒng)。從簡單的提示開始,通過全面評估對其進(jìn)行優(yōu)化,僅在簡單解決方案無法滿足需求時(shí)才添加多步驟智能體系統(tǒng)。
在實(shí)施代理時(shí),我們努力遵循三項(xiàng)核心原則:
- 保持簡單性在你的代理設(shè)計(jì)中。
- 通過明確展示智能體的規(guī)劃步驟來優(yōu)先考慮透明度。
- 通過全面的工具**留檔和測試**,精心打造您的代理計(jì)算機(jī)接口(ACI)。
框架可以幫助您快速上手,但在進(jìn)入生產(chǎn)階段時(shí),不要猶豫減少抽象層,使用基本組件進(jìn)行構(gòu)建。遵循這些原則,您可以創(chuàng)建不僅強(qiáng)大,而且可靠、可維護(hù),并受用戶信任的代理。
致謝
作者:Erik Schluntz和Barry Zhang。本作品借鑒了我們在Anthropic構(gòu)建智能體的經(jīng)驗(yàn),以及客戶分享的寶貴見解,對此我們深表感激。
附錄1:實(shí)踐中的代理
我們與客戶的合作揭示了AI智能體的兩個(gè)特別有前景的應(yīng)用,它們展示了上述模式的實(shí)際價(jià)值。這兩個(gè)應(yīng)用都說明了智能體如何為那些既需要對話又需要行動、有明確成功標(biāo)準(zhǔn)、能夠?qū)崿F(xiàn)反饋循環(huán)并融入有意義的人工監(jiān)督的任務(wù)增加最大價(jià)值。
A. 客戶支持
客戶支持通過工具集成將熟悉的聊天機(jī)器人界面與增強(qiáng)功能相結(jié)合。這對于更開放式的智能體來說是自然的適配,原因如下:
- 支持交互自然地遵循對話流程,同時(shí)需要訪問外部信息和操作;
- 可以集成工具來提取客戶數(shù)據(jù)、訂單歷史記錄和知識庫文章;
- 諸如退款或更新票務(wù)等操作可以通過編程方式處理;以及
- 成功可以通過用戶定義的分辨率清晰地衡量。
多家公司已通過基于使用量的定價(jià)模式證明了這種方法的可行性,該模式僅對成功解決的問題收費(fèi),顯示出對其代理有效性的信心。
B. 編碼代理
軟件開發(fā)領(lǐng)域已展現(xiàn)出大語言模型(LLM)功能的巨大潛力,其能力已從代碼補(bǔ)全發(fā)展到自主解決問題。智能體尤其有效,原因如下:
- 代碼解決方案可通過自動化測試進(jìn)行驗(yàn)證;
- 智能體可以利用測試結(jié)果作為反饋來迭代解決方案;
- 問題空間定義明確且結(jié)構(gòu)清晰;并且
- 輸出質(zhì)量可以客觀衡量。
在我們自己的實(shí)現(xiàn)中,智能體現(xiàn)在僅根據(jù)拉取請求描述就能解決SWE-bench Verified基準(zhǔn)測試中的真實(shí)GitHub問題。然而,雖然自動化測試有助于驗(yàn)證功能,但人工審查對于確保解決方案符合更廣泛的系統(tǒng)要求仍然至關(guān)重要。
無論你正在構(gòu)建哪種智能體系統(tǒng),工具都可能是你的智能體的重要組成部分。工具通過在我們的 API 中指定其確切結(jié)構(gòu)和定義,使 Claude 能夠與外部服務(wù)和 API 進(jìn)行交互。當(dāng) Claude 做出響應(yīng)時(shí),如果它計(jì)劃調(diào)用工具,將在 API 響應(yīng)中包含一個(gè)工具使用塊。工具定義和規(guī)范應(yīng)與你的整體提示一樣受到提示工程的重視。在這個(gè)簡短的附錄中,我們將介紹如何對工具進(jìn)行提示工程。
通常有多種方式來指定同一操作。例如,你可以通過編寫差異(diff)或重寫整個(gè)文件來指定文件編輯。對于結(jié)構(gòu)化輸出,你可以在 Markdown 或 JSON 中返回代碼。在軟件工程中,諸如此類的差異只是表面上的,可以無損地從一種形式轉(zhuǎn)換為另一種形式。然而,某些格式對大語言模型(LLM)來說比其他格式更難編寫。編寫差異(diff)需要在編寫新代碼之前知道塊頭中有多少行正在更改。在 JSON 中(與 Markdown 相比)編寫代碼需要對換行符和引號進(jìn)行額外的轉(zhuǎn)義。
我們關(guān)于確定工具格式的建議如下:
- 在模型陷入困境之前,給它足夠的標(biāo)記來“思考”。
- 保持格式與模型在互聯(lián)網(wǎng)文本中自然看到的格式相近。
- 確保沒有格式化“開銷”,比如不必精確統(tǒng)計(jì)數(shù)千行代碼,也不必對其寫入的任何代碼進(jìn)行字符串轉(zhuǎn)義。
一條經(jīng)驗(yàn)法則是,思考在人機(jī)交互(HCI)上投入了多少精力,然后計(jì)劃在創(chuàng)建良好的代理-計(jì)算機(jī)交互(ACI)上投入同樣多的精力。以下是關(guān)于如何做到這一點(diǎn)的一些想法:
- 設(shè)身處地站在模型的角度思考。根據(jù)描述和參數(shù),是否能一目了然地知道如何使用這個(gè)工具,還是需要仔細(xì)思考?如果是后者,那么對于模型來說可能也是如此。一個(gè)好的工具定義通常會包含示例用法、邊界情況、輸入格式要求,以及與其他工具的明確界限。
- 如何更改參數(shù)名稱或描述,使事情更加清晰明了?不妨將其視為為團(tuán)隊(duì)中的初級開發(fā)人員編寫出色的文檔字符串。在使用許多相似工具時(shí),這一點(diǎn)尤為重要。
- 測試模型如何使用您的工具:在我們的工作臺中運(yùn)行許多示例輸入,查看模型會犯哪些錯(cuò)誤,然后進(jìn)行迭代。
- 防錯(cuò)你的工具。更改參數(shù),使錯(cuò)誤更難發(fā)生。
在為SWE-bench構(gòu)建我們的智能體時(shí),實(shí)際上我們花在優(yōu)化工具上的時(shí)間比優(yōu)化整體提示的時(shí)間更多。例如,我們發(fā)現(xiàn),在智能體移出根目錄后,模型在使用相對文件路徑的工具時(shí)會出錯(cuò)。為了解決這個(gè)問題,我們將工具改為始終要求使用絕對文件路徑,并且發(fā)現(xiàn)模型使用這種方法時(shí)毫無瑕疵。
原文鏈接:https://www.anthropic.com/engineering/desktop-extensions
本文由 @yan 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)
- 目前還沒評論,等你發(fā)揮!