前言¶
DeepSeek Harness (DSH) 的核心设计理念是「一切皆插件」。在通过 Web GUI 进行本地开发或调试时,实时掌握 DeepSeek 账户余额、当前会话的 Token 消耗以及上下文占用情况,是控制成本和调试模型行为的基础。
dsh-session-balance 插件专门解决这一问题。它不改变会话状态,也不发起模型请求,而是在 DSH Web GUI 的会话标题栏右侧挂载一个余额徽标。点击展开后,可以查看账户余额明细、会话 Token 用量统计、上下文压力(Context Pressure)以及基于当前模型单价的费用估算。
核心功能¶
该插件通过宿主与浏览器的协作实现数据展示:
- 账户余额:通过调用 DeepSeek
GET /user/balance接口,获取账户总额、充值余额、赠送余额及可用状态。 - 会话用量:读取会话投影(Projection)中的
tokenUsage(细分为未缓存输入、缓存读取、缓存写入、输出)与sessionStats(轮次、步骤、模型耗时)。 - 上下文压力:读取
contextPressure数据,显示已用 Token 与窗口限制的占比。 - 费用估算:在浏览器本地,根据当前选中的模型单价(
modelSelection投影)将 Token 数量换算为 CNY(元)。 - 安全设计:全程只读。API Key 仅在宿主进程内使用,不会写入前端响应;路由仅接受同源 GET/HEAD 请求,防止跨域调用。
安装与启用¶
插件由「宿主插件」和「浏览器插件」两部分组成,需要安装到当前使用的 web profile 中。
1. 添加插件包¶
将插件目录以软链方式加入 profile:
dsh plugin --profile web add link:/path/to/dsh-session-balance
注:link: 表示软链,修改代码后重启 dsh web 即可生效。若需固定副本,可使用 file:/path/to/dsh-session-balance。
2. 挂载插件行¶
编辑 profile 配置文件 ~/.dsh/profiles/web/cordis.patch.yml,添加插件行。该文件默认为空列表,直接追加即可:
- insert:
- id: session-balance
name: 'dsh-session-balance'
3. 重启服务¶
重启 DSH Web 服务以加载插件:
dsh web
刷新 Web GUI(通常是 http://127.0.0.1:3080)后,会话标题栏右侧应出现余额徽标。
配置参考¶
所有配置项均为可选,通过 config 字段覆盖默认值。
基础配置¶
| 字段 | 默认值 | 说明 |
|---|---|---|
balanceEnabled |
true |
是否请求余额接口。关闭后仅显示本地用量与费用。 |
apiKeyEnv |
DEEPSEEK_API_KEY |
凭据引用名,用于从环境变量或 ~/.dsh/.credentials.yaml 读取 Key。 |
baseURL |
$DEEPSEEK_BASE_URL → https://api.deepseek.com |
DeepSeek API 基址。若使用自建网关,需在此处配置。 |
timeoutMs |
10000 |
余额请求超时时间(毫秒)。 |
cacheMs |
60000 |
宿主侧余额缓存时长(毫秒)。 |
refreshMs |
60000 |
前端轮询刷新间隔(毫秒)。设为 0 表示仅加载一次。 |
rate |
off-peak |
off-peak(空闲)或 peak(高峰)。高峰时段价格系数为 2。 |
currency |
CNY |
费用估算的计价币种,仅影响显示。 |
显示开关¶
| 字段 | 默认值 | 说明 |
|---|---|---|
showBalance |
true |
面板是否显示账户余额。 |
showTokens |
true |
是否显示 Token 用量。 |
showCost |
true |
是否显示费用估算。 |
showContext |
true |
是否显示上下文占用。 |
模型单价覆盖(Pricing)¶
插件内置了 DeepSeek 官方定价的默认值,但单价可能随时间调整,建议根据实际模型配置覆盖。
默认单价(元 / 1M tokens,空闲时段):
| 模型 | 缓存命中输入 | 缓存未命中输入 | 输出 |
|---|---|---|---|
deepseek-flash |
0.02 | 1 | 4 |
deepseek-v4-flash |
0.02 | 1 | 4 |
deepseek-v4-flash-vision-exp |
0.02 | 1 | 4 |
deepseek-v4-pro |
0.15 | 4.5 | 13.5 |
配置示例:
config:
rate: peak
currency: CNY
pricing:
deepseek-v4-pro:
cacheHitInput: 0.3
cacheMissInput: 9
cacheWriteInput: 9
output: 27
注意:pricing 表中的数值按空闲时段基准填写,rate: peak 时程序会统一乘以 2。
工作原理¶
插件利用 DSH 的投影机制获取数据,不修改宿主状态。
- 数据源:会话用量和上下文压力来自宿主已有的投影(如
dsh-token-meter提供的tokenUsage和contextPressure)。 - 前端计算:费用估算完全在浏览器端完成,使用投影中的累计 Token 数和宿主下发的单价表。
- 余额获取:前端通过路由
fetch /dsh-session-balance/api/overview请求宿主,宿主读取凭据后调用 DeepSeek API。余额请求带有 TTL 缓存和并发合并机制,避免频繁请求打爆上游。 - 安全路由:后端路由只接受同源的 GET/HEAD 请求,检查
Origin与Host一致性,否则返回 403。
兼容性与要求¶
- DSH 版本:需 DSH
0.1.5-rc.1及以上,且 Web composition 中已启用dsh-token-meter、dsh-session-stats、dsh-api-session-controller。 - Node.js:宿主环境需 Node.js
>=20。 - 浏览器:需支持
Intl.NumberFormat和可选链操作符的现代浏览器。
排查¶
如果功能未正常显示,可参考以下现象与原因:
| 现象 | 原因 / 处理 |
|---|---|
| 标题栏没有徽标 | 确认 cordis.patch.yml 中已添加 session-balance 插件行并重启;确认插件包已安装在 node_modules 中。 |
| 徽标显示「未配置 API Key」 | 检查环境变量 DEEPSEEK_API_KEY 或 ~/.dsh/.credentials.yaml 中的配置。 |
| 显示「获取失败」 | 检查 baseURL 是否正确(如使用了自建网关),或 API Key 是否有效,查看网络请求详情。 |
| 费用显示「未配置该模型单价」 | 在 pricing 配置中补全当前使用的模型 ID。 |
| token 一直是 0 | 确认会话中已发送过带 usage 数据的请求;检查 dsh-token-meter 是否在 web composition 中启用。 |
| 余额与官网不一致 | 官网可能包含未结算费用;插件按缓存刷新,可在面板点击刷新按钮强制更新。 |
License¶
MIT