说明

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

简洁教程

  1. 新建一个 Cloudflare Worker。
  2. 代码粘贴到 Worker 中并部署。
  3. 给 Worker 绑定一个可以访问的域名。
  4. 使用自己的域名代替 api.openai.com。

详细教程
首先将域名托管到Cloudflare。

创建一个 Cloudflare Worker

登录到 Cloudflare 的管理界面后,点击侧边栏的 “Workers” 选项,然后点击 “创建服务” 创建一个 Worker。
20230404001255.png
然后在创建界面中输入 “服务名称” 后点击 “创建服务” 按钮新建 Worker。“选择启动器r” 项先不用管。
20230404001728.png
至此 Cloudflare 的 Worker 便创建好了,下面开始修改 Worker 的代码,使其能代理 OpenAI 的 API。

修改 Cloudflare Worker 的代码

在 Worker 的管理界面,点击右上角的 “快速编辑” 按钮编辑代码 Worker 的代码。
20230404001953.png
在左侧的代码编辑器中,删除现有的所有代码,然后复制粘贴以下内容到代码编辑器:
简化后的代码来自https://github.com/x-dr/chatgptProxyAPI

const TELEGRAPH_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 = TELEGRAPH_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, response);

  // 添加允许跨域访问的响应头
  modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');

  return modifiedResponse;
}

最后点击编辑器右下角的 “保存并部署” 按钮部署该代码,在弹出的对话框中继续选择 “保存并部署” 确认部署。
20230404002323.png
至此,便可以使用该 worker 的地址来代替 OpenAI 的 API 地址了。比如想要请求 ChatGPT 的 API 时,把官方文档中的 https://api.openai.com/v1/chat/completions 替换成 https://openai.workers.dev 即可(注意这个地址并不存在,是需要换成自己刚刚创建的 Worker 的地址)。

绑定域名

在 Cloudflare Workers 的管理界面中,点击 “触发器” 选项卡,然后点击 “自定义域” 中的 “添加自定义域” 按钮以绑定域名。
20230404002544.png
输入域名后点击 “添加自定义域”,至此便大功告成。等待片刻,应该就可以通过你自己的域名来代替 OpenAI 的 API 地址了。

本文转自:Github

最后修改:2023 年 04 月 04 日
如果觉得我的文章对你有用,请随意赞赏