前言¶
在開發基於 DeepSeek Harness (DSH) 的智能體時,經常需要根據網絡環境或特定任務切換代理服務器。手動修改配置文件並重啓服務不夠靈活,或者使用系統代理容易影響其他進程。DSH 插件體系旨在通過模塊化解決這類問題,dsh-plugin-proxy 正是爲此而生。
這是什麼¶
這是一個運行時動態切換出站代理的 DSH 插件。它通過接管 DSH 進程內的 globalThis.fetch 請求,支持 HTTP 和 SOCKS5 協議。插件維護者 ID 爲 1624318455,遵循 MIT 許可證。
它解決了在 DSH 運行過程中(不重啓進程)快速切換代理模式、配置代理白名單以及將代理環境變量傳遞給子進程的需求。
核心功能¶
- 運行時切換:支持
direct(直連)、system(跟隨系統代理)、manual(手動指定)三種模式。修改配置後立即生效。 - Web 設置卡片:在 DSH 的 Web 界面(Settings → Plugins → Plugin configuration)中可直接編輯配置,無需操作配置文件。
- 單協議匹配:HTTP 和 SOCKS5 使用同一個路由分發器,
noProxy規則在兩種協議下語義一致。 - 子進程跟隨:啓用
exportEnv後,插件會將HTTP(S)_PROXY等環境變量傳遞給 DSH 啓動的子進程(如 bash-tool 中的curl、git等)。
安裝與啓用¶
安裝前請確保環境滿足要求:DSH 版本 ≥ 0.1.2-rc.1,Node.js 版本 ≥ 20。
執行以下命令安裝:
dsh plugin --profile <name> add github:1624318455/dsh-plugin-proxy
安裝完成後,重啓 dsh web 服務,即可在設置中找到該插件。
典型用法¶
你可以通過編輯 $DSH_HOME/settings.yaml 文件或使用 Web 設置卡片來配置。
配置示例¶
在 settings.yaml 中添加 dsh-proxy 配置段:
dsh-proxy:
mode: manual # direct | system | manual
proxy: socks5://127.0.0.1:1080 # 僅 manual 模式有效
noProxy:
- localhost
- .internal.example
exportEnv: true # 僅 manual 模式有效,傳遞給子進程
模式說明¶
| 模式 | 行爲 |
|---|---|
direct |
所有請求直連,不經過代理。 |
system |
讀取系統環境變量或 macOS 系統網絡代理設置。配置文件中的 proxy、noProxy 和 exportEnv 在此模式下被忽略。 |
manual |
使用配置文件中 proxy 字段指定的代理地址,noProxy 用於繞過特定主機。 |
適用場景與注意¶
適用場景:
* 需要在不同網絡環境間快速切換的智能體開發。
* 需要爲 LLM 請求、Web 搜索、HTTP MCP 服務器統一走代理的場景。
* 需要確保子進程(如 Git 操作)也使用代理的場景。
注意事項:
* 進程隔離:插件僅對 DSH 主進程內的 fetch 請求生效。內置的瀏覽器主機(Browser Host)和瀏覽器下載功能是獨立進程,不經過此插件代理,需自行配置瀏覽器代理。
* Bedrock 路由:如果使用 pi-ai 的 Bedrock 路由,AWS SDK 會管理自身的代理,插件導出的環境變量在此處同樣會被 SDK 讀取。
* 子進程生效時機:exportEnv 僅對插件加載後新啓動的子進程有效。切換模式前已運行的子進程不會自動更新環境變量。
* SOCKS5 實驗性:底層的 Undici SOCKS5 Agent 目前上游標記爲實驗性功能。
* 手動模式環境變量:在 manual 模式下,插件會忽略當前環境中的 HTTP_PROXY/NO_PROXY 等變量,完全由配置文件決定路由策略。
總結¶
dsh-plugin-proxy 爲 DSH 提供了靈活的代理管理能力。通過配置文件或 Web 卡片,開發者可以在不重啓服務的情況下調整路由策略,配合 exportEnv 功能,可以很好地解決智能體開發中網絡請求的代理隔離與統一問題。