前言¶
DeepSeek Harness (DSH) 采用插件化架构,通常通过环境变量(如 HTTP_PROXY)配置代理会影响整个 DSH 进程的网络行为。如果你只想让特定的 Provider 路由通过代理访问,而其他 Provider 保持直连,dsh-provider-proxy 插件提供了这种细粒度的控制能力。
插件介绍¶
dsh-provider-proxy 是一个 DeepSeek Harness LLM 中间件,用于将选定的 Provider 路由转发到 HTTP 或 HTTPS 代理。该插件由用户 stayhpjinng 维护,采用 MIT 许可证。
它解决了在多 Provider 场景下,单一全局代理配置过于宽泛的问题。通过该插件,你可以指定哪些 Provider 走代理,哪些 Provider 正常直连,即使并发请求也能保持各自的网络路径。
该插件目标 DSH 版本为 0.1.1-rc.2,Node.js 版本需满足 ^22.19.0 || >=24。
核心功能¶
- Provider 作用域代理:仅对配置的 Provider 路由启用代理转发,其他路由保持原有网络行为。
- 协议支持:支持 HTTP 和 HTTPS 正向代理,基于 Undici 的
ProxyAgent实现。 - 覆盖范围:支持使用
globalThis.fetch的 Provider 实现,包括 DSH 原生的 DeepSeek 适配器和常见的基于 fetch 的第三方 Provider。 - 模型发现:包装了 DSH 的
llm.discoverModels()路径,当“获取可用模型”请求指定了 Provider 时,会走该 Provider 的代理。
安装与启用¶
插件安装为 DSH bundle,但在启用前处于休眠状态。
- 获取插件源码,确保路径为绝对路径。
- 执行安装命令:
dsh plugin --profile web add /absolute/path/to/dsh-provider-proxy
- 重启
dsh web服务,进入设置界面启用。
配置方法¶
插件安装后,需要配置具体的 Provider 和代理地址。
界面配置¶
重启 dsh web 后,打开 Settings → Provider 代理。每个可用 Provider 都有独立的开关、代理 URL(或环境变量)、可选的代理认证环境变量,以及保存和重置控件。关闭开关后,新请求立即生效,已进行中的流式请求允许在原有分发器上完成。
YAML 配置¶
通过编辑配置文件 $DSH_HOME/profiles/web/cordis.patch.yml 进行配置。
- id: provider-proxy
config:
providers:
openrouter:
enabled: true
proxyUrl: http://127.0.0.1:7890
注意:providers 下的键名必须是 DSH 的 Provider 路由(例如 openrouter),而不是上游主机名或模型名。
使用环境变量¶
将代理 URL 放在环境变量中,避免敏感信息出现在配置文件里:
- id: provider-proxy
config:
providers:
anthropic:
enabled: true
proxyUrlEnv: DSH_ANTHROPIC_PROXY_URL
启动 DSH 时需确保环境变量已设置:
export DSH_ANTHROPIC_PROXY_URL=http://127.0.0.1:7890
dsh web
代理认证¶
如果代理需要认证,使用专门的认证环境变量:
- id: provider-proxy
config:
providers:
anthropic:
enabled: true
proxyUrl: https://proxy.example.com:8443
proxyAuthorizationEnv: DSH_ANTHROPIC_PROXY_AUTH
DSH_ANTHROPIC_PROXY_AUTH 应包含完整的 Proxy-Authorization 值,例如 Basic <base64-user:password>。插件会拒绝将凭据直接嵌入在代理 URL 中,防止泄露到配置导出文件。
范围与限制¶
- 协议限制:不支持 SOCKS 或 PAC 代理 URL。
- BaseURL 不重写:插件不会重写 Provider 的
baseURL。如果需要使用 API 中继或反向代理,应在 Provider 的配置中直接设置。 - 网络层限制:仅覆盖使用
globalThis.fetch的实现。对于绕过 Fetch、直接打开 Socket 的 Provider SDK,需要专门的传输层集成,该插件不提供进程级代理回退。 - 模型发现缓存:如果 Provider 已配置了非空的静态
models列表,DSH 会直接返回该列表而不进行网络 I/O。若要测试代理连接,需清空该静态列表。
结尾¶
dsh-provider-proxy 提供了在 DSH 中实现 Provider 级别网络隔离的解决方案,适合需要在特定 Provider 上配置代理、同时保持其他 Provider 直连的场景。