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

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

    # 示例:在调用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(应用性能监控)工具来追踪整个调用链的健康状况。