コンテキスト圧縮と MoA
源码版本v2026.7.20
職務
二つの役:① 履歴メッセージが provider のコンテキスト上限に近づいたとき、古いメッセージを要約/刈り込んで予算を空ける(context_compressor)。② 任意で Mixture-of-Agents パスにより複数モデルの出力を集約する(moa_loop)。どちらも主ループ内から呼ばれ、「長い対話を走らせ続ける」「回答を安定させる」ための支えである。
主要ファイル
context_compressor モジュール— 圧縮総入口(約 3700 行)予算推定:190-242—_estimate_msg_budget_tokens/_serialized_length_for_budgetメッセージ浄化:136-155—_fresh_compaction_message_copy/_strip_persistence_markersツール呼び出しとパス言及抽出:337-360—_extract_tool_call_name_and_args/_collect_path_mentions内容刈り込み:472-515—_append_text_to_content/_strip_image_parts_from_partsmoa_loop— Mixture-of-Agents 集約IterationBudget— 圧縮 refund と予算連動
データフロー
- 主ループは毎ラウンド圧縮要否を評価(
_should_run_preflight_estimate:213参照)。 - 閾値到達後、context_compressor を呼ぶ:
- 各メッセージの予算占有を推定(
agent/context_compressor.py:419) - 古いメッセージを浄化コピー(
agent/context_compressor.py:136)、永続化マーカーを剥離(agent/context_compressor.py:155) - ツール呼び出し名/引数とパス言及を保持し、要約で重要操作を失わない(
agent/context_compressor.py:337) - 画像パートと超長内容を刈り込む(
agent/context_compressor.py:472)
- 各メッセージの予算占有を推定(
- 圧縮が生んだ「新空間」は
iteration_budget.refund()(agent/iteration_budget.py) で一部還付され、主ループが数ラウンド多く走れる。 - MoA が有効なら、
moa_loopがこのラウンドで複数 provider を並行呼び出して集約し、主回答の増強または仲裁とする。
まとめ
圧縮器は長対話の生命線。核心のトレードオフは「何を捨て、何を残すか」——ツール呼び出しとパス言及を優先保持する。失うと後続ラウンドが「記憶喪失」するからだ。MoA は直交する拡張で、オンオフ可能。どちらも主ループ構造を変えず、適切なタイミングで切入するだけ。