python3.8 gevent openai 报错 openai.APIConnectionError: Connection error.

现象

python3.8.17版本中同时使用geventopenai 1.53.0包时,openai包报错openai.APIConnectionError: Connection error.

报错信息:

Traceback (most recent call last):
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 990, in _request
    response = self._client.send(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpx/_client.py", line 926, in send
    response = self._send_handling_auth(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpx/_client.py", line 954, in _send_handling_auth
    response = self._send_handling_redirects(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpx/_client.py", line 991, in _send_handling_redirects
    response = self._send_single_request(request)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpx/_client.py", line 1027, in _send_single_request
    response = transport.handle_request(request)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpx/_transports/default.py", line 236, in handle_request
    resp = self._pool.handle_request(req)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_sync/connection_pool.py", line 256, in handle_request
    raise exc from None
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_sync/connection_pool.py", line 236, in handle_request
    response = connection.handle_request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_sync/connection.py", line 101, in handle_request
    raise exc
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_sync/connection.py", line 78, in handle_request
    stream = self._connect(request)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_sync/connection.py", line 156, in _connect
    stream = stream.start_tls(**kwargs)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_backends/sync.py", line 170, in start_tls
    raise exc
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/httpcore/_backends/sync.py", line 165, in start_tls
    sock = ssl_context.wrap_socket(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/ssl.py", line 1004, in _create
    super(SSLSocket, self).__init__(**kwargs)
TypeError: super(type, obj): obj must be an instance or subtype of type

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_utils/_utils.py", line 274, in wrapper
    return func(*args, **kwargs)
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/resources/chat/completions.py", line 815, in create
    return self._post(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1277, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 954, in request
    return self._request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1014, in _request
    return self._retry_request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1092, in _retry_request
    return self._request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1014, in _request
    return self._retry_request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1092, in _retry_request
    return self._request(
  File "/opt/anaconda3/envs/test3.8/lib/python3.8/site-packages/openai/_base_client.py", line 1024, in _request
    raise APIConnectionError(request=request) from err
openai.APIConnectionError: Connection error.

版本信息

python 3.8.17
httpx 0.27.2
opena 1.53.0

原因

这是一个 ssl.wrap_socket 被 gevent monkey patch 后出现的兼容性问题,常见于 Python 3.8 + gevent + httpx(OpenAI SDK 1.x 默认使用 httpx)组合下。

解决方法

解决方案一:确保最早 monkey.patch_all()

在项目最开始(入口脚本的最上方)调用 gevent 的 monkey patch,如下:

from gevent import monkey
monkey.patch_all()

# 之后再导入 openai 等其他库
import openai

放错位置会导致 socket/ssl 没被正确 patch,出现你这种 ssl 报错。

解决方案二:升级python到3.9或更高

(myenv) PS D:\dachuang> python chatgpt_api_demo.py 输入&#39;exit&#39;退出,&#39;clear&#39;清空历史 你:hello AI思考中... Traceback (most recent call last): File "D:\anaconda\envs\myenv\lib\site-packages\httpx\_transports\default.py", line 101, in map_httpcore_exceptions yield File "D:\anaconda\envs\myenv\lib\site-packages\httpx\_transports\default.py", line 250, in handle_request resp = self._pool.handle_request(req) File "D:\anaconda\envs\myenv\lib\site-packages\httpcore\_sync\connection_pool.py", line 256, in handle_request raise exc from None File "D:\anaconda\envs\myenv\lib\site-packages\httpcore\_sync\connection_pool.py", line 236, in handle_request response = connection.handle_request( File "D:\anaconda\envs\myenv\lib\site-packages\httpcore\_sync\http_proxy.py", line 288, in handle_request connect_response = self._connection.handle_request( File "D:\anaconda\envs\myenv\lib\site-packages\httpcore\_sync\connection.py", line 101, in handle_request raise exc File "D:\anaconda\envs\myenv\lib\site-packages\httpcore\_sync\connection.py", line 78, in handle_request stream = self._connect(request) File "D:\anaconda\envs\myenv\lib\site-packages\httpcore\_sync\connection.py", line 156, in _connect stream = stream.start_tls(**kwargs) File "D:\anaconda\envs\myenv\lib\site-packages\httpcore\_backends\sync.py", line 170, in start_tls raise exc File "D:\anaconda\envs\myenv\lib\contextlib.py", line 131, in __exit__ self.gen.throw(type, value, traceback) File "D:\anaconda\envs\myenv\lib\site-packages\httpcore\_exceptions.py", line 14, in map_exceptions raise to_exc(exc) from exc httpcore.ConnectError: TLS/SSL connection has been closed (EOF) (_ssl.c:1149) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "D:\anaconda\envs\myenv\lib\site-packages\openai\_base_client.py", line 982, in request response = self._client.send( File "D:\anaconda\envs\myenv\lib\site-packages\httpx\_client.py", line 914, in send response = self._send_handling_auth( File "D:\anaconda\envs\myenv\lib\site-packages\httpx\_client.py", line 942, in _send_handling_auth response = self._send_handling_redirects( File "D:\anaconda\envs\myenv\lib\site-packages\httpx\_client.py", line 979, in _send_handling_redirects response = self._send_single_request(request) File "D:\anaconda\envs\myenv\lib\site-packages\httpx\_client.py", line 1014, in _send_single_request response = transport.handle_request(request) File "D:\anaconda\envs\myenv\lib\site-packages\httpx\_transports\default.py", line 250, in handle_request resp = self._pool.handle_request(req) File "D:\anaconda\envs\myenv\lib\contextlib.py", line 131, in __exit__ self.gen.throw(type, value, traceback) File "D:\anaconda\envs\myenv\lib\site-packages\httpx\_transports\default.py", line 118, in map_httpcore_exceptions raise mapped_exc(message) from exc httpx.ConnectError: TLS/SSL connection has been closed (EOF) (_ssl.c:1149) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "chatgpt_api_demo.py", line 44, in call_chatgpt response = client.chat.completions.create( File "D:\anaconda\envs\myenv\lib\site-packages\openai\_utils\_utils.py", line 286, in wrapper return func(*args, **kwargs) File "D:\anaconda\envs\myenv\lib\site-packages\openai\resources\chat\completions\completions.py", line 1147, in create return self._post( File "D:\anaconda\envs\myenv\lib\site-packages\openai\_base_client.py", line 1259, in post return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) File "D:\anaconda\envs\myenv\lib\site-packages\openai\_base_client.py", line 1014, in request raise APIConnectionError(request=request) from err openai.APIConnectionError: Connection error. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "chatgpt_api_demo.py", line 72, in <module> call_chatgpt() File "chatgpt_api_demo.py", line 64, in call_chatgpt except (APIConnectionError, Timeout): # 此处直接使用Timeout(已正确导入) TypeError: catching classes that do not inherit from BaseException is not allowed (myenv) PS D:\dachuang> python chatgpt_api_demo.py
最新发布
10-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无糖可乐·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值