前言¶
在 DeepSeek Harness(DSH)里接海外模型供应商时,常见做法是整机开系统代理,或给终端单独配 HTTP_PROXY。这样往往把网页抓取、MCP、工具调用等一并走代理,既慢也容易和本地服务冲突。若只希望「模型 API 走代理、其余直连」,需要在 Harness 进程内对 fetch 做精细路由。下面介绍社区插件 dsh-model-proxy(维护者 recyvan,分类:模型推理),它专门把 DSH 的模型 API 请求按域名经代理转发,未列入规则的流量保持直连。
这是什么¶
dsh-model-proxy 是面向 DeepSeek Harness 的 model proxy 插件:不修改 Harness 源码,通过 Cordis 补丁在进程内拦截模型相关的 fetch,按配置走系统代理、自定义 HTTP/HTTPS/SOCKS 代理或关闭代理。卸载后行为与未安装时一致。
- 仓库:recyvan/dsh-model-proxy
- 社区目录:skillhub.cn 插件页
- 许可证:MIT(见仓库 README)
- 当前包版本(package.json):0.2.0
- 要求 DSH:0.2.1-rc.2 或更新;设置页由宿主根据插件
Configschema 生成(0.2.x 已移除独立settings服务)
核心功能¶
代理模式与路由¶
| 配置项 | 含义 |
|---|---|
| Mode | rule(推荐)/ system / custom / off |
| Proxy protocol | http / https / socks5 / socks5h / socks4 |
| Proxy address | 如 socks5h://127.0.0.1:7890,或 127.0.0.1:7890(协议由上一项补全) |
| Proxy only these domains | 为空则用内置预设;填写则仅代理所列域名(逗号分隔,支持 *.openai.com、.aiplatform.googleapis.com 等) |
| Exclude domains | 始终直连,优先级最高 |
修改在下一次请求生效,无需重启 DSH。
rule 模式下,域列表为空时内置预设会把 OpenAI、Anthropic、Gemini、xAI、Groq、OpenRouter 等常见海外 API 走代理,DeepSeek、DashScope、智谱、Kimi 等国内线路保持直连。
system 模式跟随 Windows 系统代理(每 30 秒重读 HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings)。
custom 模式可填代理地址,并在 Exclude domains 中列出例外,实现「全局代理、少量直连」。
三条不可放宽的安全约束¶
无论用户如何配置,规则引擎都会先 enforced:
- 强制直连:回环、私网段、
localhost、.local/.lan/.internal等不得走代理;用户只能追加,不能删掉这些项。 - 明文门禁:非
https的模型请求在建连前拒绝,除非在设置页显式开启(页面会常驻警告)。 - 数据最小化:请求/响应体以流透传,不解析、不落盘、不读取
Authorization或供应商 API Key;默认日志只记出口标识与错误类型,不记主机名、路径、正文。
代理出口失败时回退直连,不会静默切换到另一条出口;降级状态会写日志并在设置页展示。
覆盖范围与局限¶
- 会代理:经 Harness
fetch发出的请求——实践中包含几乎全部模型请求;若把某域名加入代理列表,该域名的其他fetch也会走代理。 - 不会代理:
transport: websocket流式、供应商原生 SDK 通道(如 Amazon Bedrock);Harness 内置环境变量代理可处理这类场景。网页抓取工具自建undiciagent,域规则看不到。 - 按域名路由:同一域名若同时承载模型 API 与其他流量,会整域走代理;可把该域放进 Exclude domains。
- 仅单跳代理在 undici 侧完整接线;多跳链在
lib/core/dispatcher.js中接口存在,但只交给 undici 第一跳。 - 代理须监听在 loopback;大陆访问海外 API 时 README 建议优先
socks5h(DNS 由代理解析),并注意 DNS 污染。
安装与启用¶
在对应 profile 下安装插件(命令来自官方 README):
dsh plugin --profile <your-profile> add github:recyvan/dsh-model-proxy
安装后重启 DSH——宿主侧在 Harness 进程内加载。
卸载:
dsh plugin --profile <your-profile> remove dsh-model-proxy
dsh --profile <your-profile>
移除后恢复全直连,无配置残留、无监听端口。
典型用法¶
场景 A:本机 Clash / V2Ray 在 7890,仅海外 API 走代理¶
- 打开 Settings — Model Proxy(设置侧栏独立页)。
- Mode =
rule,protocol =http,address =127.0.0.1:7890,域列表留空(使用内置预设)。 - 在代理客户端开启本地/LAN 监听。
场景 B:跟随 Windows 系统代理¶
Mode = system,其余按需;系统代理变更后插件会周期性同步。
场景 C:全局代理,少数域名直连¶
Mode = custom,填写代理地址,在 Exclude domains 中列出例外。
大陆环境补充:默认拒绝明文 http 经代理传 API Key;确有需要须在设置页勾选对应选项。代理凭证只能写在地址里(http://user:pass@host:port),会以明文保存在设置中;更稳妥是让本机代理对 loopback 免认证。
验证与自测¶
- 设置页显示实时状态:
path A · exit route · N rules · proxied x / direct y。 - 本机访问
http://127.0.0.1:<port>/dsh-model-proxy/status可得到与设置页一致的 JSON(仅 loopback / 同源)。 - 在源码目录执行
npm test(即node test/run-all.mjs);测试套件随仓库提供,依赖从当前 DSH profile(或DSH_HOME)解析宿主自带的undici与@deepseek-ai/schemastery。
适用场景与注意¶
适合:在中国大陆使用 DSH 调用海外模型 API,希望规则化分流、减少整机代理副作用的开发者。
不适合或需另配方案:WebSocket 流式、Bedrock 等非 fetch 通道;仅依赖 Harness 网页抓取且不想动代理列表的场景。
插件以当前 DSH 进程权限运行,会改写进程内 fetch 的出口行为。安装前建议在 GitHub 阅读源码与 MIT 许可证,确认路由与安全策略符合你的合规要求。DeepSeek Harness 社区插件目录(如 skillhub.cn)为独立生态站点,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与 package.json 为准。
结尾¶
dsh-model-proxy 用「按域代理 + 强制直连私网 + 明文与日志约束」把模型 API 出海和其余 Harness 流量拆开,配置在设置页完成,失败可见、卸载可逆。进一步了解可从 社区目录页 进入,或直接查看 GitHub 仓库 的 README(含英文与 README_zh.md)。