さようなら、コンテキストに感謝を込めて
本記事では、LLMがコンテキストの中間部分を無視する「U字型」の問題について解説します。関連研究を紹介し、実際の開発経験に基づいた5つの緩和テクニックを提案します。
大規模言語モデル(LLM)が長いコンテキストを処理する際、「U字型」と呼ばれる顕著な問題が存在します。モデルはコンテキストの先頭と末尾の情報を最もよく利用し、中間部分の情報は無視しがちです。この現象は、スタンフォード大学の研究者Nelson Liu氏らの論文「Lost in the Middle: How Language Models Use Long Contexts」で初めて体系的に説明され、その後の研究で、U字型問題は特定のモデルの癖ではなく、Transformerアーキテクチャに内在する特性であり、ランダム初期化されたモデルでも見られることが示されました。
本記事の著者は、オープンソースのコード品質エンジニアリングスキル「Quality Playbook」の開発中にこの問題に直面しました。バグ報告の生成フェーズで、必要な指示とデータがコンテキスト内に明示的に存在するにもかかわらず、モデルは空のテンプレートファイルを生成してしまいました。分析の結果、関連情報がちょうどコンテキストの中間部分に位置していたため、これがU字型問題の典型的な症状であることが判明しました。
研究によると、U字型問題の根本原因はTransformer構造における2つのバイアスにあります。プライマシーバイアスはモデルがコンテキストの先頭を重視させる一方、リセンシーバイアスは末尾を重視させます。これらの力が釣り合う中間領域で情報が弱められます。2025年と2026年の論文は、U字型がTransformerの幾何学的特性であることを数学的に証明し、データ追加や微調整による除去が困難であることを示唆しています。
大きなコンテキストウィンドウ(100万トークン以上)は、単一ファクトの検索能力(「針山の中の針」テストなど)を向上させましたが、長コンテキストエージェントの作業を信頼できるものにはしていません。むしろ、ウィンドウが大きいほど、情報が失われる中間領域が広がります。そのため、開発者はU字型問題に積極的に対処する必要があります。
著者は5つの実用的なテクニックをまとめています。
- コンテキストを厳選し、蓄積しない: 定期的にコンテキストをクリアし、重要な情報だけを再読み込みする。Quality Playbookのリリース準備では、コンテキストブリーフを作成し、新しいセッションごとに最初からブリーフを読み込むことでモデルのパフォーマンスが大幅に改善されました。
- 重要な情報を端に配置する: U字型の特性を活用し、最も重要な指示やデータをコンテキストの先頭または最新の位置に置く。Claude Codeでは、--append-system-promptを使用してブリーフをシステムプロンプトとして設定し、モデルが常に注目するようにします。
- 短いセッションを長いセッションより優先する: 複数の短いセッションを実行し、各セッションはディスクから関連情報を読み込むことで、蓄積されたコンテキストへの依存を避けます。
- 重要なデータを外部化する: キーコンテンツをファイルに保存し、後のセッションで参照できるようにします。
- エージェントの出力を検証する: モデルが知っていると主張する内容を、実際のディスク上のファイルと比較して整合性を確認します。
結論として、U字型コンテキスト問題は一時的なバグではなく、LLMアーキテクチャに固有の特徴です。上記のテクニックを適用することで、現在利用可能なモデルでも問題を効果的に緩和し、エージェントの信頼性を高めることができます。