作者:zoahdev 路 2026-08-15 路 对应上游补丁 https://github.com/zoahdev/deepseek-harness/tree/fix/compaction-inherit-header-config
压缩请求只继承了 provider/model,却强制加 maxTokens: 8192,和正常回合的参数不一致 → provider 前缀缓存全 miss → 每次压缩都把 ~12 万 token 重新计费。
修复前:
{"inputTokens":122558,"outputTokens":1584}
没有 cacheReadTokens —— 100% miss。修复后:
{"inputTokens":402,"outputTokens":3548,"cacheReadTokens":220928}
99.7% 前缀被缓存复用,只有压缩指令本身是新 token。
summarizeWithLlm(compaction-basic)构造摘要请求时:
{ provider, model, messages, system, tools, maxTokens: config.maxTokens(8192), ... }
它只从上次路由请求头里挑了 provider/model,丢掉 reasoningEffort 等参数,还硬塞一个正常回合没有的 maxTokens。provider 的缓存键把 reasoning_effort/max_tokens 算进去,于是压缩请求看起来像全新请求。
fix/compaction-inherit-header-config:整包继承路由请求头(与 agent-loop 的 request proposal 同语义),adapter 默认化的字段照常丢弃,不再强制 maxTokens。压缩调用就和正常回合完全同键。
长会话里看压缩事件的 usage:
cacheReadTokens 且远大于 inputTokens → 缓存命中正常;inputTokens 接近上下文大小、cacheReadTokens 为 0 → 缓存被击穿,检查是否用了未打补丁的版本。