[BUG] GPT-6 Astra agents with tools fail on Bedrock’s OpenAI-compatible API because the retry sends reasoning_effort ‘none’

当 GPT-6 Astra 智能体(agent)带有工具(tools)并通过 Bedrock 的 OpenAI 兼容接口调用时,crewAI 在收到 400 错误后会改用 reasoning_effort="none" 进行重试,而 Astra 不接受这个取值,于是最终返回 'none' is no

快速结论:当 GPT-6 Astra 智能体(agent)带有工具(tools)并通过 Bedrock 的 OpenAI 兼容接口调用时,crewAI 在收到 400 错误后会改用 reasoning_effort="none" 进行重试,而 Astra 不接受这个取值,于是最终返回 'none' is not supported。优先检查当前 crewAI 版本是否已包含对 400 的 Responses 回退逻辑(对应 #7741)。

适用环境:macOS;Python 3.13;crewAI 1.15.22(main 7060bf8);未安装 crewAI Tools;使用 uv 创建的 venv;模型为 openai/us.openai.gpt-6-astra,base_url 指向 Bedrock 的 /openai/v1(bedrock-runtime us-east-1,也涉及 bedrock-mantle us-west-2)。

最快修复方案:暂无确认的一步修复方案。Issue 作者验证的可优先尝试做法是:升级到已合并 #7741 的 crewAI 版本(或临时将该修复合入当前版本),使 chat/completions 返回仅支持 Responses 的错误时改走 /v1/responses;在验证中,Astra 带工具时改为 chat/completions:400 responses:200 并正常返回答案。

注意事项:显式设置 api="responses" 在 Issue 中是可用的绕行方式,但并非该 bug 的修复。仅合入 #7741 时,stream=True 仍会返回空响应(#7497),需要再叠加 #7502 才能正常;不要在 Astra 上手动设置 reasoning_effort="none",该模型只接受 low、medium、high、xhigh、max。

问题场景

用户通过 LLM("openai/us.openai.gpt-6-astra", base_url="https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1", ...) 创建模型,并给 Agent 挂载工具(如 get_weather),然后调用 kickoff() 或 kickoff_async()。GPT-6 Sol / Luna 在相同配置下可以正常调用工具,但 Astra 在带工具的请求上失败。Bedrock 的 Astra /v1/chat/completions 不支持函数工具,要求使用 /v1/responses。

报错原文

BadRequestError: Error code: 400 - {'error': {'message': "Unsupported value: 'none' is not supported with this model. Supported values are: 'low', 'medium', 'high', 'xhigh', and 'max'.", 'type': 'invalid_request_error', 'param': 'reasoning_effort', 'code': 'unsupported_value'}}

原因分析

可能原因是:crewAI 的 _call_completions 在遇到“函数工具需要 /v1/responses”这类 400 后,会以 reasoning_effort="none" 重试。这个重试策略对 Sol 有效,因为 Sol 接受 none;但 Astra 不接受 none,因此重试请求返回新的 400,用户最终看到的是这个重试请求返回的 'none' is not supported,尽管用户从未设置过该值。
同时,Issue 指出 #6656 的 Responses 回退在 base_url + 非 OpenAI 模型 ID 的场景下不会生效,因为该组合被路由为 custom_openai,所以无法自动切换到 /v1/responses。

环境排查

  • 确认 crewAI 版本:Issue 在 1.15.22(main 7060bf8)以及后续 main 38db11e 上均复现。
  • 确认是否已包含 #7741 的修复,以及 lib/crewai/src/crewai/llms/providers/openai/completion.py 中工具 + reasoning_effort 重试与 Responses 回退逻辑的版本。
  • 确认 LLM 的 model 与 base_url:Astra 配置为 openai/us.openai.gpt-6-astra,base_url 为 Bedrock 的 /openai/v1。
  • 确认 Agent 是否挂载了工具;不带工具时 Astra 正常,可作为对照。
  • 确认是否设置了 stream=True;该模式下即使修复 #7741 也可能出现空响应,需结合 #7497 / #7502 判断。
  • 若运行测试,注意 test_llm_accepts_every_documented_effort[...] 在未安装 litellm extra 时失败,与本次问题无关。

解决步骤

  1. 先在无工具场景或 api="responses" 场景下复跑同一段脚本,确认 Astra 本身在 /v1/responses 上可用(Issue 证据中该路径返回 200 和 function_call get_weather)。
  2. 可优先尝试升级或切换到包含 #7741 的 crewAI 版本;若暂时无法升级,可在本地合入 #7741 的改动(Issue 作者在 main 38db11e 上合入后无冲突)。
  3. 合入后重跑带工具的 Astra 脚本:预期 HTTP 调用从 chat/completions 的两次 400 变为 chat/completions:400 后 responses:200,并返回正常答案。
  4. 如使用 stream=True,仅合入 #7741 不够,还需要叠加 #7502;否则可能得到空响应(#7497)。
  5. 不建议通过显式设置 reasoning_effort="none" 规避,Astra 会直接拒绝该值。

验证方法

用 Issue 中的 get_weather 最小示例运行 agent.kickoff("What's the weather in Paris?"),观察是否不再抛出 BadRequestError ... 'none' is not supported,并返回类似 'It’s currently 21°C and sunny in Paris.' 的内容;同时确认请求日志中出现 responses:200,且 Sol / Luna 的原有重试路径(chat/completions:400 chat/completions:200)行为不变。若运行测试,可验证 #7741 相关 6 个测试全部通过。

参考来源

crewAIInc/crewAI #7740

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 33021

发表回复

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