跳到主要内容

如何搭建 ChatGPT API 代理?

如果你不想折腾,也可以考虑使用本站提供的 ChatGPT 镜像站。(已接入 GPT-4 API),新用户注册即得 5000 Tokens。

背景

ChatGPT 是最近非常罕见的一个“双向封锁”的超级应用,即它自身不面向中国用户提供服务,如果要用的爽你得搞定海外信用卡、海外手机号、海外 IP,并且它自己几乎是要在刚发布的时候就上了“功夫网(GFW)”的黑名单,网页版的使用非常不方便。

但 ChatGPT 还提供了 API 服务,这就意味着我们可以通过 API 来调用它的服务,搞定一个 API Key 就万事大吉可以使用了。并且对于各位懂哥而言,基于 API 封装下就可以当成自己的产品了。

虽然只需要获取到一个 API Key 就可以调用 GPT 服务,但是由于网络影响,它的 API 服务在国内的调用非常的不稳定,甚至有时候会出现完全无法调用的情况。万事万物都可以找代理,做中介。API 本身也不例外。不过我搜了一圈下来,合适的教程并不多,唯一一个比较好的是在 Github 项目里,于是萌发出写一个更友好教程的想法。

原文地址:Github

代理原理

本文中谈到的方法主要是先将域名托管至 Cloudflare,然后使用 Cloudflare 的 Workers 服务来进行中转。这样做的好处是:

  • Cloudflare Workers 本质上是一个后端函数服务,无需购置服务器就能够接受和处理请求
  • Cloudflare 有非常多的节点,在全球任何一个地方请求都可以获得不错的网络体验
  • Cloudflare Workers 服务每日可以免费调用一万次,完全够了
  • Cloudflare Workers 服务支持自定义域名,可以让你的 API 代理地址看起来更专业(网站引流)

前置条件

  • 自己的域名
  • Cloudflare 账号
  • 一点点耐心和动手能力

1. 将域名托管至 Cloudflare

点击 Cloudflare,注册一个账号,然后将自己的域名托管至 Cloudflare。这个步骤比较简单,按照 Cloudflare 的页面提示照做即可,不再赘述。

2. 创建 Workers

以下 Cloudflare 简称为 CF。

回到 CF 首页,点击“创建 Worker”。CF 居然没有提供自定义选项,必须选择它的模板,所以可以先直接选择 Hello Word 模板,然后再编辑里面的代码。

进去后直接点击“部署”按钮。

修改 Workers 代码

创建完成后需要进去修改代码,修改这部分代码:

修改为以下代码:

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;
}

修改完之后不着急发送请求,直接点击右上角的“保存并部署”按钮。然后顺便重命名下这个 Workers。

3. 绑定域名

Workers 创建好之后,前往你刚刚添加的那个域名。点击左侧菜单栏中的 “Workers 路由”,然后点击“添加路由”。

现在为你的代理链接想一个名字,比如说我这里想要以 gptapi.wsyfin.com 网址作为我的代理链接,那么我就在路由中输入 gptapi.wsyfin.com/*,然后选择刚刚创建的 Workers,点击“保存”按钮。

最后再在 DNS 中添加这个地址,A 类型,内容写为 2.2.2.2,打开小云朵,点击保存即可。

验证请求是否成功

现在你可以使用你的域名来请求 GPT API 了,比如说我这里使用 https://gptapi.wsyfin.com/v1/chat/completions 来请求 GPT API,如果返回了以下内容,那么就说明你的代理已经搭建成功了。

等等,这是个报错信息呀!但是这个报错说明已经能够正确连接到 GPT 的官方 API 服务地址了,但是还需要输入一个 API Key 才能够让 GPT 解答我们的问题。现在在终端里输以下个命令,把 Bearer 后面的 sk-xxxx 替换成自己的 API Key 就可以正确得到返回结果啦。

curl --location 'https://gptapi.wsyfin.com/v1/chat/completions' \
--header 'Authorization: Bearer sk-********' \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "鲁迅为什么暴打周树人?"}]
}'

来欣赏下 GPT3.5 是怎么糊弄我们的 🔽: