20 组真实旧/新版配对已完成:总 Token +2.4%,其中非缓存输入 -56.8%;按同一套官方价格计算的费用 -36.6%。 旧版准确答案 119/120,新版 120/120。所有答案,包括错误答案,都计入消耗。
本报告比较 DSH 的两个真实历史提交,使用同一个 deepseek-flash 模型。此前“同版本机制开关”实验是另一个消融实验,其 −35.8% 不能作为本次版本对照的结果。
以下为每版 20 个六轮会话、120 个响应的总和。
| 指标 | 旧 DSH | 新 DSH | 新/旧变化 |
|---|---|---|---|
| 缓存命中输入 | 172,288 | 305,024 | +77.0% |
| 未命中缓存输入 | 191,901 | 82,888 | -56.8% |
| 输入合计(含缓存) | 364,189 | 387,912 | +6.5% |
| 输出(含思考) | 60,848 | 47,277 | -22.3% |
| 总 Token | 425,037 | 435,189 | +2.4% |
总 Token = 缓存命中输入 + 非缓存输入 + 输出。 缓存命中 Token 并没有消失。DSH 的 usage.inputTokens 只包含非缓存输入,必须与 cacheReadTokens 相加才是完整输入;reasoningTokens 已包含在输出里,不能再加一次。两版 translate.ts 的 usage 映射相同。
| 轮次/规则 | 旧版:cache hit / miss | 新版:cache hit / miss | 总 Token:旧 → 新 |
|---|---|---|---|
| 1 / A | 0 / 54,881 | 0 / 54,879 | 63,570 → 63,534 |
| 2 / A | 52,736 / 4,413 | 52,736 / 4,411 | 64,571 → 65,421 |
| 3 / B | 0 / 59,621 | 55,296 / 8,246 | 69,461 → 69,426 |
| 4 / B | 57,600 / 4,242 | 61,824 / 3,938 | 70,951 → 74,098 |
| 5 / C | 0 / 64,194 | 64,512 / 7,625 | 79,230 → 79,980 |
| 6 / C | 61,952 / 4,550 | 70,656 / 3,789 | 77,254 → 82,730 |
第 3、5 轮更新规则。该两轮输入的缓存命中率为旧版 0.0% → 新版 88.3%。第 1、2 轮规则不变,是会话内基线;本次没有另跑独立六轮稳定规则对照。
| 旧版 | 新版 | |
|---|---|---|
| commit | 23b48b7577642eac9b92b2a9c8ca42122130de5a |
ecc6f11cf133155fe7989d5eb6417c7493928df6 |
| 历史边界 | 机制合入之前 | 原生 Flash 路由已启用机制 |
| 模型请求 | deepseek-flash |
deepseek-flash |
| 六轮 system 消息数 | 1、1、1、1、1、1 | 1、1、2、2、3、3 |
| 更新规则时 | 改写原 system 消息,请求前缀变化 | 把新 system 消息加入历史,保留已有前缀 |
两个 checkout 分别导入自己的生产 AgentLoop 和 DeepSeek adapter。未修改生产源码,未手工设置 systemPromptUpdate 或替换模型目录,未重写出站请求。旧版允许请求尚未列入自身目录的模型名;新版使用原生 Flash 目录项。两边确实调用相同 API 模型名,而不是旧 Flash 对新 Flash。
所有配对的首轮请求在替换独立会话编号后完全一致;全部 240 轮均校验了当前规则、用户消息、采样参数、system 消息数量、前缀变化以及 usage 与会话记录的一致性。
新版本保留更多系统提示词历史,因此输入结构会增长;较长的共同前缀又更容易命中缓存。最终输出长度仍受模型生成影响,不能把输出变化全部解释成缓存作用。
两次提交之间还包含 session surface、inbox、runtime identity 等变化。这里测量的是整个 DSH 版本变化,不是单一代码机制的纯因果效应。 旧提交 · 新提交
官方价格页 于 2026-09-10 核验:deepseek-flash 对应 DeepSeek-V4.1-Flash。峰时每百万 Token:缓存输入 $0.006,非缓存输入 $0.30,输出 $1.20;谷时分别 $0.003、$0.15、$0.60。
峰时费用 = (cache_hit × 0.006 + cache_miss × 0.30 + output × 1.20) / 1,000,000
| 项目 | 旧 DSH | 新 DSH |
|---|---|---|
| 缓存输入费用 | $0.00103373 | $0.00183014 |
| 非缓存输入费用 | $0.05757030 | $0.02486640 |
| 输出费用 | $0.07301760 | $0.05673240 |
| 总费用 | $0.13162163 | $0.08342894 |
| 按谷时价格计算的总费用 | $0.06581081 | $0.04171447 |
两版使用同一套单价,避免运行时段差异影响比较;这些是按实际 Token 重算的费用,不是账户账单。谷时所有单价恰为峰时一半,因此版本间变化比例相同。
| 场景(各四对) | 总 Token:旧 → 新 | 非缓存输入变化 | 费用:旧 → 新 | 正确响应:旧 → 新 |
|---|---|---|---|---|
| 订单计算 | 74,807 → 76,321 | -54.1% | $0.026906 → $0.017302 | 23/24 → 24/24 |
| 工单分派 | 87,876 → 89,829 | -55.7% | $0.029979 → $0.020520 | 24/24 → 24/24 |
| 字段导出 | 99,912 → 104,033 | -60.2% | $0.023392 → $0.014834 | 24/24 → 24/24 |
| 日志聚合 | 71,157 → 70,085 | -54.4% | $0.026100 → $0.014436 | 24/24 → 24/24 |
| 发布检查 | 91,285 → 94,921 | -57.7% | $0.025244 → $0.016337 | 24/24 → 24/24 |
旧版唯一一次错误发生在 invoice-02 第 3 轮:系统规则已从 A 更新为 B,答案仍完全符合旧规则 A。单次错误不足以证明普遍准确率差异。
全六轮都答对的会话:旧版 19/20,新版 20/20。错误记录:
invoice-02,before,第 3 轮:1/6 条记录正确。
- 五个固定的合成业务场景,各四对,共 20 对、40 会话、240 响应,没有额外收费 pilot 或自动重试。
- 每个会话规则 A → A → B → B → C → C。两版任务资料、规则、用户消息与验收逻辑相同;thinking=enabled、reasoning_effort=low、temperature=0、max_tokens=8192;没有工具调用或压缩。
- 每场景两对先旧后新,两对先新后旧;每对顺序跑两个完整会话,至多并行两对。
- 每会话有独立 32 字符前缀,降低不同会话互相命中缓存的可能。它们字符长度相同,但分词数量可能略有差别;服务端缓存仍不可完全控制。
- 运行前冻结任务、版本、参数及 runner,记录见 FROZEN.json。离线统计脚本可复算所有请求与答案。生成输出有随机性;四次重复不代表任意真实业务的总体表现。
在五个固定场景内按完整配对重抽样 20,000 次(种子 81723)的描述性区间:
| 指标 | 变化 | 配对 bootstrap 95% 区间 |
|---|---|---|
| 总 Token | +2.4% | [+1.0%, +3.7%] |
| 输入合计 | +6.5% | [+6.4%, +6.6%] |
| 非缓存输入 | -56.8% | [-56.9%, -56.7%] |
| 输出 | -22.3% | [-29.7%, -14.3%] |
| 统一价格费用 | -36.6% | [-40.2%, -32.9%] |
冻结输入 · 逐轮 CSV · 完整记录与验收 · 配对汇总 · 统计结果 · 校验结果 · 详细方案
在完整证据目录执行 python3 source/analyze.py,无需 API Key,不会调用模型。绘图使用 matplotlib==3.11.1,执行 python3 source/render_figures.py。evidence/ 保留全部出站请求和 DSH 会话日志。正式重跑脚本会产生 API 费用,且当前 runner 为避免覆盖结果会拒绝已完成的会话。
Gist 下载全部文件后执行 python3 reproduce.py verify,自动解包并离线核对全部 240 条证据;python3 reproduce.py unpack NEW_DIRECTORY 可展开完整目录。