Failed to fetch at AiSdkToChunkAdapter.convertAndEmitChunk (file:///opt/Cherry%2...
🚨 错误信息
AI_ProviderSpecificError: Failed to fetch
at AiSdkToChunkAdapter.convertAndEmitChunk (file:///opt/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:56848:64)
at AiSdkToChunkAdapter.readFullStream (file:///opt/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:56666:10)
at async AiSdkToChunkAdapter.processStream (file:///opt/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:56635:31)
at async ModernAiProvider.modernCompletions (file:///opt/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:263113:22)
at async ModernAiProvider._completionsOrImageGeneration (file:///opt/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:263034:10)
at async ModernAiProvider.completions (file:///opt/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:263017:17)
at async fetchChatCompletion (file:///opt/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:265685:2)
at async transformMessagesAndFetch (file:///opt/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:265624:3)
at async fetchAndProcessAssistantResponseImpl (file:///opt/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:61776:3)
at async file:///opt/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-e4Pmzkul.js:61721:3
🤖 AI解决方案
代码报错分析报告
1. 错误翻译
原文:AI_ProviderSpecificError: Failed to fetch
译文:AI提供商特定错误:获取失败
2. 原因分析
这是一个网络请求失败导致的AI提供商接口调用错误。根本原因是在AiSdkToChunkAdapter.convertAndEmitChunk 方法中,程序尝试向AI服务提供商(如OpenAI、Claude等)的API发起网络请求时失败了。
错误发生在Cherry Studio应用程序内部,具体是在处理AI模型流式响应(stream)的阶段。堆栈跟踪显示这是从fetchChatCompletion函数开始的异步调用链,最终在尝试转换和发出数据块时失败。
可能的具体原因包括:
- AI服务API密钥无效或过期
- 网络连接问题(代理、防火墙、DNS等)
- API配额已用完或请求频率超限
- 目标API端点不可用或被阻止
- 请求超时
3. 解决方案
由于这是一个应用程序内部错误,无法直接修改打包后的代码,但可以通过以下步骤排查和修复:
检查网络连接:
# 测试API端点连通性(以OpenAI为例)
curl -v https://api.openai.com/v1/chat/completions
检查应用程序配置:
重启和更新:
4. ️ 预防措施
1. 添加重试机制(应用程序开发层面):
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fetch(url, options);
} catch (error) {
if (i === maxRetries - 1) throw error;
await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, i)));
}
}
}
2. 配置监控和告警:
推荐工具:使用网络调试工具(如Postman、Charles Proxy)测试API端点,或使用curl命令验证连接性。