├── doc ├── 2023-04-11-20-19-54.png ├── 2023-04-11-21-42-30.png ├── 2023-04-11-21-42-47.png ├── 2023-04-11-21-42-57.png ├── 2023-04-11-21-45-47.png ├── 2023-04-11-21-47-17.png ├── 2023-04-11-21-47-57.png ├── 2023-04-11-21-48-21.png ├── 2023-04-11-21-48-38.png ├── 2023-04-11-21-48-51.png ├── 2023-04-11-21-49-12.png ├── 2023-04-11-21-49-26.png ├── 2023-06-10-11-10-29.png ├── 2023-06-10-11-12-09.png └── 2023-06-10-11-44-29.png ├── src └── vercel.json └── README.md /doc/2023-04-11-20-19-54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-20-19-54.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-42-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-42-30.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-42-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-42-47.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-42-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-42-57.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-45-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-45-47.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-47-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-47-17.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-47-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-47-57.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-48-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-48-21.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-48-38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-48-38.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-48-51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-48-51.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-49-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-49-12.png -------------------------------------------------------------------------------- /doc/2023-04-11-21-49-26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-04-11-21-49-26.png -------------------------------------------------------------------------------- /doc/2023-06-10-11-10-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-06-10-11-10-29.png -------------------------------------------------------------------------------- /doc/2023-06-10-11-12-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-06-10-11-12-09.png -------------------------------------------------------------------------------- /doc/2023-06-10-11-44-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LinLin00000000/vercel-proxy-openai/HEAD/doc/2023-06-10-11-44-29.png -------------------------------------------------------------------------------- /src/vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "rewrites": [ 3 | { "source": "/", "destination": "https://api.openai.com" }, 4 | { 5 | "source": "/:match*", 6 | "destination": "https://api.openai.com/:match*" 7 | } 8 | ], 9 | "github": { 10 | "silent": true 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 使用 Vercel 反代 openai (图文教程) 2 | 3 | - [使用 Vercel 反代 openai (图文教程)](#使用-vercel-反代-openai-图文教程) 4 | - [简介](#简介) 5 | - [使用方法](#使用方法) 6 | - [要求](#要求) 7 | - [示例](#示例) 8 | - [部署](#部署) 9 | 10 | ## 简介 11 | 12 | 国内只是墙了 vercel 本身的域名,但是自定义域名没有墙,因此做了代理并绑定域名之后就可以用自己的域名在国内直连 openai api 了。 13 | 14 | 理论上也可以代理其他被墙的站点。 15 | 16 | ## 使用方法 17 | 18 | - 访问 openai api 时,将 "api.openai.com" 换成你的自定义域名,例如 19 | 20 | ```javascript 21 | const host = 'YOUR DOMAIN' 22 | const url = `https://${host}/v1/chat/completions` 23 | ``` 24 | 25 | - 可参考 [OPENAI API 官方文档](https://platform.openai.com/docs/api-reference/chat) 26 | 27 | [官方文档中文翻译](https://linlin00.feishu.cn/docx/Fupxd8fIioGToIxv6Tacz4XbnBf)(部分过时,仅供参考) 28 | 29 | - 在其他 chatgpt 项目中,可以将变量 "OPENAI_API_BASE_URL" 设置为你的域名 30 | 31 | ## 要求 32 | 33 | - Openai API KEY, 形如 "sk-xxxxxxxx" 的字符串 34 | 35 | - 一个域名(无需备案),没有的话可以在阿里云上买一个几块钱一年的 36 | ![阿里云域名注册](doc/2023-04-11-20-19-54.png) 37 | 38 | ## 示例 39 | 40 |
Postman 41 |

42 | 43 | ![Example of Postman, Header](doc/2023-06-10-11-10-29.png) 44 | ![Example of Postman, Body](doc/2023-06-10-11-12-09.png) 45 | 46 |

47 |
48 | 49 | 以下代码均由 Postman 生成 50 | 51 |
cURL 52 |

53 | 54 | ```bash 55 | curl --location 'https://YOUR DOMAIN(改成你的域名)/v1/chat/completions' \ 56 | 57 | --header 'Authorization: Bearer sk-xxxxxxxxxxxxx(改成你的APIKEY)' \ 58 | --header 'Content-Type: application/json' \ 59 | --data '{ 60 | "model": "gpt-3.5-turbo", 61 | "messages": [ 62 | { 63 | "role": "user", 64 | "content": "你好" 65 | } 66 | ] 67 | } 68 | ' 69 | 70 | ``` 71 | 72 |

73 |
74 | 75 |
Python - Requests 76 |

77 | 78 | ```python 79 | import requests 80 | import json 81 | 82 | url = "https://YOUR DOMAIN(改成你的域名)/v1/chat/completions" 83 | 84 | payload = json.dumps({ 85 | "model": "gpt-3.5-turbo", 86 | "messages": [ 87 | { 88 | "role": "user", 89 | "content": "你好" 90 | } 91 | ] 92 | }) 93 | headers = { 94 | 'Authorization': 'Bearer sk-xxxxxxxxxxxxx(改成你的APIKEY)', 95 | 'Content-Type': 'application/json' 96 | } 97 | 98 | response = requests.request("POST", url, headers=headers, data=payload) 99 | 100 | print(response.text) 101 | ``` 102 | 103 |

104 |
105 | 106 |
NodeJs - Axios 107 |

108 | 109 | ```javascript 110 | const axios = require('axios'); 111 | let data = JSON.stringify({ 112 | "model": "gpt-3.5-turbo", 113 | "messages": [ 114 | { 115 | "role": "user", 116 | "content": "你好" 117 | } 118 | ] 119 | }); 120 | 121 | let config = { 122 | method: 'post', 123 | maxBodyLength: Infinity, 124 | url: 'https://YOUR DOMAIN(改成你的域名)/v1/chat/completions', 125 | headers: { 126 | 'Authorization': 'Bearer sk-xxxxxxxxxxxxx(改成你的APIKEY)', 127 | 'Content-Type': 'application/json' 128 | }, 129 | data : data 130 | }; 131 | 132 | axios.request(config) 133 | .then((response) => { 134 | console.log(JSON.stringify(response.data)); 135 | }) 136 | .catch((error) => { 137 | console.log(error); 138 | }); 139 | ``` 140 | 141 |

142 |
143 | 144 |
JavaScript - Fetch 145 |

146 | 147 | ```javascript 148 | var myHeaders = new Headers(); 149 | myHeaders.append("Authorization", "Bearer sk-xxxxxxxxxxxxx(改成你的APIKEY)"); 150 | myHeaders.append("Content-Type", "application/json"); 151 | 152 | var raw = JSON.stringify({ 153 | "model": "gpt-3.5-turbo", 154 | "messages": [ 155 | { 156 | "role": "user", 157 | "content": "你好" 158 | } 159 | ] 160 | }); 161 | 162 | var requestOptions = { 163 | method: 'POST', 164 | headers: myHeaders, 165 | body: raw, 166 | redirect: 'follow' 167 | }; 168 | 169 | fetch("https://YOUR DOMAIN(改成你的域名)/v1/chat/completions", requestOptions) 170 | .then(response => response.text()) 171 | .then(result => console.log(result)) 172 | .catch(error => console.log('error', error)); 173 | ``` 174 | 175 |

176 |
177 | 178 |
飞书机器人 179 |

180 | 181 | ![Example of Feishu robot](doc/2023-06-10-11-44-29.png) 182 | 183 |

184 |
185 | 186 | ## 部署 187 | 188 | 1. 点击一键部署按钮 189 | 190 | [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FLinLin00000000%2Fvercel-proxy-openai&project-name=vercel-proxy-openai&repository-name=vercel-proxy-openai&root-directory=src) 191 | 192 | 2. 用 Github 登录 Vercel,没有 Github 账户的去注册一个,网上很多教程就不展开了 193 | ![Vercel login](doc/2023-04-11-21-42-30.png) 194 | 3. 登录之后点击 Create 按钮 195 | ![Vercel create](doc/2023-04-11-21-42-47.png) 196 | 4. 接着等十几秒钟就创建好项目了,接下来进入仪表盘 197 | ![Vercel dashboard](doc/2023-04-11-21-42-57.png) 198 | 5. 进入到项目里之后,依次点击 Settings -> Domains,然后添加你的域名。添加的域名类型有两种,一种是一级域名(xxxx.com)和二级域名(openai.xxxx.com),我个人推荐使用二级域名,因为一级域名一般用来做网站展示用,只能有一个,而二级域名可以有无限个(只要你有一个域名就可以自己创建无限个二级域名) 199 | ![Vercel domains](doc/2023-04-11-21-45-47.png) 200 | 6. 添加域名有三种方式,这里我们选第三种,因为简单 201 | ![Add Domain](doc/2023-04-11-21-47-17.png) 202 | 7. 接下来会分两种情况,分为一级域名和二级域名,都有教程,以阿里云为例(其他厂商也是差不多的配置,很简单的) 203 | 204 | 1. 一级域名 205 | 206 | 添加一级域名后 Vercel 会提示让你添加 DNS 解析记录 207 | ![DNS Config](doc/2023-04-11-21-47-57.png) 208 | 在阿里云域名解析的解析设置里点击 添加记录,按照 Vercel 的提示配置好图中三个选项,点击确认 209 | ![DNS Set](doc/2023-04-11-21-48-21.png) 210 | 回 Vercel 点击 Refresh 按钮,出现下图所示的情况就表明配置完成了 211 | ![Complete](doc/2023-04-11-21-48-38.png) 212 | 2. 二级域名(以 openai 主机记录为例,可以改成自己喜欢的) 213 | 214 | 添加二级域名后 Vercel 会提示让你添加 DNS 解析记录 215 | ![DNS Config](doc/2023-04-11-21-48-51.png) 216 | 在阿里云域名解析的解析设置里点击 添加记录,按照 Vercel 的提示配置好图中三个选项,点击确认 217 | ![DNS Set](doc/2023-04-11-21-49-12.png) 218 | 回 Vercel 点击 Refresh 按钮,出现下图所示的情况就表明配置完成了 219 | ![Complete](doc/2023-04-11-21-49-26.png) 220 | 221 | 🎉接下来就可以愉快地使用 openai api 啦~ 222 | 223 | 有问题可以 [在此](https://github.com/LinLin00000000/vercel-proxy-openai/issues) 留言 224 | --------------------------------------------------------------------------------