下面介绍在国内网络中不科学上网的情况下来调用OpenAI的api接口,从而使用chatgpt开发应用或者使用chagpt的镜像站比如 这个项目

注意事项:

1、你需要有一个自己的chatgpt账号

2、登录openai的网站,创建一个openai的apiKey,创建apikey地址在这里

3、你需要有一台可以正常访问Chatgpt的海外vps服务器,推荐使用微软云的服务器,官网在这里

安装Nginx

1
2
3
4
5
# Centos系统安装
$ yum install -y nginx

# ubuntu系统安装
$ apt-get install -y nginx

Nginx创建一个反向代理chagpt接口的vhost

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ vim /etc/nginx/conf.d/chat.conf
server {
# 这里端口也可以非80或443
listen 80;
# 这里写你的域名
server_name chatapi.xxx.com;

location / {
# 反向代理到openai的api
proxy_pass https://api.openai.com/;
proxy_ssl_server_name on;
proxy_set_header Host api.openai.com;
}

}

启动Nginx服务

1
2
3
4
$ systemctl start nginx

# 服务启动后注意开放服务器的80、443端口或者云服务器的安全组端口放行
# 如果使用非80端口访问 注意放行特定端口号

此时反代接口就部署好了,程序可以通过我们自定义反代地址http://chatapi.xxx.com来免科学上网访问Chatgpt了

下面我们来通过curl测试一下反代服务器的可用性,

官方的api地址:https://api.openai.com/v1/chat/completions

我们反代的地址:http://chatapi.xxx.com/v1/chat/completions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# shell执行命令
$ OPENAI_API_KEY="这里是你的API Key"
$ PROXY_URL="http://chatapi.xxx.com/v1/chat/completions"

$ curl -s -k $PROXY_URL \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "你好啊"}],
"temperature": 0.7
}'

# 接口返回数据,返回的快慢取决于反代服务器访问Chatgpt的api速度
{"id":"chatcmpl-76bAOcDx7jkQdeXCOlXbQhy2b6TZq","object":"chat.completion","created":1681807192,"model":"gpt-3.5-turbo-0301","usage":{"prompt_tokens":12,"completion_tokens":18,"total_tokens":30},"choices":[{"message":{"role":"assistant","content":"您好!有什么我可以帮助您的吗?"},"finish_reason":"stop","index":0}]}

也可以使用下面的shell脚本来调用反代服务器进行连续对话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 注意:此脚本中用到了jq命令来解析json数据,你centos服务器用yum install jq安装,Ubuntu使用apt-get install jq安装命令

# 创建脚本
$ vim chat.sh
#!/bin/bash
OPENAI_API_KEY="你的openai API Key"
PROXY_URL="-k 自建的反代服务器访问地址http://chatapi.xxx.com/v1/chat/completions "
user="`echo -e "\e[1;32m 我: \e[0m"`"

request(){
user_input="$1"
reply=$(curl -s $PROXY_URL \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "'"$user_input"'"}],
"temperature": 0.7
}' | jq -r '.choices[0].message')
echo -e "\e[1;31mOPENAI\e[0m: $reply"
}

while true
do
read -p "$user " info
request "$info"
done

# 给脚本添加执行权限
$ chmod +x chat.sh

运行脚本测试效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 运行脚本
$ ./chat.sh
我: 简单介绍一下自己吧
OPENAI: {
"role": "assistant",
"content": "我是一名AI语言模型,由OpenAI公司开发。我可以用自然语言与人类进行交互,帮助人们解决问题、提供信息和建议等。虽然我没有实体,但我能够学习和不断提高自己的语言技能。希望能为您提供有用的帮助!"
}
我: 帮我使用golang写一个99乘法表的代码
OPENAI: {
"role": "assistant",
"content": "以下是一个简单的实现:

```go
package main

import \"fmt\"

func main() {
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf(\"%d*%d=%d \", j, i, j*i)
}
fmt.Println()
}
}
```