在Deep Agents中引入動態子代理
動態子代理允許AI智能體使用代碼而非工具調用來大規模編排工作。瞭解Deep Agents中的程序化編排如何保證覆蓋範圍、處理扇出,並通過常見編排模式和實時跟蹤實現可靠的多步驟複雜智能體管道。
隨着AI智能體承擔越來越複雜的任務,它們在規模化的可靠執行和上下文管理方面面臨挑戰。Deep Agents引入的動態子代理(Dynamic Subagents)通過一種全新的方式解決了這些問題:智能體不再通過通用的工具調用逐個啓動子任務,而是編寫一段簡短的腳本來驅動子代理的執行。這種方式利用了模型在編寫代碼(如循環、分支、併發等)方面的優勢,生成適合任務的編排邏輯。
傳統的子代理調用方式在規模較小時工作良好,但當需要同時啓動數百個子代理,或者編排邏輯涉及條件分支和多階段處理時,就會失效。動態子代理通過程序化編排解決了這一難題:智能體編寫一個簡短的腳本,在輕量級解釋器中運行,從而實現對子代理的靈活調度。例如,在處理一份300頁的文檔時,智能體不再需要調用300次工具,而是編寫一個循環,使用Promise.all並行處理所有頁面。這種方法的優勢在於:第一,確定性覆蓋——腳本保證了所有項都會被處理,而不會像無結構方法那樣只處理部分就停止;第二,可靠複雜編排——將編排邏輯寫成代碼,比讓模型通過一系列工具調用來重現更加可靠。
要使用動態子代理,需要兩個組件:用於分派工作的子代理和代碼解釋器。Deep Agents自帶一個基於QuickJS的可選解釋器。用户只需安裝相應的中間件包,並在創建智能體時傳入CodeInterpreterMiddleware即可。此外,Deep Agents內置了一個通用子代理,用户也可以配置自定義子代理,通過名稱、描述和系統提示來指定不同角色。要觸發動態子代理,只需在提示中包含“workflow”一詞。例如,要求智能體“運行一個工作流,檢查src/routes/中的每個文件並總結主要風險”。最快的嘗試方式是使用dcode,這是基於Deep Agent構建的終端編碼智能體,默認啓用了代碼解釋器,開箱即支持動態子代理。
動態子代理的工作原理是:智能體獲得一個評估工具,它編寫JavaScript代碼在解釋器中安全執行。解釋器暴露了一個內置的task()全局函數,用於從代碼中分派子代理。task()接受描述、子代理類型和可選的響應模式,返回結構化結果。模型根據任務編寫不同的代碼(循環、分支、Promise.all等),解釋器確定性地執行。
文章還介紹了六種常見的編排模式,這些模式並非固定功能,而是根據任務自然形成的結構:
- 分類執行:先對項目進行分類,然後由專門的子代理處理每一類。適用於混合輸入需要不同處理的情況,如支持工單分類。
- 扇出合成:並行執行相同類型的任務,然後合併結果。適用於批量文檔分析或代碼審查。
- 對抗驗證:兩輪驗證,第一輪產生髮現,第二輪獨立驗證每個發現,僅保留一致同意的結果。適用於誤報代價高的安全審計。
- 生成過濾:多個子代理獨立生成解決方案,然後比較評分,保留最佳。適用於架構方案或內容變體。
- 錦標賽式:兩兩比較,勝者晉級,直到選出冠軍。適用於主觀標準下的優化。
- 循環直至完成:重複發現循環,去重,直到沒有新結果。適用於範圍未知的全面搜索。
動態子代理是遞歸語言模型(Recursive Language Model)理念的簡單實現:智能體編寫代碼,代碼調用更多智能體。它不受上下文窗口的限制,也不被固定工作流所束縛。智能體可以自主分解問題並重組結果。隨着模型代碼編寫能力的提升,這種方法的潛力將不斷增長。Deep Agents今天就將動態子代理交到了用户手中,用户可以通過添加代碼解釋器來開始使用,或者直接使用dcode體驗其開箱即用的能力。