dsh-llm-cost:为 DeepSeek Harness 增加逐 turn、逐 step 的 LLM 成本显示

前言

DSH 已经记录了每个 step 的真实 token 用量,但本身并没有把用量换算成美元成本。对日常跑智能体任务的人来说,光看 token 数不够:还需要知道某一轮 assistant 回复花了多少钱、一个 session 累计花了多少钱,以及价格表过期后如何更新。

dsh-llm-cost 是一个 DeepSeek Harness(DSH)插件,用来补上这一环:在 host 端生成 costUsage session projection,在 Web 客户端把每个 turn 的成本渲染到消息下方,并在会话头显示整个 session 的累计成本。它还提供 llm_cost_refresh 工具,通过 LLM 加联网搜索自动抽取当前价格,并写入 override 价格文件。

这是什么

dsh-llm-cost 是仓库 owner 为 chenyinrusi 的 DSH 插件,许可证为 MIT

它解决的问题可以概括为三件事:

  1. 把 DSH 已有的 token 用量换算成美元成本。
  2. 在 Web UI 中显示每个 turn、每个 step、整个 session 的成本。
  3. 当内置价格快照可能过期时,用 LLM 和联网搜索生成 override 价格文件。

该插件要求 DSH 不低于 0.1.1-rc.2,并且 package.jsonengines 要求 node >= 20

核心功能

成本投影:costUsage

插件会把成本结果写入 costUsage session projection,包含以下字段:

totalCostUsd
pricedSteps
unpricedSteps
token 分桶
byModel 聚合
steps[] 每步明细

其中:

  • totalCostUsd 表示累计美元成本。
  • pricedStepsunpricedSteps 用于区分已定价和未定价的 step。
  • byModel 按模型聚合成本。
  • steps[] 保存每一步的明细,便于排查某一轮为什么是这个价格。

每 turn 成本展示

在 Web 客户端中,插件会在每个完成的 assistant 消息下方的 stats 行渲染该 turn 的成本,例如:

$0.0042 · 1.2K tok

如果某个模型没有匹配到价格,插件显示:

unknown

未定价模型不会被显示为 $0.00,避免“未知”被误读成“免费”。

会话累计成本

插件还会在会话头右上角显示整个 session 的累计成本,并在存在未定价 step 时提示:

+ N unknown

价格自动维护:llm_cost_refresh

llm_cost_refresh 是一个用于维护价格表的工具。它的目标链路是:

  1. 联网搜索目标模型当前价格。
  2. 用 LLM 抽取 JSON 价格数据。
  3. 校验后写入 pricingFile override 文件。

这个工具不会覆盖内置快照,而是写入 override 文件。因此,抽取结果建议先人工抽查,再决定是否长期采用。

安装与启用

如果通过 GitHub 安装,使用下面命令:

dsh plugin --profile web add github:chenyinrusi/dsh-llm-cost#v0.6.1

如果使用本地 tarball,例如内网或离线环境,可以使用:

dsh plugin --profile web add ./dsh-llm-cost-0.6.1.tgz

插件要求:

DSH >= 0.1.1-rc.2
Node >= 20

npm 渠道暂未发布。如果希望使用包名形式安装,需要先在仓库中发布 npm 包:

npm login && npm publish

安装后可以用下面的命令启动本地 Web 验证:

pnpm dsh web --patch ./cordis.patch.yml

典型用法

1、安装插件

先选择 GitHub 或本地 tarball 渠道安装:

dsh plugin --profile web add github:chenyinrusi/dsh-llm-cost#v0.6.1

或者:

dsh plugin --profile web add ./dsh-llm-cost-0.6.1.tgz

2、启动 Web 会话

通过 DSH Web 进入会话,发送消息并等待 assistant 回复。

回复完成后,可以在消息下方查看该 turn 的成本行。会话头右上角会显示整个 session 的累计成本。

3、查看成本明细

costUsage 投影中会保留:

totalCostUsd
pricedSteps
unpricedSteps
byModel
steps[]

如果某一步显示 unknown,说明该模型没有匹配到内置或 override 价格。

4、配置价格刷新

cordis.patch.yml 中该插件行的 config 可以设置以下键,均为可选:

pricing
pricingFile
refreshProvider
refreshModel

各键的含义如下:

  • pricing:内联定价覆盖,合并到内置快照之上。
  • pricingFilellm_cost_refresh 写出的 override 文件路径。
  • refreshProvider:价格抽取调用优先使用的 provider 路由。
  • refreshModel:价格抽取调用优先使用的模型 id。

配置由 zod Config schema 校验。省略 config 键表示使用全部默认值;config: {} 是合法的;不要写空的 config: 键,因为 YAML 会把它解析为 null,配置校验会拒绝;未知键会被静默丢弃。

价格刷新规则

llm_cost_refresh 可以自动执行整条价格更新链路,不需要 agent 逐步编排。

大致流程是:

  1. 使用 DSH 中已安装的 web 搜索 provider,搜索目标模型的当前价格。
  2. 使用可用 LLM 路由抽取 JSON 价格数据。
  3. 对抽取结果做宽松校验。
  4. 将有效结果合并进价格 registry,并写入 pricingFile override 文件。

自动维护价格需要满足两个前置条件:

DSH 中安装了 web 搜索 provider,例如 dsh-web-search-*
至少有一个可用 LLM 路由

如果配置了 refreshProviderrefreshModel,工具会优先使用这一组 provider/model。如果未配置,工具也能自动选择最便宜的可用模型。

需要注意:

  • 工具写入的是 override 文件,不会覆盖内置快照。
  • 抽取结果建议先人工抽查。
  • 坏模型或无效价格会被丢弃,避免污染价格表。

峰谷定价

dsh-llm-cost 支持峰谷定价。

峰时窗口为:

01:00–04:00 UTC
06:00–10:00 UTC

这两个窗口仅适用于工作日。自 2026-08-23 起,UTC 周六和周日全天均按闲时处理。

对于声明了 offPeakFactor 的模型,闲时成本会乘以该折扣系数;未声明 offPeakFactor 的模型恒按峰值价计算。

价格匹配阶梯

插件按下面的阶梯匹配价格:

0. provider === "ollama" → 免费
1. 模型 id 精确匹配
2. 最长 key 子串匹配
3. 未知 → unknown

匹配到价格时,成本按对应单价计算;未匹配到价格时,显示 unknown,而不是 $0.00

开发与维护

在插件仓库中,常用命令如下:

npm test

运行 node --test 纯逻辑测试。

npm run gen

重新生成价格快照:

pricing.json
src/pricing-data.ts
npm run build

使用 tsdown 打包 host、client 和声明文件。

适用场景与注意

适合使用 dsh-llm-cost 的场景包括:

  • 使用 DSH Web profile,希望看到每个 turn 的美元成本。
  • 需要查看一个 session 的累计成本。
  • 使用多个模型,希望按模型聚合成本。
  • 需要维护价格表,但不想每次都手工改配置。

安装前需要注意:

  • 插件以当前 dsh 进程权限运行,安装前应检查源码、依赖和许可证。
  • 许可证为 MIT
  • npm 渠道暂未发布。
  • 要求 DSH 不低于 0.1.1-rc.2
  • 要求 Node 不低于 20
  • 自动刷新价格需要 DSH 中安装 web 搜索 provider,并且至少有一个可用 LLM 路由。
  • unknown 表示未匹配到价格,不表示免费。
  • llm_cost_refresh 写入的是 override 文件,不会覆盖内置快照。

结尾

dsh-llm-cost 的价值在于把 DSH 已有的 token 用量转化为可直接查看的美元成本,并保留每个 turn、每个 step 的成本明细。它还提供价格刷新工具,让内置价格表过期后可以通过 LLM 加联网搜索生成 override 文件。

GitHub 仓库:

https://github.com/chenyinrusi/dsh-llm-cost

DSH 社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系;本材料未给出具体目录页 URL,可通过 GitHub 仓库查看完整 README 和发布版本。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜