错误信息: Claude Code returned an error result: API Error: Content block not found 堆...
错误信息
错误名称: AI_ProviderSpecificError
错误信息: Claude Code returned an error result: API Error: Content block not found
堆栈信息: AI_ProviderSpecificError: Claude Code returned an error result: API Error: Content block not found
at AiSdkToChunkAdapter.convertAndEmitChunk (file:///F:/cherry/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-SasHqsyc.js:350298:64)
at AiSdkToChunkAdapter.readFullStream (file:///F:/cherry/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-SasHqsyc.js:350073:10)
at async AiSdkToChunkAdapter.processStream (file:///F:/cherry/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-SasHqsyc.js:350034:31)
at async fetchAndProcessAgentResponseImpl (file:///F:/cherry/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-SasHqsyc.js:168254:3)
at async file:///F:/cherry/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-SasHqsyc.js:168441:5
at async file:///F:/cherry/Cherry%20Studio/resources/app.asar/out/renderer/assets/store-SasHqsyc.js:143364:21
错误原因: {
"message": "Claude Code returned an error result: API Error: Content block not found",
"type": "stream_error",
"code": "stream_processing_failed"
}
AI 解决方案
🔍 错误分析
1. 🌐 错误翻译
原文:Claude Code returned an error result: API Error: Content block not found
译文:Claude Code 返回了错误结果:API 错误:未找到内容块
2. 🎯 原因分析
该错误表明在使用 Claude Code API 时,服务器响应中预期的内容块(Content block)未能成功返回或不存在。从堆栈信息来看,问题发生在数据流处理的适配器层(AiSdkToChunkAdapter.convertAndEmitChunk),系统尝试从 API 响应中提取内容块进行转换和发送时失败。
根本原因是 API 响应结构不符合客户端预期,可能原因包括:
3. 💡 解决方案
需要在处理 Claude API 响应的适配器代码中增加容错处理,对缺失的内容块进行检查和处理:
// 在 AiSdkToChunkAdapter.convertAndEmitChunk 方法中增加容错处理
convertAndEmitChunk(chunk) {
// 检查 chunk 是否包含有效内容块
if (!chunk || typeof chunk !== 'object') {
console.warn('Received invalid chunk:', chunk);
return this.emitError('Invalid chunk structure received from API');
}
// 安全地访问内容块
const contentBlock = chunk.content || chunk.text || chunk.message;
if (!contentBlock) {
// 记录详细日志以便调试
console.error('Content block not found in API response:', chunk);
console.error('Available chunk keys:', Object.keys(chunk));
// 发送错误事件
this.emitError('Content block not found in API response');
return null;
}
// 正常处理内容块
const processedContent = this.processContent(contentBlock);
this.emit('content', processedContent);
}
同时,在调用 API 的地方增加响应格式验证:
async processStream(stream) {
try {
const response = await fetchAndProcessAgentResponseImpl(stream);
// 验证响应结构
if (!response || !this.validateResponseStructure(response)) {
throw new AI_ProviderSpecificError('Invalid response structure from Claude API');
}
// 处理响应
return this.convertAndEmitChunk(response);
} catch (error) {
// 统一错误处理
this.handleStreamError(error);
}
}
// 响应结构验证方法
validateResponseStructure(response) {
if (!response || typeof response !== 'object') return false;
// 检查是否包含可能的内容字段
const contentKeys = ['content', 'text', 'message', 'output'];
return contentKeys.some(key => response[key] !== undefined && response[key] !== null);
}
4. 🛡️ 预防措施
- 响应结构验证:在调用第三方 API 时,始终先验证响应数据结构是否符合预期,使用类型检查或结构验证工具
- 完善的错误处理:对可能缺失的字段建立容错机制,避免因 API 变更导致程序崩溃
- 日志记录:详细记录 API 响应内容,便于快速定位接口变更问题
- API 版本管理:使用 API 版本锁定策略,在升级依赖前进行兼容性测试
- 推荐工具:使用 TypeScript 增加类型安全,或使用
zod、joi等库进行运行时数据验证