前言¶
在 DeepSeek Harness(DSH)里接多个 LLM Provider 时,常见两类麻烦与「官方只给一份全局策略」叠在一起:有的中转站必须走代理、有的必须直连,改 NO_PROXY 是进程级补丁,还不能按 Provider 区分;另一类是网关按 user-agent、originator 等头做客户端校验,Harness 里 user-agent 由 dsh-llm 写死,在 profile 的 headers 里同名字段会被冲突过滤,改 YAML 还要重启。
下面介绍社区插件 dsh-llm-net-router(维护者 dyh886,分类:联网工具)。它在传输边界包装 globalThis.fetch,按请求目标 host 决定直连或走 HTTP/HTTPS/SOCKS5 代理,并在最终请求头拼完后改写客户端指纹;卸载即恢复,规则文件原子落盘。本文事实均来自 GitHub 仓库 README 与 package.json。
这是什么¶
dsh-llm-net-router 是 DSH 的 Cordis 插件(id: llm-net-router),面向「每个 Provider 各自出网、各自伪装成谁」的场景。与官方 @deepseek-ai/dsh-http-proxy 只解析一份全局 undici dispatcher 不同,本插件按 request 的目标 host 在运行中决策;与在 profile 里改 headers 不同,它在 fetch 边界改写头,不碰 baseURL,也不起本地中继端口。
设置入口:设置 → 网络路由(settings.section,order 72)。要求 DeepSeek Harness 0.2.0-rc.2(dshTarget)、Node.js >= 18;零运行时依赖,MIT 许可证。
核心功能¶
按 host 的出网策略¶
未被 Provider 规则命中的地址走「默认策略」;命中后可选三种模式:
| 模式 | 含义 |
|---|---|
| 跟随全局(inherit) | 交回 Harness 原生策略,默认最保守 |
| 强制直连(direct) | 该 host 不走任何代理 |
| 走代理(proxy) | 指定 地址:端口,支持 HTTP / HTTPS / SOCKS5 |
match 支持 example.com、.example.com、*.example.com、host:port、*;更长匹配优先,同长度按 provider id 字典序。cordis.patch.yml 里的声明式规则与 $DSH_HOME/net-router/rules.json 合并,文件优先。
客户端指纹(传输边界改写)¶
| id | 发出去的头(摘要) |
|---|---|
none |
不改写 |
codex |
originator: codex_cli_rs 及 Codex CLI 风格 user-agent |
claude-code |
Claude CLI 风格 user-agent、x-app: cli 等;可选 1M 追加 anthropic-beta: context-1m-2025-08-07 |
custom |
界面手写 JSON 头 |
codexVersion / claudeVersion 可覆盖版本号;headers 可覆盖内置值。context1m 仅在 fingerprint: claude-code 时生效,anthropic-beta 与请求原有 beta 及 headers 中去重合并,避免关掉 pi-ai 自带的 thinking 等 beta。
界面与探测¶
- 代理池:可逐个探测 TCP / 隧道是否可用。
- Provider 规则:每行配置通路、代理、指纹;矩阵探测在「直连 / 各代理」×「不伪装 / Codex / Claude Code(+1M)」组合下试通,并可一键采纳写入规则。
- 用真实推理端点校验:默认只探
GET /models;勾选后探POST /chat/completions(max_tokens: 1),因不少中转站只在推理路径做客户端校验。 - 最近路由决策:记录被本插件影响的请求、命中规则、通路、指纹与结果。
探测结论读法(节选):ok 为 2xx;client-gate 需换指纹;context-gate 需勾 Claude Code 旁的 1M;auth 查密钥。
安装与启用¶
环境需已安装 DeepSeek Harness 0.2.0-rc.2 与 Node.js >= 18。README 推荐方式之一为交给官方插件入口(无需在插件目录执行 npm install 装运行时依赖):
$dshHome = $env:DSH_HOME; if (-not $dshHome) { $dshHome = "$env:USERPROFILE\.dsh" }
dsh plugin --profile desktop add file:$dshHome/plugins/dsh-llm-net-router
若插件已放在 $DSH_HOME/plugins/dsh-llm-net-router,也可按 README 使用:
dsh plugin --profile desktop add github:dyh/dsh-llm-net-router
完成后在 profile 的 cordis.patch.yml 中与其它插件同级启用(节选):
- id: llm-net-router
config:
enabled: true
defaultMode: inherit
defaultProxy: ''
proxyPool:
- http://127.0.0.1:7890
- socks5://127.0.0.1:1080
probeTimeoutMs: 8000
inferenceTimeoutMs: 30000
rulesFile: 'net-router/rules.json'
并在 dsh.profile.bundles 中加入 dsh-llm-net-router 后重启 Harness(桌面端:托盘退出再启动)。卸载时从 bundles 与 dependencies 移除、删掉 junction(若曾手动创建)、重启;rules.json 可保留或删除。
典型用法¶
规则文件示例¶
界面保存或手写的规则位于 $DSH_HOME/net-router/rules.json(原子替换写入,容忍 BOM):
{
"version": 1,
"defaults": { "mode": "inherit", "proxy": "" },
"proxies": ["http://127.0.0.1:7890"],
"providers": {
"agentrouter": {
"enabled": true,
"match": ["agentrouter.org"],
"mode": "proxy",
"proxy": "http://127.0.0.1:7890",
"fingerprint": "codex",
"headers": { "x-app": "cli" },
"note": ""
}
}
}
需要 1M 上下文模型且网关要求 beta 时(与 401 客户端校验不同):
{
"anyrouter": {
"enabled": true,
"match": ["anyrouter.top"],
"mode": "proxy",
"proxy": "http://127.0.0.1:7890",
"fingerprint": "claude-code",
"context1m": true,
"headers": {},
"note": "1M 模型必须带 context-1m beta"
}
}
命令行探测¶
Harness 运行时,可复用界面规则与凭据:
node scripts/probe-cli.mjs --api http://127.0.0.1:19387 --provider primerelay
node scripts/probe-cli.mjs --api http://127.0.0.1:19387 --provider primerelay --endpoint inference
独立探测(Harness 未运行亦可),密钥用凭据引用避免进 shell 历史:
node scripts/probe-cli.mjs https://relay.example.com/v1 `
--api-key-ref RELAY_API_KEY --endpoint inference --model gpt-6-sol `
--proxies 127.0.0.1:7890,socks5://127.0.0.1:1080
--api-key-ref 从 $DSH_HOME/.credentials.yaml 的 refs: 段读取。
适用场景与注意¶
适合谁:同时配置多个中转站或自建网关,且各站对代理路径、客户端头要求不一致的 DSH 用户;需要在不改 provider baseURL、不重启的前提下试通路和指纹组合时,矩阵探测与决策日志会省很多时间。
权限与安全:插件以当前 DSH 进程权限运行,会包装全局 fetch 并读写 $DSH_HOME 下规则与配置;安装前请自行审阅 源码与许可证(MIT),仅从可信来源安装。
已知边界(README 摘要):只作用于经 globalThis.fetch 发出的请求;官方 HTTP 代理插件的全局 dispatcher 与「跟随全局」模式并存时,以 README「已知边界」为准。社区目录 skillhub.cn 插件页 为独立收录,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-llm-net-router 补的是 Harness 配置层不好表达的「按 Provider 出网 + 按站点改客户端头」:规则可界面改、可声明式种子,探测能区分客户端闸门与 1M 闸门。进一步了解可看目录页 https://www.skillhub.cn/plugins/dyh886/dsh-llm-net-router 与仓库 https://github.com/dyh886/dsh-llm-net-router 。