長期実行エージェントのためのコンテキストプルーニングパイプラインの構築
この記事では、長期実行AIエージェントのためのコンテキストプルーニングパイプラインを実装し、セマンティック類似性を使用して対話メモリを効率的に管理する方法を説明します。センテンストランスフォーマー埋め込みモデルの使用、類似度の計算、プルーニングされたコンテキストウィンドウの構築をカバーしています。
大規模言語モデル(LLM)上に構築された現代のAIエージェントは、継続的に実行されるように設計されています。その結果、会話履歴は無限に増え続けます。この履歴全体をLLMのコンテキストウィンドウとして渡すことは、法外なトークンコスト、レイテンシのボトルネック、そして最終的な推論の低下を招く完璧なレシピです。コンテキストプルーニングパイプラインを構築することで、最近の会話メモリを動的に管理することでこの問題に対処できます。この記事では、長期実行エージェントのためのコンテキストプルーニングパイプラインを実装するための基本原則を概説します。有料APIではなく、オープンソースの埋め込みモデルに基づいた完全にアクセス可能で無料で実行できるローカルソリューションを使用しますが、より効率的なソリューションが必要な場合は有料APIに置き換えることもできます。
提案されるメモリ戦略
エージェントにおける古典的なメモリ戦略はスライディングウィンドウに依存しており、古い情報は後方に落ちると忘れられます。これには潜在的に重要な詳細も含まれます。このアプローチを超えて、LLMにコンテキストとして正確に必要なものを提供する、選択的でよりスマートなパイプラインを構築することが可能です。本質的に、コンテキストは次の基本要素にプルーニングできます:現在のプロンプト(ユーザーのリクエストまたは質問を含む)、最新のターン(直前の入力-応答の交換、会話の継続性を維持するために重要)、および類似度スコアに基づいて計算されたTop-Kの意味的に関連するマッチ(ベクトル埋め込みを通じて現在のプロンプトに密接に関連する過去のターン)。会話履歴の中でこれら3つの要素の範囲外にあるものはすべて、アクティブなプロンプトのコンテキストから破棄され、計算とメモリを節約します。
シミュレーションベースの実装
私たちのサンプル実装は、上記の戦略の適用をシミュレートし、ステップバイステップでコンテキストプルーニングウィンドウを構築します。センテンストランスフォーマーモデルを使用して、模擬された会話履歴とともに長期実行パイプラインをシミュレートします。最初に必要なインポートを行い、事前学習済みの埋め込みモデル(具体的にはsentence_transformersライブラリのall-MiniLM-L6-v2)をロードして初期化します。このモデルは、生のテキストをセマンティック特性を捉えた埋め込みベクトルに変換するように訓練されています。また、ユーザーとエージェントのインタラクションを含む単純な模擬エージェント履歴を作成します(実際の設定では、これはデータベースから取得されます)。コンテキストプルーニングパイプラインのコアロジックは、現在のプロンプト、完全なインタラクション履歴、および取得する意味的に関連する過去のターン数kを受け取るprune_context()関数にカプセル化されています。この関数は、会話履歴が短すぎる場合(ベースケース)と実際のセマンティックプルーニングパイプラインが行われる一般ケースを処理します。一般ケースでは、過去のターンの埋め込み、現在のプロンプト埋め込みとのコサイン類似度の計算、類似度の高い順にソート、Top-Kの過去ターンの選択、そして最終的なプルーニングされたコンテキストのアセンブリが行われます。例として、ユーザーが「Can we go back to the fleet math?」と尋ねた場合、プルーニングされたコンテキストにはフリートルート効率に関連する過去のターンが含まれます。
まとめ
この記事では、模擬されたエージェント会話履歴に基づいて、セマンティック類似性を利用して現在のプロンプトに最も関連する会話の部分を選択するコンテキストプルーニングパイプラインを実装する方法を示しました。これは長期実行エージェントにとって重要なテクニックであり、メモリ使用量と計算コストを削減し、全体的な効率を向上させるのに役立ちます。