快速结论:这个 bug 发生在 LangChain 的 AIMessage.content_blocks 属性被读取时,Anthropic、Bedrock、Google GenAI 和 Vertex AI 的翻译器会直接修改原始消息内容,导致数据静默丢失或增加。优先检查你使用的 provider 是否属于这四类,以及消息内容中是否包含 index 键或 annotations 字段。
适用环境:LangChain langchain-core 包;涉及 provider 为 Anthropic、Bedrock(复用 Anthropic 翻译器)、Google GenAI、Vertex AI(复用 Google GenAI 翻译器)。issue 中未提供 Python 版本、操作系统或显卡等环境信息。
最快修复方案:暂无确认的一步修复方案。该 issue 对应的修复 PR #39997 已被自动关闭,需要等待官方合入修复;在修复发布前,建议避免在读取 content_blocks 后继续依赖原始 message.content 的完整性。
注意事项:该问题不会抛出异常,属于静默数据损坏;一旦消息被持久化(checkpointer、对话存储、dumps()),损坏的数据会永久丢失,无法恢复。
问题场景
在使用 LangChain 处理 Anthropic、Bedrock、Google GenAI 或 Vertex AI 模型的输出时,读取 AIMessage.content_blocks 属性会导致原始 message.content 被修改。具体表现为:
- Anthropic/Bedrock:消息内容中自定义块(custom block)的
index键被删除。 - Google GenAI/Vertex AI:消息内容中被添加了
annotations字段(来自 grounding metadata)。
此问题在流式输出、非流式输出以及手动构造 AIMessage 时均可触发,尤其是当消息内容包含翻译器无法识别的块类型时。
报错原文
core: AIMessage.content_blocks mutates message.content in the Anthropic, Bedrock and Google translators
No exception is raised. The message is silently modified by reading a property.
# content changed: True
# content now: [{'type': 'custom', 'payload': 'value'}] <-- `index` gone
# reads differ: True
# content changed: True
# content now: [{'type': 'text', 'text': 'hello', 'annotations': [...]}]
原因分析
AIMessage.content_blocks 被设计为派生视图属性,负责将 provider 特有的内容格式转换为标准块。但 Anthropic 和 Google GenAI 的翻译器在构建输出时,直接使用了调用方传入的字典引用,并对这些字典执行了写入操作:
- Anthropic 翻译器(
_convert_to_v1_from_anthropic):在将未知块类型包装为non_standard块时,使用pop从原始块中提取index,导致该键从message.content中被删除。Bedrock 复用此函数,因此同样受影响。 - Google GenAI 翻译器:将 grounding metadata 中的
annotations字段直接写入调用方的文本块字典中。
issue 提交者审计了全部九个翻译器,确认 anthropic、bedrock、google_genai、google_vertexai 和 bedrock_converse 存在此问题;openai、groq 和 langchain_v0 不受影响。
环境排查
- 确认
langchain-core是否为最新稳定版本(issue 提及 bug 在最新版本中仍存在)。 - 确认使用的 provider 类型:
model_provider为anthropic、bedrock、google_genai或google_vertexai时均可能受影响。 - 检查消息内容是否包含自定义块类型(如
{"type": "custom", ...})或 grounding metadata。 - 检查是否有持久化层(checkpointer、数据库、
dumps())存储了AIMessage,一旦内容被修改,重新加载后会永久丢失数据。
解决步骤
- 在读取
content_blocks之前,使用deepcopy备份message.content,确保原始数据不被修改。 - 如果要长时间保存消息,请先备份完整内容(包括
index键、annotations字段),再调用content_blocks。 - 关注 issue #39997 和 #40008 的修复进展;在官方修复发布前,不要在生产环境中直接依赖读取
content_blocks之后的message.content数据。 - 如果问题严重影响使用,可考虑手动构造标准块或绕过
content_blocks属性,直接处理原始message.content。
验证方法
使用 issue 中的复现代码,在修复前后分别运行:
- 读取
content_blocks前后对比message.content是否发生变化。 - 连续读取两次
content_blocks,确认两次结果是否一致(第一次读取后数据已损坏,第二次结果会不同)。 - 检查持久化数据(如 checkpointer 存储的消息)在重新加载后是否丢失了
index键或增加了annotations字段。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug][DCP] NVIDIA DeepSeek-V3.2 / GLM-5.2 fused attention bypasses DCP handling](https://www.chat-gpts.plus/wp-content/uploads/2026/09/50095-245de1c7-768x403.jpg)