] LLM API调用失败: Failed to fetch [ERROR] LLM处理错误: Failed to fetch [ERROR] 错误堆栈: Ty...
🚨 错误信息
🤖 AI解决方案
代码糕手 - 专业报错分析
1.翻译
javascript
原文:TypeError: Failed to fetch
译文:类型错误:获取失败
2.
这是一个网络层API调用失败的问题,根本原因:
fetch()函数在尝试调用LLM(大语言模型)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地址配置
``javascriptHTTP ${response.status}: ${await response.text()}
// 在 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();
}
return await response.json();
} catch (error) {
// 添加详细的错误日志
console.error('API调用失败详情:', {
error: error.message,
timestamp: new Date().toISOString(),
apiEndpoint: 'your-api-endpoint' // 替换为实际端点
});
throw error;
}
}
方案2:添加重试机制
javascript
// 带有重试的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});尝试 ${i + 1}/${maxRetries} 失败,${retryDelay}ms后重试
}
return response;
} catch (error) {
if (i === maxRetries - 1) {
throw error; // 最后一次尝试也失败,抛出错误
}
console.warn();
await new Promise(resolve => setTimeout(resolve, retryDelay));
retryDelay *= 2; // 指数退避
}
}
}
方案3:测试API连接
bash
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配置的有效性
javascript// 在应用启动时检查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;
}
}
优雅降级:网络失败时提供备用方案
javascriptclass 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`通常是网络层问题,建议从最简单的网络连通性测试开始排查。