0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

長時間エージェントが自分で書く要約を強化学習で鍛えるCompactionRL

0
Posted at

コーディングエージェントを長時間回していると、ある瞬間から挙動が鈍ることがある。原因を追うと、たいてい文脈ウィンドウが限界に近づき、それまでの作業ログを自動で要約して「畳んだ」直後だったりする。ここで素朴な疑問が湧く。その要約を書いたのは誰で、出来は良かったのか。

7月に公開された論文「CompactionRL: Reinforcement Learning with Context Compaction for Long-Horizon Agents」(arXiv:2607.05378、GLMを開発するチームによる)は、この問いを正面から扱っている。主張はシンプルだ。エージェントが文脈を圧縮するときに書く要約は、動けばいい固定機能ではなく、タスクの成功に向けて訓練できる方策(policy)である、というもの。

🧩 いまの圧縮は「要約の質」を測っていない

長時間タスクで文脈が溢れるのを防ぐ仕組みは、もう実務に入っている。Anthropicのcompaction機能は、入力トークンがしきい値(デフォルト15万、最小5万)に達すると会話を自動で要約し、要約ブロックに差し替えて続きを生成する。有効化はMessages APIにフラグを足すだけだ。

response = client.beta.messages.create(
    betas=["compact-2026-01-12"],
    model="claude-opus-5",
    max_tokens=4096,
    messages=messages,
    context_management={"edits": [{"type": "compact_20260112"}]},
)

(出典: Anthropic Compaction docs

便利だが、ここで生成される要約はベースモデルの素の要約能力に丸投げされている。その要約がタスクに効いたかどうかは、その場では一切測られない。仮に「この関数はスレッドセーフでない」といった制約や、バグの再現手順を要約が落としていれば、以降の推論は静かに劣化する。しかも発火はリアクティブで、文脈がすでに古い情報で飽和してから慌てて畳む。CompactionRLが突くのは、まさにこの空白だ。

要約をRLの最適化対象に入れる

CompactionRLの発想は、圧縮をエージェントの「行動の一部」として扱うことにある。残り文脈が一定の余白 T_comp を割ったら(論文の条件は C - |h_t| < T_comp)要約指示を差し込み、モデル自身に要約を書かせ、システムプロンプトと要約と直近k手(既定は k=2)だけで文脈を再構成して続行する。ここまでは通常のcompactionと変わらない。違うのは、その要約トークンにも報酬勾配を流し、最終的なタスクの成否から逆算して「良い要約とは何か」を学習させる点だ。

厄介なのは、これが素朴なグループRL(GRPOのような、複数ロールアウトを束にして相対比較する方式)の帳簿を壊すことにある。本来は1本のロールアウトを1サンプルとして扱いたいのに、途中で圧縮が起きると文脈が組み替わり、1本の軌跡が複数のセグメントに分割される。圧縮回数が多い軌跡ほどセグメント数が増え、学習で過剰に重み付けされてしまう。

著者らの対処は二段構えだ。ひとつはトークン単位の損失正規化で、サンプルやセグメント単位ではなく生成トークンの総数で割ることで、圧縮回数の偏りを打ち消す。もうひとつが軌跡位置を考慮したGAE補正で、各セグメントの局所アドバンテージに (γλ)^(N_>s) を掛け、そのセグメント以降に生成されたトークン数 N_>s に応じて終端報酬を減衰させる。バラバラに切ったログを、元の一本のタスクとして正しく縫い直すイメージに近い。切り口ごとに報酬をそのまま置き直す素朴なやり方だと、まだ結果を知らない序盤の行動まで過大評価してしまう。

📉 小さいモデルほど効く、という結果

同じベースモデルにCompactionRLを適用した前後を並べると、効き方が見えてくる。

モデル ベンチ Base CompactionRL
GLM-4.5-Air (106B) SWE-bench Verified 59.8% 66.8%
GLM-4.5-Air (106B) Terminal-Bench 2.0 21.4% 24.5%
GLM-4.7-Flash (30B) SWE-bench Verified 50.5% 56.0%
GLM-4.7-Flash (30B) Terminal-Bench 2.0 13.4% 20.2%

30Bの小型モデルがターミナル系エージェントタスクで最大 +6.8ポイント伸びているのは示唆的だ。文脈が窮屈なモデルほど、何を残し何を捨てるかの巧拙がそのまま成否を左右する、ということだろう。論文によれば、この手法はフラッグシップである750B級のGLM-5.2の訓練パイプラインにも組み込まれたという。研究のための小実験ではなく、量産モデルに乗った技術だという点は押さえておきたい。

要約はプロンプトではなく方策だ

正直に書くと、CompactionRLそのもののコードは公開が確認できない(実装は既存のオープンソースRLフレームワーク slime の上、とだけ記されている)。いますぐ手元で再現できる類のものではない。

それでも実務への含意ははっきりしている。自前のエージェントで走る「要約プロンプト」を、動けばよい固定部品として放置するのはもったいない。要約は方策であり、評価も最適化もできる対象だ。今日からできる第一歩は、圧縮の前後でタスク成功率を測る計器を入れることだと思う。要約が実際に何を落としているかが数字で見えて初めて、それを直す議論が始められる。しきい値をいじって発火タイミングを調整するより、そちらの方がずっと本質に近い。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?