dsh-polyglot:为 DSH 提供 OpenAI 兼容端点切换与自动回退

前言

在 DSH 里调用外部模型时,常见的问题不只是缺少一个 OpenAI-compatible endpoint,而是多个 endpoint 同时存在、免费额度不稳定、限流后需要切换,以及每次调用到底由哪个 provider 服务、消耗了多少 token 需要可查询。

dsh-polyglot 是 Jesse-njx 维护的一个 DSH 插件,MIT 许可。它把若干 OpenAI-compatible provider 收敛成一个可选择的虚拟 provider polyglot,并在 free tier 触发 429、quota-exceeded、5xx 或缺少 key 时自动切到链中的下一家。

这是什么

dsh-polyglot 可以概括为三件事:

  • 一个通用的 OpenAI-compatible ctx.llm 适配器;
  • 一组以 JSON 文件维护的 provider preset;
  • 一个在请求失败时自动回退的 router。

它适合需要在 DSH 里使用多个 DeepSeek 或其他 OpenAI-compatible 端点、并且希望 free tier 限流时不直接中断调用链的场景。

核心功能

一个通用 ctx.llm 适配器

dsh-polyglot 提供一个 single generic OpenAI-compatible ctx.llm adapter,参数包括:

baseUrl
apiKey
model
optional headers
quirks

这个 adapter 处理 streaming、tool calls 和 usage extraction。不同 provider 的偏差通过 quirks 这类声明式配置表达,而不是为每个 provider 单独写一套 adapter。

自动回退路由

router 会在以下情况触发 fallback:

429
quota-exceeded
5xx
missing key

触发后,失败的 provider 会进入 cooling-down 状态,策略包括 exponential backoff 和 Retry-After support。请求会尝试链中的下一个 provider。

如果一个 provider 没有配置 key,它会被自动跳过。因此整条链可以降级运行,而不是因为某一个 key 缺失而硬失败。

需要区分两种失败:

  • 如果 fallback-eligible failure 发生在 content 尚未流出之前,可以切换到下一个 provider;
  • 如果 failure 发生在 content 已经流出之后,已经写入的内容无法撤回,最终以 normal error finish 呈现。

Provider presets

provider preset 是位于 presets 下的 JSON data files。每个 preset 带有 verifiedAt 和 free-tier notes,方便查看该 provider 的免费额度、限制和注意事项。

资料中注明 provider figures 可能每周变化,因此 preset 里的 verifiedAt 用于体现验证时间。

会话日志与用量统计

每次尝试都会记录到 session log 中,标记为:

polyglot/served

/polyglot usage 基于 session log 汇总每个 provider 的 calls、ok/failed、tokens 和 estimated cost。

命令

插件提供以下命令:

/model
/model <chain>
/polyglot
/polyglot usage
/polyglot presets

其中:

  • /model 用于查看 chains 和 active one;
  • /model <chain> 用于在 session 中切换 active chain;
  • /polyglot usage 用于查看每个 provider 的调用和用量汇总。

安装与启用

使用以下命令安装到指定 DSH profile:

dsh plugin --profile web add @dsh-polyglot/bundle

安装完成后,在 model selector 中选择虚拟 provider:

polyglot

选择后,请求会经过 dsh-polyglot 的 adapter 和 router 处理。未配置 key 的 provider 会被跳过,链继续尝试后续 provider。

典型用法

配置 key

不同 preset 通过 credentials seam 或环境变量配置 key。示例中给出的环境变量包括:

export NOUS_PORTAL_TOKEN=...      # nous-portal (bearer, manual token for v0.1)
export OPENCODE_API_KEY=...       # opencode-zen
export DEEPSEEK_API_KEY=...       # deepseek-official (new accounts: 5M free tokens, 30 days, no card)
export KILO_API_KEY=...           # kilo (paid fallback rung)

配置完成后,polyglot 会按链中的 provider 顺序尝试可用端点。

查看和切换 chain

查看当前 chain:

/model

切换 active chain:

/model <chain>

切换行为会作为 polyglot/chain 记录。

查看用量

查看每个 provider 的汇总:

/polyglot usage

汇总内容包括 calls、ok/failed、tokens 和 estimated cost。

查看 preset 状态:

/polyglot presets

适用场景与注意

适合以下场景:

  • 在 DSH 中接入多个 OpenAI-compatible provider;
  • 希望 free tier 限流后自动切换;
  • 需要查看每次请求由哪个 provider 服务;
  • 需要按 provider 汇总 tokens 和 estimated cost。

安装和使用时需要注意:

  • 插件以当前 dsh 进程权限运行,安装前应检查源码、许可证和 preset notes;
  • free tiers often gated for evaluation use;
  • OpenCode Zen 的 commercial terms 在资料中标记为 undocumented;
  • preset notes 会在 configure time 暴露 ToS concerns;
  • dsh-polyglot 不会 silently launder usage;
  • provider 数据可能随时间变化,应结合 verifiedAt 查看。

链接

GitHub:

https://github.com/Jesse-njx/dsh-polyglot

目录页 URL 未在已核实资料中给出。

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

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

小夜