前言¶
DeepSeek Harness(DSH)里若走 Vercel AI Gateway,同一模型往往对应多家 Provider,吞吐差异很大。README 举例:deepseek/deepseek-v4.1-flash-1017 有 22 家 Provider,某次观测最快约 394 tok/s、最慢约 42 tok/s;网关默认路由未必会落到最快的一家。若不干预,首轮请求可能落在中等速度的 Provider 上,而会话 affinity 又会让后续消息尽量留在该 Provider,首轮选错会拖慢整段对话。
下面介绍社区插件 dsh-fastcel(维护者 DavidCarliez,GitHub:DavidCarliez/dsh-fastcel)。它是 fastcel 的 Harness 版:在每次发往 ai-gateway.vercel.sh 的推理请求里,按公开 endpoint 统计把 Provider 排成「最快优先」,并通过 providerOptions.gateway.order 交给网关;失败时按该顺序依次回退。
这是什么¶
dsh-fastcel 是 DeepSeek Harness 插件,分类为模型推理。一句话:每次经 Vercel AI Gateway 的新会话,尽量从当前统计下最快的 Provider 开始;并在 Web 界面展示排名与实际落点。
许可证为 MIT(见仓库 package.json),当前包版本 0.1.0。
核心机制¶
fastcel 如何排序 Provider¶
每次 harness 向 ai-gateway.vercel.sh 发起的模型调用,插件会附带该模型 Provider 列表(最快在前):
- 从公开接口
GET /v1/models/{model}/endpoints读取统计(与 vercel.com/ai-gateway/models 上展示同源,无需额外 key)。按模型缓存 15 分钟;过期后仍用旧数据,后台刷新。 - 按最近一小时的 median throughput 排序。以下情况排到队尾:Provider 已 deprecated;最近 15 分钟成功率低于 90%;请求带 tools 但该 Provider 不支持;上下文窗口小于当前会话所需。
- 将列表写入请求体的
providerOptions.gateway.order。若第一家失败,网关按该顺序继续尝试。
若统计拉取失败,请求原样发出,由网关自行选择。
已有路由优先: 请求体里已经带有 providerOptions.gateway.order 或 providerOptions.gateway.only 时,插件不会改写。
插件不在请求之间持久保存排名;每次请求携带当时算出的顺序。网关自带的 sort: "tps" 在作者测试时多数 Provider 无有效值,fastcel 因此改用 endpoint 统计排序(详见上游 fastcel 文档说明)。
与会话 affinity 的关系¶
Vercel AI Gateway 默认开启 session affinity:会记住本会话上一次成功的 Provider,后续消息优先仍走该家以保持 prompt cache。
典型过程:
- 首条消息:尚无记忆,走 fastcel 列表第一位。
- 后续消息:即使排名变化,仍尽量留在已选 Provider。
- 空闲或失败之后:空闲超过该 Provider 的 cache lifetime(多数约 5 分钟,OpenAI/Azure 约 10 分钟,DeepSeek 自有 API 约 1 小时),或该 Provider 请求失败,网关会忘记绑定;下一条消息再按当时最快 Provider 起聊。
新会话或 subagent 视为新对话,从当时最快 Provider 开始。
在 Harness 中的挂载方式¶
pi-ai 适配器自行构造 gateway 请求且无改 body 的钩子,因此 fastcel 分两层工作:
- 监听
llm/stream,为每次模型调用建立带 session、以及上一轮结束后 token 数的 request scope。 - 钩住进程
fetch:仅当请求来自上述 scope、为POST且目标为https://ai-gateway.vercel.sh的/v1/messages、/v1/chat/completions或/v1/responses,且 JSON body 含 model 时,注入 order 并发送;从流式回复中读取网关 routing 记录。其它请求不受影响。停用插件会移除 hook。
安装与启用¶
依赖(README 原文):
- DeepSeek Harness 0.2.1-rc.2(已测,web profile)
- Node.js 22+
- pi-ai 路由指向 Vercel AI Gateway,例如 profile 的
cordis.patch.yml:
- id: llm-pi-ai
name: "@deepseek-ai/dsh-llm-pi-ai"
config:
providers:
vercel-ai-gateway:
apiKeyEnv: VERCEL_AI_GATEWAY_API_KEY
models:
- id: deepseek/deepseek-v4.1-flash-1017
- id: openai/gpt-oss-120b
任意 endpoint 为 https://ai-gateway.vercel.sh 的 pi-ai 路由均可;插件按请求 host 识别网关,不按路由名称。
在插件仓库目录执行:
npm ci
npm run build
dsh plugin --profile web add "link:$PWD"
然后重启 harness。安装、重启或移除插件时,应确保当前没有正在生成的回复。移除:
dsh plugin --profile web remove dsh-fastcel
重启 harness。
插件以当前 DSH 进程权限运行,并会改写发往 AI Gateway 的推理请求;安装前请自行审阅源码与 MIT 许可证。
典型用法¶
选用任意经 Vercel AI Gateway 的模型后,输入框下方(新建会话页则在输入框上方选项行)会出现当前排名首位,格式类似:
⚡ subconscious · 394 tok/s
若模型厂商自有 API 作为 Provider,面板会标注 first-party,例如 deepseek (first-party) · 191 tok/s(指 DeepSeek 自有 API,不是模型名本身)。未走 gateway 的模型不显示该条。
面板展示的是最近一次回复实际使用的 Provider;更早开始的会话可能仍绑在另一家,与 affinity 行为一致。
| 命令 | 作用 |
|---|---|
/fastcel |
打开当前会话模型的排名面板;Web 外以文本表格输出 |
/fastcel <model> |
输出指定 gateway 模型排名,如 /fastcel zai/glm-5.1 |
/fastcel refresh |
丢弃缓存、重新拉统计并打印当前会话模型排名 |
点击 ⚡ 行同样打开面板:列出 Provider(最快在前)、吞吐、首 token 时延、近 15 分钟 uptime;说明 first-party 与被降序原因;底部一行说明本会话最后一条回复由谁服务及 affinity 状态。面板打开时会随回复更新。routing 信息来自网关每条回复末尾的记录,无需额外请求。
适用场景与注意¶
适合: 已在 DSH 中配置 vercel-ai-gateway、希望新会话尽量落在当前最快 Provider、并想直观看到路由与排名时。
注意:
- 部分 Provider 可能对账户标记
plan_not_eligible,网关会跳过并尝试列表中下一家。 - 统计为公开 endpoint 数据,15 分钟粒度;
/fastcel refresh可强制刷新。 - 重启 harness 会清空内存中最近会话的 served-by 记录。
- DSH 社区插件目录(如 skillhub.cn)为独立站点,与 DeepSeek / 幻方无官方从属关系;本文事实以 GitHub README 与
package.json为准。
结尾¶
dsh-fastcel 在不改写你已有 providerOptions 的前提下,为 Gateway 推理请求注入按吞吐排序的 Provider 顺序,并在 Web 端展示排名与实际落点,适合关心 Gateway 多 Provider 路由效率的 DSH 用户。
- 目录页:https://www.skillhub.cn/plugins/DavidCarliez/dsh-fastcel
- 源码与文档:https://github.com/DavidCarliez/dsh-fastcel