背景
#80 提出、#240 讨论确认:压缩的真实成本里,"写摘要的 output tokens" 只是小头,大头是 Prompt Cache 失效 ——selective compression 在历史中间就地改写,把压缩点之后的整个后缀踢出缓存前缀,后续每轮按全价重算这段 input。
#240 的独立压缩模型(/acp compact,含 session 共享前缀模式,见 PR #241 )只解决了"隔离 + 摘要 output",没动缓存失效。本 issue 做主杠杆 :保护 Prompt Cache。
目标
把"频繁就地压缩"变成"偶发批量 rollover",让 model-visible history 在阶段内尽量 append-only,缓存失效次数大幅下降。
方案要点(待细化)
阶段内 append-only :一个阶段(任务 / 到上下文阈值)内,model-visible history 只追加、不改中间。
pending drop 标记 :可删的 tool output 先标记 pending drop(对模型隐藏但不立即从 prompt 移除),避免每次删除都改前缀。
批量 rollover :到上下文压力高 / 阶段结束时,一次性批量压缩 + 删除(一次缓存失效,摊薄到整个阶段)。
检索结果追加到尾部 :decompress / search 结果追加到上下文尾部,不插回原位置。
关键设计问题(需先对齐)
pending drop 与缓存前缀的矛盾 :如果"隐藏"= 立即从 prompt 移除,那本身就会改前缀、触发缓存失效,与目标矛盾。所以 pending drop 更可能是"延迟到 rollover 才真正移除"(阶段内先留着、占一点 context,换缓存稳定)。这个 trade-off 需要定量化:缓存省的钱 vs 临时多占的 context。
rollover 触发条件 :上下文压力阈值?阶段边界如何判定?
与 # [Feature Request] 新增 /acp compact 命令,复用 models.json 实现协同压缩 #240 独立压缩模型的关系 :两者正交、可组合(批量 rollover 发生时,摘要生成可以甩给独立模型 /acp compact)。
验收标准
背景
#80 提出、#240 讨论确认:压缩的真实成本里,"写摘要的 output tokens" 只是小头,大头是 Prompt Cache 失效——selective compression 在历史中间就地改写,把压缩点之后的整个后缀踢出缓存前缀,后续每轮按全价重算这段 input。
#240 的独立压缩模型(
/acp compact,含session共享前缀模式,见 PR #241)只解决了"隔离 + 摘要 output",没动缓存失效。本 issue 做主杠杆:保护 Prompt Cache。目标
把"频繁就地压缩"变成"偶发批量 rollover",让 model-visible history 在阶段内尽量 append-only,缓存失效次数大幅下降。
方案要点(待细化)
关键设计问题(需先对齐)
/acp compact命令,复用models.json实现协同压缩 #240 独立压缩模型的关系:两者正交、可组合(批量 rollover 发生时,摘要生成可以甩给独立模型/acp compact)。验收标准