前言¶
在 DSH(DeepSeek Harness)里跑长会话时,输入框旁的状态栏会汇总 token 用量与缓存命中率,但官方 tokenUsage 投影只有全量聚合桶,没有时间维度,无法回答「这上千万 token 分别发生在高峰还是空闲档」。DeepSeek API 对高峰与空闲两档单价不同,工作日 09:00–12:00、14:00–18:00 为高峰,其余时间(含周末与法定节假日)按空闲计。若只看总 token,很难对照账单做心理预算。
下面介绍社区插件 dsh-session-tariff(维护者 xuanyuanli,分类:客户端)。它在 Composer 状态栏增加「本会话花费」胶囊,按高峰/空闲分档估算金额,点开可看各时段、各用量桶的明细。金额带 ≈ 前缀,表示按 token 与单价推算的估算,不是官方账单。
这是什么¶
dsh-session-tariff 是给 DSH Web GUI 用的插件:在 conversation.composer.dock 状态栏原有统计控件之后、上下文占用圆环之前,显示本会话(整份日志,不是当前窗口)的估算花费,口径与旁边 token 统计一致。
- 目录页:xuanyuanli/dsh-plugin-session-cost(社区插件目录,与 DeepSeek / 幻方无官方从属关系)
- 源码与文档:github.com/xuanyuanli/dsh-session-tariff
- npm 包名:
dsh-session-tariff,当前版本 1.1.0,许可证 MIT - 声明兼容:
@deepseek-ai/dsh^0.2.1-rc.2,README 记载实测于0.2.1-rc.3(DSH 桌面版);0.1.x 的客户端 slot / 投影 API 与 0.2 不同,未测过
插件分宿主半与客户端半:宿主在 DSH 进程内注册会话投影 sessionCost,逐事件折叠每次模型请求并按发起时刻归入高峰或空闲;客户端取投影、套单价并渲染胶囊与对话框。
界面与能力¶
状态栏示例(胶囊排在 token 统计之后):
⌁ 3 轮 102 步 · 251 tok/s ⛁ 18.2M tok · 缓存命中 99% ⊙ ≈¥1.72 ◔ 19%
点击胶囊可展开明细:各时段请求次数,以及缓存读取、未缓存输入、缓存写入、输出四个桶的 token 数与分摊金额;底部注明当前生效的两档单价与时段规则。若会话只在某一档产生用量,明细里只显示该档。
其他已文档化的行为包括:token 列用 K / M 缩写,悬停可见完整千分位;三行桶金额各自四舍五入到 3 位,相加可能与时段合计差 ±0.001;跟随 DSH 主题令牌与语言(中/英);支持 Esc 关闭面板、点击面板外关闭。
工作原理概要¶
DSH 事件流中,插件在宿主侧折叠 usage:
step/start记录本次请求发起时刻(归属时段以此为准,不是完成时刻)assistant/attempt的流式用量会被同一步的assistant/message覆盖,不重复计llm/retry-started后的重试算作另一次请求- 没有 provider usage 的请求(例如被取消且未上报)不计入
投影输出 { idle, peak, peakWindows } 等结构;金额 = Σ(桶 token × 该桶单价) ÷ 1,000,000。README 记载:某 deepseek-flash 会话下,sessionCost 两档合计与同会话 tokenUsage 合计逐项相等,说明与官方 token 统计同口径。
时段判定固定 UTC+8(utcOffsetMinutes: 480):工作日 09:00–12:00、14:00–18:00 为高峰;12:00–14:00、18:00–次日 09:00 为空闲;周六日默认空闲;workdays(调休上班日)优先于周末与 holidays。默认 holidays 为空时,法定节假日会被当作普通工作日处理,需自行按国务院公告补表才能精确。
安装与启用¶
前置:可用的 DSH(Desktop 或带 profile 启动的 dsh)。插件按 profile 安装,对该 profile 下所有会话生效。安装前建议阅读源码与 MIT 许可证;插件在 DSH 进程权限内运行。
方式一:npm(发布后可用)¶
dsh plugin add dsh-session-tariff
方式二:让 DSH 助手从源码安装(README 标注为当前推荐)¶
在 DSH 会话中对助手说明(大意):把插件装到当前 profile,仓库 https://github.com/xuanyuanli/dsh-session-tariff,克隆到本地后用 plugin_manager install_bundle 安装该目录。
方式三:手动 clone 后安装¶
git clone https://github.com/xuanyuanli/dsh-session-tariff.git
再在 DSH 里让助手对该目录执行 plugin_manager 的 install_bundle(目标为绝对路径),或在插件页安装本地目录。
安装后:
- 客户端半(胶囊与对话框):刷新页面即可,必要时
Ctrl+Shift+R - 宿主半(
sessionCost投影):在 DSH 进程内注册;升级宿主代码后需 重启 DSH 才能装载新模块
卸载:助手执行 plugin_manager remove_bundle dsh-session-tariff;npm 安装则用 dsh plugin remove dsh-session-tariff。
配置¶
单价(客户端,默认 deepseek-flash)¶
默认值在 client.js 顶部,单位是货币单位 / 百万 tokens:
const DEFAULT_PRICING = {
currency: '¥',
idle: { cacheHit: 0.02, cacheMiss: 1, cacheWrite: 1, output: 4 },
peak: { cacheHit: 0.04, cacheMiss: 2, cacheWrite: 2, output: 8 }
}
可在 bundle 行的 config.pricing 中部分覆盖。README 说明:2026-10 与 DeepSeek 官方《模型 & 价格》中 deepseek-flash 档一致;cacheWrite 默认取未命中价;会话若跑在 deepseek-v4-pro 上需改 idle 为 0.15 / 4.5 / 13.5、peak 为 0.30 / 9 / 27,否则会低报;价目不会从 API 实时拉取,改价后需手动更新。
时段规则(宿主)¶
默认在 host.js 的 DEFAULT_RULES:
{
utcOffsetMinutes: 480,
peakWindows: ['09:00-12:00', '14:00-18:00'],
holidays: [], // 'YYYY-MM-DD'
workdays: [] // 'YYYY-MM-DD',调休上班日
}
同样字段可写在 bundle 的 config 上(见仓库 cordis.patch.yml 注释)。
典型用法¶
日常无需额外操作:安装并刷新后,长会话过程中直接看状态栏 ⊙ ≈¥… 胶囊。需要核对「高峰花了多少、缓存读取占多少」时,点击胶囊查看分档明细;对照官方价目或自设 config.pricing 时,以底部脚注的两档单价为准。
开发或改折叠逻辑时,可在仓库根目录运行(不依赖 DSH):
node test/fold.test.mjs
改宿主半后重新安装并重启 DSH;只改客户端半刷新页面即可。
适用场景与注意¶
适合谁: 经常用 DSH Web GUI 跑 DeepSeek、希望按官方高峰/空闲价目粗算整会话成本、并区分时段用量的开发者。
务必知晓的限制(来自 README):
- 默认价目针对
deepseek-v4-pro以外的deepseek-flash档;其他模型需改config.pricing - 法定节假日 / 调休表默认空,需自行维护
- 单次请求整体计入发起时刻所在档位,跨 12:00 或 18:00 的长请求不会拆分
- 仅统计上报了 usage 的请求
- 宿主投影键名
sessionCost全局唯一,与其他插件冲突会导致注册失败 - 仅适用于
conversation.composer.dock位置
DSH 生态强调「一切皆插件」;本插件来自社区维护者,安装前请自行审阅 host.js 与 client.js。
结尾¶
经过上面的步骤,你可以在 Composer 状态栏看到与会话 token 统计同口径的分档估算花费,并在需要时用明细对话框对齐高峰/空闲与四桶用量。更多说明见 GitHub README 与社区目录页:
- https://www.skillhub.cn/plugins/xuanyuanli/dsh-plugin-session-cost
- https://github.com/xuanyuanli/dsh-session-tariff