AI News HubLIVE
站内改写2 分鐘閱讀

如何構建自定義代理腳手架

本文介紹了使用LangChain的create_agent和中介軟體構建自定義代理腳手架的方法。代理由模型和腳手架組成,腳手架負責將模型連線到真實世界。透過中介軟體,可以在代理迴圈的各個階段插入自定義邏輯、工具、狀態管理等,從而實現高度定製化的代理。

構建有用的代理在很大程度上取決於定製化:將代理連線到正確的上下文、資料和環境以完成特定任務。從本質上看,代理是一個模型在迴圈中呼叫工具,直到完成任務並返回結果。你也可以將代理定義為:代理 = 模型 + 腳手架。腳手架是圍繞模型的框架,將模型連線到真實世界。一個代理的好壞取決於提供給模型的上下文,而腳手架的工作就是在每一步為模型提供正確的上下文。因此,要構建有用的代理,你需要一個擅長為給定任務傳遞正確上下文的腳手架。

create_agent是LangChain用於構建腳手架的原語。傳入模型、工具和系統提示,你就擁有了一個可工作的代理。像Deep Agents和Claude Agent SDK這樣的腳手架預裝了意見性的中介軟體堆疊:記憶、上下文管理、沙箱等。它們旨在讓你快速獲得一個生產就緒的代理,並且在大多數情況下表現良好。但許多代理需要比這些腳手架支援的更細粒度的定製:自定義提示、業務邏輯、護欄等。

create_Agent採用了不同的方法:它故意保持極簡。我們的理念與高度可配置的編碼代理腳手架Pi類似。create_agent僅實現核心代理迴圈,並將中介軟體作為定製化的原語公開。中介軟體在代理迴圈的每個步驟中掛接:模型呼叫前後、工具呼叫前後、代理啟動和關閉時。每個中介軟體處理一個關注點,並可以與其他中介軟體自由組合。

中介軟體允許你透過幾個通常協同工作的槓桿為代理新增能力:確定性邏輯、工具、自定義狀態和流處理器。確定性邏輯包括業務邏輯、策略執行、動態代理控制等,這些都不能也不應該放在提示中。工具方面,中介軟體可以處理工具的完整生命週期——設定、拆除、註冊——並給代理提供一套乾淨的工具。自定義狀態允許中介軟體在鉤子之間跟蹤狀態,例如維護計數器、標誌或其他在代理執行期間持續存在的值。流處理器可以攔截和轉換代理的輸出流——過濾事件、注入後設資料、將不同事件型別路由到不同消費者。

中介軟體的優點在於:它允許在代理迴圈的任何點進行定製,並將相關邏輯捆綁到可組合、可共享的程式碼單元中。LangChain為最常見的模式提供了預構建的中介軟體。任何針對你用例的定製都可以透過一個自定義中介軟體實現。由於每個中介軟體是隔離的,同一個中介軟體可以跨組織中的每個代理重用,從而新代理無需重新構建即可繼承經過實戰檢驗的行為。

腳手架的工作是在正確的時間為給定任務提供正確的上下文。下表將常見能力對映到支援這些能力的中介軟體。大多數生產代理最終會同時使用多種中介軟體,具體取決於代理的需求(是否長時間執行?任務有多複雜?代理的行為有多敏感?等):防止上下文溢位(SummarizationMiddleware, ContextEditingMiddleware)、訪問和更新記憶(FilesystemMiddleware, MemoryMiddleware, SkillsMiddleware)、在環境中執行操作(ShellToolMiddleware, FilesystemMiddleware, CodeInterpreterMiddleware)、委託任務(SubAgentMiddleware, AsyncSubAgentMiddleware, TodoListMiddleware)、處理暫時性故障(ToolRetryMiddleware, ModelRetryMiddleware, ModelFallbackMiddleware)、執行策略(PIIMiddleware, HumanInTheLoopMiddleware)、引導代理(HumanInTheLoopMiddleware)、控制成本(ModelCallLimitMiddleware, ToolCallLimitMiddleware, PromptCachingMiddleware)。

任務與腳手架的匹配度決定了你的腳手架與實際任務需求的契合程度:所需的上下文、將遇到的失敗、必須執行的策略、操作的環境。客服代理的腳手架與長時間執行的編碼代理的腳手架截然不同。我們在LangChain構建的每個代理,包括我們的GTM代理、非同步編碼代理和無程式碼代理構建器,都基於create_agent,並配有適合該代理使命的中介軟體堆疊。最好的代理不僅由強大的模型構建,還由緊密契合任務的腳手架構建。使用create_agent構建自定義腳手架是最簡單的方法。