[Bug]: Bedrock rejects requests without tools= parameter, even for non-tool-use completions

这个报错通常出现在用 LiteLLM 网关调用 Bedrock Claude,且对话历史中包含 tool call 消息、但本次请求又没有传 tools= 参数时,LiteLLM 会把它判定为“无 tools 的工具调用”并直接拒绝。优先排查对话历史里是否混有历史 tool call 消息,以及 m

快速结论:这个报错通常出现在用 LiteLLM 网关调用 Bedrock Claude,且对话历史中包含 tool call 消息、但本次请求又没有传 tools= 参数时,LiteLLM 会把它判定为“无 tools 的工具调用”并直接拒绝。优先排查对话历史里是否混有历史 tool call 消息,以及 modify_params 是否开启。

适用环境:LiteLLM 代理指向 AWS Bedrock;模型 us.anthropic.claude-opus-4-5-20251101-v1:0(Claude Opus 4.5);客户端 OpenCode v1.2.27,使用 @ai-sdk/openai-compatible;LiteLLM 版本为 Latest(via gateway)。Issue 未提供 Python、CUDA、显卡等信息。

最快修复方案:暂无确认的一步修复方案。可优先尝试开启 litellm.modify_params = True(或配置 litellm_settings::modify_params: True),Issue 中提到相关修复 PR #25419 合并后该路径应可用于绕过此问题。

注意事项:modify_params 会让 LiteLLM 向请求体注入参数,属于需要显式开启的功能,可能影响不希望被注入参数的场景;Issue 中还提到该开关曾影响 Bedrock 的 prefix 处理(见 #17990)。Issue 维护者表示无法在无 tool call 历史的请求中复现该错误,因此该问题的触发条件与对话历史中的 tool call 消息相关,未验证的修复仍可能受具体版本影响。

问题场景

用户把 LiteLLM 代理作为网关,后端接 AWS Bedrock 上的 Claude 模型(us.anthropic.claude-opus-4-5-20251101-v1:0),前端是 AI 编程助手 OpenCode v1.2.27(通过 @ai-sdk/openai-compatible 调用)。当助手接近约 200k token 上下文上限、执行“compaction”(对话摘要/压缩)时,会发送不带 tools= 参数的普通 chat completion 请求。这类请求本应像直连 Bedrock/Claude API 一样正常返回,但经由 LiteLLM 网关后直接抛出 UnsupportedParamsError。下游还有用户反馈在集成 LiteLLM 时遇到同样问题,另有用户表示当 codemie 尝试压缩上下文时整个会话中断。

报错原文

litellm.UnsupportedParamsError: Bedrock doesn't support tool calling without `tools=` param specified. Pass `tools=` param OR set `litellm.modify_params = True` // `litellm_settings::modify_params: True` to add dummy tool to the request.
Received Model Group=us.anthropic.claude-opus-4-5-20251101-v1:0
Available Model Group Fallbacks=None

原因分析

该错误的核心信息是:Bedrock 在未指定 tools= 参数时被判定为“不支持工具调用”。但 Issue 维护者实测后指出,在纯聊天、对话历史中没有 tool call 消息的情况下无法复现;一旦在对话历史中加入 tool call 消息,就会如预期般抛出该错误。因此更可能的原因是:LiteLLM 在处理 Bedrock 请求时,只要检测到对话历史中存在 tool call 相关消息,就要求本次请求必须携带 tools=(或开启 modify_params 注入 dummy tool),而不会因为本次请求本身是普通 completion 就放行。报错信息中给出的建议方案 modify_params = True 本身也有已知副作用——据 Issue 描述,它曾破坏 Bedrock 的 prefix handling(见 #17990),所以用户被迫在两种不理想行为之间选择。

环境排查

  • 确认 LiteLLM 是否为“Latest(via gateway)”,并确认网关实际加载的 LiteLLM 版本,是否包含 PR #25419 的修复。
  • 确认后端为 AWS Bedrock,模型 ID 是否为 us.anthropic.claude-opus-4-5-20251101-v1:0 或同类 Claude 模型。
  • 确认客户端为 OpenCode v1.2.27 且使用 @ai-sdk/openai-compatible 接入 LiteLLM。
  • 检查触发失败的请求在 messages 历史中是否包含 tool call(或 assistant/tool 角色相关消息),这是维护者复现该错误的关键条件。
  • 确认 litellm.modify_params / litellm_settings::modify_params 当前是否开启,以及是否影响 Bedrock prefix 相关配置。
  • Issue 未提供 Python、CUDA、显卡、PyTorch 等信息,无需按这些维度排查。

解决步骤

  1. 先确认触发条件:用相同模型和 messages 历史发送一次请求,检查历史中是否混有 tool call 消息。若去掉 tool call 历史后不再报错,则与 Issue 中维护者的复现结果一致。
  2. 若确认由历史 tool call 引起,可优先尝试开启 modify_params:在 LiteLLM 配置中设置 litellm.modify_params = True,或在代理配置中设置 litellm_settings::modify_params: True,让 LiteLLM 为请求注入 dummy tool。
  3. 升级/确认 LiteLLM 版本是否已包含 PR #25419(BerriAI/litellm #25419)。该 PR 针对 modify_params 路径的问题做了修复,Issue 维护者表示合并后 modify_param 路线应可正常使用。
  4. 如果开启了 modify_params 后出现 Bedrock prefix handling 异常,需同时检查 #17990 中描述的行为变化,评估是否接受该副作用。
  5. 若上述方式仍无法解决,可考虑在网关层对 compaction 这类无工具请求做特殊处理(例如确保该请求不携带 tool call 历史),但 Issue 中未验证此方案,属于可尝试方向。

验证方法

在开启 modify_params 并升级到包含修复的版本后,重新发送不带 tools=、但对话历史中包含 tool call 消息的 chat completion 请求,观察是否不再抛出 UnsupportedParamsError,且能正常返回摘要内容。再单独发送不带 tool call 历史的普通 completion 请求,确认作为对照基线本身也不报错。若两类请求均可正常返回,则可认为该问题在该版本上已被绕过或修复。

参考来源

BerriAI/litellm #24158

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 23964

发表回复

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