前言¶
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