communicating with DeepSeek API: FetchError: request to https://api.deepseek.com...

2026年02月12日 08:45 processing

错误信息

Error communicating with DeepSeek API: FetchError: request to https://api.deepseek.com/beta/chat/completions failed, reason: getaddrinfo ENOTFOUND api.deepseek.com at ClientRequest.<anonymous> (file:///C:/Users/flg986/SillyTavern-Launcher/SillyTavern/node_modules/node-fetch/src/index.js:108:11) at ClientRequest.emit (node:events:530:35) at emitErrorEvent (node:_http_client:104:11) at TLSSocket.socketErrorListener (node:_http_client:518:5) at TLSSocket.emit (node:events:518:28) at emitErrorNT (node:internal/streams/destroy:170:8) at emitErrorCloseNT (node:internal/streams/destroy:129:3) at process.processTicksAndRejections (node:internal/process/task_queues:90:21) { type: 'system', errno: 'ENOTFOUND', code: 'ENOTFOUND', erroredSysCall: 'getaddrinfo'

AI 解决方案

代码糕手 - 报错分析报告

##

原文:FetchError: request to https://api.deepseek.com/beta/chat/completions failed, reason: getaddrinfo ENOTFOUND api.deepseek.com
译文:FetchError: 请求 https://api.deepseek.com/beta/chat/completions 失败,原因:getaddrinfo ENOTFOUND api.deepseek.com

原因分析
这是一个网络连接错误,具体原因如下:

  • 根本原因:DNS解析失败,无法找到 api.deepseek.com 这个域名对应的IP地址

  • 错误类型ENOTFOUND 表示域名不存在或无法解析

  • 发生位置:在 Node.js 的 node-fetch 模块发起 HTTP 请求时

  • 可能原因

  • - 域名拼写错误
    - DNS服务器故障或配置问题
    - 网络连接中断
    - 防火墙或代理阻止了DNS查询
    - 目标服务器域名已更改或暂时不可用

    ##1:检查网络连接和DNS

    # 1. 测试网络连通性
    ping 8.8.8.8
    
    # 2. 测试DNS解析
    nslookup api.deepseek.com
    
    # 3. 尝试使用其他DNS服务器
    # 临时修改DNS为Google DNS
    # Windows: netsh interface ip set dns "以太网" static 8.8.8.8
    # Linux/Mac: 修改 /etc/resolv.conf
    

    方案2:验证API端点URL


    // 确保API端点URL正确
    const correctUrl = 'https://api.deepseek.com/beta/chat/completions';
    
    // 添加错误处理和重试机制
    async function callDeepSeekAPI() {
      try {
        const response = await fetch('https://api.deepseek.com/beta/chat/completions', {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer ${process.env.DEEPSEEK_API_KEY}`
          },
          body: JSON.stringify({
            model: 'deepseek-chat',
            messages: [{ role: 'user', content: 'Hello' }]
          })
        });
        
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        
        return await response.json();
      } catch (error) {
        console.error('API调用失败:', error.message);
        
        // 如果是网络错误,可以尝试重试
        if (error.code === 'ENOTFOUND') {
          console.log('检测到网络错误,请检查网络连接和DNS设置');
        }
        
        throw error;
      }
    }
    

    方案3:使用IP地址直接访问(如果已知)


    // 如果知道API服务器的IP地址,可以暂时使用IP访问
    const apiUrl = 'https://[DeepSeek-API-IP]/beta/chat/completions';
    // 注意:这需要知道正确的IP地址,且服务器支持IP直接访问
    ️ 预防措施
    
    ### 1. **添加网络异常处理**
    
    javascript
    // 在API调用中添加完善的错误处理
    const MAX_RETRIES = 3;
    const RETRY_DELAY = 1000; // 1秒

    async function callAPIWithRetry(url, options, retries = MAX_RETRIES) {
    for (let i = 0; i < retries; i++) {
    try {
    return await fetch(url, options);
    } catch (error) {
    if (error.code === 'ENOTFOUND' && i < retries - 1) {
    console.log(DNS解析失败,${RETRY_DELAY}ms后重试...);
    await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
    continue;
    }
    throw error;
    }
    }
    }
    ``

    2. 配置备用DNS和连接检查


  • 在应用启动时检查网络连接状态

  • 配置多个DNS服务器作为备用

  • 使用 dns.resolve() 预解析域名

  • 考虑使用网络监控库如 is-onlinenetwork-checker

3. 开发工具推荐


  • 网络调试:使用 curl 或 Postman 测试API端点

  • DNS检查:使用 dig 或在线DNS查询工具

  • 代理设置:如果使用代理,确保正确配置 HTTP_PROXY` 环境变量提示:这个错误通常是暂时的网络问题,建议先检查本地网络连接,然后确认API服务是否正常运行。