前言¶
用 DSH(DeepSeek Harness)的 Web 客户端跑会话时,输入框下方的自带统计行只显示轮次、时长和 token 数。这一轮到底花了多少钱,要去官方平台对账才知道;账户余额还剩多少,平时也不会专门盯着,往往等到请求因余额不足失败才察觉。
@kidli1412/dsh-session-cost 解决的就是这两个问题:把本次会话的 Token 费用估算(按模型逐条 CNY 计价)与 DeepSeek API 余额,并入自带统计行。下面介绍它的实现、安装与配置。
这是什么¶
@kidli1412/dsh-session-cost 是 KIDLi1412 维护的 DSH Web 客户端插件(manifest 中 client.platform: web),MIT 许可证,当前版本 0.1.9。它属于 DSH「一切皆插件」生态里的社区作品。
插件分两端:
1、服务端:GET /api/session-cost/summary?session=<id> 增量折叠会话事件并按模型计价;GET /api/session-cost/balance 查询 DeepSeek 余额;同时注册 session-cost settings namespace 供配置卡读写。
2、浏览器端:注册 conversation.composer.dock 槽位,把费用/余额段追加进自带统计行的 DOM,并在设置页注册一张插件配置卡片。
核心功能¶
会话费用估算¶
费用在服务端按模型逐条计价:先从会话事件日志折叠出每个模型的输入/输出/缓存命中 token(语义与 dsh-token-meter 的 tokenUsage 投影一致),再按 lib/cost.js 里的 CNY 单价表计算。一个会话里混合多个模型时,各模型分别计价,不会笼统取平均。
费用每 30 秒刷新一次,token 用量变化后也会自动触发刷新。悬停可查看分模型明细,跨多个计价时段时会显示高峰/空闲/旧价的费用拆分。
DeepSeek 余额查询¶
余额复用官方接口 GET {baseURL}/user/balance,凭据经 DSH 的 credentials 缝解析。查询带 2 分钟内存缓存和单飞防抖,每 5 分钟刷新一次;?refresh=1 可强制绕过缓存。悬停显示余额构成(充值/赠送)。
显示与交互¶
费用/余额段追加到自带统计行同一行。DSH rc.7 起自带统计行有 748px 宽度上限加省略号截断,追加段会被裁掉;插件会自动把统计行放宽到容器全宽并取消裁剪,效果同 zh_pro 的「统计全显示」,但不依赖它。
⟳ 按钮手动刷新,强制查询上游,成功后短暂显示「已更新 HH:MM」。悬停气泡大致如下:
本会话费用估算: ¥0.1234
deepseek-v4-flash · 输入 12,345 tokens · 输出 1,234 tokens · ¥0.0152
余额: ¥36.44
充值余额: ¥30.00
赠送余额: ¥6.44
更新于 10:32
费用为估算值:token 用量来自会话日志,单价见官方定价页(…)。
定价与估算¶
默认单价表取自官方定价页中文版(2026-08-17 起生效),单位为 CNY / 百万 tokens:
| 模型 | 输入(缓存未命中)空闲 / 高峰 | 输入(缓存命中)空闲 / 高峰 | 输出 空闲 / 高峰 |
|---|---|---|---|
| deepseek-v4-flash | ¥1.5 / ¥3.0 | ¥0.05 / ¥0.10 | ¥4.5 / ¥9.0 |
| deepseek-v4-flash-vision-exp | ¥1.5 / ¥3.0 | ¥0.05 / ¥0.10 | ¥4.5 / ¥9.0 |
| deepseek-v4-pro | ¥4.5 / ¥9.0 | ¥0.15 / ¥0.30 | ¥13.5 / ¥27.0 |
| deepseek-chat(V3 遗留,默认) | ¥2(平峰) | ¥0.5 | ¥3 |
| deepseek-reasoner(V3 遗留,默认) | ¥4(平峰) | ¥1 | ¥16 |
V4 模型实行峰谷定价:高峰时段为北京时间工作日 9:00–12:00、14:00–18:00,高峰价为空闲价的 2 倍;2026-08-23 0 时起周末全天按空闲价计费。插件按每条 usage 样本的事件时间归属时段分别计价;2026-08-17 0 时之前的样本按旧的平峰价(LEGACY_PRICING)计。
两点处理值得注意:
cacheWrite没有 DeepSeek 等价项(上下文缓存自动命中计费),默认按缓存未命中输入价计(分时段),避免低估。- V3 遗留模型未列入官方页面,保持最后已知的平峰价。
价格变动后,可以更新 lib/cost.js 的 DEFAULT_PRICING,也可以通过插件配置 pricing 覆盖,支持平峰格式或分时段格式:
# ~/.dsh/settings.yaml 或 profile 插件配置
session-cost:
pricing:
deepseek-v4-flash:
input: 1
cacheRead: 0.02
cacheWrite: 1
output: 2
# 或分时段(offpeak/peak 各自覆盖,未给字段继承默认):
# deepseek-v4-pro:
# offpeak: { input: 4.5, output: 13.5 }
# peak: { input: 9, output: 27 }
安装与启用¶
从 npm 安装:
dsh plugin --profile web add @kidli1412/dsh-session-cost
从 GitHub 安装:
dsh plugin --profile web add github:KIDLi1412/dsh-session-cost
本地开发用链接安装,改动即时生效:
dsh plugin --profile web add link:path/to/dsh-session-cost
安装后重启 dsh web,浏览器硬刷新(Ctrl+Shift+R)。经过上面的步骤,打开任意会话,自带统计行末尾就能看到费用与余额。移除:
dsh plugin --profile web remove @kidli1412/dsh-session-cost
设置项¶
设置入口:设置 → 插件 → 插件配置 → 会话费用显示。
- 低余额阈值:默认 10 元,余额低于该值显示红色,达到或高于时显示黑色。配置经
session-costsettings namespace 持久化到~/.dsh/settings.yaml,即时生效。 - 0.1.1 及更早版本的 localStorage 配置会在首次加载时自动迁移。
- 0.1.5 起移除了「独立状态栏」显示方式(统计栏下方单独一行),只保留并入统计栏,旧配置里的
displayMode键会被忽略。
兼容性与安全¶
兼容性方面:
- manifest 通过
dsh.compatibility.dshReleases将0.1.2-alpha.4、0.1.2-alpha.5、0.1.2-rc.1逐项声明为compatible。 - Node 要求
^22.19.0 || >=24.0.0(与 DSH 一致);dsh-market 显示的宿主要求为engines.dsh: ^0.1.2-rc.1。 - 0.1.8 适配了 DSH 0.1.2:rc.1 起 live session 不再携带
.events数组,插件改为读session.seq、逐条读session.eventAt(seq),与官方dsh-token-meter的读法相同。
安全方面:
- 两个端点均为 loopback-only 精确路由(peer socket 地址 + Host 双重校验),浏览器同源调用。
- API Key 不落盘:请求时经 credentials 解析
llm-deepseek命名空间的apiKeyEnv(默认DEEPSEEK_API_KEY)。 - 余额缓存仅存内存,TTL 2 分钟。
适用场景与注意¶
适合用 DSH Web 客户端直连 DeepSeek API、想随时掌握会话花费与账户余额的个人使用者和智能体开发者。
使用前留意两点:
1、费用是估算值。token 用量来自会话日志中 provider 上报的 usage 样本,单价表是写死的默认值,官方调价后需更新 DEFAULT_PRICING 或用 pricing 配置覆盖。
2、插件以当前 dsh 进程的权限运行,能读取会话日志、走宿主的凭据缝。安装任何第三方插件前,建议先检查源码与许可证;本插件为 MIT。
整体来看,这个插件把「花了多少、还剩多少」放进了每次会话都能看到的位置,配置成本只有一条安装命令。项目源码与文档见 GitHub:https://github.com/KIDLi1412/dsh-session-cost