Replies: 2 comments 1 reply
答复草稿 · #935 提示词缓存命中率暴跌(工具集中途变化)你的机制判断是对的,rc.6 源码可完整印证,并补充"为什么会变"的机制: 确认:request header 携带完整 tools,任何变化都记录 change 并必然击穿前缀缓存
为什么会变:工具集是动态 registry,每 step 重新组装
建议方向(供官方/社区参考)
另注意:4.5 万 reasoning tokens 落在前缀区,一次工具变化就把它和全部历史一起变成 uncached——工具集稳定性对长推理会话的成本影响远大于直觉。 |
|
看完这条里 26 → 25 个工具导致缓存从中间断掉的时间线,我沿着这个场景把一个实验方案整理成了可安装插件:dsh-progressive-tools。 它会把非 eager 工具的完整 schema 从每步顶层 Native 模式下,支持 deferred tool loading 的 pi-ai Responses / Anthropic 模型会收到原生披露;其他接口走 目前发布到 npm 的版本是 dsh plugin --profile web add dsh-progressive-tools这个实现没有改 Harness checkout,也不用另建 preset。你的这组缓存数据正好说明了它想处理的成本尖峰;如果后面方便用同一个会话复测,前后 |
Uh oh!
There was an error while loading. Please reload this page.
[Feedback] 一个会话的提示词缓存命中率从 ~97% 掉到 ~11% —— 疑因会话中途工具集变化导致前缀缓存失效
TL;DR
在一次会话("Magic Roguelike 3D Game Design")里,缓存命中率只有 ~11%,而同机的其他会话都在 86–98%。排查后发现,大概率是会话中途工具(function)列表发生了变化,导致 DeepSeek 的前缀缓存从这一步起大面积失效,整条会话的命中率被拉垮。
背景 / 目的
dsh 每个 step 都会把完整消息历史重新序列化发给模型。DeepSeek 的提示词缓存是自动前缀缓存——只有两次请求的前部逐字节一致才能命中。请求前部 =
system prompt + 工具定义 + 历史消息,而工具定义紧跟在 system prompt 后面、位于前缀最前面。一旦工具被增删,前缀就从那里断开,后面一大堆历史全部无法命中。我想请官方/社区确认:会话执行中途不应增删工具集(至少不应破坏一个 turn 内的前缀稳定),并希望据此优化。
实测数据(session session-e3ec5725)
来自
~/.dsh/storages/session_projcache.json:uncachedInputTokens = 56,659cacheReadTokens = 6,6566656 / (6656 + 56659)≈ 11%(GUI 显示口径即
dsh-client-ui-conversation的cacheHitPercent:round(cacheReadTokens / (uncachedInput + cacheRead + cacheWrite) * 100))现场时间线(来自 session JSONL)
win_terminal_probe(request/headerreason: initial)。这一步冷启动(该步 usagecacheReadTokens: 0);且模型为deepseek-v4-pro+reasoningEffort: max,输出巨大——step 1 usage 里reasoningTokens: 45148。request/header且reason: change:工具从 26 → 25,win_terminal_probe被移除。uncachedInput = 47,728,仅命中6,656。合计 63,315 个输入 token 计费、只有 6,656 命中 ⇒ 11%。
为什么重要
复现模式(猜测,欢迎补充)
*_probe工具)。uncachedInputTokens涨到接近完整历史大小。建议改进(开放式,欢迎讨论)
turn/start),而不是 turn 中间的 step 之间;或环境
0.1.0-rc.6(@deepseek-ai/dsh)deepseek-official,模型deepseek-v4-pro(reasoningEffort max)/deepseek-v4-flash参考 artifacts
session-e3ec5725-40bc-435d-b08f-9ce85e5ce4dd("Magic Roguelike 3D Game Design")request/headerseq 18(26 工具,initial)与 seq 45337(25 工具,change,移除win_terminal_probe);step-1 usage{inputTokens:8931, outputTokens:45423, cacheReadTokens:0, reasoningTokens:45148};step-2 bucket{uncachedInputTokens:47728, cacheReadTokens:6656}。All reactions