dsh-llm-api-pool: OpenCode Go API Key 池与余额热切换

前言

在管理多个 OpenCode Go 订阅时,手动监控每个 API Key 的余额、处理用量超额或网关报错,会显著增加运维负担。DSH 插件生态提倡「一切皆插件」,dsh-llm-api-pool 正是为此场景设计的一个工具。它将多个 OpenCode Go 订阅聚合为一个池,通过官方接口实时查询用量,并基于余额自动路由请求,实现热切换。

插件简介

dsh-llm-api-pool 是一个为 DeepSeek Harness (DSH) 设计的 API 池插件。它由用户 bainianlaoyao 维护,遵循 MIT 许可证。该插件解决了多 API Key 管理分散、余额状态不透明的问题。通过将多个 {baseUrl, apiKey} 组合收进一个池,它能在本地维护官方用量数据,并按照「余量最大者优先」的原则自动转发模型请求;当某个 Key 出现 429 或 5xx 错误时,它会自动冷却并切换到下一个。

核心功能

该插件主要提供以下能力:

  1. 多 API Key 池:以 {baseUrl, apiKey} 作为条目主键。同一个 Key 重复添加会原地更新配置,不同 Key 则作为新的订阅。你可以同时管理任意多个 OpenCode Go 订阅,无需遵循特定的命名约定。
  2. 官方余额/用量查询:插件会调用 OpenCode Go 网关原生的 GET https://opencode.ai/zen/go/v1/usage 接口。这允许在无需 Org Token 的情况下,实时获取官方的 rolling (5h)、weekly (周) 和 monthly (月) 三重限额的用量百分比与精确重置时刻。美元数值为换算参考值(百分比 × 限额),并非官方原始金额。
  3. 余额驱动热切换:路由决策优先使用缓存的官方用量压力数据(remotePressure、usageRemote,缓存 TTL 为 5 分钟)。在发起模型请求前,若官方用量数据过期,系统会非阻塞地刷新余额,选出余量最大的订阅。如果请求失败(429、5xx 或超时),该 Key 会被冷却 60 秒,并自动尝试列表中的下一个 Key。
  4. 设置页 UI:在 DSH 设置中进入「LLM API 池」页面,可以添加、删除、启用或停用条目,并探查模型列表。每张卡片独立展示官方限额(进度条 + 换算美元 + 重置时刻)以及当前的路由预览。

安装与启用

通过 DSH 的官方 CLI 进行安装。安装过程会自动处理依赖、挂载 Host 半和 Client 半。

dsh plugin --profile web add dsh-llm-api-pool

安装完成后,插件会自动注册相关的路由和 Provider。

使用方法

安装并启动插件后,可以通过以下方式使用:

  1. 通过设置页管理:

    • 打开 设置 → LLM API 池。
    • 点击 + 添加 API。预设选择 OpenCode Go,系统会自动填入 https://opencode.ai/zen/go/v1 以及默认的限额信息(5h $12 / 周 $30 / 月 $60)。粘贴你的 OPENCODE_API_KEY 并添加,系统会自动探查模型列表。
    • 在卡片上点击 「刷新限额 / 查询余额」,系统会调用官方接口,显示 [官方] $x.xx / $cap (p%) · 重置 HH:MM:SS。
    • 添加第二个订阅(使用不同的 Key),你会看到第二张卡片,各自独立管理余额。后续的模型请求会自动优先路由到余量最大的订阅,失败时自动切换。
  2. 通过 CLI 工具:
    插件提供了丰富的命令行工具,可用于脚本化操作:

    • llm_pool_list / llm_pool_add / llm_pool_remove / llm_pool_update
    • llm_pool_probe / llm_pool_usage / llm_pool_limits / llm_pool_route / llm_pool_chat / llm_pool_balance

工作模式

插件提供了两种接入方式,以适应不同的使用场景:

  1. 作为 DSH 原生 Provider 使用(零配置):
    插件装载后会自动向 DSH 注册一个名为 LLM API Pool (余额热切换) 的模型 Provider。

    • 模型选择器:模型列表为池内所有条目探查到的模型并集。选中任意模型即走池路由,余额热切换自动接管。
    • 参数支持:模型选择器会自动出现 reasoning effort 选项(low/medium/high/max),选择后会透传给 opencode go 网关(reasoning_effort)。
    • 模型设置:在模型设置页,该 Provider 会显示为已就绪,无需手动填写 baseUrl 或 apiKey(均来自池)。
    • 空池处理:池为空时,Provider 的模型列表为空;添加第一个 Key 后自动出现。
  2. 作为 OpenAI 兼容 Provider 接入:
    池本身暴露了 OpenAI 兼容的 API 端点,复用 DSH Web 服务的端口(默认 127.0.0.1:3080)。

    • 模型列表:GET http://127.0.0.1:3080/llm-pool/v1/models 返回池内所有模型。
    • 聊天接口:POST http://127.0.0.1:3080/llm-pool/v1/chat/completions 接收 OpenAI 格式的输入,由池内部路由到具体的 Key,并返回 OpenAI 格式的输出。支持流式传输。
    • 任意客户端接入:任何 OpenAI SDK 或客户端,只需将 baseURL 指向 http://127.0.0.1:3080/llm-pool/v1,并填入任意 apiKey(路由由池内条目决定),即可透明使用余额热切换功能。

数据与安全

  • 持久化存储:条目配置持久化在 sandboxPolicy.workspaceRoot/.dsh-llm-api-pool.json 文件中。该文件包含 API Key 明文,但依赖本机文件权限进行保护。请勿将该文件提交到版本控制系统。
  • 网络请求:插件在 Host 进程内会向 opencode.ai 和 console.opencode.ai 发起只读的用量查询请求。仅在调用 llm_pool_chat 时,才会向条目对应的 baseUrl 发送模型请求。

卸载

如需移除该插件,可以使用以下命令:

dsh plugin --profile web remove dsh-llm-api-pool

卸载后,磁盘上的配置文件(.dsh-llm-api-pool.json)会保留。如果不再需要,可手动删除该文件。

总结

dsh-llm-api-pool 为 OpenCode Go 用户提供了一个集中管理 API Key、实时监控官方余额并自动处理故障切换的解决方案。它通过官方接口保证了数据的准确性,并提供了 UI 和 CLI 双向的操作入口,适合需要管理多个订阅或追求高可用性的 DSH 用户。

相关资源:
* GitHub 仓库
* 插件目录页

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

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

小夜