dsh-ai-gateway-provider
Verifieddsh-ai-gateway-provider · v0.7.0 · MIT · Web UI
Any OpenAI-compatible gateway for DeepSeek Harness: probe it, save it, manage its models; known backends also report quota.
Install
dsh plugin add dsh-ai-gateway-provider Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
AI 网关(DeepSeek Harness 插件)
把任意 AI 网关接进 DeepSeek Harness——对话可走 OpenAI、Anthropic、Gemini 协议,模型、参数、额度一处管好。

这类项目本质上是同样的三个接口,只是名字不同。所以这个插件不去维护一份厂商清单,而是按协议来:只要它说 /v1/models 和 /v1/chat/completions,就能用——包括一个还没人听过的新网关。

安装
# DeepSeek Harness → 设置 → 内置插件 → 按包名安装
dsh-ai-gateway-provider
需要 DSH ≥ 0.2.1-rc.1 且 < 0.3.0。本文说明 0.7.0;npm 上实际提供的版本以 npm view dsh-ai-gateway-provider version 的结果为准(写这段时为 0.6.0),请以下载到的那一版为准。现有截图仅作说明,可能早于当前编辑器。
它做什么
- 先探测再保存。 只有用你填的地址和令牌成功列出模型,网关才会被写入配置;地址错了、令牌被吊销了,当场就拒绝,不会等到第一条消息才失败。
- 多台网关同时可用。 每个已保存的网关各注册一条 provider 路由并保持可用;模型选择器按网关分组,两个网关提供同名模型也不会互相顶掉。
- 按网关管理模型。 拉取网关的模型清单、添加它没有列出的模型、逐个改名称/上游映射/上下文/输出上限/输入能力/推理等级/协议,也能隐藏不想要的。
- 模型按厂商分组。
devin/claude-opus-5和claude-opus-5-5会归到 Anthropic 一组,组头显示「已测 N · 可用 M」;分组可折叠,也可以整体关掉。 - 隐藏模型。 单个模型或整组厂商都可以从对话选择器里隐藏,不删除;隐藏的模型留在列表原位、显示为置灰,再点一次即可取消隐藏。隐藏不会把自动模式的网关变成固定清单。
- 隐藏网关。 网关卡片上的眼睛按钮可以把这一台从对话选择器里隐藏,地址、令牌、模型设置和历史会话解析都照旧保留。
- 模型测试。 单个或批量:每次一个极短请求,输出有上限,错误会分类(无可用渠道、令牌无效、限流、超时)。
- 有额度就显示,没有就不显示。 New API、LiteLLM、one-api 系会报告额度;其它网关直接不显示额度,而不是显示成错误。
- 网关自己的身份。 渠道图标优先用站点自己的 favicon,名称用站点声明的名字(页面标题 → 后端自报名称),并显示版本、对话协议和公开信息;识别不出类型时用中性图标。

支持的后端
插件并不需要认识厂商——识别只决定图标和用哪个额度接口。
| 后端 | 识别依据 | 额度 |
|---|---|---|
| New API / one-api / done-hub / one-hub / Veloera / VoAPI | GET /api/status(system_name、quota_per_unit) |
GET /api/usage/token/ |
| LiteLLM | GET /key/info 有应答 |
密钥预算(spend / max_budget) |
| CLIProxyAPI | GET / 返回 CLI Proxy API Server |
无 |
| 其它任何 OpenAI 兼容网关 | GET /v1/models 有应答 |
无 |
每个模型的协议:OpenAI Chat Completions、OpenAI Responses、Anthropic Messages、Gemini。由网关的 supported_endpoint_types 决定,模型编辑器里可以覆盖。
多网关,一个选择器
每个已保存的网关各注册一条自己的 provider 路由,所有网关同时可用,不需要在它们之间切换。模型选择器按网关分组,组名就是网关名称:两个网关提供同名模型时,会分别出现在各自的组里,而不是一个盖住另一个。
路由只分配一次并随网关列表持久化,所以修改或删除某台网关不会挪动其它网关的路由。首个网关保留旧路由 ai-gateway,后续网关各自派生(ai-gateway-<slug>)——这就是 0.7.0 之前记录的会话仍能解析到原来那台网关的原因。
新建会话时和其它 provider 一样选择模型;之后每个会话各自记住自己选的模型。
隐藏网关
网关卡片上的眼睛按钮会把这一台从对话的模型选择器里隐藏。隐藏是可逆的,而且只影响选择器:地址、令牌、逐模型设置和历史解析全部保留,隐藏期间也不再向它请求额度。其它功能照常——测试连接、模型测试、编辑模型、模型能力页都能用。再点同一个按钮即可恢复它的模型显示。
隐藏不是删除:需要去掉配置本身时,用卡片上的删除动作。
「查看的网关」
没有一个需要点亮的「激活」网关。配置里旧的 activeChannel 值会被忽略,页面上也不再提供激活动作:每个已保存的网关始终注册、始终能在对话里使用。
点击网关列表的某一行只是查看动作:它决定上方详情和「模型能力」页描述哪台网关,别的都不变——对话可用性由每个会话选中的模型决定,而不是你最后点了哪一行。
添加或编辑网关

- 设置 → AI 网关 → 添加渠道。新建时地址栏默认获得焦点。
- 地址成为合法的
http(s)URL 后,地址栏里会出现一个内联的获取信息按钮。它只读取公开端点——/api/status、站点首页和 favicon:不读也不发令牌,不调用模型。返回网关类型、版本、站点标题、建议名称和图标。 - 建议名称只在名称栏为空时填入;你手填过的名字不会被覆盖。
- 填令牌、点 测试连接 看模型数量,然后保存。
保存仍会用真实令牌再探测一次;「获取信息」只是预览,不等于保存校验。
令牌只写进 DSH 凭据库——不进配置、不回显、不返回给页面。
性能
打开设置页不读取任何模型目录。页面快照返回的是网关列表、站点身份和额度,不含模型条目,所以来回切标签页或让页面长期开着,都不会向所有网关扇出模型清单请求。某台网关的模型清单是按需加载的——你打开哪台,才请求哪台(models/list),定时刷新也不再顺带触发目录请求。
模型能力与开关
获取模型列表时,同时解析逐模型的推理等级和速度档位。推理优先使用手动映射,其次是网关的 supported_reasoning_levels / default_reasoning_level,再回退到 pi-ai 内置目录或模型系列资料;这些 fallback 是模型资料,不是网关声明,未识别的支持情况仍为未知。速度声明只采纳逐模型的 service_tiers / supported_service_tiers;目录发现不自动发付费模型探测。
点击模型行的铅笔,可以独立启用推理等级和速度档位,通过行编辑表添加、删除允许在对话中出现的档位,并编辑对应 API 参数值。关闭速度会隐藏会话按钮并完全省略 service_tier,旧会话选择也不能绕过;关闭推理等级选择后不再提供等级菜单。自动识别资料保留,重新开启时可继续使用。
GPT / OpenAI 速度档位
速度表每行包含本地档位名与发送给网关的 service_tier 值。预设为 Standard → default、Fast → priority、Ultrafast → ultrafast;可以修改参数值,或选择「自定义档位」并填写例如 turbo → vendor-priority。添加按钮在没有更多已识别档位时直接新增自定义行。配置以 allowedServiceTiers 和 serviceTierMap 按网关及模型保存,只有 OpenAI Chat / Responses 请求发送映射后的值。没有默认速度下拉框,具体档位在对话里选择。
OpenAI Fast mode 官方说明 将 fast 与 priority 作为等价请求写法;插件比较声明与响应回显时将 fast 归一为 priority。Ultrafast 官方说明 有支持模型及可用性限制:编辑器提供该预设,不代表每个模型、账号或网关都可用。
对话里切换:当前模型是 AI Gateway 的 GPT 模型、速度开关开启,且有网关声明、响应回显证据或显式手动配置时,输入框右下、模型按钮左边会出现「⚡ 速度」按钮,可为当前会话选择预设或自定义速度档位,菜单里标明每个档位的依据。这里的选择只对当前会话的这个模型生效,不改模型默认值;没选过的会话保留原有模型配置,不会仅因添加自定义行就自动切换到该档位。(DSH 的模型菜单没有给插件留扩展行,所以放在它旁边。)
怎么判断一个模型支不支持——按「这个网关 + 这个模型」判断,三种证据分开记:
| 证据 | 来源 | 页面显示 |
|---|---|---|
| 网关声明 | 网关模型目录里逐模型的 service_tiers / supported_service_tiers(CLIProxyAPI 在 /v1/models?client_version= 返回) |
编辑器里列出声明的档位,选项标「网关声明」 |
| 响应回显 | 点「测试」,带上该档位发一次极短请求,读取返回的 service_tier |
✓ 回显匹配(UI 标「已生效」)/ ↓ 回显其他档位 / ? 未回显 |
| 手动配置 | 显式添加本地档位和参数映射;未被网关声明或当前映射的测试回显证实 | 对话菜单标「手动配置」,提示中显示实际 service_tier 值 |
速度能力按具体网关、上游模型和实际选用的 OpenAI Chat / Responses 协议判断。GPT 名称只限制此功能的适用范围;模型名、网关品牌、models.dev 都不证明速度支持。显式空列表表示「未声明加速档位」,缺少资料则为未知。标签只描述声明、响应回显或手动配置,响应回显本身不独立证明上游实际加速;耗时变短也不构成证明。
各网关的情况:
- CLIProxyAPI:会在客户端模型目录里声明(Codex 渠道的 GPT 模型通常声明 Fast)。
- New API:部署可能过滤
service_tier,需检查渠道是否允许透传;回显不同或缺失,本身并不能定位过滤发生在哪一层。 - 其他网关:仍可走通用 OpenAI 兼容路径。缺少档位声明保持未知;手动映射是可选尝试,不代表已检测到支持。
模型测试
对单个模型或一批模型各发一次极短请求,输出上限很小,结果记录协议、延迟、输出摘要和错误分类(无可用渠道、令牌无效、限流、超时)。四种协议都支持:OpenAI Chat Completions、OpenAI Responses、Anthropic Messages、Gemini。
Gemini 测试走与聊天完全相同的 POST {网关}/v1beta/models/{模型}:streamGenerateContent?alt=sse,带 x-goog-api-key,并要求返回 finishReason 才算完成;只有 [DONE]、或换回 OpenAI 格式的流都不算成功。Gemini 的聊天基址也建在同一个 /v1beta 上,所以能在对话里跑通的网关,测试走的也是同一条路径。
边界
- 没有自动付费探测。 连接检查、「获取信息」按钮和目录读取都只发只读请求,不调用模型。
- 用户主动触发的动作会调用模型。 模型测试(含批量)和聊天本身都是真实请求,可能计费;只有你按下按钮才会发生。
- 响应回显不是独立证明。 返回的
service_tier只记录网关回了什么,不证明上游真的加速了这次请求;耗时变短同样不构成证明。 - 不支持的范围: Claude 或 Gemini 的速度档位(如果存在这类模式)。它们的协议本身用于对话和模型测试是支持的;速度档位只覆盖 OpenAI Chat / Responses。
隐私与安全
- 探测只发只读
GET,不调用模型、不产生费用。 - 不跟随重定向,令牌不会被转发到其它主机。
- 站点图标只从网关自己的域名取,有大小上限,磁盘缓存 24 小时。
- 识别只用公开接口,只存公开信息(类型、版本、标题、图标)——没有令牌,也没有用户数据。
- 没有额度接口的网关就报「没有」,不会显示成错误。
限制
- 不包含生图和视频工具:
dsh-newapi-provider里的生成工具依赖 New API 自己的任务接口。这里会列出网关的生图模型,但不会驱动它们。 - 额度适配只覆盖上面三类。其它方式暴露额度的后端,在补适配器之前不显示额度。
- 网关识别是启发式的;把所有公开接口都藏起来的网关会被当作普通 OpenAI 兼容端点处理——这仍然足够使用。
开发
npm test # 154 项测试,基于本地假网关
node scripts/probe.mjs --base <url> # 命令行探测
GATEWAY_KEY=sk-... node scripts/probe.mjs --base <url>
许可证
MIT