Failed to fetch at AiSdkToChunkAdapter.convertAndEmitChunk (file:///D:/Cherry%20...

2025年12月01日 18:58 状态: processing

🚨 错误信息

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. ️ 预防措施

  • 网络稳定性检查:在执行AI调用前检查网络连接状态

  • // 网络状态检查
    if (!navigator.onLine) {
        throw new Error('网络连接不可用,请检查网络设置');
    }

  • API端点健康检查:定期验证AI服务端点的可用性

// 服务健康检查
async function checkServiceHealth(endpoint) {
    try {
        const response = await fetch(`${endpoint}/health`, { 
            timeout: 5000 
        });
        return response.ok;
    } catch {
        return false;
    }
}

建议工具:使用Chrome DevTools的Network面板监控请求状态,配置合理的超时时间和重试策略。