keywords: ChatGPT OpenAI Clash 自定义 节点 机场 VPN 预处理 YAML

前言

着 ChatGPT 的大火,OpenAI 为降低负载堵住不可用地区用户钻空子而封禁了许多服务器 IP 段,导致大量节点无法访问。最严重的莫过于甲骨文(Oracle),其个人永久免费云带宽极高,被大量用于低价机场建设,IP 段也是被封禁最严重的之一。虽然 OpenAI 近期解封了不少服务器 IP 段(据传与其营收压力有关),不过尚不确定解封是永久还是仅仅短时有效,因此一个丝滑访问 ChatGPT 的方法就显得尤为必要。

笔者今天要使用的方法基于 Clash for Windows(以下简称 cfw)的预处理(Parsers)功能,你可以在 设置 → 预处理 打开(英文版为 Settings → Parsers

打开后就是 cfw 的编辑器了。不出意外的话,你会看到以下内容:

parsers:
    #
screenshot:
parsers:
#

这里简单介绍一下预处理的语法和关键字的作用。Clash 的配置使用 YAML 编写,容易上手,这是维基百科对于 YAML 的介绍:

YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)[4],但为了强调这种语言以数据为中心,而不是以标记语言为重点,而用反向缩略语重命名。

简单来说,YAML 可以广泛应用于数据标记、配置存储。

这是预处理配置可用的数据字段:

类型操作
append-rules数组数组合并至原配置rules数组
prepend-rules数组数组合并至原配置rules数组
append-proxies数组数组合并至原配置proxies数组
prepend-proxies数组数组合并至原配置proxies数组
append-proxy-groups数组数组合并至原配置proxy-groups数组
prepend-proxy-groups数组数组合并至原配置proxy-groups数组
mix-proxy-providers对象对象合并至原配置proxy-providers
mix-rule-providers对象对象合并至原配置rule-providers
mix-object对象对象合并至原配置最外层中
commands数组在上面操作完成后执行简单命令操作配置文件

方案实施

我们需要使用的是 prepend-proxy-groupsprepend-rules 字段。

parsers:
  - reg: .+
    yaml:
      prepend-proxy-groups:
        - ...
      prepend-rules:
        - ...

接着,在 字段中添加一个名为 ChatGPT 的组(你也可以改成你喜欢的名字):

parsers:
  - reg: .+
    yaml:
      prepend-proxy-groups:
        - name: ChatGPT
      prepend-rules:
        - ...

优点为可以自行选择节点,找到最快的那一个;缺点是如果节点被 OpenAI 屏蔽则需要手动切换。

为数组添加属性:

parsers:
  - reg: .+
    yaml:
      prepend-proxy-groups:
        - name: ChatGPT
          type: select
          proxies:
      prepend-rules:
        - ...

添加 command 字段,添加数值以复制节点列表到新的代理组:

parsers:
  - reg: .+
    yaml:
      prepend-proxy-groups:
        - name: ChatGPT
          type: select
          proxies:
      commands:
        - proxy-groups.ChatGPT.proxies=[]proxyNames| #“|”后面可以添加过滤字符,如chatgpt即节点标题仅包含“chatgpt”的节点
      prepend-rules:
        - ...

在 prepend-rules 字段中添加数值:

parsers:
  - reg: .+
    yaml:
      prepend-proxy-groups:
        - name: ChatGPT
          type: select
          proxies:
      commands:
        - proxy-groups.ChatGPT.proxies=[]proxyNames| #“|”后面可以添加过滤字符,如chatgpt即节点标题仅包含“chatgpt”的节点
      prepend-rules:
        - "DOMAIN-SUFFIX,openai.com,ChatGPT"

保存。

接着,我们就可以在代理组中为 openai.com 指定节点了。

接着,我们就可以在代理组中为 openai.com 指定节点了。