s10
上下文压缩
智能层自动紧凑与窗口管理策略
Token 阈值触发 → LLM 生成摘要 → 替换旧消息三级压缩策略(微紧凑/自动紧凑/手动紧凑)在保留关键上下文的同时控制 token 消耗
自动紧凑与窗口管理策略
Token 阈值触发 → LLM 生成摘要 → 替换旧消息三级压缩策略(微紧凑/自动紧凑/手动紧凑)在保留关键上下文的同时控制 token 消耗
LLM 有固定的上下文窗口(如 200K tokens)。随着对话深入,消息历史不断增长——阅读文件、执行命令、工具结果都会快速消耗 token。当上下文接近极限时,API 调用会失败。Claude Code 的上下文压缩系统在上下文溢出前自动将对话历史压缩为摘要,让长会话成为可能。核心挑战是:如何在压缩中保留关键信息而不丢失重要上下文?
自动压缩阈值 — 精确的 token 预算管理
// 自动压缩的关键常量:
const MAX_OUTPUT_TOKENS_FOR_SUMMARY = 20_000 // 摘要输出预留
export const AUTOCOMPACT_BUFFER_TOKENS = 13_000 // 触发缓冲区
export const WARNING_THRESHOLD_BUFFER_TOKENS = 20_000 // 警告阈值
// 熔断器:连续失败超过 3 次停止重试
// BQ 2026-03-10: 1,279 sessions had 50+ consecutive failures
// wasting ~250K API calls/day globally
const MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3
// 自动压缩阈值 = 有效上下文窗口 - 缓冲区
export function getAutoCompactThreshold(model: string): number {
return getEffectiveContextWindowSize(model) - AUTOCOMPACT_BUFFER_TOKENS
}压缩执行 — 对话摘要生成与恢复
// 压缩后恢复关键上下文:
export const POST_COMPACT_MAX_FILES_TO_RESTORE = 5
export const POST_COMPACT_TOKEN_BUDGET = 50_000
export const POST_COMPACT_MAX_TOKENS_PER_FILE = 5_000
// Skills 恢复预算(verify=18.7KB, claude-api=20.1KB)
export const POST_COMPACT_MAX_TOKENS_PER_SKILL = 5_000
export const POST_COMPACT_SKILLS_TOKEN_BUDGET = 25_000
// stripImagesFromMessages: 压缩前移除图片块
// 图片不需要用于生成摘要,且可能导致压缩 API
// 本身超出 prompt-too-long 限制