前言¶
在 DeepSeek Harness(DSH)裏,智能體經常要拉取訂閱頁、文檔或 API。環境變量一把梭 HTTP_PROXY 時,直連能通的站點也會進代理;直連失敗又沒有按主機重試,往往只能手動換鏡像或反覆重啓。DSH 社區插件 dsh-proxy-router(維護者 Lequait,分類:聯網工具)針對的是另一層需求:導入一份代理訂閱,在 harness 側做「直連優先、失敗自動走本地代理」,並按主機記住下次該走哪條路。
下面介紹它是什麼、和內置 dsh-http-proxy 的差別、如何安裝與調用。
這是什麼¶
dsh-proxy-router 給 DSH 提供「直連優先、代理兜底」的取回能力:訂閱鏈接 → 本機監督的 mihomo 內核 → 本地混合端口;插件側的 smartFetch 先查路由記憶,直連失敗再走代理重試,成功則記住該主機應走的路徑。
與 DSH 自帶的 dsh-http-proxy 對比(README 中的說明):
dsh-http-proxy啓動時把HTTP_PROXY/HTTPS_PROXY/ALL_PROXY裝成 undici 全局 dispatcher,要麼全代理要麼全直連,不按主機區分,也沒有失敗後再換路的邏輯。- 本插件補的是:兩條路 + 按主機記憶 + 與代理健康解耦——代理沒有健康節點時,直連路徑仍可用;傳輸層使用 Node 內置
node:http/node:https/node:tls與 CONNECT 隧道,無額外 npm 依賴。
節點選擇與故障切換交給 mihomo(訂閱、url-test 組、204 探測);直連/代理策略由插件負責。當前版本 0.2.1,許可證 MIT,要求 DSH >=0.1.0-rc.6。
工作原理(概覽)¶
- 用訂閱鏈接生成/更新內核配置,由插件監督 mihomo,對外提供例如
http://127.0.0.1:<mixedPort>的混合端口(默認 mixedPort 19097,controllerPort 19098,與 Clash Verge 常用端口錯開)。 smartFetch:按主機查路由記憶(默認 TTL 約 30 分鐘)→ 直連優先 → 失敗則經本地代理重試 → 成功則寫入記憶。- 內核路徑:依次嘗試環境變量
DSH_PROXY_CORE、PATH、常見安裝目錄、已運行進程、Windows 註冊表等;都沒有時可自動下載 mihomo 到<DSH_HOME>/cache/proxy-router/bin/(GitHub 直連失敗會換鏡像源)。
安裝與啓用¶
在目標 profile 下安裝插件(命令來自倉庫 README):
dsh plugin --profile <你的profile> add dsh-proxy-router
# 或用 GitHub 源
dsh plugin --profile <你的profile> add github:Lequait/dsh-proxy-router
重啓 harness 後,會話中會出現 proxy_router 工具。
訂閱與配置¶
最少輸入:一個訂閱地址。 支持 Clash YAML 與 base64 節點列表。
方式 ①:交給 agent(推薦)
啓動時帶上訂閱,插件會寫入 <DSH_HOME>/cache/proxy-router/subscription.txt,後續 status / test / fetch 不必重複提供:
proxy_router { action: "start", subscriptionUrl: "https://你的訂閱鏈接" }
方式 ②:寫在 profile 的 cordis.patch.yml
在 proxy-router 條目的 config 中設置 subscriptionUrl,需要隨 harness 自動拉起內核時可設 autoStart: true。其餘字段均可選,例如:
- id: proxy-router
name: dsh-proxy-router
config:
subscriptionUrl: 'https://你的訂閱鏈接'
corePath: ''
autoStart: true
mixedPort: 19097
controllerPort: 19098
directTimeoutMs: 8000
proxyTimeoutMs: 12000
healthUrl: 'http://cp.cloudflare.com/generate_204'
| 字段 | 默認 | 說明 |
|---|---|---|
subscriptionUrl |
'' |
訂閱鏈接(含 token,請自行保管) |
corePath |
自動探測→自動下載 | 通常留空;或設 DSH_PROXY_CORE |
autoStart |
false |
是否隨 harness 啓動內核 |
mixedPort / controllerPort |
19097 / 19098 | 本地混合端口與控制器端口 |
directTimeoutMs / proxyTimeoutMs |
8000 / 12000 | 直連與代理超時 |
healthUrl |
cloudflare 204 | 節點健康探測 URL |
工具 proxy_router 典型用法¶
| action | 作用 |
|---|---|
status |
內核狀態、當前節點、健康節點數、路由記憶條數 |
start / stop |
啓停本地內核 |
test |
逐節點實測健康度,按延遲排序 |
fetch |
按「直連優先 → 代理兜底」取回 URL(force: true 可忽略記憶重試) |
routes / forget |
查看或清空按主機的路由記憶 |
用 fetch 驗證某 URL 是否能在當前網絡下被智能體取回,是常見調試步驟;生產使用前可用 test 確認訂閱裏是否還有健康節點。
適用場景與注意¶
適合誰: 需要在 DSH 會話裏穩定抓取外網資源、又不想全局代理拖慢直連站點,或希望「第一次失敗就換路、第二次起少試錯」的開發者。
務必知曉:
- 插件以當前 dsh 進程權限 運行,並會啓動第三方內核 mihomo;安裝前請閱讀 GitHub 源碼 與 MIT 許可證,只安裝你信任的來源。
- 訂閱 URL 會出現在
<DSH_HOME>/cache/proxy-router/config.yaml等生成文件中,含憑據,勿同步或提交到版本庫。 - 若訂閱節點全部不可用,插件會報告健康節點爲 0,僅直連仍可用,不會因代理掛掉而拖死 agent。
- 本插件尚未接管內置
web_fetch;提供的是獨立工具與本地代理端口。若要讓內置抓取也走同一路由,需額外註冊ctx.web抓取提供方(README 邊界說明)。
DSH 生態強調「一切皆插件」;社區目錄 SkillHub 插件頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-proxy-router 把「訂閱 → 本地 mihomo → 直連優先、失敗走代理、按主機學習」收成 harness 內可調用的 proxy_router 工具,與全局環境變量代理相比,更貼近按站點選路的需求。進一步瞭解可查看 SkillHub 目錄頁 與 GitHub 倉庫。