项目场景:
使用openai的api调用chatGPT报错,同样的代码在另一台机器没有问题
问题描述
使用官方示例
import openai
openai.api_key = 'sk-xxxx'
def chat_gpt(prompt):
prompt = prompt
model_engine = "text-davinci-003"
completion = openai.Completion.create(
engine=model_engine,
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=0.5,
timeout=1000,
)
response = completion.choices[0].text
print(response)
chat_gpt("who are you")
报错信息:
APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1125)')))
原因分析:
猜测是代理问题,但是有时候不开代理好像也有可能出现
解决方案:
方法一:
urllib3降低版本到1.25.11
可以看我另一篇博文的介绍:传送门
这个方法对部分人有用,但很不幸我是另一部分。。。其实也挺莫名其妙的,在我windows的机器上就可以,一样的配置和代码在Ubuntu的机器上就不行(我这是两个机器,虚拟机的会不会有问题就没试过)
方法二:
修改openai源码
查看堆栈找到报错库的路径:
打开api_requestor.py(在pycharm或者vscode都可以直接点就可以跳过去):
搜索(CTRL + F)
if not hasattr(_thread_context, "session")
在上面添加代理(按自己的端口来,一般是7890)
proxies= {
'http': 'http://localhost:7890',
'https': 'http://localhost:7890'
}
如下示例:
保存后重新运行就可以了,但是我在使用Ubuntu的机器上连续请求几次又报错中断了重新请求又没有问题也挺奇怪。
方法三:
代码里设置环境变量
在代码中添加以下代码
import os
os.environ["http_proxy"] = "http://localhost:7890"
os.environ["https_proxy"] = "http://localhost:7890"