MoyunLee
dsh-api-cost
DSH生态的DeepSeek API费用监控插件
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 16, 2026
- Updated
- Aug 16, 2026
Introduction
@deepseek-ai/dsh-api-cost
让 DeepSeek API 的每一分花费都看得见。
一个挂在 DeepSeek Harness Web 侧边栏的小组件,实时告诉你:这次对话烧了多少 token、 花了多少钱、账户还剩多少余额。悬停展开完整详情,点击进入仪表盘,明暗主题随心切换。
✨ 功能亮点
- 💰 实时余额:直连官方
get-user-balance,API Key 不出服务器,账户余额一目了然。 - 📊 消耗统计:本对话 / 今日 / 本月 / 全局,按模型拆分的 token 与金额,7 日趋势柱状图。
- 🌗 明暗主题:跟随系统自动切换,也可手动白天 / 夜晚,悬停面板与设置面板同步响应。
- 🧾 账单核对:导入官方 CSV 一键对账,偏差清晰可见,还能按官方价格自动校准。
- 🔔 预算告警:月度限额超了可推 webhook,花钱心里有数。
- 🚀 一键充值:面板里直达 DeepSeek 用量页,余额不够顺手充。
- 📦 数据不丢:每次调用写入本地账本,重启后用当前价表重算,老数据金额永远正确。
🚀 快速开始
本地开发(scratch)
在仓库根目录,用 --patch overlay 启动:
pnpm dsh web --patch ./scratch-plugin/cordis.yml
端口被占用时加 --port <port>。
首次使用需做一次包解析:Client 半通过包名
@deepseek-ai/dsh-api-cost被浏览器 模块表加载,需要让 web profile 能解析到这个包。在$DSH_HOME/profiles/node_modules/@deepseek-ai/下建一个指向本目录的 junction ($DSH_HOME默认%USERPROFILE%\.dsh):
New-Item -ItemType Junction `
-Path "$env:USERPROFILE\.dsh\profiles\node_modules\@deepseek-ai\dsh-api-cost" `
-Target "E:\deepseek-harness\deepseek-harness\scratch-plugin\api-cost"
目录已存在就先删旧的 junction。
pnpm dsh web每次启动会重建它管理的profiles/node_modules回退目录,但只增不改,不会动这个链接。
分发安装(发给朋友 / 开源后)
把插件做成组合包后,朋友无需 --patch,直接安装即自动激活:
# tarball
dsh plugin --profile web add ./deepseek-ai-dsh-api-cost-0.1.0.tgz
# 或 GitHub(首次需按提示授权构建脚本)
dsh plugin --profile web add github:MoyunLee/dsh-api-cost
# 或 npm(发布后)
dsh plugin --profile web add @deepseek-ai/dsh-api-cost
装完启动:
dsh web
🔑 配置 API Key
余额查询需要一个 DeepSeek API Key,二选一:
# 环境变量
DEEPSEEK_API_KEY=sk-… dsh web
或写入 $DSH_HOME/.credentials.yaml:
DEEPSEEK_API_KEY: sk-…
优先级:进程环境变量 > .credentials.yaml > .env 层。没配 Key 时余额显示 --,
但 token 与金额统计照常工作。
📖 使用指南
- 侧边栏徽章:左下角两行「余额 ¥X / 花费 ¥Y」,花费后的
+¥Z是本次生成中的实时增量。 - 悬停:弹出完整详情——余额、本对话/今日/本月/全局、Token 详情(分模型 + 总计)、 7 日趋势、最近调用,底部一排「明暗切换 / 核对 / 导出 / 重置 / 充值」。
- 点击徽章:打开设置页「用量与消耗」,完整仪表盘 + 外观模式(跟随系统 / 白天 / 夜晚)
- 账单管理。
⚙️ 配置
本地开发时,配置写在 --patch overlay(scratch-plugin/cordis.yml)的 api-cost 行上;
分发安装时写在 profile 用户层 $DSH_HOME/profiles/web/cordis.patch.yml。都是按 id 覆盖、
与内置默认值合并,只写要改的字段即可:
- id: api-cost
config:
# 覆盖/新增模型价格(¥/百万 token)
prices:
my-model:
input: 3.0 # 缓存未命中
cacheRead: 0.1 # 缓存命中
cacheWrite: 3.0
output: 9.0
# 峰谷计费(默认关闭;北京时间高峰 9:00–12:00、14:00–18:00,谷时段半价)
peak:
enabled: true
peakHours: [[9, 12], [14, 18]]
peakMultiplier: 1.0
offpeakMultiplier: 0.5
# 月度预算告警(0 = 关闭)
budget:
monthlyLimit: 50
webhookUrl: 'https://example.com/hook'
# 余额校准(expected = initialBalance − 本地累计消耗)
calibration:
enabled: true
initialBalance: 100
deviationThreshold: 0.05
内置默认价表(¥/百万 token,2026-08-17 官方高峰价)
| 模型 | input(缓存未命中) | cacheRead(缓存命中) | cacheWrite | output |
|---|---|---|---|---|
| deepseek-v4-flash | 3.0 | 0.10 | 3.0 | 9.0 |
| deepseek-v4-pro | 9.0 | 0.30 | 9.0 | 27.0 |
来源:官方定价页。
🧱 开发者构建
Host 半(src/index.js)是纯 JS,无需构建;Client 半(src/client/index.js)要打包成
浏览器 bundle:
pnpm install
pnpm build:client # 或 pnpm prepare,产物 lib/client.js
打包发布:
pnpm pack # 生成 deepseek-ai-dsh-api-cost-0.1.0.tgz
📝 说明与限制
- 未在
prices中配置的模型按 0 元计费(token 照常累计),先看量再看价。 - 只统计插件启用之后产生的调用;历史会话不回溯(已有账本会按当前价表重算金额)。
- 余额接口每分钟缓存一次;API Key 通过凭据服务解析,不进入浏览器。
- 重置接口为同源 POST(个人本机工具,未做鉴权),会清空全部记录。
- 峰谷按本机本地时间判断,假定本机时区为北京时间(UTC+8)。