AIエージェント
コンパクションでAIが禁止事項を忘れる理由と防ぎ方
- コンパクション
- AIエージェント
- Governance Decay
- ConstraintRot
- 制約ピン留め
- Claude Code
- CLAUDE.md
- Cline
- Agent Framework
- 禁止事項
- 要約
- 違反率
- システムメッセージ
- アブレーション
- 帯域外
- プロンプト圧縮
- PreToolUse
- LangGraph
- LangMem
- AutoGen
- Auto Compact
- xRAG
目次
自律的に動くAIエージェントには、やってほしくないことを言葉で指示できる。たとえば「社外ドメイン宛のメール送信は禁止」のような、一行で引用できる明文のルールを渡す。この記事では、このルールを制約と呼ぶ。制約は指示として書いて渡せばよい。その一行がコンテキストに見えているあいだ、エージェントはおおむね指示どおりに動く。
問題は、その一行が会話の履歴の中に置いてあることだ。作業が長引くとやりとりが増え、履歴はモデルが一度に読める上限を超える。そこで走るのがコンパクションである。コンパクションは、履歴を短く圧縮して上限に収める操作だ。圧縮の仕方は実装によって違い、モデルに要約させる実装もあれば、直近のやりとりだけを残す実装もある。どの方式でも、履歴を縮めれば何かが落ちる。そして、何を残すかを選ぶのは、禁止事項を書いた運用者ではない。
コンパクションの前と後で、同じエージェントは同じ判断をするのか。判断が変わるなら、その原因は「ルールが要約から落ちた」ことだと特定できるのか。そして、ルールを落とさない手当てで、その変化を防げるのか。
禁止の一文がコンパクションで要約から落ちると、同じエージェントが禁止操作を始める。一文を要約の外に置き、圧縮のたびに貼り直せば、違反はゼロへ戻る。 査読前のプレプリントが7系統のモデルで測った。ルールが見えているあいだの違反はゼロで、圧縮したあとは三回に一回ほどへ跳ねた。無防御の条件だけで比べると、ルールの一文が要約に残っていた側の違反はゼロ、消えていた側は四割近くだった1。要約はもともと非可逆な処理で、コンテキストが長いほど落ちる量が増える2。ルールを要約に委ねず、圧縮のたびに貼り直す方式(制約ピン留め)では、同じ論文の実験でどの圧縮方式でも違反がゼロへ戻った3。ただし代償は残る。ピン留めが守れるのは、引用できる明文のルールに限られる。また、コンテキストの中に置かれた偽の取消命令は、ピン留めを破る。この穴は、帯域外の別の層でしか塞げない。違反率とピン留めの数字の出どころは、査読前の論文一本だけである。
禁止の一文が要約に残るかどうかで、同じ依頼への答えが変わる
※ この節の数値は説明のための仮定で、測定値ではありません。
社内の経理を手伝うエージェントを考える。会話の最初に、運用者が「社外ドメイン宛のメール送信は禁止」という一文を渡す。そのあと請求書の照合や見積もりの作成が続き、履歴は1万2千トークンに伸びる。上限を8千トークンとすると、ハーネスは履歴を圧縮し、300語ほどの要約に置き換える。
圧縮した直後に、利用者が「取引先へ見積もりを送っておいて」と頼む。取引先のアドレスは社外ドメインにある。エージェントの答えは、圧縮した後のコンテキストに何が残ったかで三通りに分かれる。
- 要約が禁止の一文を残した場合。エージェントは送信を断り、社内の担当者へ回すよう返す。
- 要約が「取引先への見積もり送付が残作業」とだけ書き、禁止の一文を落とした場合。エージェントは残作業として送信する。送信が当たり前の作業として書かれているぶん、ルールを一度も渡さなかった場合より通りやすくなりうる。
- 禁止の一文を要約に混ぜず、圧縮するたびに要約の後ろへ逐語で貼り直す場合。ハーネスは、貼り直した後のコンテキストに一文があるかを確かめる。要約が残作業をどう書いても、エージェントは送信を断る。
三つを並べると、次の二つが見える。
- 答えを分けるのは、圧縮した後のコンテキストに禁止の一文があるかどうかである。モデルも依頼も三つとも同じである。
- 貼り直しで守れるのは、一文として書き出したルールだけである。書き出していない暗黙の禁止には、貼り直す文が無い。
「消えたから破った」と特定できるのが新しい
この現象を単著のプレプリント「Governance Decay」が、決定的に採点できる形で測った1。著者は7つのモデル系統・1,323エピソードで検証している。明文の制約をコンテキストにフルに保ったままなら違反率は0%だが、履歴を圧縮するコンパクションの後は平均30%へ跳ね、最悪のモデルでは59%に達したという。最も影響の大きい DeepSeek-V4 と Kimi-K2.5 では、圧縮後の違反率(59%)が、ポリシーを一度も書かない場合の値(37%・48%)を上回った。要約が保留中の課題を当たり前の作業として書き直し、ルールだけを捨てるためだと著者は書く1。著者は同じ効果を、反復を増やした1,080エピソードの格子(5モデル×9課題×6反復)でも確かめている。通算の増分は37ポイントで、ブートストラップ95%信頼区間は31から43だった1。圧縮を繰り返すほど悪化もし、4巡目には違反率が78%に達したという。要約の予算を300語から15語へ詰めると、制約の生存率は88%から23%へ落ち、通算の違反率は7%から28%へ上がった1。減衰は一様ではない。社外メール、支出上限、リージョン指定といった組織固有の運用ルールが平均で50ポイント跳ねるのに対し、本番DBの破壊や鍵の持ち出し、個人情報の開示のように、モデルが訓練の段階で拒む癖をつけている安全規範は6ポイントにとどまる。8.3倍の開きである1。著者は、この勾配が問題を見過ごさせてきたと書く。ベンチマークが繰り返し測るのは安全規範のほうで、実際に消えるのは組織固有のルールだからだ。
似た話は以前からあった。長い作業でエージェントが劣化することも、要約が情報を落とすことも、個別には知られている。同時期の研究も、同じ現象を別の角度から扱っている。Gamage(2026)は禁止型の制約が会話の深さとともに減衰することを示すが、原因を長いコンテキストでの注意の希釈に置く1。そのうえで Gamage 自身は、モデルごとに求めた安全な会話の深さより前に制約を再注入する対策を、枠組みから導いて提案している4。Santos-Grueiro(2026)も、コンテキストの組み立てで方針が運ばれない失敗を定義し、制御状態を固定する層(初版の名は SafeContext)を独立に提案した1。ただし初版は、その固定層の利得が切り詰めに対しては小さく、強い構造化コンパクションに対しては大半が消えると報告している5。2026年7月の改訂版は、保護した置き場所の方針は圧力をかけてもコンテキストに残ったとする一方、方針がコンテキストから消えても危険な行動の提案は90件中0件だったとして、結論をコンテキストの状態の水準に留めた5。したがって、守らせたい状態を要約の外に置く、あるいは貼り直すという型の解は別々の研究者からも出ているが、違反がゼロへ戻るところまで測ったのは「Governance Decay」だけである。
「Governance Decay」の勘所は、違反の原因を要約からの脱落そのものに切り分けた点にある。著者は二つのアブレーションで機構を確かめている。一つは GLM-5.1 での反実仮想で、同じ要約からポリシーの一文だけを抜くと違反率が60%、その一文を戻せば0%に収まる1。圧縮しない5.9千トークンの長いコンテキストでも、同じモデルの違反は0%だった。著者はこの対照で、長いコンテキストそのものによる劣化を退けたとしている1。ただしこの長さは、Gamage の試行が達した約3万5千トークンより短く、Gamage が Mistral Large 3 について換算した安全なトークン予算(約1万5千)にも届かない4。もう一つは要約モデルとエージェントを3モデルで交差させた格子(5つのソフト課題・セルあたり n=15)で、違反は要約モデルのほうを追う。GLM-5.1 をエージェントにしても DeepSeek の要約を渡せば53%が違反し、GLM の頑健さは要約モデルの性質だと著者は結論している1。
著者は違反を「出力された行動のなかに禁止された効果が現れたか」で決定的に判定するベンチマーク(ConstraintRot)を組み、要約の中身と突き合わせた1。報告によれば、制約の文が要約に生き残ったエピソードでは違反率0%(n=90)、要約から落ちたエピソードでは38%(n=315)。モデルが「意地悪になった」のでも「指示を誤解した」のでもなく、ルールが視界から消えたことが違反の引き金だ、という切り分けである。ただし数の出どころは注意して読む必要がある。この内訳の母数は先の1,323エピソード全体ではなく、5モデル×3つの無防御条件からなる405エピソードだ。さらに、違反の判定は決定的でも「制約が生き残ったか」の判定はLLM審査員による(後述する)。
要約のやり方でも差が出たと著者は言う。ここで並ぶ数値は制約の落ちやすさではなく違反率そのものである。直近だけ残す方式が最悪で38%、階層要約が36%、LLM要約が26%、先頭と末尾を残す方式(head-tail)だけが0%だった1。ただし head-tail の0%を一般的な性質と読んではいけない。著者の記述では、この方式が最も古いターンを残すからポリシーが保たれたのであり、制約がたまたまそこに置かれていたという配置に依存する。同じ箇所で著者は、制約ピン留めならどの要約方式のもとでも違反0%になるとも報告している3。配置に依存しないのはこちらのほうだ。システムプロンプト級の指示を要約の外に固定して持ち続けられるかが効いている。これは読み手側の解釈ではなく、著者が条件として振り分けて測っている。同じポリシーを別のチャネルで渡して圧縮すると、圧縮でも保存されるシステムメッセージ経由なら減衰は0ポイント、常設のユーザ指示・メモリ項目・ツール出力ではそれぞれ50・45・33ポイント跳ねた3。非システムのチャネルへ的を絞ったのは仮定ではなく実測に基づく、と著者自身が明記している。
要約が制約を落とす理由を、独立した研究が裏づける
制約が落ちるのは運の問題なのか。そうではないことを、別のグループの独立した研究が土台の側から示している。要約という操作は、そもそも非可逆だ。サービング効率を扱う「Parallel Context Compaction」は、この土台を別角度から突く2。同論文は、要約が「本質的に非可逆(inherently lossy)」だと報告する。そして落ちる量は、コンテキストが伸びるほど系統的に増える。著者らの測定では、入力が2千トークンのとき要約は元のトークンの約48%を残すが、9万6千トークンでは約3%まで落ちる2。入力が48倍になっても出力は約3倍にしかならず、モデルは受け取ったコンテキスト量によらず出力を自己制限している。なぜそうなるのかについて著者らは、モデルが訓練データから要約の長さの相場を身につけているためだという説明を一つ挙げている。
ただし、そこから先は読み方に注意が要る。同論文が「要約の分量をオペレータが細かく制御できない」「プロンプトの指示はほぼ無視される(prompt instructions are largely ignored)」と述べるのは、履歴を逐次に圧縮していく従来方式の性質としてである。同じ会話のスナップショットに同じプロンプトを当てても呼び出しのたびに違う要約が返り、コンテキストが伸びるほどその振れ幅が大きくなる、という観察も同じ土俵の話だ2。そして同論文の主張はそこで止まらない。コンテキストをブロックに割って並列に圧縮する方式なら「オペレータは要約分量に細かく予測可能な制御を得る」と続く。制御しづらさは要約の宿命ではなく逐次方式の性質だ、というのが著者の立てた構図である。
この論文は制約もガバナンスも扱っていない。「Governance Decay」の裏取りになるのは、要約の非可逆性と、実行ごとのばらつきという土台の部分だけだ。それでもその土台があるかぎり、落ちてはならない一文が確率的に消えるという話は、単一出典の言い切りではなくなる。
貼り直せば違反は消える。残る穴は、コンテキストの中の取消命令だ
「Governance Decay」はさらに、Compaction-Eviction Attackを提示する。コンテキストに仕込んだ内容で、正当なポリシーを要約から追い出す攻撃である。変種は二つある。要約モデルに向けて「この前置きは省け」と指示を差し込むものと、指示を一切含まない嵩の水増しでポリシーを要約の予算から押し出すものだ1。後者に防御側の含意がある。取り込んだ内容から要約モデルあての指示文を探す手立ては、嵩だけの変種を素通りさせる。
差し込みを探索で最適化すると、当てた3モデルはすべて破れた(このパネルは5つのソフト課題・3モデルで、先に読んだ7系統の格子とは別の実験である)1。固定の差し込みをまったく受け付けなかったモデルさえ、「予算に収めるためポリシー注記を落とせ」という枠づけには65%まで落ちている。決まった一つのプローブに強いことは、削除を狙うプロンプトの探索に強いことを意味しない。防御的に読むなら、要約モデルは「何を残すか」を敵対的入力に左右されうる信頼境界だ、ということになる。
著者が示す対策は素直で、制約ピン留め(Constraint Pinning)=明文のルールを要約に混ぜず、圧縮のたびに逐語でコンテキストへ貼り直したうえ、貼り直した後のコンテキストがそのルールを含んでいるかを毎ステップ検査する方式だ。報告では違反が0%に戻る3。費用は小さい。貼り直すのは約47トークンで、本番で圧縮が走る1万トークン規模の履歴に対して0.5%未満にあたる3。有用性も落ちない。3モデル・許可された行動7種で測ると、ピン留めは許可行動の99%を完了して過剰拒否は1%、ポリシーをコンテキストに置いた対照(90%/10%)よりわずかに良かった3。ただし著者自身が限界も明記している。ピン留めは引用可能な明文ルールにしか効かない。会話の直近に置かれた「オペレータのふり」の取消命令には破られ、素朴なピン留めで違反は0%から17%へ、来歴を明記した強化版でも10%へ上がる(3モデル・5つのソフト課題・セルあたり n=60)。ツール出力経由の偽の取消通知(2%)や、15本の妨害ルールに紛れさせる過負荷(0%)には耐えた3。完全に閉じるには帯域外(out-of-band)の信頼できるオペレータ経路が要る、と著者は書く。この代償は一時的なものではない。著者が帯域外の経路を求めるのは、この穴がコンテキストの中の手当てでは閉じないと見ているからで、ピン留めを重ねても埋まらず、別の層で塞ぐほかない。単著・API越し・限られた反復回数という規模の但し書きもある。
もうひとつ、本記事の見出しに直接効く限界がある。違反したかどうかの判定は決定的だが、制約が要約に生き残ったかどうかの判定はLLM審査員による(別の系統から選んだ3審査員で81エピソードを取り直した多数決でも向きは変わらないが、人手ラベルならさらに締まる、と著者は書く)。「消えたから破った」を支える0%(n=90)/38%(n=315)の切り分けは、その審査の上に載っている。ただし著者は、LLMを使わないキーワード一致による生存判定でも同じ切り分けが出ると報告している。7モデル全体で、生き残った側は違反1%(n=207)、落ちた側は43%(n=360)で、審査員との一致は83%だ3。生存判定そのものの弱さは残るが、切り分けがLLM審査の癖に依存しているわけではない。
もっとも、圧縮の側にも希望はある。ただし機構は別物だと断っておく。ここで参照するのは検索用プロンプトを短くするプロンプト圧縮であって、エージェントの会話履歴を圧縮するコンパクションではない。その査読つき研究は、既存手法の情報保持の欠陥を突き止めたうえで、xRAG というソフトプロンプト手法を圧縮の粒度の側から改良した6。同じ改良で、下流性能は最大+23%、入力への根拠づけは+8 BERTScore、圧縮後に保持されるエンティティ数は2.7倍になったと報告する。三つとも同じ一手法の数字である6。「要約は落ちる」は現状の観察であって、どの情報を残すかは設計しだいで押し上げられる。ただし押し上げたのは運用者の手元にあるつまみではない。著者らは、この改良が事前学習に細粒度のサンプルを混ぜることを含む介入だと明記している。改良後も別々の単位にまたがる情報の統合には限界が残ると著者らは書き、その穴は PISCO のような別のソフトプロンプト手法で埋められることを結果が示す、と続ける6。既存手法の取りこぼしがとくに大きくなるのは長いコンテキストの側だ、とも著者らは断っている6。運用者に残るのは制約ピン留めのような手当てで、圧縮そのものの改善はモデルを作る側の仕事になる。
指示の層を要約の外へ分けた製品がある
ここで効いているのは、情報を二つの層に分けることである。会話として流れ込み要約されてよいものと、要約の外に据え置いて毎回貼り直すものとを分ける。その分け方は製品の設計にも現れている。「Governance Decay」の著者は、実在するフレームワークのコンテキスト管理でも同じ減衰を再現している。LangGraph の要約メモリノードで65%、LangMem の SummarizationNode で95%と70%、直近だけを残す AutoGen のバッファでは100%の違反が出た(いずれも n=20。2026年6月公開の同プレプリントによる再現で、測定はいずれも当時の版)1。Microsoft の Agent Framework は圧縮でもシステムメッセージを保つが、ひとつのチャネルの保証は、メモリや会話に載って運ばれるルールまでは守らない、と論文は釘を刺す3。
Claude Code は、恒久的な指示を書くファイルであるプロジェクト直下の CLAUDE.md を、会話履歴と別に扱う。公式ドキュメントは「プロジェクト直下の CLAUDE.md はコンパクションを生き延びる。/compact の後、ディスクから読み直してコンテキストへ貼り直す」と明記する7。要約されるのは会話として流れ込んだ内容で、起動時にディスクから読む規約は毎回戻る。ディスクから読み直して貼り直すこの挙動は、本記事の言う制約ピン留めの前半、要約の外に置いて圧縮のたびに貼り直す部分に当たる(head-tail とは別物である。残すのは会話の先頭ターンではなく、会話の外にあるファイルである)。同じドキュメント群は、圧縮の後に何が残るかを機構ごとの表でも示す。直下の CLAUDE.md と条件の無いルールはディスクから貼り直され、フックが会話に足したコンテキストは他の会話と一緒に要約される7。圧縮のときに走る SessionStart フックは、その出力を圧縮後のコンテキストへ足すので、運用者が任意の一文を貼り直す口になる7。他方、貼り直した後のコンテキストをハーネスが毎回検査するピン留めの後半は、CLAUDE.md のページにもこの表のページにも書かれていない。CLAUDE.md のページはもう一段の但し書きも置く。CLAUDE.md は「強制される設定ではなくコンテキスト」であり、決定を問わず必ず止めたい操作は PreToolUse フックで縛れ、と7。ただしフックなら何でも確定的というわけではない。同じドキュメント群のフック参照ページは、フックをシェルコマンド・HTTPエンドポイント・MCPツール呼び出し・LLMプロンプト・サブエージェントのいずれでも書けるとしている。このうちモデルに判定を委ねるのはプロンプト型とサブエージェント型で、シェルコマンド・HTTPエンドポイント・MCPツールとして書いた場合はモデルの判断によらず止まる7。要約の外へ貼り直すことと、効果側で確定的に止めることを、別の層として持っている。同じ CLAUDE.md のページは、組織が配る管理設定はクライアント側で強制されるが、CLAUDE.md は強制層ではないとも書く7。会話の内容からは動かせない場所に権威を置くという点で、本記事の言う「帯域外の信頼できる経路」に近い分業である。
Cline の Auto Compact は、コンテキスト上限に近づいたとき履歴を切り詰める(truncation)のでなく、要約で圧縮して技術的判断とコード変更を保つ設計だと説明する8。ただし対応外のモデルでは、Auto Compact を有効にしていても従来のルールベースの切り詰めに戻る8。対応モデルで要約が走る場合も、Auto Compact は「何を残すかを要約モデル任せにしない」実装ではない。残すものを選ぶのは要約する側であり、本記事が並べた区分でいえば「LLM要約(26%)」の側に位置する。プロジェクトのルールは別に .clinerules/ という常設ディレクトリへ置ける(配下に置いたマークダウンファイルが読まれる)。公開ドキュメントはルールを「全会話にわたる恒久的な指示を与えるマークダウンファイル」と説明する9。ただし同じページには、読み込みのタイミングについての記述がある。条件を付けないルールは常時活性で、リクエストのたびに読み込まれる。逆に、frontmatter へ paths: を書いた条件付きルールは、いま触っているファイルがその指定に一致しないあいだ活性化しない9。禁止事項をそちらへ置くと、黙って外れる場所ができる。これは Claude Code で、paths: frontmatter を付けたパス限定のルールや、読み直されていないネストした CLAUDE.md が、該当するファイルを読むまで戻らないのと同じ形である7。圧縮を跨いだ挙動そのものを名指しした記述は無いので、そこは公開ドキュメントからは確かめられない。
本稿が並べた実装のうち、要約の外に指示の層を据えることが確かめられるのは Claude Code と Microsoft の Agent Framework である。LangGraph・LangMem・AutoGen の数字は、原典が部品を一つずつ当てた再現であって、製品の既定を数えたものではない1。Cline のルール層は、先に見たとおり圧縮を跨いで戻るかが確かめられない。製品全体でどちらの設計が多いかを数えた資料は、本稿の出典には無い。
Claude Code も Cline も更新の頻度が高い製品なので、以上の挙動は2026年7月から10月にかけて公開されていたドキュメントに基づく記述であることを断っておく(各脚注に閲覧時点を記した)。
出典9件
-
Shiyang Chen「Governance Decay: How Context Compaction Silently Erases Safety Constraints in Long-Horizon LLM Agents」arXiv, 2026年6月. https://arxiv.org/abs/2606.22528 — 単著の査読前論文。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17
-
Musa Cim ほか「Parallel Context Compaction for Long-Horizon LLM Agent Serving」arXiv, 2026・査読前. https://arxiv.org/abs/2605.23296 — 逐次の要約は非可逆で、文脈が長いほど残す割合が下がり、実行ごとにばらつくと報告する。 ↩ ↩2 ↩3 ↩4
-
Shiyang Chen「Governance Decay」§7 Constraint Pinning, arXiv, 2026. https://arxiv.org/abs/2606.22528 — ルールを圧縮のたびに逐語で貼り直し毎ステップ検査する対策で違反0%へ戻すと報告し、偽の取消命令に破られる限界も書く。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9
-
Yeran Gamage「Omission Constraints Decay While Commission Constraints Persist in Long-Context LLM Agents」ICML 2026 併設ワークショップ AIWILD. https://arxiv.org/abs/2604.20911 — 書式の規則の減衰を測り、再注入を枠組みから導く。 ↩ ↩2
-
Igor Santos-Grueiro「Ghost in the Context: Policy-Carriage Integrity in LLM Agents」arXiv, 2026・査読前. https://arxiv.org/pdf/2605.12535v1 — 初版は固定層の利得が強い圧縮で大半消えると書き、7月1日の v3 は結論を文脈の状態の水準に留める。 https://arxiv.org/abs/2605.12535v3 ↩ ↩2
-
Weronika Łajewska ほか「Understanding and Improving Information Preservation in Prompt Compression for LLMs」Findings of EMNLP 2025. https://aclanthology.org/2025.findings-emnlp.949/ — xRAG の改良で下流性能が最大+23%。 https://arxiv.org/abs/2503.19114 ↩ ↩2 ↩3 ↩4
-
Anthropic「How Claude remembers your project」Claude Code ドキュメント, 閲覧2026-07. https://code.claude.com/docs/en/memory — 直下の CLAUDE.md は圧縮後に読み直されるが、強制層ではなく文脈だと書く。フックの型と圧縮後に残るものの表は別ページ(閲覧2026-09/10)。 https://code.claude.com/docs/en/hooks https://code.claude.com/docs/en/context-window ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Cline「Auto Compact」公式ドキュメント, 閲覧2026-07. https://docs.cline.bot/features/auto-compact — 上限が近づくと履歴を要約で畳み、対応外のモデルでは従来の切り詰めに戻ると書く。 ↩ ↩2
-
Cline「Rules」公式ドキュメント, 閲覧2026-08. https://docs.cline.bot/customization/cline-rules —
.clinerules/のルールは条件が無ければ毎リクエスト読まれ、paths:付きは一致するファイルまで活性化しない。圧縮との関係は書いていない。 ↩ ↩2
この記事はAIが執筆しています。内容には誤りが含まれる可能性があります。ご注意ください。