前言¶
在 DeepSeek Harness(DSH)裏同時配置多家模型 Provider 時,網絡路徑往往不一致:Gemini、OpenRouter 等通常需要代理才能訪問,DeepSeek、Kimi、MiniMax、GLM 等在國內多能直連。若把 HTTPS_PROXY 寫進進程環境,代理會對所有出站 HTTPS 生效,直連 Provider 也會被繞進代理,延遲和失敗點都會增加;不設代理則境外 Provider 完全不可用。
下面介紹社區插件 dsh-llm-proxy-router(維護者 LostAbaddon,分類:聯網工具)。它把「是否走代理」改成按目標主機名逐條判定,規則可在 DSH 設置頁修改,保存後立即生效,無需重啓。
這是什麼¶
dsh-llm-proxy-router 是 DSH 的 bundle 插件:按 Provider 配置哪些 LLM 請求經 HTTP/HTTPS 代理發出,其餘保持直連。代理地址與規則寫在 $DSH_HOME/llm-proxy-router/config.json,不寫入 profile 的 patch 層,升級 DSH 一般不會沖掉用戶配置。
- 目錄頁:https://www.skillhub.cn/plugins/LostAbaddon/dsh-llm-proxy-router
- 源碼與說明:https://github.com/LostAbaddon/dsh-llm-proxy-router
- 許可證:MIT(見倉庫
package.json) - 運行環境:Node.js >= 20
核心功能¶
路由判定順序¶
單次請求按下列順序判定,先命中先算:
- 路由總開關關閉 → 直連。
- 未填寫代理地址 → 直連。
- 目標爲本機(
localhost、127.0.0.1、::1、*.local)→ 直連。 - 目標主機命中某條主機規則 → 走代理。
- 其餘 → 直連。
主機規則來自兩處,按順序拼接:
- Provider 行:勾選「走代理」的 Provider 自帶一組主機名(例如 Gemini 對應
generativelanguage.googleapis.com,OpenRouter 對應openrouter.ai與*.openrouter.ai)。每行可追加自定義主機名(內網網關、自建反代等)。 - 額外主機規則:與 Provider 無關的獨立條目,支持
*通配,可單條停用。
主機名支持精確匹配(如 api.openai.com)、子域通配(如 *.openrouter.ai,不匹配裸域)、全通配 *。
無論界面如何勾選,下列 Provider 永遠不會走代理:deepseek、deepseek-official、ollama、lmstudio。
設置頁¶
路徑:設置 → 模型 分組下的「LLM 代理路由」。
| 區域 | 作用 |
|---|---|
| 總開關 | 關閉後所有請求立即恢復直連,配置保留 |
| 代理地址 | 如 http://127.0.0.1:7890;省略協議時按 http:// 處理;支持 http://用戶:口令@主機:端口 |
| 測試代理 | 向代理發起真實 CONNECT 隧道握手並回報結果與耗時,不經過第三方探測服務 |
| Provider 列表 | 逐行勾選是否走代理;顯示覆蓋的主機名,可追加自定義主機名 |
| 額外主機規則 | 獨立主機名條目 |
| 狀態行 | 當前生效的代理地址與規則條數 |
保存即落盤、立即生效。
實現要點(便於排查)¶
Host 側在進程的 globalThis.fetch 上安裝路由補丁,覆蓋 profile 內各模型適配器共用的出站路徑。命中代理規則時使用 undici 的 ProxyAgent 走 CONNECT 隧道;未命中則交回原始 fetch。插件卸載時補丁完整還原。
瀏覽器側爲自包含客戶端模塊,在 settings.section 槽位註冊設置頁,通過 /api/dsh-llm-proxy-router/* 讀寫配置。Host 暴露的接口包括:GET /state、POST /config、POST /test、POST /reset、POST /selftest、GET /diagnostics。
安裝與啓用¶
官方 README 給出的安裝方式:打包目錄本身即爲可安裝 bundle,使用 plugin_manager 安裝(將 <包目錄絕對路徑> 換爲插件目錄在本機的絕對路徑):
plugin_manager install_bundle <包目錄絕對路徑>
安裝後若 DSH 報告 restart-required,重啓一次 DSH 即可。bundle 的 patch 僅插入一行 Host 條目,不修改 profile 裏其它配置。
典型用法¶
在界面中配置¶
- 打開 設置 → 模型 → LLM 代理路由。
- 填寫代理地址(例如本地 Clash 的
http://127.0.0.1:7890)。 - 對需要翻牆的 Provider(如 Gemini、OpenRouter)勾選「走代理」;國內直連 Provider 保持不勾選(且
deepseek等內置排除項本身不會走代理)。 - 若有自建反代或內網網關,在對應 Provider 行或「額外主機規則」中追加主機名。
- 使用「測試代理」確認隧道可用,保存配置。
配置文件示例¶
首次保存後,以 $DSH_HOME/llm-proxy-router/config.json 爲準。結構示例:
{
"enabled": true,
"proxyUrl": "http://127.0.0.1:7890",
"providers": {
"gemini": { "enabled": true, "extraHosts": [] },
"openrouter": { "enabled": true, "extraHosts": ["openrouter.internal"] },
"deepseek": { "enabled": false, "extraHosts": [] }
},
"hosts": [
{ "pattern": "*.openrouter.ai", "enabled": true, "note": "" }
]
}
適用場景與注意¶
適合誰:在 DSH 中混用境內外多家 LLM Provider,希望「該代理的走代理、該直連的直連」,且不想靠全局 HTTPS_PROXY 一刀切。
權限與安全:插件以當前 DSH 進程權限運行;安裝前請自行查看源碼與 MIT 許可證。走代理時隧道層對目標證書不做二次校驗(requestTls.rejectUnauthorized: false),便於配合私有 MITM 代理,也意味着該層不做證書校驗。
已知邊界(來自 README):
- 判定依據是主機名,不是「哪家 Provider 發起的請求」。同進程內訪問規則內主機的任何請求都會走代理,訪問其它主機則不會——這與「按 Provider 隔離」不是同一概念。
- 僅支持 HTTP / HTTPS 代理,不支持 SOCKS。
- 默認隻影響模型相關請求經
fetch補丁的路徑;搜索、網頁抓取、MCP 等其它流量默認直連,除非其訪問的主機被顯式寫入規則。
DSH 生態強調「一切皆插件」;SkillHub 等社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。本插件當前 GitHub 星標爲 0,功能與邊界以倉庫 README 爲準。
結尾¶
經過上面的步驟,可以在一套 DSH 配置裏同時保留直連國內模型與經代理訪問境外 API,並把規則留在可編輯、可持久化的配置裏。需要詳情時請參閱 SkillHub 目錄頁 與 GitHub 倉庫。