[Bug]: Claude on Bedrock behind the OpenAI Agents SDK: deferred tool not found after tool search, search record lost on later turns, compact

该问题出现在通过 LiteLLM 代理、以 /v1/responses 或 /v1/messages 调用 Bedrock Invoke 上的 Claude 时,属于翻译桥接层丢失 Claude 原生特性的缺陷:延迟工具(deferred tool)的调用结果未按 OpenAI Agents SDK

快速结论:该问题出现在通过 LiteLLM 代理、以 /v1/responses 或 /v1/messages 调用 Bedrock Invoke 上的 Claude 时,属于翻译桥接层丢失 Claude 原生特性的缺陷:延迟工具(deferred tool)的调用结果未按 OpenAI Agents SDK 预期结构返回、工具搜索记录在后续轮次被丢弃、以及 compaction 参数及对应 beta 头在到达 Bedrock 前被剥离。优先排查 LiteLLM 版本是否已包含对应修复(main 上的 #50602、#50821、#51223 + #51272),升级到包含修复的发布版本是首选路径。

适用环境:自托管 LiteLLM 代理;模型路由 bedrock/invoke/anthropic.claude-opus-5,区域 ap-northeast-2;客户端为 OpenAI Agents SDK 0.24.0,使用 OpenAIResponsesModel 指向代理的 /v1/responses;环境变量 LITELLM_LOCAL_ANTHROPIC_BETA_HEADERS=true;复现版本包括 main(fd4cef22)、v1.108.0、v1.109.0rc1。Issue 未提供操作系统、Python、CUDA 或显卡信息。

最快修复方案:暂无确认的一步修复方案(Issue 中作者用自建 Agents SDK 模型类直连 Bedrock Invoke 绕过,但这并非对 LiteLLM 的修复)。上游修复已合入 main,随下一个发布版本提供,升级后复测是 Issue 中确认的收敛路径。

注意事项:Issue 中明确说明修复已合入 main,但在写作时尚未指明具体发布版本号,因此不要假定某个已发布版本一定包含修复;客户端侧 namespace = name 变通在 Issue 中被验证为无效,回传路径会把两者拼接成 get_reporting_categories__get_reporting_categories。Converse 接口不适用,因为不支持工具搜索。

问题场景

用户通过自托管 LiteLLM 代理,在 OpenAI Agents SDK 中用 OpenAIResponsesModel 调用 Bedrock Invoke 上的 Claude Opus 5。主 Agent 挂载约 50 个函数工具,为压缩请求体积将工具标记为 defer_loading=True,并配合 ToolSearchTool() 让 Claude 在服务端搜索并按需加载工具(不发送 execution,因此走 Claude 服务端搜索)。此外长对话需要服务端压缩,使用 anthropic-beta: compact-2026-09-04 调用 /v1/messages。相同调用直连 Bedrock 正常,经 LiteLLM 后三处行为失效。

报错原文

ModelBehaviorError: Tool get_reporting_categories not found in agent ia

另外两个现象无显式报错:后续轮次的 Bedrock 请求只带 tool_use,缺少 server_tool_use / tool_search_tool_result;/v1/messages 请求体到达 Bedrock 时既无 compaction 也无对应 beta,返回普通轮次而非 stop_reason: "compaction"。

原因分析

  • 条目 1:/v1/responses 到 chat completions 的桥接层返回工具搜索命中的 function_call 时未带 namespace == name,而这是 Agents SDK 为延迟顶层工具保留的结构,导致 SDK 在本地 Agent 中找不到该工具。
  • 条目 2:桥接层只返回 tool_search_call 条目并丢弃搜索结果;客户端回放历史时,tool_search_call 也被丢弃,于是 Claude 看到的是延迟工具的 tool_use,却没有加载它的搜索记录。
  • 条目 3:compaction 顶层参数被剥离,且 bedrock 的 beta 映射中没有 compact-2026-09-04,请求按普通轮次执行,静默失效。
  • 可能原因:桥接层对 Anthropic 原生服务端工具(工具搜索、压缩)的字段透传与回放逻辑不完整,与 #46444(GPT 方向工具搜索)和 #44747(Vertex AI / Azure AI 路由自动注入压缩 beta)属同族但非重复问题。

环境排查

  • 确认 LiteLLM 版本,以及是否包含 main 上的 #50602、#50821、#51223 和 #51272;v1.108.0、v1.109.0rc1 在 Issue 中被确认存在问题。
  • 确认模型路由为 bedrock/invoke/anthropic.claude-opus-5,且未误用 Converse 接口(不支持工具搜索)。
  • 确认 LITELLM_LOCAL_ANTHROPIC_BETA_HEADERS=true 以及打包的 beta 列表是否包含 compact-2026-09-04。
  • 确认 OpenAI Agents SDK 为 0.24.0,工具是否设置 defer_loading=True,请求是否未携带 execution。
  • 用回调或抓包查看实际到达 Bedrock 的请求体,核对是否含 compaction、anthropic-beta、tool_search_call 及搜索结果。

解决步骤

  1. 在 /v1/responses 路径上复现条目 1:用带 defer_loading=True 的工具加 ToolSearchTool(),提问需要某个延迟工具的问题,确认是否出现 ModelBehaviorError。
  2. 不要采用客户端 namespace = name 变通;Issue 已验证该做法会让回传路径拼出 get_reporting_categories__get_reporting_categories。
  3. 升级到包含修复的 LiteLLM 发布版本(main 上由 #50602 覆盖条目 1,条目 2 的修复由 #50821 带入 main,条目 3 由 #51223 配合 #51272 修复)。若暂时无法升级,可先采用 Issue 中作者的做法:在自家 Agents SDK 模型类中直连 Bedrock Invoke,绕开代理。
  4. 升级后逐项复测:条目 1 看运行是否越过首次模型调用;条目 2 检查后续 Bedrock 请求是否携带搜索记录;条目 3 用 POST /v1/messages 携带 "compaction": {"type": "summarize"} 与 anthropic-beta: compact-2026-09-04,核对实际请求体。

验证方法

条目 1:同一段 Agent 运行不再以 ModelBehaviorError 中断,且在后续模型调用中能拿到搜索到的延迟工具。条目 2:抓取后续发送到 Bedrock 的请求,确认 tool_use 伴随相应的 server_tool_use / tool_search_tool_result。条目 3:抓取到达 Bedrock 的请求体,确认 compaction 与 compact-2026-09-04 beta 均存在,且响应为 stop_reason: "compaction"。建议按 Issue 中用户的计划,在 ap-northeast-2、Opus 5 上对升级后的版本完整复测并在 Issue 中反馈结果。

参考来源

BerriAI/litellm #50104

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 34601

发表回复

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