Back to home

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(缓存命中)cacheWriteoutput
deepseek-v4-flash3.00.103.09.0
deepseek-v4-pro9.00.309.027.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)。