雪重
Python Developer
知识 汗水 灵感 机遇
2023年5月10日 linux nginx
nginx转发chatgpt api
随着chatgpt 4大火,国内众多公司开始冲击大模型领域。同一个问题,比较自己训练的模型和chatgpt上答案差异的需求随之而来。
背景:
公司网络配置了规则转发,使用了香港代理,openai对国内封锁极强,大陆和香港ip访问存在封账户问题。不少研究员因为不规范的使用api测试,导致封了两个账号。
方案:
因为公司网络默认配置了香港代理,采购一台美国服务器,在美国服务器上转发国内请求到openai服务。
国内调用api -> 美国服务器nginx转发 -> openai server。
通过这条链路,无需担心因为ip问题导致账号封禁的问题。
1.nginx配置如下
- 由于openai是https,http转发ssl校验不通过,因此添加了域名和证书,以下***处自行替换
- location可自行设置
http {
server {
listen 443 ssl;
server_name ***.com;#自己申请的域名
ssl_certificate /etc/nginx/sskey/***.pem;#ssl
ssl_certificate_key /etc/nginx/sskey/***.key;#ssl
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers TLS13-AES******;#ssl
location /internal {
proxy_pass https://api.openai.com/v1;
proxy_ssl_server_name on;
proxy_set_header Host api.openai.com;
proxy_set_header Connection '';
proxy_http_version 1.1;
proxy_connect_timeout 60;
proxy_read_timeout 600;
proxy_send_timeout 60;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
}
}
}
2.调用api
# -*- coding:utf-8 -*-
# @Author: zp
# @Time: 2023/4/7 15:19
import openai
openai.api_base = "https://{自己的域名}/{nginx里设置的location}"
# 输入完整token
openai.api_key = "sk-***"
def chat(message: str, model="gpt-3.5-turbo") -> str:
"""
model: gpt-3.5-turbo, gpt-3.5-turbo-0301, gpt-4
"""
message_log = [{"role": "user", "content": message}]
completion = openai.ChatCompletion.create(model=model,
messages=message_log)
res = completion.choices[0].message.content
print(f"question: {message} ===> answer: {res}")
return res
if __name__ == "__main__":
datas = ["俄语乌拉"]
for one_qa in datas:
ress = chat(one_qa)