calling LLM API: HTTPSConnectionPool(host='api.openai.com', port=443): Max retri...
🚨 错误信息
Error calling LLM API: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f494fd4d1c0>: Failed to establish a new connection: [Errno 101] Network is unreachable'))
🤖 AI解决方案
错误翻译
原文:HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f494fd4d1c0>: Failed to establish a new connection: [Errno 101] Network is unreachable'))
译文:HTTPS连接池(主机: 'api.openai.com',端口: 443):URL为 `/v1/chat/completions` 的请求超过了最大重试次数(原因:新连接错误:'<urllib3.connection.VerifiedHTTPSConnection 对象位于 0x7f494fd4d1c0>:建立新连接失败:[Errno 101] 网络不可达')。
原因分析
这是Python的requests或urllib3库发出的网络连接错误。根本原因是您的程序无法连接到OpenAI的API服务器(api.openai.com)。具体表现为:
- 网络层故障:错误码
[Errno 101] Network is unreachable表明操作系统级别的网络连接完全失败。 - 目标位置:程序正在尝试访问
https://api.openai.com/v1/chat/completions。 - 重试耗尽:库已按配置尝试了多次重连,均告失败。
解决方案
请按顺序检查以下网络配置项:
1. 检查本地网络连接
运行一个简单的网络测试,确认基础网络是通的。# 测试本地网络连通性
ping 8.8.8.8
# 测试能否解析OpenAI域名
nslookup api.openai.com 或 dig api.openai.com
2. 检查防火墙和代理设置
这是最常见的原因。您的Python环境可能处于需要代理才能访问外网的环境中。方案A:在代码中配置代理
如果您有可用的HTTP/HTTPS代理,请这样修改您的请求代码:
import os
import openai
# 方法1:设置环境变量(在代码运行前)
os.environ['HTTP_PROXY'] = 'http://your-proxy-server:port'
os.environ['HTTPS_PROXY'] = 'http://your-proxy-server:port' # 注意:很多HTTPS代理也用HTTP协议
# 方法2:在OpenAI客户端初始化时配置(推荐)
openai.api_key = 'your-api-key'
openai.proxy = {
'http': 'http://your-proxy-server:port',
'https': 'http://your-proxy-server:port', # 同上
}
# 或者,如果您使用的是openai>=1.0.0的新版本
from openai import OpenAI
client = OpenAI(
api_key='your-api-key',
http_client=httpx.Client(proxy="http://your-proxy-server:port")
)
方案B:检查系统/IDE/终端代理
确认您启动Python程序的环境(如终端、IDE、系统设置)是否配置了正确的代理。
3. 检查OpenAI API服务的区域可用性
确认OpenAI服务在您所在地区是可用的,没有因政策或网络管制被阻断。️ 预防措施
import time
from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type
import requests
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=4, max=10),
retry=retry_if_exception_type((requests.exceptions.ConnectionError, requests.exceptions.Timeout))
)
def call_api_safely():
# 您的API调用代码
pass
.env 文件),不要硬编码在代码里。使用 python-dotenv 等库管理。 # .env 文件示例
OPENAI_API_KEY=sk-...
HTTP_PROXY=http://proxy.example.com:8080
HTTPS_PROXY=http://proxy.example.com:8080
API_MAX_RETRIES=3