chatgpt-on-wechat icon indicating copy to clipboard operation
chatgpt-on-wechat copied to clipboard

Openai接口网络不通的解决方案 (已支持 Railway 一键部署)

Open zhayujie opened this issue 1 year ago • 87 comments

目前的几种方案:

1.直接部署在外网的服务器: 比如 xx云的香港服务器

2.国内环境开代理: 需要 代理软件 及 代理账号

3.托管到容器平台: 如Railway等平台。

背景及讨论过程参考:https://github.com/zhayujie/chatgpt-on-wechat/issues/310

zhayujie avatar Mar 04 '23 15:03 zhayujie

方案一:这个方案优点是比较简单,缺点是依赖能访问外网的服务器,成本较高。唯一需要注意的是,服务器最好选择openai支持的地区,且需要访问wechat的后台。

相关issue:https://github.com/zhayujie/chatgpt-on-wechat/issues/344

更新 03.11: 目前使用方案一被openai限制风险小

zhayujie avatar Mar 04 '23 15:03 zhayujie

方案二

原理是通过本地安装的 代理客户端 把 请求转发到 代理服务器,再由能访问外网的代理服务器完成请求。 现在常用的代理协议有 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 接口了。

zhayujie avatar Mar 04 '23 15:03 zhayujie

方案三:RailWay 一键部署 (推荐)

Railway 每月提供5刀和最多500小时的免费额度。

  1. 进入 Railway
  2. 点击 Deploy Now 按钮
  3. 设置环境变量来重载程序运行的参数,例如open_ai_api_key, character_desc
  4. 等待运行,扫码登录即可享用

zhayujie avatar Mar 04 '23 15:03 zhayujie

python3.9版本在开了代理的情况下会运行报错,请降低urllib3模块的版本即可,pip install urllib3==1.25.11

sw0210 avatar Mar 04 '23 15:03 sw0210

期待方案三

sunzhuo avatar Mar 05 '23 04:03 sunzhuo

方案二

原理是通过本地安装的 代理客户端 把 请求转发到 代理服务器,再由能访问外网的代理服务器完成请求。 现在常用的代理协议有 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)')))

yz5love avatar Mar 05 '23 04:03 yz5love

方案二

原理是通过本地安装的 代理客户端 把 请求转发到 代理服务器,再由能访问外网的代理服务器完成请求。 现在常用的代理协议有 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 接口了。

配置了,重启后没有走代理?但是微信那个都走了。 image

xionghaizhi avatar Mar 05 '23 07:03 xionghaizhi

@xionghaizhi 日志显示对的吧,访问微信走直连 (不走代理)

zhayujie avatar Mar 05 '23 08:03 zhayujie

javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake

Caused by: java.io.EOFException: SSL peer shut down incorrectly

使用代理后显示这两个问题, 是需要设置证书吗

GengCen-Qin avatar Mar 05 '23 09:03 GengCen-Qin

javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake

Caused by: java.io.EOFException: SSL peer shut down incorrectly

使用代理后显示这两个问题, 是需要设置证书吗

这个应该是代理客户端报的错, 找下对应项目的解决吧

zhayujie avatar Mar 05 '23 09:03 zhayujie

javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake Caused by: java.io.EOFException: SSL peer shut down incorrectly 使用代理后显示这两个问题, 是需要设置证书吗

这个应该是代理客户端报的错, 找下对应项目的解决吧

能再具体些吗,我就是下载代理后,正常从网页上访问Chatgpt没问题,但接口访问一直报上面的错误

GengCen-Qin avatar Mar 05 '23 09:03 GengCen-Qin

@xionghaizhi 日志显示对的吧,访问微信走直连 (不走代理)

ok 谢谢

xionghaizhi avatar Mar 05 '23 10:03 xionghaizhi

我这边用的是shellclash,支持订阅模式,SSR订阅节点也支持,傻瓜式操作,还可以配置可视化面板,代理不熟悉的可以参考这个方案

liuao5201314 avatar Mar 06 '23 09:03 liuao5201314

也可以使用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

Gavincent1 avatar Mar 07 '23 03:03 Gavincent1

使用方案二运行过程中开发机开启系统代理以后就会掉线,我该怎么设置

hgjprpr avatar Mar 07 '23 05:03 hgjprpr

方案一:这个方案优点是比较简单,缺点是依赖能访问外网的服务器,成本较高。唯一需要注意的是,服务器最好选hk地区的,因为需要访问wechat的后台。

相关issue:#344

香港的服务器也不行哦

blackhorse1234 avatar Mar 07 '23 08:03 blackhorse1234

方案一怎么不行,求解: image

blackhorse1234 avatar Mar 07 '23 08:03 blackhorse1234

有一个通过腾讯云函数解决的,我没试过,供参考: https://github.com/Ice-Hazymoon/openai-scf-proxy

Jackiexiao avatar Mar 07 '23 08:03 Jackiexiao

python3.9版本在开了代理的情况下会运行报错,请降低urllib3模块的版本即可,pip install urllib3==1.25.11

有帮助

Chenkx-0907 avatar Mar 07 '23 10:03 Chenkx-0907

使用腾讯云函数,比较省事,推荐

leonardocsc avatar Mar 08 '23 08:03 leonardocsc

image 走的是DIRECT却login.weixin.qq.com仍旧在报错,proxy配置项也已经配置好 login.weixin.qq.com也已经被rules分流 image

weishijie-detail avatar Mar 08 '23 13:03 weishijie-detail

使用腾讯云函数,比较省事,推荐

是的。不过我的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 进程有效,如果需要在其他脚本中使用相同的地址,需要在每个脚本中都进行相同的设置

niufox avatar Mar 09 '23 08:03 niufox

当前的几种方案:

**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"

优势: 免费且快速

yxn4065 avatar Mar 10 '23 06:03 yxn4065

Zeabur / vercel 部署 (推荐,实测支持 SSE,部署也非常简单) https://github.com/imyuanx/chatgpt-proxy

Jackiexiao avatar Mar 11 '23 06:03 Jackiexiao

此时注意要开启分流模式 (PAC, 即访问国内域名不转发) 大佬你好,我的CLASH开了PAC,微能登陆,但是openai还是再dos界面显示443这怎么解决呢?

Yan0789 avatar Mar 13 '23 08:03 Yan0789

@Yan0789 config.json中的proxy有配置嘛

zhayujie avatar Mar 13 '23 15:03 zhayujie

@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 avatar Mar 14 '23 00:03 Yan0789

@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 avatar Mar 14 '23 02:03 Yan0789

搭载微信正常使用两天后,目前问它问题,它一直回复:“提问太快啦,请休息一下再问我吧。”

Kys10000 avatar Mar 16 '23 07:03 Kys10000

你好 这个问题解决了吗

qigegenb avatar Mar 16 '23 09:03 qigegenb