当一份 Clash 配置同时包含代理组、DNS、TUN、订阅覆写和几十条业务规则时,最先变得难以维护的往往不是功能,而是规则来源:哪些域名来自机场订阅,哪些规则是自己临时补的,某次更新又改动了哪一组 AI 或开发工具域名。把所有内容长期堆在主配置的 rules: 下面,短期看似直接,后期却很难审查、回滚和复用。rule-providers 的作用,就是把规则集拆成独立的 YAML 文件,再通过主配置引用它们;这些文件可以放在本地,也可以放在 GitHub 上进行版本管理和自动更新。
本文以 AI 服务与开发工具分流为例,说明 Mihomo/Clash Meta 常见内核中 rule-providers 的字段含义、YAML 组织方式、规则优先级、GitHub Raw 地址、更新间隔,以及在 Clash Verge Rev 中如何验证规则是否真的命中。文中的示例不绑定某一家订阅服务商;你需要根据所在地区、公司网络和实际访问日志调整域名范围,并遵守当地法律法规、服务条款与组织网络政策。
rule-providers 解决什么问题:把规则从主配置中拆出来
在 Clash 配置里,直接写规则适合少量、稳定的条目,例如 DOMAIN-SUFFIX,example.com,PROXY。但 AI 平台、代码托管服务、包管理仓库和登录鉴权系统通常会持续增加域名。把它们全部写在主配置中,会产生几个明显问题:第一,主配置越来越长,修改代理组时容易误碰规则;第二,多个设备之间复制 YAML,常常出现版本不一致;第三,当某条规则导致误分流时,很难判断是主配置改错,还是订阅更新覆盖了它。
rule-providers 将问题拆成两个层面。主配置只负责声明规则集名称、文件类型、下载地址和更新策略;独立规则文件则负责列出具体的域名、IP 或经典规则条目。这样做之后,AI 规则可以单独审查,开发工具规则也可以单独回滚。你还可以让同一份规则文件被多个配置引用,减少家庭设备、办公电脑和测试环境之间的配置漂移。
常见的 provider 类型包括以下几类:
- HTTP:从远程 URL 下载规则文件,适合 GitHub Raw、自己的静态文件服务器或订阅服务提供的规则地址。
- File:读取本机已有文件,适合离线环境、内网部署和需要人工审核后再更新的生产配置。
- Inline:直接把规则写进主 YAML,适合很短的临时列表,但严格来说并没有实现真正的文件拆分。
对于 GitHub 托管的规则,最常用的是 type: http。远程地址必须是可以返回原始文本的地址,而不是 GitHub 网页地址。普通仓库页面通常包含 HTML、脚本和登录界面,Clash 无法把它当作规则文件解析;应使用 raw.githubusercontent.com 地址,或者使用项目提供的 Raw 链接。
main 分支作为生产唯一来源。更稳妥的做法是先在 GitHub 中确认提交记录,必要时固定到 tag 或 commit,并为每次规则变更保留说明。
YAML 字段详解:名称、格式、更新与行为
下面是一份面向 AI 服务的 provider 示例。名称可以自行调整,但名称必须与后面的 RULE-SET 引用保持完全一致,包括大小写和连字符。
rule-providers:
ai-services:
type: http
behavior: domain
url: https://raw.githubusercontent.com/example-org/clash-rules/main/ai-services.yaml
path: ./ruleset/ai-services.yaml
interval: 86400
proxy: DIRECT
developer-tools:
type: http
behavior: domain
url: https://raw.githubusercontent.com/example-org/clash-rules/main/developer-tools.yaml
path: ./ruleset/developer-tools.yaml
interval: 43200
proxy: DIRECT
type 决定规则来源。behavior 决定规则文件的结构,常见值有 domain、ipcidr 和 classical。如果文件只包含域名,使用 domain 最容易维护;如果文件中是完整的经典规则,例如 DOMAIN-SUFFIX、DOMAIN-KEYWORD 或 IP-CIDR 条目,则应使用 classical。这个字段不是装饰项,写错后可能出现加载成功但规则无法按预期匹配的情况。
url 是远程规则的下载地址,path 是缓存到本机后的文件路径。相对路径通常以当前配置文件所在位置为基准,不同客户端可能会把配置复制到自己的配置目录,因此不要假设它一定位于某个固定的用户目录。interval 使用秒作为单位,86400 代表每天检查一次,43200 代表每 12 小时检查一次。规则并不需要每几分钟更新,否则会增加请求次数,也会让故障排查变得不稳定。
proxy 是下载规则文件时使用的代理策略。若 GitHub 在当前网络环境中无法稳定访问,可以将它设置为可用的代理组;若规则文件托管在内网或本地可访问的服务器,则可以保持 DIRECT。要注意,proxy 只影响规则文件的下载,不会决定规则命中后的业务流量走哪个策略。业务流量的出口由 RULE-SET 后面写的策略组决定。
AI 规则文件本身可以保持简单,例如:
payload:
- DOMAIN-SUFFIX,openai.com
- DOMAIN-SUFFIX,anthropic.com
- DOMAIN-SUFFIX,ai.google.dev
- DOMAIN-SUFFIX,googleapis.com
- DOMAIN-SUFFIX,github.com
如果使用 behavior: domain,也可以按照对应内核支持的域名格式组织内容。实际使用前应以你当前 Mihomo 或 Clash Meta 版本的文档为准,尤其要注意规则文件是否需要 payload: 包装、是否支持特定的通配符,以及客户端是否会自动转换旧格式。
用 GitHub 管理规则:版本、审核与自动更新
把 YAML 放进 GitHub 后,真正的价值不只是获得一个下载地址,而是获得一套可追踪的变更记录。建议为仓库建立清晰的目录,例如把 AI、开发工具、国内直连和公司内网规则分开放置。每次增加域名时,在 commit message 中写明来源和原因,例如「add OAuth host for provider login」或「remove obsolete SDK endpoint」。这样发生误分流时,可以通过 Git diff 快速定位是哪次提交改变了行为。
规则文件不要只凭搜索引擎结果收集域名。比较可靠的来源包括官方 API 文档、客户端连接日志、浏览器开发者工具、企业网络允许列表,以及实际运行时的 DNS 与 TLS 主机名。对于 AI 服务,登录页、控制台、API、遥测和模型下载可能使用不同域名;对于开发工具,插件市场、更新服务、代码托管、容器镜像和包管理器也可能分散在多个域名下。建议先记录真实请求,再按功能归类,而不是一开始就把整个厂商的所有域名都送入代理。
GitHub Raw 地址还涉及可用性与安全性。公共仓库分支被修改后,客户端会在下一次 interval 到期时拉取新内容;如果仓库被删除、改为私有或触发访问限制,provider 可能继续使用旧缓存,也可能在重启后失去规则。生产环境可以采取以下措施:
- 使用固定 tag 或 commit 的地址,先测试再升级规则版本。
- 在变更前保留旧文件和回滚提交,不要直接覆盖唯一可用版本。
- 避免在公共规则文件中写入 API Key、内网域名清单或服务器地址等敏感信息。
- 对第三方仓库进行人工审查,确认文件内容确实是规则,而不是被注入的异常配置。
- 为关键设备保留本地缓存或 File provider,避免远程仓库短时不可用时完全失去分流。
自动更新并不等于自动接受所有变化。对于个人设备,可以每天更新一次并观察连接日志;对于团队开发机或生产网关,更建议先在测试配置中刷新 provider,确认 AI 登录、Git push、npm 或 Docker 拉取都正常,再推广到其它设备。
动手配置:在 Clash Verge Rev 中加入 AI 与开发规则
下面按一个可复用的流程操作。开始前先备份当前配置,确认配置文件可以正常加载,并准备一个你确定可用的代理策略组,例如 PROXY 或 AI。如果你的订阅使用了不同的策略组名称,后文示例必须替换成实际名称,不能照抄。
- 创建规则文件。在 GitHub 仓库中建立
ai-services.yaml和developer-tools.yaml,先加入少量经过日志验证的域名。提交后打开 Raw 地址,确认浏览器显示的是纯文本 YAML,而不是 GitHub 页面。 - 写入 rule-providers。把 provider 放到主配置的顶层,与
proxy-groups、dns和rules处于同一层级。不要把它缩进到某个代理组下面,也不要重复写两个同名 provider。 - 在 rules 中引用。使用
RULE-SET,ai-services,AI和RULE-SET,developer-tools,PROXY这类条目,把规则集映射到目标策略组。 - 刷新并观察状态。在 Clash Verge Rev 的配置或规则提供者页面执行更新,确认 provider 显示更新时间、文件大小和加载状态。若有错误,先看 URL、YAML 结构和本地缓存路径。
- 发起真实请求。分别执行 AI CLI 登录、API 请求、Git 操作或包管理命令,同时打开连接面板搜索目标域名,确认命中的策略不是
DIRECT,也不是你没有预期的其它策略组。
规则引用示例如下:
rules:
- RULE-SET,ai-services,AI
- RULE-SET,developer-tools,PROXY
- DOMAIN-SUFFIX,company.internal,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
操作时最容易犯的错误是把 rule-providers 当成了规则本身。它只声明「规则文件在哪里」,不会自动让任何请求走代理;必须在 rules: 中用 RULE-SET 引用。另一个错误是 provider 名称包含下划线、空格或大小写差异,导致规则引用找不到对应对象。修改后如果客户端显示旧规则,可以先手动更新 provider,再重新载入配置;不要在没有确认状态的情况下连续改动多个文件。
RULE-SET 被主配置引用,最后才检查策略组和节点。按这个顺序排查,可以避免把「规则没命中」误判成「节点质量差」。
规则优先级、进程匹配与开发环境边界
Clash 规则通常按照从上到下的顺序匹配,先命中的规则会决定后续策略。因此,自定义 AI provider 应放在过宽的 GEOIP,CN,DIRECT、大范围 DOMAIN-KEYWORD 或 MATCH 之前。若你把 MATCH,GLOBAL 放在最前面,后面的 provider 永远没有机会执行;若订阅模板在自定义规则之前插入了大范围直连规则,也会出现「配置看起来正确,但连接面板仍显示 DIRECT」的现象。
推荐先写最具体的例外,再写业务规则,最后写兜底规则。例如公司内网域名必须优先直连,AI 与开发服务进入代理,明确的国内资源按直连处理,无法分类的流量交给 MATCH。不要为了省事把所有包含 google、api 或 dev 的域名都代理,这些关键词可能覆盖大量无需代理的站点,也会让登录和下载链路产生新的副作用。
进程匹配是处理开发工具的另一种方式。某些 Mihomo 内核和客户端支持基于进程名或进程路径的规则,例如将特定 CLI、IDE 或后台服务的流量送入指定策略。但进程匹配依赖 TUN、系统权限和内核能力,且在 Windows、macOS、Linux 上的进程名与路径不同。Node、Python 或 Java 启动的实际网络请求,可能来自运行时进程,而不是你在终端输入的脚本名称;容器内进程也通常无法直接按宿主机路径匹配。
因此,域名规则应作为第一选择,进程匹配作为补充。只有在同一进程访问多个业务、无法稳定识别域名,或某个工具完全不读取 HTTP 代理环境变量时,才考虑 TUN 与进程规则。开启 TUN 后要特别检查 Docker、公司 VPN、虚拟机网卡和本地开发服务器,确认不会把 localhost、内网网段或数据库连接错误地送入代理。
生产环境排障:从下载失败到规则误命中
如果 provider 更新失败,先看客户端显示的 HTTP 状态和错误类型。404 通常表示 Raw 路径、分支名或文件名错误;403 可能与仓库权限、访问频率或网络出口有关;TLS 超时则更接近 GitHub 链路问题。此时可在同一台设备上用浏览器或命令行访问 Raw URL,对比是否能够得到完整 YAML。不要只看「最后更新时间」,因为旧缓存仍可能让面板显示一个看似正常的 provider。
如果 provider 已加载但 AI 请求仍失败,打开连接日志,记录完整主机名、最终策略、进程和连接时间。若目标域名显示 DIRECT,重点检查规则顺序、provider 名称和规则文件格式;若显示了代理但仍超时,再检查节点、DNS、TLS、服务端限流和客户端 timeout。若只失败登录而 API 正常,可能还缺少 OAuth、账号跳转或验证码相关域名;若 Git clone 正常但插件市场打不开,则应单独记录插件 CDN 与更新服务的主机名。
DNS 也会影响域名规则。使用 fake-ip、redir-host 或纯本地解析时,连接面板显示的主机名可能不同;部分程序直接连接 IP,导致 DOMAIN-SUFFIX 规则无法匹配,这时需要核对是否应补充 IP-CIDR、开启嗅探,或改用 TUN。不要在没有证据的情况下随意加入大段 IP 网段,因为云服务常用共享 CDN,过宽的 IP 规则会误伤其它业务。
最后,配置文件要具备可回滚性。每次修改只处理一个变量,例如先改 provider URL,再改规则顺序,最后调整策略组。为当前能工作的 YAML 保留副本,升级规则后用 AI API、GitHub、包管理器和公司内网各做一次最小测试。这样即使 GitHub 上游规则突然改变,也能快速恢复到上一份已验证版本,而不是在生产环境里盲目重建整套配置。
相比只支持简单黑白名单的轻量代理工具,或把所有规则固定写死在单一配置中的方案,rule-providers 更适合需要持续维护的 AI 与开发环境:GitHub 提交记录提供了变更审计,独立 YAML 便于回滚,Clash 的规则优先级、策略组和连接日志又能把「请求究竟走了哪里」显示出来。你可以先用域名规则覆盖稳定场景,再按需加入 TUN 或进程匹配,而不必一开始就把整台电脑切成全局代理;如果你希望在多个平台上继续使用这套分流思路,可以从 Clash 客户端下载与配置开始。