前言¶
在 DeepSeek Harness(DSH)裏跑智能體,模型 API 往往要跨公網訪問。常見做法是整機設 HTTP_PROXY,或指望 DSH 自帶的環境變量代理——請求要麼全走代理,要麼全直連,首字延遲裏還常常夾着每次新建的 CONNECT 隧道與 TLS 握手。下面介紹的 dsh-proxy(維護者 ycm50)是社區插件,目標不是「把流量塞進代理」,而是按域名決定每條請求走代理還是直連,並在會話內定格通道、複用連接,且不修改 DSH 官方源碼。插件目錄頁:skillhub.cn/plugins/ycm50/dsh-proxy;源碼與說明:github.com/ycm50/dsh-proxy(當前版本 0.7.0,MIT 許可證)。
這是什麼¶
dsh-proxy 在 DSH host 進程裏安裝進程級 undici dispatcher,並包裝 globalThis.fetch,用兩條自建通道(代理與直連)接管模型相關出站請求。卸載時會還原 dispatcher 與 fetch,並優雅關閉連接池。設置入口在 DSH 客戶端:設置面板 → 左側「HTTP 代理」,保存後下一次請求生效,一般無需重啓(「記錄嘗試日誌到文件」等同理)。
核心功能¶
強制名單 + 先直連、1 秒探測、通就定格¶
除內置豁免外,所有域名共用一套規則(0.7.0;早期「逐次輪換」已廢棄):
- 強制走代理的域名(及子域名):永遠走代理,不探測、不換道。
- 迴環 / 內網 / LAN(如
localhost、127.0.0.0/8、10/8、172.16/12、192.168/16、.local等):永遠直連,任何配置改不動。 - 其它域名:第一次請求先直連,在 1000 ms(
PROBE_TIMEOUT_MS)內拿到響應頭則本會話定格直連;超時則試代理(同樣 1 秒預算);代理仍不通則直連兜底一次;哪條通道先答上,該域名在本會話就定格在哪條通道。已定格通道之後若失敗,纔給另一條通道一次機會;慢不算失敗,不會因慢而輪換。
每個新會話(session/created)會清空按域名的記憶,因此每個會話的第一條外網請求仍會先走直連(強制名單除外)。
連接複用與超時¶
連接池空閒窗口爲 120 秒(POOLED_IDLE_WINDOW_MS),同一會話多輪對話可複用同一條(代理)隧道,減輕首字前的握手成本。README 中記錄的本機實測:新建代理隧道約 1.3–1.9 s,複用約 0.2–0.3 s。
設置裏可調建連超時(默認 60000 ms,不建議低於 30000)、響應頭超時、流空閒超時、連接重試次數與退避等;代理地址留空則插件不生效。
系統代理與子進程¶
可勾選「使用系統代理」,從 Windows / macOS / Linux 讀取本機代理並填入地址。開啓「插件安裝/更新也走代理」時,會把代理寫入子進程環境,讓 pnpm / git 等在安裝插件時也走代理;僅當代理地址爲 http/https 時生效。
診斷¶
- 環境變量
DSH_PROXY_DEBUG=1:每次請求記錄通道、新建/複用連接、響應頭與首個 SSE 分片耗時。 - 設置中打開「記錄嘗試日誌到文件」:嘗試與掛載/卸載事件追加到
<DSH_HOME>/dsh-proxy.log。
也可僅用環境變量指定代理地址(選路仍由名單與規則決定):
$env:DSH_HTTP_PROXY = 'socks5://127.0.0.1:7890'
變量名保持 DSH_HTTP_PROXY,與 DSH 自帶的 HTTP_PROXY / HTTPS_PROXY 互不影響。
兼容性¶
| 插件版本 | 需要的 DSH |
|---|---|
| 0.7.0 | ≥ 0.2.0-rc.1 |
更早版本策略與字段有差異;從 0.2.x(包名 dsh-http-proxy)升級需裝 dsh-proxy 並移除舊包,profile bundles 中的 id 改爲 dsh-proxy,設置需重新填寫。
安裝與啓用¶
官方安裝命令(lib/ 已提交,無需構建;裝完重啓一次 DSH):
dsh plugin --profile <profile名> add dsh-proxy@github:ycm50/dsh-proxy
本地 tarball 示例:
dsh plugin --profile <profile名> add dsh-proxy@file:/絕對路徑/dsh-proxy-0.3.0.tgz
README 註明尚未發佈到 npm;發佈後可用 dsh-proxy@<版本號> 形式安裝。
典型用法¶
- 在「HTTP 代理 → 連接」填寫
http/https/socks4/socks4a/socks5/socks5h代理地址,或勾選「使用系統代理」。 - 若某站點直連極慢但代理正常,把域名寫入「強制走代理的域名」(逗號分隔,支持域名、端口、URL、
.後綴)。 - 需要排查選路時,臨時打開日誌或
DSH_PROXY_DEBUG=1,對照dsh-proxy.log或控制台中的attempt N via direct/proxy行。
延遲對比可用倉庫內腳本(需網絡與代理,不參與默認測試):
node test/latency-bench.mjs --url https://api.opencode.ai/v1/models --proxy http://127.0.0.1:10808 --runs 3 --gap 15000
適用場景與注意¶
適合:需要在 DSH 內按域名分流、減少會話內重複握手、且希望不改官方代碼的開發者。
注意:
- 插件以當前 dsh 進程權限運行,安裝前請自行審閱 源碼與許可證。
- 1 秒探測以「拿到響應頭」爲準,超時 abort 後可能已在服務端產生請求;對可能重複計費的接口宜寫入強制名單,或關閉「可能已送達也重試」。
- 請求體不可重放時不會設 1 秒預算也不會換道重發。
- SkillHub 等爲社區目錄,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-proxy 用「強制名單 + 直連/代理探測 + 會話定格 + 120 秒連接複用」把出站網絡從「全站一種走法」拆成可觀測、可配置的 per-host 策略,並保留完整卸載還原。進一步瞭解請查看 GitHub README 與 SkillHub 目錄頁。