如何在Deep Agents中使用遞歸語言模型
遞歸語言模型(RLM)通過讓代理編寫代碼將子代理分派到上下文塊上來解決上下文腐爛問題。Deep Agents現在通過動態子代理和輕量級代碼解釋器支持RLM,允許代理以編程方式對大型輸入執行grep、map和reduce操作。在OOLONG基準測試中,RLM在長上下文任務上優於逐輪代理。
遞歸語言模型(RLM)是解決大型語言模型在處理長上下文時出現的“上下文腐爛”問題的一種方法。隨着代理積累越來越多的上下文,其性能會下降。RLM通過讓模型在REPL環境中運行代碼來調度子代理,並遞歸處理輸入上下文的碎片,而不是依賴單次推理或丟失信息的摘要。例如,一個代理需要從10,000個銷售通話記錄中找出平均交易規模,使用RLM風格,代理將編排和計數放在代碼中,而不是模型的臨時上下文窗口中。
Deep Agents已實現對RLM的支持,通過動態子代理和輕量級代碼解釋器。代理可以編寫腳本,代碼解釋器執行它以分派子代理。例如,處理300頁文檔時,可以使用Promise.all(pages.map(page => task({...})))模式。與論文中的RLM不同,Deep Agents的實現更接近“遞歸代理”(RA),因為子代理擁有自己的工具和上下文。但論文的啓發至關重要。
使用程序化編排有兩個主要優勢:確定性覆蓋(代碼保證覆蓋所有批次,而不是依賴模型判斷)和定製編排(管道可以適應任何形狀的任務,包括分支、並行或順序,而不受模型逐輪能力的限制)。
為了測試,我們在OOLONG基準上進行了評估,該基準要求從大量表格數據中聚合信息。我們使用AgNews數據集,代理需將標題分類並回答計數、用户和時間相關的問題。在64k token長度下,普通代理和RLM代理表現相近(0.58 vs 0.67),但到了128k token,普通代理得分降至0.44,而RLM代理達到0.79。普通代理在長上下文下經常放棄回答,而RLM代理保持穩定。
開始使用Deep Agents的動態子代理需要安裝QuickJS中間件並將CodeInterpreterMiddleware傳遞給create_deep_agent。觸發動態子代理的方法是提示中包含“workflow”一詞。例如,運行一個工作流來審查文件並總結風險。此外,dcode終端編碼代理內置了代碼解釋器,無需設置即可試用。
RLM讓根模型能夠自行編寫循環來組織上下文。這種思維方式與代理循環、驗證循環等概念一致。我們很高興看到動態子代理和RLM工作流如何讓代理自主組織上下文和循環。
進一步閲讀包括原始論文、Alex Zhang的博客、Deep Agents視頻等。更有興趣瞭解代理實際行為的開發者可以嘗試LangSmith平台。