最近在开发一个OpenAI的产品,但是由于众所周知的原因, OpenAI API 有 IP 限制,使得在本地开发变得困难。开始我的想法是,把代码放服务器上去跑,可是这样一来,要修改调试变得极为不便。且考虑到后期可能要将代码部署到国内的服务器,这还是要处理服务器ip的问题。于是想到了用Nginx代理转发来解决ip受限的问题。
一、服务器上部署配置Nginx转发OpenAI API
首先要有一台不在OpenAI限制区域的服务器,我这里用的是亚马逊位于日本的免费体验一年的服务器。用了宝塔面板(别喷,主要是使用简单,还有就是我懒)。
1、创建一个转发的网站
2、配置转发信息
3、在代码中将官方的api地址https://api.openai.com换成自己的 http://api.fo.chat
我用的是这个包 Orhanerday\OpenAi
所以是直接在实例化时,将地址替换
二、处理CURL超时问题
因为Chat GPT的生成原理是一个一个token生成的,通常需要很长时间才能生成完整答案,然后就造成我们用curl访问Api时很容易出现超时问题。我们在本地开发时,通常是使用集成开发环境,如 PHP Study 、WAMP 或 XAMPP 这样的一键搭建的软件包,很多配置都是默认的,所以我们在代码中配置了curl超时时间也不生效,因为Apache或Nginx还有超时,php也有执行超时的问题。
1.配置php超时问题
我用的是PHPStudy,直接在软件管理里配置的。如果你的集成环境没有,可以在php.ini中修改。
2.配置本地开发环境的 Apache或Nginx
在Apache的配置文件(httpd.conf)末尾加上以下配置(以下为开发环境特殊配置,按具体场景调整)
<IfModule mod_fcgid.c>
# php-cgi进程的生存时间
FcgidProcessLifeTime 9999999
# php-cgi进程IO超时时间
FcgidIOTimeout 9999999
# php-cgi进程连接超时时间
FcgidConnectTimeout 9999999
# 上传文件的最大尺寸 100MB
FcgidMaxRequestLen 104857600
# php-cgi最大的进程数
# FcgidMaxProcesses 5
</IfModule>
3.配置服务器代理超时时间
处理了本地超时问题,但是我们的代理服务也有默认超时时间,因此我们还需要配置好代理服务的超时问题。
server
{
listen 80;
server_name api.fo.chat;
location / {
proxy_pass https://api.openai.com/; # 反向代理到https://api.openai.com/这个地址
proxy_ssl_server_name on; # 开启代理SSL服务器名称验证,确保SSL连接的安全性
proxy_set_header Host api.openai.com; # 设置代理请求头中的Host字段为api.openai.com
chunked_transfer_encoding off; # 禁用分块编码传输,避免可能的代理问题
proxy_buffering off; # 禁用代理缓存,避免数据传输延迟
proxy_cache off; # 禁用代理缓存,确保实时获取最新的数据
#proxy_set_header X-Forwarded-For $remote_addr; # 将客户端真实IP添加到代理请求头中的X-Forwarded-For字段中,用于记录客户端真实IP
client_max_body_size 30m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
access_log /www/wwwlogs/api.fo.chat.log;
error_log /www/wwwlogs/api.fo.chat.error.log;
}
三、结论
使用 PHP 和 Nginx 在本地开发 OpenAI API 可以帮助我们打破 IP 限制和超时问题的壁垒。我们可以在本地开发和测试应用程序,而无需担心这些限制。希望这篇文章能够帮助您快速入门 OpenAI API 开发。
四、参考资料
1、通过代理访问openai api服务:GitHub – zhengjie9510/openai-proxy: 通过代理访问openai api服务。
2、PHP设置脚本最大执行时间的三种方法:https://www.cnblogs.com/zqifa/p/php-16.html
3、使用PhpStudy集成环境设置PHP页面超时配置无效的问题处理:使用PhpStudy集成环境设置PHP页面超时配置无效的问题处理_phpstudy 超时_迷之路人咩的博客-CSDN博客
4、解决 nginx 反向代理时的 upstream timeout 问题:解决 nginx 反向代理时的 upstream timeout 问题 – 掘金 (juejin.cn)
原创文章,作者:Zeyu,如若转载,请注明出处:https://jinzhijun.cn/develop/1294
评论列表(2条)
请问楼主这个服务器的参数是多少?我也搭了一个,但是用流式回复(每字每字的回复,和官网一样的效果)的时候很卡,通常是几句几句的回复,我怀疑是我的服务器性能不行。
@CZ:我猜可能是你的服务器的网速有问题,我的是加一台香港的阿里云服务器中转,香港服务器用的是按量付费的3元每GB流量的,这样中转一下,可以秒响应,就是流式回复的话,文章中的配置要改一下。