dsh-model-proxy:为 DSH 模型 API 请求做按域代理

前言

在 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 或更新;设置页由宿主根据插件 Config schema 生成(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:

  1. 强制直连:回环、私网段、localhost、.local/.lan/.internal 等不得走代理;用户只能追加,不能删掉这些项。
  2. 明文门禁:非 https 的模型请求在建连前拒绝,除非在设置页显式开启(页面会常驻警告)。
  3. 数据最小化:请求/响应体以流透传,不解析、不落盘、不读取 Authorization 或供应商 API Key;默认日志只记出口标识与错误类型,不记主机名、路径、正文。

代理出口失败时回退直连,不会静默切换到另一条出口;降级状态会写日志并在设置页展示。

覆盖范围与局限

  • 会代理:经 Harness fetch 发出的请求——实践中包含几乎全部模型请求;若把某域名加入代理列表,该域名的其他 fetch 也会走代理。
  • 不会代理:transport: websocket 流式、供应商原生 SDK 通道(如 Amazon Bedrock);Harness 内置环境变量代理可处理这类场景。网页抓取工具自建 undici agent,域规则看不到。
  • 按域名路由:同一域名若同时承载模型 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 走代理

  1. 打开 Settings — Model Proxy(设置侧栏独立页)。
  2. Mode = rule,protocol = http,address = 127.0.0.1:7890,域列表留空(使用内置预设)。
  3. 在代理客户端开启本地/LAN 监听。

场景 B:跟随 Windows 系统代理

Mode = system,其余按需;系统代理变更后插件会周期性同步。

场景 C:全局代理,少数域名直连

Mode = custom,填写代理地址,在 Exclude domains 中列出例外。

大陆环境补充:默认拒绝明文 http 经代理传 API Key;确有需要须在设置页勾选对应选项。代理凭证只能写在地址里(http://user:pass@host:port),会以明文保存在设置中;更稳妥是让本机代理对 loopback 免认证。

验证与自测

  1. 设置页显示实时状态:path A · exit route · N rules · proxied x / direct y。
  2. 本机访问 http://127.0.0.1:<port>/dsh-model-proxy/status 可得到与设置页一致的 JSON(仅 loopback / 同源)。
  3. 在源码目录执行 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)。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜