dsh-aliyun-quota:在 DSH 侧边栏看阿里云额度与花费

前言

用量大了以后,最常见的问题不是「花了多少」,而是「去哪看」:余额要去「我的权益」,账单要去「费用账单」,模型用量还得翻实例明细,几个页面来回切。DSH 的理念是「一切皆插件」,下面介绍的 dsh-aliyun-quota 就是把这个查询链路收回到侧边栏:在 DSH 界面里直接看可用余额、代金券、账单趋势和按模型的 token 明细。

这个插件由 GitHub 仓库 20132556/dsh-aliyun-quota 的所有者 20132556 维护,分类是联网工具,在 GitHub 上是 1 stars,许可证 MIT。它自身零运行时依赖,只调用阿里云官方 BSS OpenAPI,适合以 DSH 桌面端为主要工作界面、想顺手确认账户状态的人。

它能提供什么

一句话概括:阿里云账户的「额度」与「花费」两类数据,从 BSS 官方接口拉取后在侧边栏面板展示。

  • 额度与券:账户可用余额(现金)、可用现金 / 信控额度、代金券面额与剩余、到期提醒。学生认证的 300 元券(云工开物那类)通常以代金券形式发放,会出现在明细里。
  • 花费与模型:本月已花、今日花费、近 8 个月账单趋势、每月 token 用量、按模型 / 按计费项的明细。
  • 面板有两个标签页:花费与模型 / 额度与券,每次按顺序刷新,默认每 90 秒自动刷新一次,也可以手动点「刷新」。

数据来源对应的接口如下,资料中已明确列出。

数据 来源接口
账户可用余额(现金) QueryAccountBalance → AvailableAmount
可用现金 / 信控额度 QueryAccountBalance → AvailableCashAmount / CreditAmount
代金券列表(面额、剩余、到期、状态、适用产品) QueryCashCoupons
近 N 个月账期汇总(消费、券抵、折扣) QueryAccountBill(Granularity=MONTHLY)
逐日花费 DescribeInstanceBill(Granularity=DAILY,每天一次)
按模型 / 计费项的 token 用量 DescribeInstanceBill → InstanceID 第 3、4 段

其中「按模型」的口径来自百炼的 InstanceID 格式:第 3 段是模型名,第 4 段是计费项(输入 / 输出 / 缓存 × 高峰 / 闲时)。插件按这两段聚合,所以能给出某个模型花了多少钱、用掉多少 token。非百炼产品(ECS、OSS 等)没有这个格式,插件退回按产品名分组,这是正常行为,不是故障。

安装与启用

先看环境:package.json 里声明 engines.dsh 为 >=0.2.1-rc.3,engines.node 为 >=18。DSH 版本低于此值插件不会按预期加载。

官方给出的安装命令是(PowerShell):

dsh plugin --profile desktop add dsh-aliyun-quota

装完必须重启 DSH 桌面端,插件在启动时加载。

如果命令走不通,可以从本地源码安装:

git clone https://github.com/20132556/dsh-aliyun-quota.git
cd dsh-aliyun-quota
dsh plugin --profile desktop add link:<本目录绝对路径>

再不行就手动改 profile 的两处配置,然后重装依赖:

~/.dsh/profiles/desktop/package.json
  - dependencies 里加   "dsh-aliyun-quota": "<版本或路径>"
  - dsh.profile.bundles 里加   "dsh-aliyun-quota"
cd ~/.dsh/profiles/desktop
pnpm install

改完一样要重启 DSH。

配置 AccessKey

插件要用阿里云官方 BSS OpenAPI 查数据,需要一对 AccessKey。先说明一点:这个插件以当前 DSH 进程的权限运行,读写范围和 DSH 进程本身相同,所以装之前建议先过一遍源码与许可证(MIT)。

取 AK 的步骤,资料里建议这样走:

  1. 打开 RAM 访问控制 → AccessKey(https://ram.console.aliyun.com/manage/ak)。
  2. 创建 RAM 用户,不要用主账号 AK——主账号 AK 权限过大,泄露风险高。
  3. 给这个 RAM 用户授予 AliyunBSSReadOnlyAccess,只读操作足够查余额、代金券和账单。
  4. 把 AccessKey ID 和 Secret 粘进插件面板,点「保存并验证」。

插件保存前会真的调一次接口验证,验证不过不落盘,避免存进一堆废密钥。用主账号 AK 的话,需要先确认账号没有被限制调用 BSS OpenAPI。

密钥的存放位置与格式:

%USERPROFILE%\.dsh\dsh-aliyun-quota\config.json
{
  "accessKeyId": "LTAI5t...",
  "accessKeySecret": "..."
}

这个文件是明文密钥。如果不想落盘,可以改用环境变量,插件会优先读环境变量,面板上会显示 source: env:

setx ALIYUN_ACCESS_KEY_ID "LTAI5t..."
setx ALIYUN_ACCESS_KEY_SECRET "..."

设完重启 DSH。面板上的「设置 → 清除密钥」会删掉那个 config 文件。

日常用法

启用后的操作是:

  1. 重启 DSH 桌面端。
  2. 左侧边栏点「阿里云额度」(圆形 ¥ 图标)。
  3. 第一次会看到设置表单,填入 AccessKey。
  4. 保存后立刻显示。

花费页能看的东西:本月已花(按账期汇总的消费金额,以及其中多少由代金券抵掉)、今日花费(当天 0 点到现在)、近 8 个月账单趋势柱状图(悬停看明细)、本月 token 构成(输入 / 缓存命中 / 输出三段占比,附缓存命中率)、按模型与计费项展开(输入·高峰、输入缓存·闲时、输出·高峰等)、按产品分别列出,以及本月逐日(每天花多少、多少 token、几条明细)。

另外插件注册了 aliyun_quota 和 aliyun_usage 两个工具,可以直接在对话里问额度和花费,不必每次点开面板。

服务端路由挂在 /api/dsh-aliyun-quota/*,只允许本机回环访问:

GET  /api/dsh-aliyun-quota/status?refresh=1   额度总览
GET  /api/dsh-aliyun-quota/usage?refresh=1    花费与模型用量(可加 &months=12)
GET  /api/dsh-aliyun-quota/config             是否已配置(不返回密钥)
POST /api/dsh-aliyun-quota/config             保存并验证 AccessKey
POST /api/dsh-aliyun-quota/clear              清除密钥
GET  /api/dsh-aliyun-quota/health             自检

实现要点与数据时效

资料里写明的实现方式:零依赖,只用 node:crypto 和 node:fs,手写阿里云 RPC 签名(HMAC-SHA1),没有装 SDK;服务端注册 5 个路由,客户端用侧边栏条目加主面板,通过 ctx.slots 挂载,无构建步骤。缓存方面,额度 45 秒,账单 5 分钟——账单一次要发 30 多个请求,不宜频刷;并发请求会合并,账单接口 6 路并发,近 8 个月加 30 天明细约 2 秒出结果。

时效上要注意:BSS 账单出账通常有 1–6 小时延迟,刚花的钱不一定立刻出现,控制台同理。每月 1 号刚过时,上个账期可能还在结算。想要本地验证逻辑,可以跑:

node test/routes.mjs

它会挂一个临时 HTTP 服务,用假 DSH 上下文跑 20 项断言,其中包括「假密钥必须被拒绝且不落盘」和 usage 路由的方法校验。

常见排错

现象 原因 处理
侧边栏没有图标 插件没加载 确认 package.json 的 dsh.profile.bundles 里有它,重启 DSH
保存时报「密钥验证失败」 AK 错 / 被禁用 / 权限不足 去 RAM 控制台检查权限
报 SignatureDoesNotMatch 系统时钟偏差超过 15 分钟 校准系统时间
显示「没有查到代金券」 券未到账,或不是代金券类型 等一会儿;资源包/权益包走的是另外的接口
花费页一直空 账单还没出 / 权限不足 等 1–6 小时;确认有 AliyunBSSReadOnlyAccess
模型显示成产品名 非百炼产品,InstanceID 没这个格式 正常行为
报 Throttling 刷太快触发频控 等 1 分钟再点刷新

代金券查不到时,三种常见原因:券还没到账(学生认证通过后可能有几分钟到几小时延迟);权益本身是「资源包」或「权益包」,不在 QueryCashCoupons 里;RAM 权限不足,账单接口需要 bss:DescribeCoupons、bss:QueryBill、bss:DescribeInstanceBill,AliyunBSSReadOnlyAccess 已包含这些权限。

卸载

# 1. 从 profile 里去掉(两处都要改)
#    ~/.dsh/profiles/desktop/package.json
#      - dependencies 里删掉 "dsh-aliyun-quota"
#      - dsh.profile.bundles 里删掉 "dsh-aliyun-quota"
# 2. 重装依赖
cd ~/.dsh/profiles/desktop
pnpm install
# 3. 重启 DSH

然后删掉 ~/.dsh/dsh-aliyun-quota/ 目录,里面有密钥。

收尾

它的价值在于把阿里云账户的额度与花费查询收敛到 DSH 侧边栏,少开几个控制台页面,并且给出按模型的 token 明细,这是控制台账单页本身不直接提供的口径。同样的接口数据,BSS 账单本身有 1–6 小时延迟,插件无法规避。

目录页:https://www.skillhub.cn/plugins/20132556/dsh-aliyun-quota
仓库:https://github.com/20132556/dsh-aliyun-quota

羽毛球分组比赛记分
小程序二维码

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

小夜