[BUG] o1, o1-pro, and o3 reasoning models fallback to 8k default context window

当你在 CrewAI 中使用 OpenAI 的 o1 、 o1-pro 、 o3 推理模型(或 Azure OpenAI 部署的 o 系列模型)时,上下文窗口会被错误地回退到 8,192 默认值,导致误报 LLMContextLengthExceededError 或提示被提前截断。优先排查 Cre

快速结论:当你在 CrewAI 中使用 OpenAI 的 o1、o1-pro、o3 推理模型(或 Azure OpenAI 部署的 o 系列模型)时,上下文窗口会被错误地回退到 8,192 默认值,导致误报 LLMContextLengthExceededError 或提示被提前截断。优先排查 CrewAI 版本是否包含统一的上下文窗口注册逻辑。

适用环境:Issue 已确认:CrewAI 1.15.20、crewAI Tools 1.15.20、macOS Sonoma、Python 3.12、Venv 虚拟环境。使用 o1、o1-pro、o3 以及 Azure OpenAI 部署的 o1、o1-mini、o3-mini 时触发。

最快修复方案:升级到包含 #7796 修复的 CrewAI 版本。该 PR 将上下文窗口查找集中到 crewai/llms/context_window.py,并为 o1、o1-pro、o3 注册 200k 窗口,同时保留 o1-preview、o1-mini 的 128k 窗口。

注意事项:Issue 正文中提议的手动补丁(分别修改 llm.py、openai/completion.py、azure/completion.py)已被 #7796 取代,相关 PR 已被关闭;不要按旧路径手动改动,否则可能与集中式上下文窗口模块冲突。若升级后仍回退到默认值,需确认模型名拼写与部署名是否被新表覆盖。

问题场景

在 CrewAI 中初始化一个 o 系列推理模型的 LLM 实例,并查询其上下文窗口大小时触发。例如:

from crewai.llm import LLM

llm = LLM(model="o1")
print(llm.get_context_window_size())
# Outputs: 6144 (Incorrect: default 8192 * 0.75)
# Expected: 150000 (Official 200000 * 0.75)

影响范围包括 CrewAI 直接调用 OpenAI 的 o1、o1-pro、o3,以及通过 Azure OpenAI 部署的 o1、o1-mini、o3-mini。在实际任务中表现为本应放得下的长提示被判定超长,或在远未达到官方 200k 上限时就被截断。

报错原文

[BUG] o1, o1-pro, and o3 reasoning models fallback to 8k default context window

LLMContextLengthExceededError

Expected ~150,000 (200k * 0.75 ratio), but returns 6,144 (8k * 0.75 ratio).

原因分析

最可能的原因:o 系列模型没有登记进上下文窗口表。

在 lib/crewai/src/crewai/llm.py 的 LLM_CONTEXT_WINDOW_SIZES 中只包含 "o1-preview": 128000 和 "o1-mini": 128000,缺少 o1、o1-pro、o3。由于前缀查找失败("o1".startswith("o1-preview") 为 false),查询 model="o1" 或 model="o3" 时找不到匹配项,最终回退到 DEFAULT_CONTEXT_WINDOW_SIZE(8,192 token,乘以 ratio 后为 6,144 可用 token),而不是官方的 200,000。

同类缺失也存在于:

  • lib/crewai/src/crewai/llms/providers/openai/completion.py 的 context_windows:缺少 o1、o1-pro、o3。
  • lib/crewai/src/crewai/llms/providers/azure/completion.py 的 context_windows:缺少全部 o 系列模型。

窗口被低估后,CrewAI 会在实际提示远未超限时就触发 LLMContextLengthExceededError 或提前截断提示。

环境排查

  • 确认 CrewAI 版本:Issue 复现于 1.15.20,需确认是否已包含 #7796 的集中式上下文窗口修复。
  • 确认 crewAI Tools 版本(Issue 中为 1.15.20)。
  • 确认 Python 版本(Issue 中为 3.12)。
  • 确认操作系统环境(Issue 中为 macOS Sonoma)。
  • 确认使用虚拟环境(Issue 中为 Venv)。
  • 确认模型名是否与上下文窗口表登记的名称一致,尤其是 Azure OpenAI 的部署名。

解决步骤

  1. 升级 CrewAI 到包含 #7796 的版本。该修复将上下文窗口查找集中到 crewai/llms/context_window.py,并登记 o1、o1-pro、o3 为 200k,o1-preview、o1-mini 保持 128k。
  2. 升级后,用原复现脚本重新查询窗口,确认不再返回 6,144。
  3. 如果你此前按 Issue 正文手工改过 llm.py、openai/completion.py 或 azure/completion.py,请回退这些改动,避免与集中式上下文窗口模块冲突。
  4. 针对 Azure OpenAI,确认部署使用的模型名能被新表正确匹配。

验证方法

运行与复现步骤相同的代码,检查返回值:

from crewai.llm import LLM

llm = LLM(model="o1")
print(llm.get_context_window_size())
# 预期:150000(200000 * 0.75),而不是 6144

若返回约 150,000(或与 ratio 计算一致的值),说明 o1 已正确登记 200k 窗口。再用 o1-pro、o3 分别验证应得到相同量级;用 o1-preview、o1-mini 验证应仍为 128k 对应值。此外可运行包含长提示的实际任务,确认不再出现 LLMContextLengthExceededError 或提前截断。

参考来源

crewAIInc/crewAI #7303

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 26740

发表回复

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