sapi-budget: Sync AiSpot Grouped Pricing in DSH and Display Session and Sub-Agent Costs

前言

在 DeepSeek Harness(DSH)里跑多轮对话、子代理(subagent)时,主机侧通常不会直接给出「这一会话花了多少钱」。若你接的是 AiSpot(sapi)一类按分组定价的部署,分组和模型单价还会随提供商更新,硬编码价表很快失效。sapi-budget 是社区插件,从兼容的 sapi 部署拉取分组与价目,在界面里展示会话合计与每轮 assistant 成本,并把子代理子树一并计入;切换分组时历史数字会按当前价目即时重算,无需重载或重放会话。

这是什么

sapi-budget(包名 dsh-sapi-budget,GitHub:Lanstzz/sapi-budget)由维护者 Lanstzz 发布,分类为模型推理。它解决的是:在 DSH 中把 AiSpot 各分组的模型价格同步到本地缓存,并在对话标题区与会话末尾用浏览器侧价目计算展示费用;主机不发布金额,投影只携带 token 分桶,由前端对照实时目录计价。

核心功能

会话与子树合计

对话标题区显示会话总成本,计算方式为 subtree(s) = own(s) + Σ subtree(children),即当前会话自身加上所有后代 subagent 的开销。

每轮成本与明细

每条 assistant 回合结束处显示当轮成本。鼠标悬停可查看 breakdown:模型名、各 token 分桶数量与合计。

分组列表与即时重定价

分组列表从提供商抓取,不写死在插件里;分组增减会随提供商变化。在对话标题区的下拉里选择当前分组;历史会话数字会立即按新分组重算,无需 reload 或 replay。

价目数据来源

插件向提供商三个无需认证的公开接口取数:

接口 用途
/api/pricing 模型列表、ratio 与 tiered_expr 表达式
/api/status 额度单位与汇率
/api/user/groups 分组名与各分组 ratio 乘数

分层表达式由 pricing.js 中的手写 tokenizer 与递归下降解析器求值,不使用 eval 或 new Function。

精度与边界说明

  • 分层(tiered)模型在 UI 中标注为「估算」/ estimate。
  • subagent 的花费按根会话的模型费率计价(主机侧无法跨会话归因模型),相关行同样标为估算。
  • 插件安装前已结束的 subagent 没有可读投影,显示为 unknown,不会显示为 $0.00。

主机侧能力

index.js 提供定价服务、三个 HTTP 路由、sapiCost 会话投影,以及 sapi_price agent 工具;client.js 负责 Web 端插槽、分组选择与 tooltip。

安装与启用

插件以当前 DSH 进程权限运行;安装前请自行审阅 GitHub 仓库 源码与 MIT 许可证。

官方安装方式:

dsh plugin add github:Lanstzz/sapi-budget

若使用本地检出目录:

dsh plugin add /absolute/path/to/sapi-budget

安装后需重启应用:bundle 在启动时加载。

配置(可选)

在 profile patch(cordis.patch.yml)中可设置:

- id: sapi-budget
  name: 'dsh-sapi-budget'
  config:
    baseUrl: https://aispot.swj0227.icu   # 任意兼容部署
    group: ''                             # '' 表示由提供商选最便宜分组
    currency: USD
    refreshMinutes: 30

分组通常是在 UI 中选择并写入浏览器 localStorage(键 sapi-budget.group);配置里的 group 仅作回退。

典型用法

  1. 按上文命令安装并重启 DSH。
  2. 打开对话,在标题区下拉选择 sapi 分组(或使用默认最便宜分组)。
  3. 正常多轮对话或触发 subagent;观察标题区会话合计与各 assistant 回合末尾的当轮成本。
  4. 需要核对单价时,悬停当轮成本查看模型与 token 分桶 breakdown。
  5. 切换分组后,同一会话内已有轮次的显示金额应即时更新,无需刷新页面。

开发自检(来自 README,供贡献者参考):

node --check index.js && node --check client.js && node --check pricing.js
node --test test/index.host.test.js
node --test test/client.test.js
node probe-tooltip.mjs

适用场景与注意

适合:接 AiSpot(或兼容 baseUrl 的 sapi 部署)、需要在 DSH Web 界面直观看到会话/轮次/子代理树成本,并随分组切换重算历史的开发者。

注意:

  • DSH 生态是「一切皆插件」;社区目录站点 SkillHub 插件页 与 DeepSeek / 幻方无官方从属关系,并非官方应用商店。
  • 分层模型与 subagent 费率归因存在估算与 unknown 边界,不宜当作账单级精确结算。
  • 价目缓存默认每 30 分钟刷新(refreshMinutes),极端情况下与提供商即时价可能有短暂偏差。

结尾

sapi-budget 把 sapi 分组价目同步进 DSH,并在对话标题与会话轮次上展示含 subagent 子树的成本;分组来自提供商、历史可即时重定价,适合在 Harness 里做成本可见性而非硬编码价表。

  • 目录页:https://www.skillhub.cn/plugins/Lanstzz/sapi-budget
  • 源码与说明:https://github.com/Lanstzz/sapi-budget
羽毛球分组比赛记分
小程序二维码

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

Xiaoye