Failed to fetch at AiSdkToChunkAdapter.convertAndEmitChunk (file:///D:/Cherry%20...
🚨 错误信息
AI_ProviderSpecificError: Failed to fetch
at AiSdkToChunkAdapter.convertAndEmitChunk (file:///D:/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Z-tJeJfQ.js:46527:64)
at AiSdkToChunkAdapter.readFullStream (file:///D:/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Z-tJeJfQ.js:46345:10)
at async AiSdkToChunkAdapter.processStream (file:///D:/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Z-tJeJfQ.js:46314:31)
at async ModernAiProvider.modernCompletions (file:///D:/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Z-tJeJfQ.js:258723:22)
at async ModernAiProvider._completionsOrImageGeneration (file:///D:/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Z-tJeJfQ.js:258644:10)
at async ModernAiProvider.completions (file:///D:/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Z-tJeJfQ.js:258627:17)
at async fetchChatCompletion (file:///D:/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Z-tJeJfQ.js:261017:2)
at async transformMessagesAndFetch (file:///D:/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Z-tJeJfQ.js:50115:3)
at async fetchAndProcessAssistantResponseImpl (file:///D:/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Z-tJeJfQ.js:51734:3)
at async file:///D:/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-Z-tJeJfQ.js:51823:6
🤖 AI解决方案
错误分析报告
1. 错误翻译
原文:AI_ProviderSpecificError: Failed to fetch
译文:AI提供者特定错误:获取失败
2. 原因分析
这是一个网络请求失败错误,核心问题在于AI服务调用过程中的HTTP请求失败。从调用栈可以看出:- 错误发生在
AiSdkToChunkAdapter.convertAndEmitChunk方法中 - 这是在进行AI服务流式响应处理时出现的网络连接问题
- 可能导致的原因:网络断开、API端点不可达、CORS限制、服务端超时等
3. 解决方案
// 建议的修复代码 - 添加错误处理和重试机制
async function fetchWithRetry(url, options, maxRetries = 3) {
let lastError;
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const response = await fetch(url, options);
if (response.ok) return response;
// 如果是服务器错误,等待后重试
if (response.status >= 500) {
await new Promise(resolve =>
setTimeout(resolve, Math.pow(2, attempt) * 1000)
);
continue;
}
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
} catch (error) {
lastError = error;
if (attempt < maxRetries) {
await new Promise(resolve =>
setTimeout(resolve, Math.pow(2, attempt) * 1000)
);
}
}
}
throw lastError || new Error('Failed to fetch after retries');
}
// 在调用AI服务处使用
try {
const response = await fetchWithRetry(apiUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify(payload)
});
} catch (error) {
console.error('AI服务调用失败:', error);
// 提供用户友好的错误提示
}
4. ️ 预防措施
// 网络状态检查
if (!navigator.onLine) {
throw new Error('网络连接不可用,请检查网络设置');
}
// 服务健康检查
async function checkServiceHealth(endpoint) {
try {
const response = await fetch(`${endpoint}/health`, {
timeout: 5000
});
return response.ok;
} catch {
return false;
}
}
建议工具:使用Chrome DevTools的Network面板监控请求状态,配置合理的超时时间和重试策略。