CHAPTER 12 · CONTEXT BUDGET

Compaction:85% 閾值與可選 two-pass

預設策略在上下文使用率達到 85% 時允許自動壓縮。memory flush 和 two-pass 預設均關閉,啓用後才進入對應流程。

課程目標
記住 CompactionPolicy 的五個真實字段與預設值,並能追到 Agent::should_auto_compactxai-token-estimation 的閾值判斷。
核心視覺 · 自動壓縮閾值
0% · 可用空間充足100% · 上下文上限

used × 100 >= context_window × threshold_percent。比較使用飽和乘法,context window 為 0 時返回 false。

CompactionPolicy 預設值
auto_compact_threshold_percent: u3285

自動壓縮閾值百分比。

compact_model: Option<String>None

未指定時使用當前 Session 模型。

memory_flush_enabled: boolfalse

啓用後,壓縮前才運行 memory flush turn。

wall_clock_budget_secs: u64300

單次壓縮的牆鐘預算,單位秒。

two_pass_enabled: boolfalse

由配置解析後寫入;預設走 single-pass 路徑。

Two-pass 何時成立
PASS 1 · PREFIRE

預先摘要歷史前綴

僅在 two_pass_enabled 為 true 時,接近閾值可投機地在後台總結歷史前綴,得到 NOTE₁。

PASS 2 · COMPACT

總結 NOTE₁ 與近期尾部

正式壓縮時把 NOTE₁ 與 recent tail 組合後再次總結。配置為 false 時保留原有 single-pass 路徑。

真實源碼證據
crates/codegen/xai-grok-agent/src/compaction.rs
impl Default for CompactionPolicy {
  fn default() -> Self {
    Self {
      auto_compact_threshold_percent: 85,
      compact_model: None,
      memory_flush_enabled: false,
      wall_clock_budget_secs: 300,
      two_pass_enabled: false,
    }
  }
}
crates/codegen/xai-token-estimation/src/lib.rs
pub fn exceeds_threshold(
  used: u64,
  context_window: u64,
  threshold_percent: u8,
) -> bool {
  if context_window == 0 { return false; }
  used.saturating_mul(100) >=
    context_window.saturating_mul(
      threshold_percent as u64
    )
}
調用位置:Agent::should_auto_compact 接收 total_tokensNonZeroU64 context_window,再調用 xai_token_estimation::exceeds_threshold。策略結構體本身沒有虛構的 should_compact(&self, usage: f64) 方法。
源碼快照説明:本頁依據本地同步副本核對。該副本沒有 .git 元數據,因此不聲稱對應某個 commit 版本。
課堂練習

手算邊界

context window 為 100,000,閾值 85。判斷 84,999、85,000、90,000 tokens 是否觸發。再説明開啓 two_pass_enabled 會改變壓縮路徑,但不會把預設值改成 true。

Takeaway:預設閾值是 85,wall clock 是 300 秒,memory flush 與 two-pass 均為 false。Two-pass 是顯式配置能力,自動觸發判斷落在 Agent 與 token estimation 中。