再帰的言語モデル(RLM)は、大規模言語モデル(LLM)が長いコンテキストを処理する際に発生する「コンテキスト腐敗」の問題に対処する方法です。エージェントがコンテキストを蓄積するにつれてパフォーマンスが低下します。RLMでは、モデルがREPL環境でコードを実行し、サブエージェントをディスパッチして入力コンテキストの断片に対して再帰的に処理します。例えば、1万件の営業通話記録から平均取引額を求める場合、RLMスタイルのエージェントはオーケストレーションとカウントをコード内で行い、モデルの一時的なコンテキストウィンドウに依存しません。
Deep Agentsは、動的サブエージェントと軽量コードインタプリタを通じてRLMをサポートするようになりました。エージェントはスクリプトを書き、コードインタプリタがそれを実行してサブエージェントをディスパッチします。例えば、300ページのドキュメントを処理する場合、Promise.all(pages.map(page => task({...})))パターンを使用します。論文で提案されたRLMとは異なり、Deep Agentsの実装は「再帰的エージェント(RA)」に近く、サブエージェントが独自のツールとコンテキストを持ちますが、論文のアイデアが基盤となっています。
プログラムによるオーケストレーションには2つの主要な利点があります。確定的なカバレッジ(コードがすべてのバッチを確実に処理する)と、カスタムオーケストレーション(パイプラインがタスクに応じて分岐、並列、順次など任意の形状を取れる)です。
OOLONGベンチマークで評価した結果、64kトークンでは通常のエージェントとRLMエージェントは同程度(0.58対0.67)でしたが、128kトークンでは通常エージェントが0.44に低下したのに対し、RLMエージェントは0.79を維持しました。通常エージェントは長いコンテキストでしばしば回答を放棄するのに対し、RLMエージェントは安定していました。
Deep Agentsの動的サブエージェントを使用するには、QuickJSミドルウェアをインストールし、CodeInterpreterMiddlewareをcreate_deep_agentに渡します。プロンプトに「workflow」という単語を含めると動的サブエージェントがトリガーされます。例えば、ファイルをレビューしてリスクを要約するワークフローを実行します。また、dcodeターミナルコーディングエージェントにはコードインタプリタが組み込まれており、セットアップ不要で試せます。
RLMはルートモデルに自身でループを書く力を与え、コンテキストとタスクの形状に合わせて整理します。これはエージェントループや検証ループなどの概念と一致します。動的サブエージェントとRLMワークフローにより、エージェントが自身のコンテキストとループを自律的に整理できることに期待しています。
さらに読むには、元の論文、Alex Zhangのブログ、Deep Agentsのビデオなどがあります。エージェントの実際の動作を詳しく知るには、LangSmithプラットフォームをお試しください。