InternalServerError: {"error":{"message":"upstream error: do request failed (req...

2026年01月17日 00:05 状态: processing

🚨 错误信息

Generate: Warning: Gemini API error InternalServerError: {"error":{"message":"upstream error: do request failed (request id: 20260116235626228131239SN1jlpef)","type":"rix_api_error","param":"","code":"do_request_failed"}}

🤖 AI解决方案

错误翻译


原文:InternalServerError: {"error":{"message":"upstream error: do request failed (request id: 20260116235626228131239SN1jlpef)","type":"rix_api_error","param":"","code":"do_request_failed"}}
译文:内部服务器错误:上游请求失败(请求ID:20260116235626228131239SN1jlpef)

原因分析

这个错误是典型的API网关或后端服务故障。具体原因通常是:

  • Gemini 的基础服务提供方(上游服务)在处理你的请求时发生了内部错误或超时。

  • 错误码 rix_api_errordo_request_failed 明确指示,是调用链中更后端的服务出现了问题,而非你代码中的逻辑或参数错误。
  • 解决方案

    此类错误通常发生在服务端,客户端代码无法直接修复,但可以通过以下重试和错误处理机制来应对:

    ``python

    示例:在调用Gemini API的代码中添加重试逻辑和更健壮的错误处理


    import time
    import requests
    from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type

    定义需要重试的异常(例如,5xx服务器错误或连接超时)


    class ServerError(Exception):
    pass

    def is_server_error(exception):
    # 判断是否为服务器端错误
    if isinstance(exception, requests.exceptions.HTTPError):
    return 500 <= exception.response.status_code < 600
    return False

    @retry(
    stop=stop_after_attempt(3), # 最多重试3次
    wait=wait_exponential(multiplier=1, min=2, max=10), # 指数退避等待
    retry=retry_if_exception_type(ServerError) # 仅对服务器错误重试
    )
    def call_gemini_api(prompt, api_key):
    url = "https://api.gemini.com/v1/chat/completions" # 示例URL,请替换为真实端点
    headers = {
    "Authorization": f"Bearer {api_key}",
    "Content-Type": "application/json"
    }
    payload = {"prompt": prompt}

    response = requests.post(url, json=payload, headers=headers, timeout=30)
    response.raise_for_status() # 对于4xx/5xx状态码会抛出HTTPError

    return response.json()

    使用示例


    try:
    api_key = "your-api-key"
    result = call_gemini_api("你的提示词", api_key)
    print(result)
    except requests.exceptions.HTTPError as e:
    if 500 <= e.response.status_code < 600:
    print(f"⚠️ 服务器端错误,请稍后重试。状态码:{e.response.status_code}")
    # 可以在这里记录请求ID以便于追踪:
    request_id 可以从错误响应中解析
    else:
    print(f"❌ 客户端请求错误:{e}")
    except Exception as e:
    print(f"❌ 发生未知错误:{e}")
    `

    ️ 预防措施

  • 实现优雅降级与重试:对于依赖外部API的核心功能,必须实现带有退避策略的重试机制(如指数退避),并设置合理的失败兜底方案(如返回缓存数据、默认值或友好的用户提示)。

  • 加强监控与告警

  • - 记录并监控错误率,特别是
    5xx 错误和 do_request_failed 这类上游错误。
    - 将请求ID(如
    20260116235626228131239SN1jlpef`)记录到日志系统,当联系服务提供商(Gemini)技术支持时,提供此ID能极大加速问题排查。
    - 考虑使用APM(应用性能监控)工具来追踪整个调用链的健康状况。