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

    bash

    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


    ``javascript
    // 确保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地址直接访问(如果已知)


    javascript
    // 如果知道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服务是否正常运行。