chatgpt-on-wechat
chatgpt-on-wechat copied to clipboard
Openai接口网络不通的解决方案 (已支持 Railway 一键部署)
目前的几种方案:
1.直接部署在外网的服务器: 比如 xx云的香港服务器
2.国内环境开代理: 需要 代理软件 及 代理账号
3.托管到容器平台: 如Railway等平台。
背景及讨论过程参考:https://github.com/zhayujie/chatgpt-on-wechat/issues/310
方案一:这个方案优点是比较简单,缺点是依赖能访问外网的服务器,成本较高。唯一需要注意的是,服务器最好选择openai支持的地区,且需要访问wechat的后台。
相关issue:https://github.com/zhayujie/chatgpt-on-wechat/issues/344
更新 03.11: 目前使用方案一被openai限制风险小
方案二
原理是通过本地安装的 代理客户端 把 请求转发到 代理服务器,再由能访问外网的代理服务器完成请求。 现在常用的代理协议有 Shadowsocks、V2Ray、Trojan等,这些协议一般会有自己特定的客户端。 而 clash 是一个能同时兼容这些协议的客户端, 所以下面以 clash 为例介绍下如何使用。
1.代理客户端启动
vpn账号的获取就不赘述了,因为获取openai的API_KEY时就是需要代理的。 在本地开发环境启动代理客户端比较简单,一般都有图形界面,打开后就会把所有流量都转发到代理客户端,此时注意要开启分流模式 (PAC, 即访问国内域名不转发),不然可能访问不了wx。
如果是在服务器命令行环境,需要找一个能在linux运行的代理客户端。以clash为例,下载 clash-linux-amd64-v1.13.0.gz, 在服务器上解压并运行 sudo ./clash-linux-amd64-v1.13.0
即可。 同时需要一个 ~/.config/clash/config.yml
配置文件,一般你获取账号的地方 (机场) 都会提供的。
启动后 clash 会监听本地的 7890 端口,所有往这个端口发送的请求都会按照一定规则 转发到 代理服务器 完成访问。
2.程序启动
启动前要在config.json 中加一个proxy配置:
{
"open_ai_api_key": "YOUR API KEY",
"proxy": "http://127.0.0.1:7890",
"single_chat_prefix": ["bot", "@bot"],
#... 省略 ...
}
这个配置的含义是,所有向openai发送的请求都会发送到 http://127.0.0.1:7890, 这正是clash监听的端口。 如果你用的是别的代理客户端,就改成对应的端口,比如使用 trojan-qt5 会配成 http://127.0.0.1:1080。 这样的好处是只有访问openai时会走到代理,不会影响和wx的交互。
配置添加完后,正常启动程序就可以访问 chatgpt 接口了。
方案三:RailWay 一键部署 (推荐)
Railway 每月提供5刀和最多500小时的免费额度。
- 进入 Railway。
- 点击 Deploy Now 按钮
- 设置环境变量来重载程序运行的参数,例如open_ai_api_key, character_desc
- 等待运行,扫码登录即可享用
python3.9版本在开了代理的情况下会运行报错,请降低urllib3模块的版本即可,pip install urllib3==1.25.11
期待方案三
方案二
原理是通过本地安装的 代理客户端 把 请求转发到 代理服务器,再由能访问外网的代理服务器完成请求。 现在常用的代理协议有 Shadowsocks、V2Ray、Trojan等,这些协议一般会有自己特定的客户端。 而 clash 是一个能同时兼容这些协议的客户端, 所以下面以 clash 为例介绍下如何使用。
1.代理客户端启动
vpn账号的获取就不赘述了,因为获取openai的API_KEY时就是需要代理的。 在本地开发环境启动代理客户端比较简单,一般都有图形界面,打开后就会把所有流量都转发到代理客户端,此时注意要开启分流模式 (PAC, 即访问国内域名不转发),不然可能访问不了wx。
如果是在服务器命令行环境,需要找一个能在linux运行的代理客户端。以clash为例,下载 clash-linux-amd64-v1.13.0.gz, 在服务器上解压并运行
sudo ./clash-linux-amd64-v1.13.0
即可。 同时需要一个~/.config/clash/config.yml
配置文件,一般你获取账号的地方 (机场) 都会提供的。启动后 clash 会监听本地的 7890 端口,所有往这个端口发送的请求都会按照一定规则 转发到 代理服务器 完成访问。
2.程序启动
启动前要在config.json 中加一个proxy配置:
{ "open_ai_api_key": "YOUR API KEY", "proxy": "http://127.0.0.1:7890", "single_chat_prefix": ["bot", "@bot"], #... 省略 ... }
这个配置的含义是,所有向openai发送的请求都会发送到 http://127.0.0.1:7890, 这正是clash监听的端口。 如果你用的是别的代理客户端,就改成对应的端口,比如使用 trojan-qt5 会配成 http://127.0.0.1:1080。 这样的好处是只有访问openai时会走到代理,不会影响和wx的交互。
配置添加完后,正常启动程序就可以访问 chatgpt 接口了。
[ERROR][2023-03-05 12:47:28][log.py:50] - Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))
方案二
原理是通过本地安装的 代理客户端 把 请求转发到 代理服务器,再由能访问外网的代理服务器完成请求。 现在常用的代理协议有 Shadowsocks、V2Ray、Trojan等,这些协议一般会有自己特定的客户端。 而 clash 是一个能同时兼容这些协议的客户端, 所以下面以 clash 为例介绍下如何使用。
1.代理客户端启动
vpn账号的获取就不赘述了,因为获取openai的API_KEY时就是需要代理的。 在本地开发环境启动代理客户端比较简单,一般都有图形界面,打开后就会把所有流量都转发到代理客户端,此时注意要开启分流模式 (PAC, 即访问国内域名不转发),不然可能访问不了wx。
如果是在服务器命令行环境,需要找一个能在linux运行的代理客户端。以clash为例,下载 clash-linux-amd64-v1.13.0.gz, 在服务器上解压并运行
sudo ./clash-linux-amd64-v1.13.0
即可。 同时需要一个~/.config/clash/config.yml
配置文件,一般你获取账号的地方 (机场) 都会提供的。启动后 clash 会监听本地的 7890 端口,所有往这个端口发送的请求都会按照一定规则 转发到 代理服务器 完成访问。
2.程序启动
启动前要在config.json 中加一个proxy配置:
{ "open_ai_api_key": "YOUR API KEY", "proxy": "http://127.0.0.1:7890", "single_chat_prefix": ["bot", "@bot"], #... 省略 ... }
这个配置的含义是,所有向openai发送的请求都会发送到 http://127.0.0.1:7890, 这正是clash监听的端口。 如果你用的是别的代理客户端,就改成对应的端口,比如使用 trojan-qt5 会配成 http://127.0.0.1:1080。 这样的好处是只有访问openai时会走到代理,不会影响和wx的交互。
配置添加完后,正常启动程序就可以访问 chatgpt 接口了。
配置了,重启后没有走代理?但是微信那个都走了。
@xionghaizhi 日志显示对的吧,访问微信走直连 (不走代理)
javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
Caused by: java.io.EOFException: SSL peer shut down incorrectly
使用代理后显示这两个问题, 是需要设置证书吗
javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
Caused by: java.io.EOFException: SSL peer shut down incorrectly
使用代理后显示这两个问题, 是需要设置证书吗
这个应该是代理客户端报的错, 找下对应项目的解决吧
javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake Caused by: java.io.EOFException: SSL peer shut down incorrectly 使用代理后显示这两个问题, 是需要设置证书吗
这个应该是代理客户端报的错, 找下对应项目的解决吧
能再具体些吗,我就是下载代理后,正常从网页上访问Chatgpt没问题,但接口访问一直报上面的错误
@xionghaizhi 日志显示对的吧,访问微信走直连 (不走代理)
ok 谢谢
我这边用的是shellclash,支持订阅模式,SSR订阅节点也支持,傻瓜式操作,还可以配置可视化面板,代理不熟悉的可以参考这个方案
也可以使用Python的代理模块: pip3 install Pysocks //以下代码写在app.py文件中 import socket import socks socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 10808) socket.socket = socks.socksocket
使用方案二运行过程中开发机开启系统代理以后就会掉线,我该怎么设置
方案一:这个方案优点是比较简单,缺点是依赖能访问外网的服务器,成本较高。唯一需要注意的是,服务器最好选hk地区的,因为需要访问wechat的后台。
相关issue:#344
香港的服务器也不行哦
方案一怎么不行,求解:
有一个通过腾讯云函数解决的,我没试过,供参考: https://github.com/Ice-Hazymoon/openai-scf-proxy
python3.9版本在开了代理的情况下会运行报错,请降低urllib3模块的版本即可,pip install urllib3==1.25.11
有帮助
使用腾讯云函数,比较省事,推荐
走的是DIRECT却login.weixin.qq.com仍旧在报错,proxy配置项也已经配置好
login.weixin.qq.com也已经被rules分流
使用腾讯云函数,比较省事,推荐
是的。不过我的openai的账户被封了。。还有5美元,不知道是因为腾讯云函数的原因还是我让机器人骂人导致的。唉。。 兄弟们且用且珍惜。
这里补一个使用openai库更改官方地址的参数:
import openai
openai.api_base = "YOUR_API_BASE"
其中,YOUR_API_BASE
应该替换为你想要设置的默认地址,例如:
import openai
openai.api_base = "https://api.openai.cn/v1/engines/davinci-codex/"
注意:以上代码应该在调用 OpenAI API 之前执行,以确保修改已生效。此外,修改默认地址只对当前 Python 进程有效,如果需要在其他脚本中使用相同的地址,需要在每个脚本中都进行相同的设置
当前的几种方案:
**1.直接连接在外网的服务器:**比xx云的香港服务器
2.国内环境开代理: 需要代理软件及代理账号
3.托管到容器平台: 如Railway等平台。
背面及讨论过程参考:#310
方案四:使用腾讯云函数服务
使用方法见: https://github.com/Ice-Hazymoon/openai-scf-proxy
得到类似于 : https://service-aaaaa.hk.apigw.tencentcs.com/ 的地址后在 app.py中添加以下代码
openai.api_base = "https://service-aaaaa.hk.apigw.tencentcs.com/v1"
优势: 免费且快速
Zeabur / vercel 部署 (推荐,实测支持 SSE,部署也非常简单) https://github.com/imyuanx/chatgpt-proxy
此时注意要开启分流模式 (PAC, 即访问国内域名不转发) 大佬你好,我的CLASH开了PAC,微能登陆,但是openai还是再dos界面显示443这怎么解决呢?
@Yan0789 config.json中的proxy有配置嘛
@Yan0789 config.json中的proxy有配置嘛 大佬,我配置了的,也是按你的方案二Clash打开PAC,不行,后面我自己换了种思路,也是用Clash解决了。 -----------------------分割线---------方法分享----------------------- 环境windows10 工具clash 操作步骤: 1.项目种的proxy一样按大佬写的配置IP端口 2.系统D理(HTTP/PAC)选择默认HTTP,这里跟楼主说的不同(注意) 3.在HTTP-绕过域/网增加一条“- *.qq.com” 4.切换到D理,选择【规Z】-手动切换-选-节点 5.按上面配置好,Clash开启系统代理。
@Yan0789 config.json中的proxy有配置嘛
@Yan0789 config.json中的proxy有配置嘛 大佬,我配置了的,也是按你的方案二Clash打开PAC,不行,后面我自己换了种思路,也是用Clash解决了。 -----------------------分割线---------方法分享----------------------- 环境windows10 工具clash 操作步骤: 1.项目种的proxy一样按大佬写的配置IP端口 2.系统D理(HTTP/PAC)选择默认HTTP,这里跟楼主说的不同(注意) 3.在HTTP-绕过域/网增加一条“- *.qq.com” 4.切换到D理,选择【规Z】-手动切换-选-节点 5.按上面配置好,Clash开启系统代理。
搭载微信正常使用两天后,目前问它问题,它一直回复:“提问太快啦,请休息一下再问我吧。”
你好 这个问题解决了吗