前言¶
在 DSH 插件體系中,宿主進程可以通過插件獲得新的能力。對於需要把 dsh 發出的 LLM 請求導向指定 HTTP 代理的場景,dsh-llm-proxy 提供了一個比較直接的插件方案。
它主要解決三類問題:讓 dsh 的 LLM 請求走配置中的代理地址;在設置變更時即時生效,而不是必須重啓;通過本地接口查看當前狀態並測試連通性。
下面介紹它的定位、安裝方式、配置字段和需要注意的限制。
這是什麼¶
dsh-llm-proxy 是 DeepSeek Harness (dsh) 的全局 HTTP 代理插件。它使用 undici 的 setGlobalDispatcher 和 EnvHttpProxyAgent 接管 dsh 的 fetch 代理路由,使 dsh 的 LLM 請求能夠走配置的代理。
該項目由 Ye-Yu-Mo 維護,許可證爲 MIT。插件以 bundle 包形式安裝,會自動加入 dsh.profile.bundles,在下次啓動時激活。
核心功能¶
- 全局接管:用 undici
setGlobalDispatcher加EnvHttpProxyAgent接管 dsh 的 fetch 代理路由。 - 代理配置:讓 dsh 的 LLM 請求走配置中的代理地址。
- 熱切換:設置變更後即時生效,無需重啓。
- 可恢復:插件停止或禁用時,會恢復基線 dispatcher,不留進程級殘留。
- 狀態查看:提供本地接口查看當前生效模式。
- 連通性測試:提供本地接口測試代理到目標端點的連通性。
安裝與啓用¶
先使用已覈實的 GitHub 安裝命令,將插件安裝到 web profile:
dsh plugin --profile web add github:Ye-Yu-Mo/dsh-llm-proxy
如果是本地調試,也可以先 clone 倉庫,再使用 link 安裝:
git clone https://github.com/Ye-Yu-Mo/dsh-llm-proxy
dsh plugin --profile web add link:$(pwd)/dsh-llm-proxy
安裝後,需要重啓 dsh web,使 bundle 補丁生效。隨後查看日誌文件:
~/.dsh/dsh.log
看到 [llm-proxy] 日誌,即說明插件已裝載。
配置¶
可以通過 dsh 設置頁的「LLM 代理」項配置,也可以直接編輯本地設置文件:
~/.dsh/settings.yaml
下面是一個示例配置:
llm-proxy:
enabled: true
url: http://127.0.0.1:7891
noProxy:
- localhost
- 127.0.0.1
- ::1
配置項含義如下:
llm-proxy.enabled:是否啓用代理接管。llm-proxy.url:HTTP(S) 代理地址。llm-proxy.noProxy:不走代理的地址列表。
配置變更後,插件支持即時生效,無需重啓 dsh。
狀態與測試接口¶
插件提供兩個本地 HTTP 接口,且 HTTP API 爲 loopback-only,用於降低 LAN 探測風險。
查看當前狀態:
GET /api/llm-proxy/status
調用後可以查看當前生效模式,以及 env.httpProxy、env.httpsProxy 字段。
測試代理連通性:
POST /api/llm-proxy/test
調用時需要提交以下字段:
url:待測試的代理地址。probeUrl:目標端點地址。timeoutMs:超時時間。
適用場景與注意¶
適合以下情況:
- 你希望 dsh 的 LLM 請求統一走指定代理。
- 你需要在運行時切換代理配置,而不是每次修改後重啓 dsh。
- 你需要一個本地接口確認當前代理狀態,並測試目標端點是否可達。
使用前注意:
- 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
- 項目要求 Node >=24。
- dsh 設置頁的配置命名空間白名單是硬編碼的,第三方插件無法自注冊;當前需要手動把
llm-proxy加入白名單,設置頁表單纔可用。 - 插件停止或禁用時,會恢復基線 dispatcher,避免留下進程級殘留。
- 安裝命令請使用資料中給出的命令,不要憑名稱自行拼接。
結尾¶
dsh-llm-proxy 的價值,是把 dsh 的 LLM 請求代理能力做成了可配置、可觀察、可回退的插件能力。
項目地址:
https://github.com/Ye-Yu-Mo/dsh-llm-proxy
如果你在使用 DSH 插件目錄,可以按項目名 dsh-llm-proxy 或作者 Ye-Yu-Mo 檢索。