Context Rot
長らく感じていた「LLMエージェントとの長いセッションで途中から精度がガクッと落ちる現象」があります。
はじめこの言葉を目にしたのはAnthropicの記事でした。
一般にはコンテキストウィンドウの上限に近づいて情報が溢れることが原因と思われがちですが、最近の研究でそうではない可能性が示唆されています。
矛盾の蓄積
Contradiction Metabolism for LLMs で180ターンの会話で事実を教え込んだあとのリコール精度を3条件で比較しています。
| 条件 | 精度 |
|---|---|
| 通常会話(矛盾なし) | 56.7% |
| 矛盾あり(metabolism OFF) | 21.1% |
| 矛盾あり(metabolism ON) | 73.3% |
矛盾を含む会話では精度が21.1%まで崩壊します。一方、矛盾を外部で解決する仕組み(metabolismというらしいです)を入れると73.3%まで回復し、矛盾なしの56.7%すら上回ります。
フロンティアモデルでも傾向は同じで、GPT-4oは矛盾下で100%から0%に落ち、Geminiの100万トークンウィンドウでも47.8pp低下します。コンテキスト長は関係なく、矛盾を除去すれば長さに関係なく性能は回復するということのようです。
なぜ矛盾が致命的なのか
同著者の Structural Collapse as Information Loss で、矛盾がなぜここまで効くのかが数理的に示されています。
生存ポテンシャルの式: S = μ * e^(-δ*k)
δは情報損失(矛盾による構造的な制約の劣化)、kは制約の数です。e^つまり指数関数的に減衰するので矛盾が少数でもあれば壊滅的な影響を与えるということのようです。
さらに興味深いのは、RLHFのアラインメント層がこの問題を悪化させる側面があることです。フロンティアモデルはRLHFにより「ユーザーの訂正には従う」ように学習しているため、矛盾する情報を正当なユーザー訂正と解釈して受け入れてしまいます。能力の低いモデルのほうがむしろ矛盾を拒否する場合もあるようです。
補足:RLHFアラインメント層について
RLHF(Reinforcement Learning from Human Feedback)のアラインメント層とは、大規模言語モデルの学習パイプラインにおいて、人間のフィードバックを用いた強化学習によってモデルの出力を人間の意図や好みに沿わせる(align する)ための層・プロセスです。
具体的には以下の流れで適用されます
- 事前学習済みモデルの出力に対して、人間の評価者が「良い応答 / 悪い応答」をランク付けする
- そのランキングデータから報酬モデル(Reward Model)を学習する
- 報酬モデルを使い、PPO等の強化学習アルゴリズムでモデルを微調整する
/compactはなぜ悪手になりうるか
Claude Codeの/compactはコンテキストを要約して圧縮する機能ですが、Context Rotの本質が矛盾の蓄積なら、この操作には構造的な問題を内包しているように思います。
- 矛盾の排除を保証しません。要約は情報を圧縮しますが、どの情報が矛盾しているか(あるいは矛盾を取り除くべきか)の判定は含みません。矛盾した情報が要約に残る可能性があります
- どれを取り除くべきかの意思決定が自律的には難しいです。会話中に「Aが正しい」→「やっぱりBが正しい」という流れがあったとき、最終的にBが正しいという判断は文脈依存で、機械的な要約では正確に処理できないか文脈の抜け落ちによる意味的な変質が起こりえます
- 要約によって矛盾の痕跡が曖昧になり、かえって解決困難になります。元の会話なら時系列で判断できた矛盾が要約により揺らぐ可能性があります。
/compactは情報量を減らしますが矛盾密度はむしろ上がりうるのではと考えています。
手動コンパクト
最近よくやっている手動コンパクト的な運用があります。
やっていることはopusplanに近いですが、
- 任意のセッションで一区切りついたらサマリを書かせる
- 必要であればサマリを微調整する(不要な情報を削る、矛盾を整理する)
/clear- 仕上げたサマリを投げて続きの作業をさせたり、別作業に派生させたり
これならセッションを長く続けても精度が落ちにくい体感がありましたが、delta-zeroの研究結果と照らすと理にかなっているように思います。
手動コンパクトが効く理由は3つあると考えています。
- 1つ目は、人間が矛盾やノイズを意識的に排除できることです。「途中でAからBに方針転換した」という経緯とその背景を正確に理解しているのは人間なので、サマリから古い方針Aを除外したり文脈を微調整する判断ができます。
- 2つ目は、
/clearで矛盾を含むコンテキストが完全にリセットされることです。 - 3つ目は、サマリが「知識アンカー」として機能することです。delta-zeroの実験では矛盾解決済みのペアがリトリーバルアンカーとして働き、矛盾なしのベースラインを上回る精度を示しました。手動で整理されたサマリも同様に、クリーンで構造化された知識のアンカーとして機能しているのだと思われます。
まとめ:現実解
- コンテキスト長ではなく矛盾の有無を気にします。長いセッションでも矛盾がなければ問題ありません
- 方針転換や試行錯誤が多いセッションは早めに区切ります。これらは矛盾の温床になります
-
/compactより/clear+ サマリ投入を選びます。矛盾の完全排除が保証されます - サマリは人間がレビューします。情報の枝刈り・矛盾の判定はモデルよりも人間のほうが正確です
-
/btwや/forkも活用し、グラフ管理(session history管理)を意識します
おわり
人間でも会話中に「さっきAって言ったけどやっぱりB」が何回も繰り返されたら混乱します。LLMの場合はRLHFのせいで「訂正に従順すぎる」ぶん、人間より脆弱かもしれません。
手動コンパクトは面倒ですが、矛盾を人間が判定して排除するという点でContext Rotへの対処としては理にかなっているように思います。delta-zeroのmetabolismのような自動化された矛盾解決が一般的になるまでは、こういった運用にも一定の効果はあるのではないでしょうか。
参考
- karesansui-u/delta-zero – Contradiction Metabolism for LLMs の実装
- Contradiction Metabolism for LLMs: Preliminary Evidence that Context Rot is a Knowledge Integrity Problem – Sunagawa, A. (2026)
- Structural Collapse as Information Loss: The Exponential Decay Mechanism under Accumulating Constraints – Sunagawa, A. (2026)