雪重 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)