] LLM API调用失败: Failed to fetch [ERROR] LLM处理错误: Failed to fetch [ERROR] 错误堆栈: Ty...

2026年02月06日 11:05 processing

错误信息

[ERROR] LLM API调用失败: Failed to fetch [ERROR] LLM处理错误: Failed to fetch [ERROR] 错误堆栈: TypeError: Failed to fetch at LLMClient.chatCompletion (D:\GSME\nerou\js\ai\llm-client.js:71:36) at VoiceChatFacade.sendToLLM (D:\GSME\nerou\js\ai\llm-handler.js:183:53) [ERROR] 用户显示错误: 网络连接失败,请检查网络和API地址

AI 解决方案

代码糕手 - 专业报错分析

1.翻译

原文:TypeError: Failed to fetch
译文:类型错误:获取失败

2.

这是一个网络层API调用失败的问题,根本原因:

  • fetch API调用失败:JavaScript的fetch()函数在尝试调用LLM(大语言模型)API时失败

  • 网络连接问题:本地服务无法连接到远程API服务器

  • 可能的具体原因

  • - API地址配置错误或不可达
    - 网络防火墙阻止了连接
    - API服务器宕机或维护中
    - CORS(跨域资源共享)问题
    - SSL证书问题(如果是HTTPS)

    错误位置

    D:\GSME\nerou\js\ai\llm-client.js:71:36
    D:\GSME\nerou\js\ai\llm-handler.js:183:53
    

    3.

    方案1:检查API地址配置

    // 在 llm-client.js 中检查配置
    async function chatCompletion(messages) {
      try {
        const response = await fetch('https://your-llm-api-endpoint.com/v1/chat/completions', {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            'Authorization': 'Bearer YOUR_API_KEY',
            // 如果是跨域请求,确保服务器配置了正确的CORS头
          },
          body: JSON.stringify({
            model: 'gpt-3.5-turbo',
            messages: messages,
            // ... 其他参数
          })
        });
        
        if (!response.ok) {
          throw new Error(`HTTP ${response.status}: ${await response.text()}`);
        }
        
        return await response.json();
      } catch (error) {
        // 添加详细的错误日志
        console.error('API调用失败详情:', {
          error: error.message,
          timestamp: new Date().toISOString(),
          apiEndpoint: 'your-api-endpoint' // 替换为实际端点
        });
        throw error;
      }
    }
    

    方案2:添加重试机制

    // 带有重试的fetch包装函数
    async function fetchWithRetry(url, options, maxRetries = 3, retryDelay = 1000) {
      for (let i = 0; i < maxRetries; i++) {
        try {
          const response = await fetch(url, options);
          
          // 检查网络错误
          if (!response.ok) {
            throw new Error(`HTTP ${response.status}`);
          }
          
          return response;
        } catch (error) {
          if (i === maxRetries - 1) {
            throw error; // 最后一次尝试也失败,抛出错误
          }
          
          console.warn(`尝试 ${i + 1}/${maxRetries} 失败,${retryDelay}ms后重试`);
          await new Promise(resolve => setTimeout(resolve, retryDelay));
          retryDelay *= 2; // 指数退避
        }
      }
    }
    

    方案3:测试API连接

    # 1. 测试网络连接
    ping your-llm-api-endpoint.com
    
    # 2. 测试端口连通性(如果是自定义API)
    telnet your-api-domain.com 443
    
    # 3. 使用curl测试API
    curl -X POST https://your-llm-api-endpoint.com/v1/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -d '{"model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "test"}]}'
    

    4.预防措施

    ###

  • 配置验证:启动时验证API配置的有效性

  •    // 在应用启动时检查API连接
       async function validateAPIConnection() {
         try {
           const response = await fetch(apiConfig.endpoint + '/health', { 
             method: 'GET' 
           });
           return response.ok;
         } catch (error) {
           console.error('API连接测试失败:', error);
           return false;
         }
       }
       

    • 优雅降级:网络失败时提供备用方案

    •    class LLMClient {
           async chatCompletion(messages) {
             try {
               return await this.callAPI(messages);
             } catch (error) {
               console.error('API调用失败,使用备用方案');
               return this.fallbackResponse(messages); // 返回缓存或默认响应
             }
           }
         }
         

      ###推荐工具

    • Postman/Insomnia:用于API端点的测试和调试

    • 浏览器开发者工具:检查网络请求的详细错误信息

    • Wireshark/Fiddler:网络流量分析工具(高级调试)

    检查清单

  • [ ] API地址是否正确且可达

  • [ ] API密钥是否有效且未过期

  • [ ] 网络防火墙是否允许该连接

  • [ ] 服务器CORS配置是否正确

  • [ ] SSL证书是否有效(如果是HTTPS)

Failed to fetch通常是网络层问题,建议从最简单的网络连通性测试开始排查。