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('<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的requestsurllib3库发出的网络连接错误。根本原因是您的程序无法连接到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服务在您所在地区是可用的,没有因政策或网络管制被阻断。

    ️ 预防措施

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

  •     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 等库管理。

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