前言¶
在 DeepSeek Harness(DSH)里,智能体经常要拉取订阅页、文档或 API。环境变量一把梭 HTTP_PROXY 时,直连能通的站点也会进代理;直连失败又没有按主机重试,往往只能手动换镜像或反复重启。DSH 社区插件 dsh-proxy-router(维护者 Lequait,分类:联网工具)针对的是另一层需求:导入一份代理订阅,在 harness 侧做「直连优先、失败自动走本地代理」,并按主机记住下次该走哪条路。
下面介绍它是什么、和内置 dsh-http-proxy 的差别、如何安装与调用。
这是什么¶
dsh-proxy-router 给 DSH 提供「直连优先、代理兜底」的取回能力:订阅链接 → 本机监督的 mihomo 内核 → 本地混合端口;插件侧的 smartFetch 先查路由记忆,直连失败再走代理重试,成功则记住该主机应走的路径。
与 DSH 自带的 dsh-http-proxy 对比(README 中的说明):
dsh-http-proxy启动时把HTTP_PROXY/HTTPS_PROXY/ALL_PROXY装成 undici 全局 dispatcher,要么全代理要么全直连,不按主机区分,也没有失败后再换路的逻辑。- 本插件补的是:两条路 + 按主机记忆 + 与代理健康解耦——代理没有健康节点时,直连路径仍可用;传输层使用 Node 内置
node:http/node:https/node:tls与 CONNECT 隧道,无额外 npm 依赖。
节点选择与故障切换交给 mihomo(订阅、url-test 组、204 探测);直连/代理策略由插件负责。当前版本 0.2.1,许可证 MIT,要求 DSH >=0.1.0-rc.6。
工作原理(概览)¶
- 用订阅链接生成/更新内核配置,由插件监督 mihomo,对外提供例如
http://127.0.0.1:<mixedPort>的混合端口(默认 mixedPort 19097,controllerPort 19098,与 Clash Verge 常用端口错开)。 smartFetch:按主机查路由记忆(默认 TTL 约 30 分钟)→ 直连优先 → 失败则经本地代理重试 → 成功则写入记忆。- 内核路径:依次尝试环境变量
DSH_PROXY_CORE、PATH、常见安装目录、已运行进程、Windows 注册表等;都没有时可自动下载 mihomo 到<DSH_HOME>/cache/proxy-router/bin/(GitHub 直连失败会换镜像源)。
安装与启用¶
在目标 profile 下安装插件(命令来自仓库 README):
dsh plugin --profile <你的profile> add dsh-proxy-router
# 或用 GitHub 源
dsh plugin --profile <你的profile> add github:Lequait/dsh-proxy-router
重启 harness 后,会话中会出现 proxy_router 工具。
订阅与配置¶
最少输入:一个订阅地址。 支持 Clash YAML 与 base64 节点列表。
方式 ①:交给 agent(推荐)
启动时带上订阅,插件会写入 <DSH_HOME>/cache/proxy-router/subscription.txt,后续 status / test / fetch 不必重复提供:
proxy_router { action: "start", subscriptionUrl: "https://你的订阅链接" }
方式 ②:写在 profile 的 cordis.patch.yml
在 proxy-router 条目的 config 中设置 subscriptionUrl,需要随 harness 自动拉起内核时可设 autoStart: true。其余字段均可选,例如:
- id: proxy-router
name: dsh-proxy-router
config:
subscriptionUrl: 'https://你的订阅链接'
corePath: ''
autoStart: true
mixedPort: 19097
controllerPort: 19098
directTimeoutMs: 8000
proxyTimeoutMs: 12000
healthUrl: 'http://cp.cloudflare.com/generate_204'
| 字段 | 默认 | 说明 |
|---|---|---|
subscriptionUrl |
'' |
订阅链接(含 token,请自行保管) |
corePath |
自动探测→自动下载 | 通常留空;或设 DSH_PROXY_CORE |
autoStart |
false |
是否随 harness 启动内核 |
mixedPort / controllerPort |
19097 / 19098 | 本地混合端口与控制器端口 |
directTimeoutMs / proxyTimeoutMs |
8000 / 12000 | 直连与代理超时 |
healthUrl |
cloudflare 204 | 节点健康探测 URL |
工具 proxy_router 典型用法¶
| action | 作用 |
|---|---|
status |
内核状态、当前节点、健康节点数、路由记忆条数 |
start / stop |
启停本地内核 |
test |
逐节点实测健康度,按延迟排序 |
fetch |
按「直连优先 → 代理兜底」取回 URL(force: true 可忽略记忆重试) |
routes / forget |
查看或清空按主机的路由记忆 |
用 fetch 验证某 URL 是否能在当前网络下被智能体取回,是常见调试步骤;生产使用前可用 test 确认订阅里是否还有健康节点。
适用场景与注意¶
适合谁: 需要在 DSH 会话里稳定抓取外网资源、又不想全局代理拖慢直连站点,或希望「第一次失败就换路、第二次起少试错」的开发者。
务必知晓:
- 插件以当前 dsh 进程权限 运行,并会启动第三方内核 mihomo;安装前请阅读 GitHub 源码 与 MIT 许可证,只安装你信任的来源。
- 订阅 URL 会出现在
<DSH_HOME>/cache/proxy-router/config.yaml等生成文件中,含凭据,勿同步或提交到版本库。 - 若订阅节点全部不可用,插件会报告健康节点为 0,仅直连仍可用,不会因代理挂掉而拖死 agent。
- 本插件尚未接管内置
web_fetch;提供的是独立工具与本地代理端口。若要让内置抓取也走同一路由,需额外注册ctx.web抓取提供方(README 边界说明)。
DSH 生态强调「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-proxy-router 把「订阅 → 本地 mihomo → 直连优先、失败走代理、按主机学习」收成 harness 内可调用的 proxy_router 工具,与全局环境变量代理相比,更贴近按站点选路的需求。进一步了解可查看 SkillHub 目录页 与 GitHub 仓库。