错误信息: upstream error: do request failed (request id: 20260103204432591660753Mp1r...

2026年01月03日 20:50 processing

错误信息

错误名称: AI_APICallError 错误信息: upstream error: do request failed (request id: 20260103204432591660753Mp1rvxbJ) 堆栈信息: AI_APICallError: upstream error: do request failed (request id: 20260103204432591660753Mp1rvxbJ) at file:///C:/Users/86153/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/dist-K3A05YNJ.js:543:11 at async postToApi (file:///C:/Users/86153/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/dist-K3A05YNJ.js:439:24) at async OpenAICompatibleChatLanguageModel$1.doStream (file:///C:/Users/86153/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:253086:48) at async fn (file:///C:/Users/86153/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:37120:17) at async file:///C:/Users/86153/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:34498:19 at async _retryWithExponentialBackoff (file:///C:/Users/86153/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:34600:10) at async streamStep (file:///C:/Users/86153/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:37088:108) at async fn (file:///C:/Users/86153/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:37367:5) at async file:///C:/Users/86153/AppData/Local/Programs/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:34498:19 错误原因: "[undefined]" 状态码: 500 请求路径: https://www.dmxapi.cn/v1/chat/completions 请求体: { "model": "claude-3-5-sonnet-20241022", "user": "[undefined]", "max_tokens": "[undefined]", "temperature": 1, "top_p": "[undefined]", "frequency_penalty": "[undefined]", "presence_penalty": "[undefined]", "response_format": "[undefined]", "stop": "[undefined]", "seed": "[undefined]", "serviceTier": "[undefined]", "reasoning_effort": "[undefined]", "verbosity": "[undefined]", "messages": [ { "role": "user", "content": "在宏观的建筑生长角度,从控制建筑的生长密度和控制建筑的生长类型角度出发,分别有一些什么样的约束条件,(比如物理环境的舒适度需求,人体的舒适度需求),请分别给我至少约束条件" } ], "tools": "[undefined]", "tool_choice": "[undefined]", "stream": true, "stream_options": { "include_usage": true } } 响应首部: { "cache-control": "no-cache", "content-type": "text/event-stream", "date": "Sat, 03 Jan 2026 12:49:46 GMT", "document-policy": "include-js-call-stacks-in-crash-reports", "server": "nginx", "x-rixapi-request-id": "20260103204938359922572uhfpm1Ae" } 响应内容: { "error": { "message": "upstream error: do request failed (request id: 20260103204432591660753Mp1rvxbJ)", "type": "rix_api_error", "param": "", "code": null } } 数据: { "error": { "message": "upstream error: do request failed (request id: 20260103204432591660753Mp1rvxbJ)", "type": "rix_api_error", "param": "", "code": null } }

AI 解决方案

AI API调用错误分析报告

1. 错误翻译


原文:upstream error: do request failed
译文:上游错误:执行请求失败

2. 原因分析

这是一个典型的上游API服务错误,核心问题如下:

主要问题:


  • 上游服务故障:DMXAPI平台的后端服务在处理请求时失败

  • 状态码500:服务器内部错误,表明问题在服务端而非客户端

  • 请求参数问题:多个参数值为"[undefined]"字符串而非实际的undefined或有效值
  • 关键发现:


  • 请求体格式异常:多个参数被错误地设置为字符串"[undefined]"而不是真正的undefined

  • 代理层错误:Cherry Studio通过DMXAPI调用Claude-3-5-Sonnet模型时,中间层出现问题

  • 请求ID完整链路20260103204432591660753Mp1rvxbJ20260103204938359922572uhfpm1Ae
  • 3. 解决方案

    客户端修复(Cherry Studio端):


    // 修复前的错误参数设置
    const wrongParams = {
      user: "[undefined]",          // ❌ 错误:字符串"[undefined]"
      max_tokens: "[undefined]",    // ❌ 应该为undefined或数字
      // ... 其他参数
    };
    
    // 修复后的正确设置
    const correctParams = {
      user: undefined,              // ✅ 正确:真正的undefined
      max_tokens: undefined,        // ✅ 或设置为有效数值如4096
      temperature: 1,
      top_p: undefined,             // ✅ 使用undefined而不是字符串
      frequency_penalty: undefined,
      presence_penalty: undefined,
      response_format: undefined,
      stop: undefined,
      seed: undefined,
      serviceTier: undefined,
      reasoning_effort: undefined,
      verbosity: undefined,
      model: "claude-3-5-sonnet-20241022",
      messages: [
        {
          role: "user",
          content: "在宏观的建筑生长角度,从控制建筑的生长密度和控制建筑的生长类型角度出发,分别有一些什么样的约束条件,(比如物理环境的舒适度需求,人体的舒适度需求),请分别给我至少约束条件"
        }
      ],
      tools: undefined,
      tool_choice: undefined,
      stream: true,
      stream_options: {
        include_usage: true
      }
    };
    

    临时处理方案:


    // 1. 清理请求参数
    function cleanApiParams(params) {
      const cleaned = { ...params };
      
      // 移除所有值为"[undefined]"的参数
      Object.keys(cleaned).forEach(key => {
        if (cleaned[key] === "[undefined]") {
          delete cleaned[key];
        }
      });
      
      return cleaned;
    }
    
    // 2. 重试机制
    async function callApiWithRetry(apiCall, maxRetries = 3) {
      for (let i = 0; i < maxRetries; i++) {
        try {
          return await apiCall();
        } catch (error) {
          if (error.statusCode === 500 && i < maxRetries - 1) {
            console.log(`API调用失败,${i+1}秒后重试...`);
            await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
          } else {
            throw error;
          }
        }
      }
    }
    

    4. ️ 预防措施

    ️ 最佳实践:


  • 参数验证:在发送API请求前,验证所有参数类型

  •    function validateApiParams(params) {
         const allowedUndefined = ['user', 'tools', 'tool_choice'];
         
         Object.entries(params).forEach(([key, value]) => {
           if (value === "[undefined]" || (value === undefined && !allowedUndefined.includes(key))) {
             console.warn(`参数 ${key} 存在潜在问题:`, value);
           }
         });
       }
       

    • 错误处理优化:添加更详细的错误日志记录

    •    try {
           const response = await fetch(apiUrl, options);
           if (!response.ok) {
             const errorText = await response.text();
             console.error(`API响应异常:
               状态码: ${response.status}
               请求ID: ${response.headers.get('x-request-id')}
               错误详情: ${errorText}`);
           }
           return await response.json();
         } catch (error) {
           console.error('API调用失败:', {
             错误类型: error.name,
             错误信息: error.message,
             请求URL: apiUrl,
             时间戳: new Date().toISOString()
           });
           throw error;
         }
         

      监控建议:


    • 记录所有请求ID:便于跟踪完整的请求链路

    • 设置API健康检查:定期测试DMXAPI服务可用性

    • 使用参数清理中间件:确保发送到API的数据格式正确

    调试工具推荐:


  • Postman/Insomnia:手动测试API端点

  • Charles Proxy/Fiddler:抓包分析请求响应

  • Chrome DevTools Network面板:实时监控API调用

  • 关键提示:此错误主要由服务端引起,但客户端不正确的参数格式可能触发服务端的异常处理路径。建议先修复参数格式,如果问题持续存在,联系DMXAPI技术支持并提供完整的请求ID链路。