Skip to content

[Feature Request] Prompt Cache 稳定性 / 批量 rollover 压缩(主杠杆) #242

Description

@ranxianglei

背景

#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,缓存失效次数大幅下降。

方案要点(待细化)

  1. 阶段内 append-only:一个阶段(任务 / 到上下文阈值)内,model-visible history 只追加、不改中间。
  2. pending drop 标记:可删的 tool output 先标记 pending drop(对模型隐藏但不立即从 prompt 移除),避免每次删除都改前缀。
  3. 批量 rollover:到上下文压力高 / 阶段结束时,一次性批量压缩 + 删除(一次缓存失效,摊薄到整个阶段)。
  4. 检索结果追加到尾部:decompress / search 结果追加到上下文尾部,不插回原位置。

关键设计问题(需先对齐)

  • pending drop 与缓存前缀的矛盾:如果"隐藏"= 立即从 prompt 移除,那本身就会改前缀、触发缓存失效,与目标矛盾。所以 pending drop 更可能是"延迟到 rollover 才真正移除"(阶段内先留着、占一点 context,换缓存稳定)。这个 trade-off 需要定量化:缓存省的钱 vs 临时多占的 context。
  • rollover 触发条件:上下文压力阈值?阶段边界如何判定?
  • # [Feature Request] 新增 /acp compact 命令,复用 models.json 实现协同压缩 #240 独立压缩模型的关系:两者正交、可组合(批量 rollover 发生时,摘要生成可以甩给独立模型 /acp compact)。

验收标准

  • 阶段内 model-visible history append-only(不就地改中间)。
  • pending drop 机制:可删内容标记 + 延迟到 rollover 移除。
  • 批量 rollover:压力高 / 阶段结束时一次性压缩 + 删除。
  • decompress / search 结果追加到尾部。
  • 单元测试:验证缓存前缀稳定性(rollover 前后前缀一致)。
  • 文档更新(README + CONFIGURATION)。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions