├── images
├── readme.md
├── wxq.jpeg
├── wxq2.jpeg
├── cloudflare_1.png
├── cloudflare_2.png
├── cloudflare_3.png
├── cloudflare_4.png
├── qrcode_430.jpg
├── cloudflare_worker_1.png
├── cloudflare_worker_2.png
├── cloudflare_worker_3.png
├── cloudflare_worker_4.png
├── cloudflare_worker_5.png
├── cloudflare_worker_6.png
├── cloudflare_worker_7.png
└── cloudflare_worker_8.png
├── worker.js
├── LICENSE
└── README.md
/images/readme.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/images/wxq.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/wxq.jpeg
--------------------------------------------------------------------------------
/images/wxq2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/wxq2.jpeg
--------------------------------------------------------------------------------
/images/cloudflare_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_1.png
--------------------------------------------------------------------------------
/images/cloudflare_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_2.png
--------------------------------------------------------------------------------
/images/cloudflare_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_3.png
--------------------------------------------------------------------------------
/images/cloudflare_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_4.png
--------------------------------------------------------------------------------
/images/qrcode_430.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/qrcode_430.jpg
--------------------------------------------------------------------------------
/images/cloudflare_worker_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_worker_1.png
--------------------------------------------------------------------------------
/images/cloudflare_worker_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_worker_2.png
--------------------------------------------------------------------------------
/images/cloudflare_worker_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_worker_3.png
--------------------------------------------------------------------------------
/images/cloudflare_worker_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_worker_4.png
--------------------------------------------------------------------------------
/images/cloudflare_worker_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_worker_5.png
--------------------------------------------------------------------------------
/images/cloudflare_worker_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_worker_6.png
--------------------------------------------------------------------------------
/images/cloudflare_worker_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_worker_7.png
--------------------------------------------------------------------------------
/images/cloudflare_worker_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GoGPTAI/ChatGPT-Proxy/HEAD/images/cloudflare_worker_8.png
--------------------------------------------------------------------------------
/worker.js:
--------------------------------------------------------------------------------
1 | const TELEGRAPH_URL = 'https://api.openai.com';
2 |
3 | addEventListener('fetch', event => {
4 | event.respondWith(handleRequest(event.request))
5 | })
6 |
7 | async function handleRequest(request) {
8 | const url = new URL(request.url);
9 | url.host = TELEGRAPH_URL.replace(/^https?:\/\//, '');
10 |
11 | const modifiedRequest = new Request(url.toString(), {
12 | headers: request.headers,
13 | method: request.method,
14 | body: request.body,
15 | redirect: 'follow'
16 | });
17 |
18 | const response = await fetch(modifiedRequest);
19 | const modifiedResponse = new Response(response.body, response);
20 |
21 | // 添加允许跨域访问的响应头
22 | modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');
23 |
24 | return modifiedResponse;
25 | }
26 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 GoGPT
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 👉ChatGPT-Proxy
2 |
3 | ChatGPT是由[OpenAI](https://www.openai.com/)训练的一款大型语言模型,能够和你进行任何领域的对话。
4 |
5 | ## [ChatGPT 国内中文版 GoGPT](https://gogpt.vip/?channel=git)
6 |
7 | 分享一个ChatGPT代理接口的获取方式,首先说明一下原因:
8 |
9 | 第一个原因:国内一直都访问不了OpenAI的官方接口,最常见解决方案是使用一台服务器来进行反向代理,但这样又徒增了一些成本,所以我们推荐用Cloudfalre Worker 代理的方式来解决 OpenAI 的 API 无法访问的问题。
10 |
11 | 另一个原因:近期OpenAI加大了风控,有大量APIKey或账号被封禁。因为Cloudflare也算云服务商,而从云服务商请求 API 是再正常不过的操作,所以使用 Cloudfalre Worker 代理地址后,理论上也会降低被封禁的概率。
12 |
13 | 👉该方案的主要思路是使用 Cloudflare 的 Workers 来代理 OpenAI 的 API 地址,配合自己的域名即可在境内实现访问。因为 Cloudflare Workers 有每天免费 10 万次的请求额度,也有可以免费注册的域名,所以几乎可以说是零成本。而且该方法理论上支持所有被认证的网站,而不只是 OpenAI。
14 |
15 | ## 准备工作
16 |
17 | 使用这个方案需要你有以下东西:
18 |
19 | 一个域名(可以到 godaddy 注册一个,相信对于大家来说注册域名不是啥大问题)
20 |
21 | 注册一个 Cloudflare 账号
22 |
23 | ℹ️ 请不要直接使用本教程示例中的地址,因为随时会被关闭。也不要使用任何其他人搭建的不受信任的地址,因为有 api key 被盗取的可能。
24 |
25 | ## 基本步骤
26 |
27 | 1. 新建一个 Cloudflare Worker
28 | 2. 将worker.js中的代码粘贴到 Worker 中并部署
29 | 3. 给 Worker 绑定一个没有被 GFW 认证的域名
30 | 4. 使用自己的域名代替 api.openai.com
31 | 5. 如果遇到问题,可以参考下面的详细版教程。
32 |
33 | ## 将域名 NS 转到 Cloudflare
34 |
35 | 如果域名已经托管在 Cloudflare 的忽略这一步即可。
36 | Cloudflare Workers 的域名绑定仅支持托管在 Cloudflare 上的域名,所以得先将域名的 NS 转到 Cloudflare。
37 |
38 | 没有 Cloudflare 账号的话可以注册一个,具体注册细节就不多说了。
39 |
40 | 注册或登录到 Cloudflare 的管理界面后,点击侧边栏的 “Websites” ,然后点击 “Add a Site” 按钮准备将域名转到 Cloudflare:
41 |
42 |
43 | 在 “Enter your site (example.com)” 处输入要转入的域名后,点击 “Add Site”:
44 |
45 |
46 | 根据 Cloudflare 的提示,在域名注册商处将 NS 修改到 Cloudflare 指定的地址,等待域名解析成功后,即可进行后续操作。这儿我们参考的是阿里云的DNS服务商修改
47 |
48 |
49 |
50 | ## 创建一个 Cloudflare Worker
51 |
52 | 登录到 Cloudflare 的管理界面后,点击侧边栏的 “Workers” 选项,然后点击 “Create a Service” 创建一个 Worker。
53 |
54 |
55 |
56 | 然后在创建界面中输入 “Service name” 后点击 “Create Service” 按钮新建 Worker。
57 |
58 |
59 | 至此 Cloudflare 的 Worker 便创建好了,下面开始修改 Worker 的代码,使其能代理 OpenAI 的 API。
60 |
61 | ## 修改 Cloudflare Worker 的代码
62 |
63 | 在 Worker 的管理界面,点击右上角的 “Quick Edit” 按钮编辑代码 Worker 的代码。
64 |
65 |
66 | 在左侧的代码编辑器中,删除现有的所有代码,然后复制粘贴以下内容到代码编辑器:
67 |
68 |
69 | ```javascript
70 | const TELEGRAPH_URL = 'https://api.openai.com';
71 |
72 | addEventListener('fetch', event => {
73 | event.respondWith(handleRequest(event.request))
74 | })
75 |
76 | async function handleRequest(request) {
77 | const url = new URL(request.url);
78 | url.host = TELEGRAPH_URL.replace(/^https?:\/\//, '');
79 |
80 | const modifiedRequest = new Request(url.toString(), {
81 | headers: request.headers,
82 | method: request.method,
83 | body: request.body,
84 | redirect: 'follow'
85 | });
86 |
87 | const response = await fetch(modifiedRequest);
88 | const modifiedResponse = new Response(response.body, response);
89 |
90 | // 添加允许跨域访问的响应头
91 | modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');
92 |
93 | return modifiedResponse;
94 | }
95 | ```
96 |
97 | 最后点击编辑器右上角的 “Save and deploy” 按钮部署该代码,在弹出的对话框中继续选择 “Save and deploy” 确认部署。
98 |
99 | 至此,便可以使用该 worker 的地址来代替 OpenAI 的 API 地址了。比如想要请求 ChatGPT 的 API 时,把官方文档中的 https://api.openai.com/v1/chat/completions 替换成 https://openaiproxy.jackzhang881026.workers.dev/ 即可(注意这个地址并不存在,是需要换成自己刚刚创建的 Worker 的地址)。
100 |
101 | 但是你可能会发现,这样做了依然还是没有解决问题,因为 Cloudflare Workers 的 workers.dev 域名也是被 GFW 认证过的🥲。但是好在只是认证了 workers.dev 域名,而 ip 还是幸存的状态,所以我们可以给 Worker 绑定一个自己的域名。
102 |
103 | ## 绑定域名
104 |
105 | 在 Cloudflare Workers 的管理界面中,点击 “Triggers” 选项卡,然后点击 “Custom Domians” 中的 “Add Custom Domain” 按钮以绑定域名。
106 |
107 |
108 |
109 | 输入域名后点击 “Add Custom Domain”,根据提示修改域名的 DNS 记录。因为我的域名是托管在 Cloudflare 上的,所以无需手动更改 DNS 记录,如果域名没有托管在 Cloudfalre 上,可以根据相关提示自行配置。 目前只支持 NS 托管在 Cloudflare 上的域名。
110 |
111 |
112 |
113 | 至此便大功告成。等待片刻,应该就可以通过你自己的域名来代替 OpenAI 的 API 地址了。
114 |
115 |
116 |
117 |
118 |
119 | 最后试着访问我们绑定好的域名看看,出现OpenAI 接口调用失败的提示,就大功告成了,快去用这个地址替换https://api.openai.com/吧。比如在本文的例子中,想要请求 ChatGPT 的 API ,即是把官方 API 地址 https://api.openai.com/v1/chat/completions 换为我自己的域名 https://api.gptgo.fun/chat/completions ,其他参数均参照官方示例即可。由于 Cloudflare 有每天免费 10 万次的请求额度,所以轻度使用基本是零成本的。⚠️ 注意请不要使用我这里的 api.gptgo.fun,因为随时可能会被我关闭🤪
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 | 🥰 如果本文对你有帮助,请给我的GitHub点个Star哦。
128 |
129 |
130 | # ChatGPT相关
131 | 有兴趣看我发布的其他两个项目:
132 |
133 | 苹果Siri智能助手:[ChatGPT-Siri](https://github.com/GoGPTAI/ChatGPT-Siri)
134 |
135 | ChatGPT中文指南:[ChatGPT-Prompt](https://github.com/GoGPTAI/ChatGPT-Prompt)
136 |
137 | # 联系
138 |
139 | - QQ: 471384214
140 | - 微信:jack881026
141 |
142 | ## 微信群交流
143 |
144 |
145 | ## 微信公众号: AI创新工坊
146 |
147 |
148 |
149 | ## 👉 GoGPT 官网 - [ChatGPT直接使用](http://gogpt.vip/?channel=git)
150 |
151 | ### License
152 |
153 | [MIT](./LICENSE)
154 |
155 |
--------------------------------------------------------------------------------