├── 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 | --------------------------------------------------------------------------------