前言¶
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。
它解決的問題可以概括爲三件事:
- 把 DSH 已有的 token 用量換算成美元成本。
- 在 Web UI 中顯示每個 turn、每個 step、整個 session 的成本。
- 當內置價格快照可能過期時,用 LLM 和聯網搜索生成 override 價格文件。
該插件要求 DSH 不低於 0.1.1-rc.2,並且 package.json 的 engines 要求 node >= 20。
核心功能¶
成本投影:costUsage¶
插件會把成本結果寫入 costUsage session projection,包含以下字段:
totalCostUsd
pricedSteps
unpricedSteps
token 分桶
byModel 聚合
steps[] 每步明細
其中:
totalCostUsd表示累計美元成本。pricedSteps和unpricedSteps用於區分已定價和未定價的 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 是一個用於維護價格表的工具。它的目標鏈路是:
- 聯網搜索目標模型當前價格。
- 用 LLM 抽取 JSON 價格數據。
- 校驗後寫入
pricingFileoverride 文件。
這個工具不會覆蓋內置快照,而是寫入 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:內聯定價覆蓋,合併到內置快照之上。pricingFile:llm_cost_refresh寫出的 override 文件路徑。refreshProvider:價格抽取調用優先使用的 provider 路由。refreshModel:價格抽取調用優先使用的模型 id。
配置由 zod Config schema 校驗。省略 config 鍵表示使用全部默認值;config: {} 是合法的;不要寫空的 config: 鍵,因爲 YAML 會把它解析爲 null,配置校驗會拒絕;未知鍵會被靜默丟棄。
價格刷新規則¶
llm_cost_refresh 可以自動執行整條價格更新鏈路,不需要 agent 逐步編排。
大致流程是:
- 使用 DSH 中已安裝的 web 搜索 provider,搜索目標模型的當前價格。
- 使用可用 LLM 路由抽取 JSON 價格數據。
- 對抽取結果做寬鬆校驗。
- 將有效結果合併進價格 registry,並寫入
pricingFileoverride 文件。
自動維護價格需要滿足兩個前置條件:
DSH 中安裝了 web 搜索 provider,例如 dsh-web-search-*
至少有一個可用 LLM 路由
如果配置了 refreshProvider 和 refreshModel,工具會優先使用這一組 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 和發佈版本。