前言¶
在 DSH 裏把對話路由到 DeepInfra 時,客戶端往往只能改模型名和消息體,很難按會話切換 DeepInfra 的 service_tier(Flex 與 priority/Standard)或 fail_fast(忙時立即 429 還是排隊)。若要在每個請求裏手寫這些頂層字段,或自己實現 Flex 失敗後再試 Standard,通常得改客戶端或中間層代碼。deepinfra-fusion-proxy 在本地起一個無第三方依賴的反向代理,統一注入參數並做帶 per-session 冷卻鎖的自動回落;同時以 DSH profile bundle 形式提供安裝、Composer 裏的 tier 切換芯片和配置頁。
這是什麼¶
deepinfra-fusion-proxy 由維護者 citydirector 發佈,npm 包名與 DSH 插件標識均爲 deepinfra-fusion-proxy。它在 127.0.0.1:8790 轉發 OpenAI 兼容請求到 https://api.deepinfra.com/v1/openai,對 POST /v1/openai/chat/completions 注入 service_tier 與 fail_fast,其餘路徑(如 GET /models、embeddings)原樣透傳。倉庫同時包含 DSH 宿主插件、Composer 切換卡片和 bundle 配置頁;許可證爲 MIT(見 GitHub 倉庫)。
核心功能¶
DeepInfra 文檔中,service_tier 取 "flex" 或 "priority":Flex 更便宜、盡力而爲,容量滿時排隊;priority 在支持的模型上優先調度、價格更高,響應裏會回顯實際 tier。fail_fast 默認爲 false(排隊);爲 true 時容量問題會直接返回 HTTP 429,便於代理檢測並觸發回落。
下面介紹代理側已文檔化的能力(均可在 README 覈對):
- Body 注入 — 僅修改 chat completions 請求體,不改動模型可見的消息文本。
- 按會話路由 — 從請求體讀取
prompt_cache_key(客戶端在cacheRetention: long時會帶上)作爲會話 id,路由與冷卻鎖按會話隔離,無需改客戶端邏輯。 - 自動回落 — 非 Standard 模式下若 Flex 嘗試得到 429,會再試一次 Standard;之後按
fallbackAction爲"stay"(留在 Standard)或"cooldown"(爲該會話加冷卻鎖,N 輪後自動回到 Flex)。 - 等待策略 — 每會話可選 fail-fast(
fail_fast: true,忙即 429 再回落)或 wait(fail_fast: false,在提供商上限內排隊,DeepInfra 上約最長 10 分鐘)。 - 控制 API — JSON 端點可讀寫狀態、配置、解除冷卻鎖,便於 GUI 或腳本熱更新。
- DSH 集成 — 宿主插件隨 DSH 啓停代理、帶退避重啓;Cordis
Config字段聲明在插件內,DSH 0.1.7+ 下值落在當前 profile 的cordis.patch.yml,修改後可原地重啓受管子進程。Bundle 還提供 Composer 工具行的 Standard/Flex、等待策略、冷卻與回落行爲芯片,以及 Plugins 下的配置頁(狀態、baseURL、端口等)。
核心僅依賴 Node 標準庫(http/https/fs/path);DSH 宿主側依賴 harness 的 @deepseek-ai/schemastery,由 bundle 安裝解析。
安裝與啓用¶
環境要求:DSH >= 0.2.1-rc.2 且 < 0.3.0,Node.js >= 24.9.0(見 package.json 的 engines)。
圖形界面(推薦):側邊欄 Plugins → Add plugin,填入包名並啓用:
deepinfra-fusion-proxy
啓用後代理隨 DSH 在 127.0.0.1:8790 啓動。
命令行(修改 CLI 配置前應先停止對應 DSH 實例,改完再啓動;Desktop 用戶更宜用 Plugins 頁,且 desktop profile 需與該安裝的 CLI 及相同 DSH_HOME):
dsh plugin --profile web add deepinfra-fusion-proxy
注意:僅把包裝進 profile 的 dependencies(例如手動 pnpm add)不等於激活 bundle;profile 的 package.json 需在 dsh.profile.bundles 裏列出 deepinfra-fusion-proxy 纔會加載 cordis.patch.yml 中的行。Plugins 面板會寫入 bundle 條目;手動安裝時需自行補上。
兩個 profile 共用同一 $DSH_HOME 時,默認共用 $DSH_HOME/deepinfra-proxy 狀態目錄;若需獨立實例,應在配置裏爲各 profile 設置不同的 stateDir 與 port。
插件在 DSH 進程權限下運行;安裝前應閱讀 GitHub 源碼與 MIT 許可證,確認可接受其行爲與網絡轉發範圍。
典型用法¶
先做路由,再做會話級 tier 選擇。
- 把 provider 指到本地代理:使用
openai-completions類型 provider,baseURL設爲http://127.0.0.1:8790/v1/openai,並設置cacheRetention: long(以便每會話擁有獨立的prompt_cache_key)。DeepInfra API key 仍配置在 provider 上,由代理轉發時保留Authorization。 - 在 Composer 選 tier:工具行芯片可在 Standard / Flex、等待策略與回落行爲之間按會話切換;狀態寫入代理的
config.json,DSH 重啓後仍保留。 - 在 Plugins 查看狀態:路徑爲 Plugins →
deepinfra-fusion-proxy→deepinfra-proxy→ 配置;可查看核心是否運行、失敗原因、建議給 llm 路由用的 baseURL 與版本等。
請求路徑示意:
OpenAI 兼容客戶端(baseURL → http://127.0.0.1:8790/v1/openai)
→ deepinfra-fusion-proxy(127.0.0.1:8790)
→ https://api.deepinfra.com/v1/openai
SSE 分塊轉發並保留正確頭;上游錯誤映射爲 502。
適用場景與注意¶
適合已在 DSH 或本地 OpenAI 兼容棧中使用 DeepInfra、且需要在會話粒度切換 Flex/Standard、控制忙時排隊還是 fail-fast、並在 Flex 容量緊張時自動試 Standard 的開發者。不適合期望完全不改 provider baseURL 或不需要 DeepInfra tier 語義的場景。
社區目錄 SkillHub 插件頁 與 GitHub 無 DeepSeek / 幻方官方從屬關係;DSH 生態理念是「一切皆插件」,本介紹僅依據公開 README 與 package 元數據。
結尾¶
經過上面的步驟,你可以在不大改客戶端的前提下,把 DeepInfra 的 service tier 與回落策略收到本地代理和 DSH UI 裏統一配置。進一步細節與無 DSH 單獨運行 server.js 的說明見倉庫 README。
- 目錄頁:https://www.skillhub.cn/plugins/citydirector/deepinfra-fusion-proxy
- GitHub:https://github.com/citydirector/deepinfra-fusion-proxy