前言¶
在开发基于 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 功能,可以很好地解决智能体开发中网络请求的代理隔离与统一问题。