OpenAI报错 time out:HTTPSConnectionPool(host=‘api.openai.com‘, port=443)

项目场景:

使用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'
}

如下示例:
OpenAI报错 time out:HTTPSConnectionPool(host=‘api.openai.com‘, port=443)_第1张图片

保存后重新运行就可以了,但是我在使用Ubuntu的机器上连续请求几次又报错中断了重新请求又没有问题也挺奇怪。

方法三:

代码里设置环境变量

在代码中添加以下代码

import os
 
os.environ["http_proxy"] = "http://localhost:7890"
os.environ["https_proxy"] = "http://localhost:7890"

你可能感兴趣的:(bug,openai,chatgpt,proxies)