使用 Cloudflare Workers,稳定代理 OpenAI API

2,408 阅读4分钟

用魔法打败魔法,在国内可以稳定的访问 OpenAI API ,同时避免账号被封禁。在这里推荐一个几乎零成本的解决方案(当然你也可以付费提高并发和稳定性),现在仍然可以用来解决 OpenAI API 无法访问的问题。

主要思路是使用 Cloudflare 的 Workers 来代理 OpenAI 的 API 地址,配合自己的域名即可在国内实现访问。因为 Cloudflare Workers 有每天免费 10 万次的请求额度,也有可以免费注册的域名,所以几乎可以说是零成本。而且该方法理论上支持所有被认证的网站,而不只是 OpenAI。

提前准备内容

  1. 一个域名(建议直接阿里云或者新网买一个好了,很多域名一年只需要10块);
  2. 一个 Cloudflare 账号(具体注册细节就不多说了);

下面开始操作

  1. 新建一个 Cloudflare Worker
  2. 将 gist.github.com/noobnooc/d0… 里的代码粘贴到 Worker 中并部署
  3. 给 Worker 绑定一个刚才购买的域名(注意,域名不需要认证或者备案);
  4. 使用自己的域名代替 OpenAI 的 API 域名 api.openai.com

如果具体步骤有问题,可以参考下面的详细版教程。

将域名 NS 转到 Cloudflare

Cloudflare Workers 的域名绑定仅支持托管在 Cloudflare 上的域名,所以得先将域名的 NS 转到 Cloudflare(当然你也可以直接在Cloudflare中购买域名)。

如果域名已经托管在 Cloudflare 的忽略这一步即可。

登陆你的 Cloudflare 账号,注册或登录到 Cloudflare 的管理界面后,点击侧边栏的 “Websites” ,然后点击 “Add a Site” 按钮准备将域名转到 Cloudflare:

image.png

在 “Enter your site (example.com)” 处输入要转入的域名后,点击 “Add Site”:

image.png

根据 Cloudflare 的提示,在域名注册商处将 NS 修改到 Cloudflare 指定的地址,等待域名解析成功后,即可进行后续操作。

创建一个 Cloudflare Worker

登录到 Cloudflare 的管理界面后,点击侧边栏的 “Workers” 选项,然后点击 “Create application” 创建一个 Worker。

image.png

然后在创建界面中输入 “Service name” 后点击 “Create Worker” 按钮新建 Worker。

image.png

至此 Cloudflare 的 Worker 便创建好了,下面开始修改 Worker 的代码,使其能代理 OpenAI 的 API。

修改 Cloudflare Worker 的代码

image.png

在左侧的代码编辑器中,删除现有的所有代码,然后复制粘贴以下内容到代码编辑器:

const OPENAI_URL = 'https://api.openai.com';

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const url = new URL(request.url);
  url.host = OPENAI_URL.replace(/^https?:\/\//, '');
  
  const modifiedRequest = new Request(url.toString(), {
    headers: request.headers,
    method: request.method,
    body: request.body,
    redirect: 'follow'
  });
  
  const response = await fetch(modifiedRequest);
  const modifiedResponse = new Response(response.body, {
    status: response.status,
    statusText: response.statusText,
    headers: response.headers
  });
  
  modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');
  
  return modifiedResponse;
}

至此,便可以使用该 worker 的地址来代替 OpenAI 的 API 地址了。比如想要请求 ChatGPT 的 API 时,把官方文档中的 https://api.openai.com/v1/chat/completions 替换成 https://xxxx.workers.dev 即可(注意这个地址并不存在,是需要换成自己刚刚创建的 Worker 的地址)。

但是你可能会发现,这样做了依然还是没有解决问题,因为 Cloudflare Workers 的 workers.dev 域名也是被认证过的导致无法访问。但是好在只是认证了 workers.dev 域名,而 ip 还是幸存的状态,所以我们可以给 Worker 绑定一个自己的域名。

绑定域名

在 Cloudflare Workers 的管理界面中,点击 “Triggers” 选项卡,然后点击 “Custom Domians” 中的 “Add Custom Domain” 按钮以绑定域名。

image.png

至此便大功告成。等待片刻,应该就可以通过你自己的域名来代替 OpenAI 的 API 地址了,比如在本文的例子中,想要请求 ChatGPT 的 API ,即是把官方 API 地址 https://api.openai.com/v1/chat/completions 换为你自己的域名 https://xxxx.com/v1/chat/completions ,其他参数均参照官方示例即可。由于 Cloudflare 有每天免费 10 万次的请求额度,所以轻度使用基本是零成本的,当然如果公司使用为了增加并发请求,也可以为此付费。

有ChatGPT相关问题欢迎加微信群交流(6月30日前有效)如果微信失效,也可以私信我:

图片名称

群里主要讨论如何更好的使用ChatGPT(账号注册交流、数据安全交流、如何使用ChatGPT构建基于知识库的问答系统等等)。