Anthropic預(yù)測:2025是智能體系統(tǒng)年!年終總結(jié)分享最佳實踐
模型到應(yīng)用之間的距離,就是燒錢與搞錢之間的距離。
這條路上,Agent已經(jīng)身經(jīng)百戰(zhàn),萬事俱備。
在這個2024的結(jié)尾,Anthropic開發(fā)者關(guān)系主管Alex Albert表示:2025年將是智能體系統(tǒng)之年!
「各個部分正在就位,是時候開始考慮構(gòu)建這些系統(tǒng)了?!?/span>
過去的一年里,Anthropic與數(shù)十個團隊合作,構(gòu)建了跨行業(yè)的大語言模型智能體系統(tǒng)。
實戰(zhàn)表明,最成功的實現(xiàn)方式并不是使用復(fù)雜的框架或?qū)S脦?,而是?yīng)用簡單的可組合模式。
根據(jù)與客戶合作的經(jīng)驗,Anthropic在年末總結(jié)的博文中分享了構(gòu)建有效智能體系統(tǒng)的實用建議。
Agent系統(tǒng)最佳實踐
智能體(Agent)可以有多種定義方式,比如將其視為完全自主的系統(tǒng),可以在較長時間內(nèi)獨立運行,并使用各種工具完成復(fù)雜的任務(wù)。
這聽起來很像另一個名詞:工作流,但兩者之間有著重要的架構(gòu)區(qū)別:
工作流是通過預(yù)定義的代碼路徑來調(diào)用LLM和工具的系統(tǒng);
而智能體則是LLM動態(tài)指導(dǎo)自己的流程和使用工具,控制完成任務(wù)方式的系統(tǒng)。
那么,什么時候使用智能體?什么時候使用工作流?
一個原則是:找到盡可能簡單的解決方案,并且僅在需要時增加復(fù)雜性。
智能體系統(tǒng)通常會以延遲和成本為代價來獲得更好的任務(wù)性能,開發(fā)者應(yīng)當(dāng)根據(jù)實際情況權(quán)衡,是否真的需要構(gòu)建智能體系統(tǒng)。
當(dāng)需要更高的復(fù)雜性時,工作流為定義明確的任務(wù)提供可預(yù)測性和一致性;當(dāng)需要大規(guī)模的靈活性和模型驅(qū)動的決策時,智能體是更好的選擇。
對于許多應(yīng)用程序來說,使用檢索和上下文來優(yōu)化單個LLM調(diào)用通常就足夠了。
何時使用框架
有許多現(xiàn)成的框架可以幫助構(gòu)建智能體系統(tǒng),比如:
LangChain的LangGraph;
Amazon Bedrock的AI Agent框架
Rivet,拖放式GUI LLM工作流構(gòu)建器;
Vellum,用于構(gòu)建和測試復(fù)雜工作流的GUI工具
框架簡化了標(biāo)準(zhǔn)的低級任務(wù)(如調(diào)用LLM、定義和解析工具、將調(diào)用整合在一起),但通常會創(chuàng)建額外的抽象層。
這可能會掩蓋底層提示和響應(yīng),使系統(tǒng)更難調(diào)試。但開發(fā)者有時會禁不住框架的誘惑而選擇增加系統(tǒng)的復(fù)雜性。
Anthropic建議開發(fā)人員盡量直接使用LLM(許多功能只需幾行代碼就能搞定),如果確實需要使用框架,請確保先了解底層代碼,——對框架實現(xiàn)原理的錯誤假設(shè)是錯誤的常見來源。
從0開始構(gòu)建系統(tǒng)
生產(chǎn)中的常見模式,是從基礎(chǔ)模塊開始,逐步增加復(fù)雜性,從簡單的組合工作流到自主智能體系統(tǒng)。
基礎(chǔ)模塊:增強型LLM
智能體系統(tǒng)的基本構(gòu)建塊是LLM,并通過檢索、使用工具和記憶等功能進行了增強。
增強型LLM可以主動使用這些功能,生成自己的搜索查詢、選擇適當(dāng)?shù)墓ぞ卟⒋_定要保留的信息。
Anthropic建議在實施中關(guān)注兩個關(guān)鍵方面:根據(jù)特定應(yīng)用定制這些功能,以及確保為LLM提供簡單且文檔健全的接口。
比如Anthropic最近發(fā)布的Model Context Protocol,允許開發(fā)人員通過簡單的客戶端實現(xiàn)與各種第三方工具進行集成。
提示鏈(Prompt chaining)
提示鏈將任務(wù)分解為一系列步驟,每個LLM調(diào)用都會處理前一個調(diào)用的輸出??梢栽谌魏沃虚g步驟中添加編程檢查,以確保流程處于正軌。
這種工作流非常適合可以輕松將任務(wù)分解為固定子任務(wù)的情況(每個LLM負責(zé)一個簡單的子任務(wù))。
提示鏈應(yīng)用場景:
生成市場營銷策略,然后將其翻譯成不同的語言。
編寫文檔的大綱,檢查大綱是否滿足特定條件,然后根據(jù)大綱編寫文檔。
路由(Routing)
路由對輸入進行分類并將其定向到專門的后續(xù)任務(wù),這個過程可以分離關(guān)注點,并構(gòu)建更專業(yè)的提示。否則,針對一種輸入進行優(yōu)化可能會損害其他輸入的性能。
路由適用于復(fù)雜任務(wù),通過LLM或更傳統(tǒng)的分類算法準(zhǔn)確處理分類,對于不同類別的子任務(wù),可以更好地單獨處理。
路由應(yīng)用場景:
將不同類型的客戶服務(wù)查詢(一般問題、退款請求、技術(shù)支持)引導(dǎo)到不同的下游流程、提示和工具中。
將簡單常見的問題路由到較小的模型(如Claude 3.5 Haiku),將困難的問題路由到功能更強大的模型(如Claude 3.5 Sonnet),以優(yōu)化成本和速度。
并行化(Parallelization)
LLM有時并行處理一項任務(wù),并以編程方式聚合其輸出。并行化工作流有兩種形式:
分段(Sectioning):將任務(wù)分解可以為并行運行的獨立子任務(wù)。
投票(Voting):多次運行同一任務(wù),獲得不同的輸出。
當(dāng)已劃分的子任務(wù)可以并行執(zhí)行,或者需要多次推理以獲得更高置信度的結(jié)果時,并行化非常有效。
對于需要考慮多個因素的復(fù)雜任務(wù),讓單獨的LLM負責(zé)一個特定的方面,通常會提高系統(tǒng)的表現(xiàn)力。
并行化的應(yīng)用場景:
一個模型實例處理用戶查詢,另一個模型實例篩選用戶查詢是否存在不適當(dāng)?shù)膬?nèi)容。這往往比使用相同的LLM同時處理安全校驗和核心響應(yīng)的性能要好。
自動評估LLM的性能:每個LLM調(diào)用都會評估模型在給定提示符下性能的不同方面。
檢查一段代碼是否存在漏洞,如果發(fā)現(xiàn)問題,則觸發(fā)不同的提示來檢查并標(biāo)記代碼。
評估給定的內(nèi)容是否合適:多個提示用來評估不同的方面或使用不同的投票閾值來平衡誤報和漏報。
Orchestrator-workers
在orchestrator-workers工作流中,中央LLM動態(tài)分解任務(wù),將它們委托給worker LLM,并綜合其結(jié)果。
這種工作流非常適合于無法預(yù)測所需子任務(wù)的復(fù)雜任務(wù)(比如編碼中,需要更改的文件數(shù)以及每個文件中更改的內(nèi)容取決于實際情況)。
orchestrator-workers與并行化在拓撲上相似,主要區(qū)別在于子任務(wù)不是預(yù)定義的,而是由orchestrator根據(jù)特定輸入確定的。
應(yīng)用場景:
每次對多個文件進行復(fù)雜更改的編碼任務(wù)。
從多個來源收集和分析相關(guān)信息的搜索任務(wù)。
Evaluator-optimizer
在evaluator-optimizer工作流中,一個LLM調(diào)用生成響應(yīng),另一個LLM在循環(huán)中提供評估和反饋。
當(dāng)開發(fā)者有明確的評估標(biāo)準(zhǔn),且迭代過程能提供用于比較的值時,evaluator-optimizer工作流特別有效。
evaluator-optimizer應(yīng)用場景:
文學(xué)翻譯中,譯者LLM最初可能無法捕捉到一些細節(jié),但評估者LLM可以提供有用的批評反饋。
復(fù)雜的搜索任務(wù)中,需要多輪搜索和分析以收集全面的信息,評估者LLM決定是否需要進一步搜索。
總結(jié)
智能體在生產(chǎn)中幫助理解復(fù)雜的輸入、參與推理和規(guī)劃、可靠地使用工具以及從錯誤中恢復(fù)。
執(zhí)行過程中,智能體在每個步驟從環(huán)境中獲取「基本事實」以評估其進度,也可以在檢查點或遇到障礙時暫停以獲得人工反饋。
智能體用于難以預(yù)測所需步驟數(shù),以及無法對固定路徑進行硬編碼的開放式問題。LLM可能會運行多個回合,需要用戶對其決策有一定程度的信任。
智能體的自主性意味著更高的成本,并且可能會使錯誤復(fù)雜化。作者建議在沙盒環(huán)境中進行廣泛測試,并使用適當(dāng)?shù)姆雷o機制。
LLM的成功應(yīng)用并不是構(gòu)建最復(fù)雜的系統(tǒng),而是根據(jù)需求構(gòu)建正確的系統(tǒng)。在應(yīng)用智能體時,盡量遵循三個核心原則:
保持智能體設(shè)計的簡單性;
明確顯示智能體的規(guī)劃步驟;
提供全面的工具文檔和測試,作為智能體和計算機之間的接口
框架可以幫助快速入門,但面對生產(chǎn)環(huán)境時,不要猶豫,減少抽象層并使用基本組件進行構(gòu)建。