使用OpenAI API时遇到APIConnectionError

这里提供的示例代码:https://platform.openai.com/docs/api-reference/chat?lang=python在Google Colab环境中可以成功运行。

但当我在本地虚拟环境中运行时,它会显示这个错误:APIConnectionError: 连接错误。

我使用的是同一个密钥。我没有使用VPN。

在完整的错误信息中,我看到ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败: 证书链中的自签名证书 (_ssl.c:1020)

我已经尝试运行

/Applications/Python*/Install\ Certificates.command

但这没有帮助。

当我在shell中运行同一页面上给出的”curl”示例时,使用同一个密钥可以正常工作!!https://platform.openai.com/docs/api-reference/chat?lang=curl

我需要做些什么呢?

任何指导都将不胜感激。谢谢


回答:

在应用了这个建议后,建议使用truststore,这个问题得到了解决:https://stackoverflow.com/a/79052345/727997

pip install truststore

然后在你的Python代码中调用openai之前添加以下内容:

import truststoretruststore.inject_into_ssl()# 调用requests.get的代码

之前,我按照这个方法安装了证书:https://community.openai.com/t/ssl-certificate-verify-failed/32442/58

ChatGPT AI说:

使用truststore.inject_into_ssl()是一种有效的方法,如果正确使用,通常不会引入安全风险。以下是它的作用和可能的关注点:

truststore.inject_into_ssl()的作用是什么?

  • truststore包允许Python使用系统的原生CA证书,而不是依赖certifi或手动设置SSL_CERT_FILE
  • truststore.inject_into_ssl()修改Python的SSL模块,使其使用系统的根证书。

安全影响

优点(安全优势):

  1. 使用系统信任的证书 – 这确保Python依赖于与操作系统相同的CA包,由操作系统更新维护。
  2. 减少手动干预 – 你不需要像使用certifi那样手动更新CA包,降低了使用过期证书的风险。
  3. 对企业环境更安全 – 一些公司有自己的CA证书,truststore确保Python尊重这些证书。

⚠️ 潜在的安全风险:

  1. 如果系统的CA存储被 compromised – 由于truststore将信任决策推迟给操作系统,系统CA存储中的任何恶意或过期的根证书也将被Python信任。
  2. SSL行为的意外修改 – 如果另一个库也尝试修改ssl设置,可能会与truststore的更改发生冲突,导致意外的SSL行为。
  3. 兼容性问题 – 某些Python包期望特定的CA包(例如,requests默认使用certifi),因此使用truststore覆盖可能会在某些环境中引起问题。

certifi的比较

特性 truststore (inject_into_ssl()) certifi
使用系统CA存储? ✅ 是 ❌ 否(使用Mozilla CA包)
需要更新? ✅ 随操作系统自动更新 ❌ 需要pip install --upgrade certifi
在所有环境中工作? ⚠️ 在某些隔离容器中可能不工作 ✅ 在任何有Python的环境中工作
如果OS CA被compromised,存在安全风险吗? ⚠️ 是 ✅ 否(独立的CA存储)

结论

  • 如果你在正常环境中运行Python(例如,Linux、macOS、Windows且操作系统信任存储已更新)truststore.inject_into_ssl()是一个不错的选择,没有重大安全风险。
  • 如果你在受控环境中(例如,容器化应用、旧系统或安全敏感项目),你可能更喜欢certifi,以确保你有一个一致的、独立维护的CA存储。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注