CHAPTER 12 · CONTEXT BUDGET
Compaction:85% 閾值與可選 two-pass
預設策略在上下文使用率達到 85% 時允許自動壓縮。memory flush 和 two-pass 預設均關閉,啓用後才進入對應流程。
課程目標
記住
記住
CompactionPolicy 的五個真實字段與預設值,並能追到 Agent::should_auto_compact 和 xai-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,
}
}
}
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
)
}
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_tokens 與 NonZeroU64 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 中。