AIエージェントにおけるコンテキスト圧縮の進化
LangChain
OpenRouter
AIエージェントはコンテキストを維持するためにメッセージ履歴に依存しますが、長いログは大規模言語モデル(LLM)のコンテキストウィンドウに負荷をかけ、パフォーマンスを低下させます。コンテキスト圧縮の進化は、単純な末尾の切り詰めから要約、先頭と末尾の保護、そして最終的には保存された履歴を作業用コンテキストから分離し、必要に応じて詳細を取得するツールへと移行します。
AIエージェントは、ユーザーと言語モデル(LLM)との間で交わされるメッセージのやり取りのサイクルであり、その過程でモデルはツールやMCPを呼び出すことができます。各やり取りは会話履歴に追加され、通常、その履歴全体が次のモデル呼び出しに送信されます。しかし、コンテキストウィンドウは大規模ではあるものの無限ではなく、履歴が巨大で構造が不十分な場合にはパフォーマンスが低下します。古典的な論文「Lost in the Middle」は、U字型の曲線を示しています。つまり、モデルは長い入力の最初と最後を、中間部分よりもよく利用するのです。この記事では、コンテキストを圧縮するアプローチの進化をたどります。LangChainのtrim_messagesによる単純な末尾の切り捨て(ローリングウィンドウ)、create_agentのSummarizationMiddlewareによる古いメッセージの要約ブロックへの変換、そしてHermes AgentやOpenRouterのミドルアウト圧縮に見られるような、最初のN件のメッセージと新しい末尾を保護しつつ中間を圧縮する方法までです。最新のアプローチでは、保存された履歴と作業用コンテキストを分離します。完全な履歴は外部(例えばファイル)に保持され、モデル呼び出しには新しい末尾と要約を含むビューが渡され、エージェントにはread_fileやgrepなどのツールが与えられ、完全な履歴から詳細を取得できるようにします。LangChainのDeep Agentsライブラリは、基本的なミドルウェアと名前が紛らわしく共有されているにもかかわらず、そのSummarizationMiddlewareでこれを実装しています。この進化は、コンテキストエンジニアリングというより広いトレンドの一部であり、エージェントが知っていること(完全な履歴、ツールの結果、スキル)と、次のモデル呼び出しに何を含めるかを区別するものです。
出典: Habr — хаб ИИ —
原文
