Bedrock Converse `content_blocks` drops redacted reasoning, so it is not sent back with `output_version=”v1″` (found with GPT-6 Sol/Luna/Ast

在 LangChain 中通过 Bedrock Converse 调用只返回 reasoningContent.redactedContent 的推理模型(如 GPT-6 Sol/Luna/Astra)时,Bedrock Converse 翻译器会把该块丢成空壳 {'type': 'reasonin

快速结论:在 LangChain 中通过 Bedrock Converse 调用只返回 reasoningContent.redactedContent 的推理模型(如 GPT-6 Sol/Luna/Astra)时,Bedrock Converse 翻译器会把该块丢成空壳 {'type': 'reasoning'},导致 output_version="v1" 的多轮对话不回传推理块。优先排查 langchain-core 与 langchain-aws 是否已包含修复版本。

适用环境:LangChain(langchain-core 的 Bedrock Converse 块翻译器)、langchain-aws、Amazon Bedrock(us-east-1)上的 us.openai.gpt-6-sol / us.openai.gpt-6-luna / us.openai.gpt-6-astra,使用 output_version 与 additional_model_request_fields={"reasoning": {"effort": "high"}}。复现验证基于 master 4fe944a、langchain-core 1.6.12、langchain-aws 1.9.0。

最快修复方案:升级到 langchain-core 1.6.7 及 langchain-aws 1.8.1 或更高版本,这两个版本包含了 content_blocks 保留字节(#41086)与 output_version="v1" 回传(langchain-ai/langchain-aws#1360)的修复。

注意事项:修复后 content_blocks[0] 变为带 extras.redacted_content 的 reasoning 块,而不再是空壳 {'type': 'reasoning'};依赖旧形状判断类型的下游代码可能需要同步调整。默认 v0 往返行为保持不变。

问题场景

使用 init_chat_model 以 model_provider="bedrock_converse" 连接 Amazon Bedrock,调用只以 reasoningContent.redactedContent 形式返回推理的模型。首轮返回的 content_blocks[0] 丢失字节,只剩 {'type': 'reasoning'};在 output_version="v1" 下进行第二轮(把上一轮 AIMessage 追加进历史)时,请求中只发送 text,reasoningContent 未被回传。同一脚本在 v0 下第二轮能发送 reasoningContent 与 text,说明问题集中在 v1 路径的块翻译与回传。

报错原文

offline content_blocks: [{'type': 'reasoning'}, {'type': 'text', 'text': '1081'}]
us.openai.gpt-6-sol v1
  content_blocks[0]: {'type': 'reasoning'}
  turn 2 assistant sent: ['text']
...
Bedrock Converse `content_blocks` drops redacted reasoning, so it is not sent back with `output_version="v1"` (found with GPT-6 Sol/Luna/Astra)

原因分析

根因位于 block_translators/bedrock_converse.py 的 reasoning_content 分支:对于只携带 redacted_content 的块,翻译器返回了空的 reasoning 块,原始 payload(字节)被丢弃。因此 content_blocks 中拿不到可回传的内容,output_version="v1" 在下一轮自然只发送 text。相关崩溃(redacted_content 块形状导致)此前已在 langchain-aws 修复(#1223、#1296),但核心翻译器当时未改动。

环境排查

  • 确认 langchain-core 版本是否 ≥ 1.6.7(#41086 保留了 content_blocks 中的字节)。
  • 确认 langchain-aws 版本是否 ≥ 1.8.1(#1360 负责在 output_version="v1" 轮次回传)。
  • 确认是否使用 output_version="v1";v0 路径在修复前后行为一致,容易误判为已修复。
  • 确认模型为 Bedrock 上的 GPT-6 Sol/Luna/Astra,并启用了 additional_model_request_fields={"reasoning": {"effort": "high"}}。
  • 若同时使用 stream_events(version="v3"),一并核对输出中的 reasoning 块是否带有 extras.redacted_content。

解决步骤

  1. 将 langchain-core 升级到 1.6.7 或更高版本,将 langchain-aws 升级到 1.8.1 或更高版本。
  2. 用 Issue 中的离线片段先做不发请求的检查:确认 msg.content_blocks 的第一个元素为 {'type': 'reasoning', 'extras': {'redacted_content': ...}},而不是 {'type': 'reasoning'}。
  3. 再跑在线复现脚本,分别检查 v0 与 v1 下第二轮请求中 assistant 消息的 content 类型列表。
  4. 如使用流式事件,追加一次 stream_events(version="v3") 调用,检查 output.content[0] 的 extras.redacted_content。
  5. 若你的代码依赖旧的空壳 reasoning 块形状,按新形状更新类型判断与序列化逻辑。

验证方法

在修复后的环境中重跑 Issue 脚本,预期 content_blocks[0] 为带 extras.redacted_content 的 reasoning 块;v1 下第二轮 assistant 消息发送 ['reasoningContent', 'text'];stream_events(version="v3") 输出的第一块同样携带 extras.redacted_content;默认 v0 第二轮保持 ['reasoningContent', 'text'] 不变。

参考来源

langchain-ai/langchain #40809

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29428

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注