calling LLM API: HTTPSConnectionPool(host='api.openai.com', port=443): Max retri...

2025年12月20日 16:50 状态: processing

🚨 错误信息

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(': Failed to establish a new connection: [Errno 101] Network is unreachable'))
译文:HTTPS连接池(主机: 'api.openai.com',端口: 443):URL为
/v1/chat/completions 的请求超过了最大重试次数(原因:新连接错误:':建立新连接失败:[Errno 101] 网络不可达')。
`

原因分析

这是Python的requestsurllib3库发出的网络连接错误。根本原因是您的程序无法连接到OpenAI的API服务器(api.openai.com)。具体表现为:

  • 网络层故障:错误码 [Errno 101] Network is unreachable 表明操作系统级别的网络连接完全失败。

  • 目标位置:程序正在尝试访问 https://api.openai.com/v1/chat/completions

  • 重试耗尽:库已按配置尝试了多次重连,均告失败。
  • 解决方案

    请按顺序检查以下网络配置项:

    1. 检查本地网络连接


    运行一个简单的网络测试,确认基础网络是通的。
    bash

    测试本地网络连通性


    ping 8.8.8.8

    测试能否解析OpenAI域名


    nslookup api.openai.com 或 dig api.openai.com

    2. 检查防火墙和代理设置


    这是最常见的原因。您的Python环境可能处于需要代理才能访问外网的环境中。

    方案A:在代码中配置代理
    如果您有可用的HTTP/HTTPS代理,请这样修改您的请求代码:

    python
    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服务在您所在地区是可用的,没有因政策或网络管制被阻断。

    ️ 预防措施

  • 实现健壮的错误处理与重试逻辑:在调用外部API的代码中,使用指数退避策略进行重试,并明确区分网络错误、认证错误和API限流错误。

  • python
    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


  • 环境配置外部化:将API密钥、代理地址、重试次数等配置项放入环境变量或配置文件中(如 .env 文件),不要硬编码在代码里。使用 python-dotenv` 等库管理。

  • bash
    # .env 文件示例
    OPENAI_API_KEY=sk-...
    HTTP_PROXY=http://proxy.example.com:8080
    HTTPS_PROXY=http://proxy.example.com:8080
    API_MAX_RETRIES=3