![[Bug]: "Content block is not a text block" intermittently on v1.88.0-rc.1 with Bedrock Converse + CRIS + Thinking (multi-turn)](https://www.chat-gpts.plus/wp-content/uploads/2026/07/29441-479a9474.jpg)
[Bug]: “Content block is not a text block” intermittently on v1.88.0-rc.1 with Bedrock Converse + CRIS + Thinking (multi-turn)
快速结论:该报错在 Claude Code 多轮对话的第二轮交替出现,原因是 LiteLLM 将 Bedrock Converse 流式响应转换为 Anthropic /v1/messages 格式时,SSE 事件结构可能错误地将 thinking block 放置在了 Claude Code 流式解析器期望 text block 的位置。优先排查 LiteLLM 版本和 Converse API 的响应转换逻辑。
问题场景
用户通过 LiteLLM 代理(v1.88.0-rc.1)将 Claude Code CLI 连接到 AWS Bedrock Converse API(Cross-Region Inference 模式),并启用 extended thinking。在第一轮对话正常后,第二轮对话约 30-50% 的概率触发此错误。该问题仅在 LiteLLM + Bedrock Converse 路径中出现,使用 Anthropic 原生 API 时未复现。
报错原文
Error: Content block is not a text block
在 Claude Code CLI 的调试日志中,该报错伴随以下流式响应结构:
16:13:39.138 [DEBUG] [API REQUEST] /v1/messages source=repl_main_thread ← 1st turn
16:13:41.632 [DEBUG] Stream started - received first chunk ← ✅ works
16:13:46.965 [DEBUG] [API REQUEST] /v1/messages source=generate_session_title
16:13:47.065 [DEBUG] [API REQUEST] /v1/messages source=repl_main_thread ← 2nd turn
16:13:48.150 [DEBUG] Stream started - first byte after 1114ms (title gen)
16:13:49.730 [DEBUG] Stream started - first byte after 2688ms (2nd turn)
...
原因分析
可能原因:当 LiteLLM 将 Bedrock Converse 流式响应转换为 Anthropic /v1/messages SSE 事件时,在 multi-turn 场景下,历史对话中已包含上一轮 assistant 响应的 thinking block。第二轮流式响应中,content_block_start/content_block_delta 事件的顺序可能异常,导致 thinking block 出现在 Claude Code 流式解析器预期为 text block 的位置。该错误仅在 LiteLLM 容器内可见(HTTP 200 正常),实际是客户端解析失败。此前在 v1.84.4、v1.86.2 和 v1.90.0 版本中均有用户复现。
环境排查
- LiteLLM 版本:确认是否为 v1.88.0-rc.1、v1.84.4、v1.86.2 或 v1.90.0(多版本均受影响的已知问题)
- Claude Code CLI 版本:2.1.159(及周边版本)
- Provider 与模型:AWS Bedrock Converse API,使用 Cross-Region Inference(CRIS)global inference profile(如 global.anthropic.claude-sonnet-4-6)
- Thinking:是否已启用 extended thinking(Claude Code 默认启用)
- LiteLLM 配置:检查 litellm_settings 中 drop_params: true 和 modify_params: true 是否设置
- 直接对比测试:通过 Anthropic 原生 API 是否可稳定复现该错误
解决步骤
- 立即降级:可优先尝试将 LiteLLM 回退到 v1.84.4 或更早版本,看是否能规避该问题(已知该问题在多个版本间持续存在,但更早版本可能受影响较小)
- 临时规避:在 Claude Code 设置中关闭 extended thinking(如果工作负载允许),避免 thinking block 在对话历史中出现
- 监控上游修复:密切关注 BerriAI/litellm 仓库中与 #24641(文档内容块静默丢弃)和 #20370(空文本内容块未清理)相关的修复进展,它们是可疑的根因
- 调试日志对比:在 Claude Code CLI 中开启
CLAUDE_CODE_DEBUG=1环境变量,观察两轮对话的 SSE 事件结构差异,确认 content_block_start 事件的 type 字段是否异常 - 备选方案:如果问题持续影响生产,考虑暂时切换至 Anthropic 原生 API 作为替代路由
验证方法
在相同的 multi-turn 场景下运行至少 5 组连续对话(每组含 3-5 轮),观察第二轮及后续轮次是否再次出现 Error: Content block is not a text block。如果关闭 thinking 后问题消失,则确认与 thinking block 的转换逻辑相关。同时检查 LiteLLM 容器日志,确认所有响应均为 HTTP 200 且无明显错误输出。



