Skip to content

Repository files navigation

dsh-cache-aware-compaction

English | 中文

缓存感知的 dsh(DeepSeek Harness)压缩引擎插件——压缩前判定前缀缓存冷热:热时维持原生前缀重放(命中缓存、几乎免费),冷时切换转录式压缩(避免重放大段前缀却全 miss 的白付)。

为什么需要它

DeepSeek API 2026-08-17 起涨价并引入峰谷定价,缓存命中/未命中输入价差达 30 倍(hit 0.10 vs miss 3.00 元/百万 token,flash 高峰价)。dsh 原生压缩(dsh-compaction-basic)用「前缀重放」构造压缩调用——缓存热时几乎免费,缓存冷时整段重放按 miss 价付费。本插件在压缩触发时先判定冷热,冷时改用转录式压缩(专用摘要提示 + 扁平化转录),实测把压缩调用输入从重放的 U(1−R) 降到转录的 T ≈ 38% × U(1−R),缓存真冷时省 62% 的压缩调用输入成本。

工作原理

压缩触发(agent/pre-step 或 context-overflow)
  └─ 判定:倒序扫描会话日志,取最近一次同 (provider, model) 调用的 usage
       v0.2 盈亏平衡规则(替代 v0.1 的 cacheRead > 0 布尔判定):
         R = cacheRead / (cacheRead + uncached)
         热 ⟺ R ≥ (1 − τ·(1+margin)) / (1 − ρ),τ = T/U(压缩点精确估算)
         cacheWrite > 0 → 热(首写必命中);样本过期(cacheTtlSeconds)→ 冷
       ├─ 热 → 原生前缀重放(super.summarize,与 stock dsh 逐字节等价)
       └─ 冷 → 转录式压缩(TRANSCRIPT_SYSTEM_PROMPT + 扁平化转录 + 8 段 checkpoint 指令)
                └─ 回退保护:转录估算 ≥ 重放估算时自动退回重放路径
  • 服务名保持 "compaction"/compact 手动命令、上下文溢出恢复、tool-result pruner 全部自动兼容
  • 配置:coldMode: transcribe | refuse(默认 transcribe)、cachePolicy: auto | hot | cold(hot/cold 为实验覆盖)
  • 冷热记忆按 (provider, model) 隔离——模型切换后判定归零重算(已由 GUI 实测两次切换验证,见 M3 报告 §7.4)
  • 只覆盖基类两个钩子(summarize / compactIfNeeded),范围选择、事务、落盘、稳定性校验全部复用基类

v0.2 判定规则:盈亏平衡,而非「有命中就算热」

v0.1 用 cacheRead > 0 判热。M3 报告 §2 记录了它的盲区:opencode-go 中继对任何请求都报 cacheRead ≈ 8064(跨会话共享的 harness system prompt 前缀缓存)——在这种路由上 v0.1 恒判热,冷路径永远走不到。v0.2 改为比较两条路径的期望输入成本(以 miss 价为 1):

重放成本   = U · (1 − R + R·ρ)          # R 为命中率,ρ = hit价/miss价
转录成本   = T                          # 全按 miss 价
热划算 ⟺  R ≥ (1 − τ·(1+margin)) / (1 − ρ)      τ = T/U
  • τ 在压缩点精确估算(同一份 input 既算转录 token 也算重放 token),临界值不是拍脑袋的常数,而是随会话形态浮动的盈亏平衡点;
  • refuse 预检发生在基类构建 input 之前,用 assumedSavingsRatio(M3 实测 T/U ≈ 0.38 → 临界 R ≈ 0.60)近似,summarize 阶段再用精确值复判;
  • cacheTtlSeconds(默认 3600,0 关闭):带 time 的 usage 样本超过该时长按陈旧处理判冷——v0.1 已知缺陷「长空闲后被驱逐仍判热」的可配置缓解(dsh 事件携带 epoch 毫秒 timedsh-session/lib/index.js:1460);
  • 平局判热:判错的代价只是多付重放价,不会偏离 stock 行为。

用 M3 中继数据代入:短会话(R = 8064/12064 = 0.67 ≥ 临界 0.60)判热正确;长会话(R = 8064/28064 = 0.29 < 临界)判冷——v0.1 在这里会白付 2 万 token 的全价 miss。

验证结论(M3 四组对照实验)

指标 数值
冷压转录输入 T vs 热压重放 U(1−R) 4.6K vs 12.2K(38%
缓存真冷时压缩调用输入成本 省 62%(0.146 → 0.056 元/次,flash 高峰价)
热路径与原生一致性 逐字节同构;实测命中画像一致(77% vs 66-96%)
摘要质量 8 段 checkpoint 全部落盘;压缩前事实压缩后复述全对
单测 73/73 全绿(config 12 + decision 22 + transcript 18 + engine 21;v0.2 新增盈亏平衡/TTL 12 例)
模型切换缓存隔离 跨 provider 与同 provider 仅切模型,切换后首请求 cacheRead 均归零(实证)

完整数据与实验方法:docs/cache-aware-m3-report.md

B8 取证(2026-09-03):cacheTtlSeconds 默认值的实测校准记录

背景:v0.2 的 cacheTtlSeconds=3600(1h)是「provider 驱逐策略无文档」时的保守读取(M3 §6 长空闲失效模式)。

实测(command-code 中继,会话空闲 17h 后 resume)

时刻 cacheRead 说明
空闲前最后一条 59,264 会话前缀缓存基线
空闲 17h 后第一条 59,648 无驱逐(还涨了 384)
空闲 17h 后第二条 60,288 持续命中(确认非波动)

结论:command-code 的缓存驱逐窗口实测 >17h——1h 的默认值在该环境偏保守(会把空闲 1h 后仍热的会话误判冷、走转录,多付压缩钱,但方向安全)。

默认值决策:保持 3600(保守),不做环境拟合。引擎是通用组件,command-code 的观测不代表 DeepSeek 官方 API 等其他 provider 的驱逐策略(官方 API 未实测);3600 对驱逐窗口未知的环境是安全默认。若你的 provider 已知长保留缓存,可调大 cacheTtlSeconds(见配置说明)。

设计动机与时间线

独立设计,原创性自证(英文版见 README_EN.md)。

  • 动机:DeepSeek 2026-08-17 涨价并引入峰谷定价,缓存命中/未命中价差达 30 倍(hit 0.10 vs miss 3.00 元/百万 token,flash 高峰价);压缩调用在冷缓存下重放整段前缀,全按 miss 价付费。
  • 时间线
    • 08-13 — 逆向研究 Reasonix(esengine/DeepSeek-Reasonix),致谢其转录式压缩设计启发。
    • 08-15 14:36Z — 独立设计,本仓库创建于 14:36Z。
    • 08-15 18:09ZZhuchen00123/dsh-compaction-cacheaware 发布同思路项目(晚 3.5 小时创建,同为涨价驱动)——平行独立发明,无交集。
  • 独立决策点:冷热判定(cacheRead/cacheWrite 归零检测)、转录式压缩(T ≈ 38% × U(1−R))、回退保护(转录估算 ≥ 重放估算时自动退回重放路径)。
  • 致谢:Reasonix(esengine/DeepSeek-Reasonix)设计启发。

安装与启用

前置:本机已安装 dsh(验证于 0.1.1-rc.2 版本线,见下方版本说明)。

# 1. 安装插件到 web profile(本地路径安装)
dsh plugin --profile web add file:/path/to/dsh-cache-aware-compaction/dsh-compaction-cache-aware

# 2. 创建/复制 agent preset(见 examples/agent.cordis.yml 思路)
#    把 compaction 组里的 compaction-basic 行替换为:
#      - id: compaction-cache-aware
#        name: '@septtpes/dsh-compaction-cache-aware'
#        config: { coldMode: transcribe }

# 3. settings.yaml 选择该 preset
#    agent-presets:
#      default: <your-preset-id>

headless 环境的挂载方式(cordis.patch.yml disabled + insert)与坑位见 docs/dsh_cache_aware_compaction_recon.md §1 及实验脚本 experiments/scripts/run-m3.sh

配置说明

coldMode: transcribe   # 冷缓存时的行为:transcribe=转录式自动压缩;refuse=跳过压缩(仅 pressure;overflow 从不拒绝)
cachePolicy: auto      # auto=按 usage 判定;hot/cold=强制路径(实验/对照用)
hitPriceRatio: 0.0333  # ρ=hit价/miss价(DeepSeek flash 高峰 0.10/3.00 → 1/30),盈亏平衡公式参数
savingsMargin: 0.1     # 转录须比重放便宜出该相对边际才判冷(平局偏热,防 CJK 低估 T)
assumedSavingsRatio: 0.38  # refuse 预检用的 T/U 近似(M3 实测 4647/12192)
cacheTtlSeconds: 3600  # usage 样本超过该秒数按陈旧判冷;0=关闭(长空闲驱逐的可配置缓解)。实测参考:command-code 中继驱逐窗口 >17h(2026-09-03 B8 取证),若 provider 已知长保留可调大;保守默认 1h 安全(误判冷只多付钱,不偏离 stock)
# 其余键与 dsh-compaction-basic 完全一致(thresholdRatio/retainRatio/summarizationProvider/
# summarizationModel/maxTokens/modelPolicies/...),透传基类

注意:coldMode: refuse 在部分中继路由(如 opencode-go)上会导致任务被 max-tokens 截断——该路由的超窗请求不报 CONTEXT_WINDOW_EXCEEDED,overflow 兜底永不触发。中继路由建议保留默认 transcribe(详见 M3 报告 §7.3)。

仓库结构

dsh-cache-aware-compaction/
├── dsh-compaction-cache-aware/   # 插件包(lib/ + test/,61 单测)
├── docs/
│   ├── dsh_cache_aware_compaction_plan_input_2026-08-15.md  # 任务输入(自包含)
│   ├── dsh_cache_aware_compaction_recon.md                  # 源码侦察笔记(行号证据)
│   ├── plan-cache-aware-compaction-v0.1.md                  # 决策完备实施计划
│   ├── cache-aware-m3-report.md                             # 四组对照实验报告
│   ├── model-compare-report.md                              # 多模型对照实验(flash/glm/mimo)
│   └── dsh-plugin-plan-build-workflow-template.md           # plan/build 双会话工作流模板
├── experiments/                   # 可复现实验(脚本已参数化路径;需 dsh + API key)
└── LICENSE                        # MIT

运行测试

# 在装有 dsh 0.1.1-rc.2 版本线的机器上(依赖从 dsh 安装的 node_modules 解析):
cd dsh-compaction-cache-aware && node --test

版本说明:npm registry 上 @deepseek-ai/dsh-* 已发布 0.1.1-rc.2(2026-08 复核),本插件的 peerDependencies 对应 ^0.1.1-rc.2(支持范围:dsh 0.1.1-rc.x 版本线,引擎基类 API 与 0.1.0-rc.x 逐字节一致),CI 已启用 push/pull_request 自动触发。本包未发布 npm,安装走 dsh plugin --profile <name> add file:... 本地路径;若你要发布到 npm,以 @septtpes scope 直接发布即可。

许可证

MIT © 2026 SeptTpes

About

Cache-aware compaction engine for dsh (DeepSeek Harness): replay when the prefix cache is warm, transcribe when cold

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages