] LLM API调用失败: Failed to fetch [ERROR] LLM处理错误: Failed to fetch [ERROR] 错误堆栈: Ty...
错误信息
[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连接
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); // 返回缓存或默认响应
}
}
}
###推荐工具
检查清单
:Failed to fetch通常是网络层问题,建议从最简单的网络连通性测试开始排查。