前言¶
自建 New API / One API 兼容网关做 Agent 开发时,单次对话后面往往跟着一串模型调用,每个调用的输入、输出、缓存 token 都不一样。想知道这一轮到底花了多少钱,要么去网关后台翻账单,要么自己手算。dsh-gateway-billing 解决的是后一个动作:它在 DSH Web 对话输入栏下方,按当前对话实时汇总各模型调用产生的费用。
这是一个客户端侧的 DSH 插件,由 YaoleWu 维护,GitHub 仓库目前星标为 0,许可证 MIT,package.json 版本号 0.1.2。下面介绍它的安装与启用方式。
这是什么¶
一个逐对话模型计费显示 skill。从内部一个「网关计费」看板脱敏泛化而来,在 DSH Web 对话输入栏下方实时显示当前对话调用各模型产生的费用,适用于任何自建的、暴露 New API / One API 兼容 /pricing 接口的 LLM 网关。
核心功能¶
下面列出的每一项都来自仓库 README:
- 价格表拉取:从你配置的网关地址拉取 New API / One API 格式的价格表,每 10 分钟自动刷新。
- 双计费模式:按 token 计价(
quota_type=0)与固定单价(quota_type=1)两种模式都支持。 - 逐对话折算:遍历当前对话的所有模型调用节点,按 usage(input/output/cache token)与价格表折算总费用。
- Composer Dock 展示:一行显示总费用、最近调用模型及次数、输入/输出/cache token;多模型对话自动展开分行。
- 未配置/失败态区分:未配置价格表地址与拉取失败(如网络错误)展示不同提示;未配置时不提供「点击重试」,因为重试解决不了没配置的问题。
- 未定价模型提示:价格表中找不到对应条目的模型调用单独计数高亮,不会被静默计为 $0。
设计原则方面,README 写明了三条:网关无关(不内置任何具体网关地址,价格表来源完全由使用者配置)、失败可见、单次刷新多处消费(价格表在服务端每 10 分钟刷新一次并缓存,composer dock 通过 RPC 读取快照,不会为每个对话重复拉取)。
安装与启用¶
README 提供了两种方式。方式一通过 profile 安装(推荐):
# 1. 克隆仓库到本地
git clone https://github.com/LeslieWylie/dsh-gateway-billing.git ~/Desktop/01-Projects/dsh-gateway-billing
# 2. 在 profile 目录添加依赖
cd ~/.dsh/profiles/<your-profile>
# 编辑 package.json,在 dependencies 中添加:
# "dsh-gateway-billing": "link:~/Desktop/01-Projects/dsh-gateway-billing"
# 3. 编辑 cordis.patch.yml,添加一行,并填入你自己网关的价格表地址:
# - id: gateway-billing
# name: 'dsh-gateway-billing'
# config:
# pricingUrl: 'https://your-gateway.example.com/api/pricing'
# 4. 安装依赖
pnpm install
# 5. 重启 dsh 进程
需要说明的是,上面的 clone 命令照抄自 README,其 URL 指向 LeslieWylie/dsh-gateway-billing,而本插件的仓库实际是 YaoleWu/dsh-gateway-billing。仓库 owner 与 README 中的安装路径不一致,采用前请自行核对。
方式二是一条命令,但 README 明确标注「待发布到 npm 后可用」:
dsh plugin add dsh-gateway-billing
也就是说,截至资料抓取时间,npm 安装路径尚未走通,profile 方式是当前可用的路径。
所需配置¶
README 给出的配置项只有一个,写入你自己 profile 的 cordis.patch.yml 中 gateway-billing 条目的 config 下:
| 配置项 | 说明 | 示例 |
|---|---|---|
pricingUrl |
你的网关的价格表接口地址,需返回 New API / One API 格式的 {data: [{model_name, quota_type, model_ratio, completion_ratio, model_price}, ...]} |
https://your-gateway.example.com/api/pricing |
不配置 pricingUrl 时,composer dock 会明确提示「未配置」,不会报错,也不会显示误导性的计费数字。这是 README 强调的一个行为点,和它区分未配置与拉取失败两种状态的设计直接相关。
典型用法¶
启用后不需要额外操作,插件挂在 Composer Dock 上。跑一轮多模型的对话(比如主模型负责推理,再调用一个较小的模型做总结),输入栏下方会逐步汇总:
- 这一轮的总费用;
- 最近调用的模型及次数;
- 输入 / 输出 / 缓存 token 的分项;
- 价格表里没有条目的模型会被单独高亮计数。
价格表每 10 分钟在服务端刷新;改动网关侧价格后,最迟一个刷新周期生效,不需要重启进程。
适用场景与注意¶
适合自建 New API / One API 兼容网关、且网关暴露了 /pricing 接口的场景。插件不内置网关地址,价格表来源完全由使用者配置,所以任何只要满足接口格式的网关都能接。
两点提醒:
- 这个插件以当前 dsh 进程的权限运行,安装前应先检查源码与许可证(MIT)再启用。
- 价格表是折算的输入,不参与实际扣费。扣费以网关账单为准,插件展示的数字用于快速判断对话成本结构。
结尾¶
这个插件的价值在于把「这一轮对话花多少钱」从查账单变成输入栏下的一行:价格表来源你自己配,状态区分清楚,价格表拉不到也不会显示误导性数字。目录页与源码见 https://www.skillhub.cn/plugins/YaoleWu/dsh-gateway-billing 与 https://github.com/YaoleWu/dsh-gateway-billing 。