在 11 月 18 日前迁移 MiniMax M2.5/M2.7:解决 M3.1 Flash 的“requires adaptive thinking”400 错误

推理时代阅读约 9 分钟
在 11 月 18 日前迁移 MiniMax M2.5/M2.7:解决 M3.1 Flash 的“requires adaptive thinking”400 错误

MiniMax 将于 2026 年 11 月 18 日停止提供 M2.5 和 M2.7,迁移已经开始。自 10 月 19 日起,这两个旧系列已不再向新用户开放,指定它们的套餐请求会由 M3.1 Flash 处理。如果你使用按量付费,还有四周时间自行更改模型 ID。

大多数 M2.7 代码无需改动即可在 M3.1 Flash 上运行。问题出在一个设计选择上:M3.1 Flash 始终会进行思考,而且除非另有指定,否则会以最深层级思考。这会导致一个明显的错误、一些不易察觉的成本上涨,以及几个如今完全不起作用的设置。

AIHubMix 于 2026 年 10 月 19 日通过其网关,将本文中的每个请求都发送至 minimax-m3.1-flash 进行测试。错误文本均直接摘自响应。MiniMax 的规则引自其 API 文档。

哪些用户会受影响,以及会发生什么

你通过以下方式使用 M2.5/M2.7 会发生什么 截止日期
MiniMax M Plan / Token Plan 请求仍使用旧名称,但由 M3.1 Flash 处理 已于 10 月 19 日生效
MiniMax 按量付费 旧 ID 暂时仍可用,之后将停止 2026 年 11 月 18 日
新的 MiniMax 账户 无法使用 M2.5/M2.7 2026 年 10 月 19 日

对于套餐用户,MiniMax 的模型页面说明:“这些套餐下对 M2.5 和 M2.7 模型的所有请求都将自动路由至 M3.1 Flash Preview”,并且“现有模型名称仍可继续使用”。对于按量付费用户,页面说明:“模型停止提供后,对这些模型的 API 请求将不再生效。”公告未提及按量付费用户会自动重定向,因此请预期请求会报错,而不是回退到其他模型。

套餐用户应留意“路由”的实际含义。日志中仍会显示 M2.7,但模型权重已经不同,上下文长度扩大了 5×,思考深度默认设为 max。请将其视为模型变更,并重新运行评测。

会明显报错的情况

400:“requires adaptive thinking”

你会看到什么。禁用思考的请求会被拒绝:

{"error": {"message": "invalid params, model \"MiniMax-M3.1-Flash\" requires adaptive thinking; thinking.type=\"disabled\" (including reasoning.effort=none) is not allowed (2013) (tid: …)", "type": "bad_request_error", "param": "", "code": null}}

原因。MiniMax 的Messages API 参考文档指出,模型“始终会进行思考”:如果传入 thinking.type,其值必须为 adaptive;传入 disabled 则会返回 HTTP 400。为 M3 编写的代码也可能遇到这个问题,因为 M3 允许关闭思考。将模型标记为非推理模型、并默认发送“关闭思考”设置的框架,每次调用都会遇到此错误;kodus-ai 和 9router-go 项目都报告过类似情况。

触发错误的最简请求(通过 AIHubMix 调用 Chat Completions):

curl https://aihubmix.com/v1/chat/completions \
  -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "minimax-m3.1-flash",
       "messages": [{"role": "user", "content": "hi"}],
       "thinking": {"type": "disabled"}}'

解决方法。删除 thinking 字段,或将其设为 {"type": "adaptive"}。如果你之前关闭思考是为了节省时间,可以改用 "reasoning_effort": "low"。

图片 URL 返回相同代码 2013 的 400 错误

你会看到什么。 invalid param: remote returned status 400 (2013)。我们使用托管在 upload.wikimedia.org 上的图片 URL 时遇到了此错误。同一请求改用 base64 图片,或使用其他主机上的图片 URL,则返回 200。

原因。代码 2013 是 MiniMax 通用的“参数无效”错误代码,并非专门针对思考功能的错误。在这种情况下,上游似乎无法获取远程图片。这是我们对错误信息的解读;MiniMax 并未记录这种情况。

解决方法。以 base64 形式发送图片(data:image/png;base64,…),或将图片托管在支持普通 HTTP 请求的地方。在日志中搜索 2013 时,请先阅读完整错误信息,不要直接认定这是思考功能错误。

11 月 18 日之后:已停用的模型 ID

届时,通过 MiniMax API 对 MiniMax-M2.5、MiniMax-M2.5-highspeed、MiniMax-M2.7 和 MiniMax-M2.7-highspeed 发起的按量付费调用将停止工作。公告未提及 M2.1 和 M2。请提前更改模型 ID。在 AIHubMix 上,新 ID 为 minimax-m3.1-flash。

不易察觉的问题

以下请求都会返回 200。差异会体现在账单、延迟或输出结果上。

1. “关闭思考”设置现在不起作用

通过 AIHubMix,有三种关闭思考的请求方式不会报错,但模型仍会进行思考:

请求 在 AIHubMix 上的结果
Messages API,thinking disabled 200;面对一道简短谜题时产生 469–622 个思考 token
Chat,reasoning_effort none 200;同一道谜题产生 265–372 个推理 token
Chat,reasoning_effort minimal 200;模型仍会思考

前两行分别是在同一道三盒逻辑谜题上运行三次的结果;设置为 low 时使用了 173–251 个推理 token。minimal 测试则是在一道单行算术题上运行一次。

只有 Chat Completions 使用 thinking: {"type": "disabled"} 时,才会产生上述 400 错误。如果你的 M2.x 或 M3 代码依赖这些设置来加快调用速度,现在调用会悄无声息地继续思考。唯一真正有效的调节手段是 effort,而最低级别是 low。

2. 默认 effort 为 max

M2.7 没有思考级别。M3.1 Flash 有五个级别,MiniMax 文档说明,省略该字段时默认为 max。针对一个 Python 函数中的两个小 bug 修复,AIHubMix 测得:

设置 平均推理 token 数 平均耗时 每次修复的平均成本
省略 effort 6,364 56 s $0.0045
effort low 591 9.5 s $0.0006

两种设置下的每次运行都通过了全部 215 项隐藏测试。成本按 AIHubMix 每百万 token 输入 $0.165、输出 $0.66 的价格计算,每种设置运行三次。如果迁移时不添加 effort 设置,同一任务的耗时约为原来的 6×。本系列的 effort 文章中提供了五个级别的完整测量结果。

3. 思考会占用 max_tokens

思考 token 会计入 max_tokens。M2.x 代码通常会为简短回答设置较小的上限。在一道两句话的问题中,如果设置 max_tokens: 64,模型会把预算都花在思考上,随后返回 finish_reason: "length",并给出被截断的回答:“Sunlight contains many colors,”。MiniMax 建议设置为 131,072,最高可设为 524,288。请提高较小的上限,或在信任文本之前检查 finish_reason。

4. 缓存和服务等级发生变化

  • 根据 MiniMax 的 API 参考文档,M3.1 Flash(或 M3)不支持 cache_control。M2.7 的显式缓存写入费用为每百万 $0.375。M3.1 Flash 的缓存则是自动的。AIHubMix 对每百万缓存读取收取 $0.0165;我们发送的每个请求中,约有 175–195 个提示词 token 由缓存提供,即使是第一个请求也如此。这看起来像是 MiniMax 端固定的前置内容;按此价格计算,每千次请求的成本约为三分之一美分。请移除 cache_control 块;在这里它们不起作用。
  • 不支持 service_tier。如果你之前使用 M3 的 Priority 服务等级来降低延迟,Flash 没有对应选项。

5. 名称相同,采样设置不同

MiniMax 的默认 top_p 从 M2.x 的 0.9 调整为 M3.1 Flash 的 0.95,上下文窗口也从 204,800 扩大到 1,000,000 个 token。针对 M2.7 调优的提示词可能会生成更长或更松散的输出。模型名称不变,并不代表模型没变:请重新运行评测。

容易忽略的计费规则

  • 思考按输出计费。在 AIHubMix 上,价格为每百万 $0.66。在默认 effort 下,我们的 bug 修复任务中,思考 token 占输出的 95%(6,673 个 token 中有 6,364 个)。
  • MiniMax 尚未公布官方的单 token 价格。其定价页面列出了 M3 和 M2.x,但没有 M3.1 Flash。AIHubMix 的收费为 $0.165 / $0.66 / $0.0165(输入 / 输出 / 缓存读取)。
  • M3 的官方价格在输入 token 超过 512K 后会翻倍。AIHubMix 对 M3.1 Flash 列出了统一价格。如果你发送非常长的提示词,请将第一张账单与自己的估算进行核对。

降低账单的做法:

  1. 将 reasoning_effort: "low"(Chat)、output_config.effort: "low"(Messages)或 reasoning.effort: "low"(Responses)设为默认值,并根据任务需要提高级别。
  2. 将稳定的指令放在提示词开头,以便自动缓存能使用这些内容。
  3. 将 max_tokens 设得足够大,避免思考过程截断回答;因为不得不重试的截断回答,成本会高于预留更多 token 的成本。

拥有真实权限的智能体

当模型能够运行命令或编辑文件时,有三种行为值得注意:

  • 它在采取行动前总会先进行推理,即使设为 low 也一样。这有助于它选择工具,但也意味着每个工具步骤都会增加思考延迟;在我们的简短工具调用中,low 下每一步约耗时 2 到 7 秒。
  • 它会严格按照你说的去做。一位早期测试者称它“快得惊人,但需要清晰具体的指令,否则就会太懒”。请为智能体明确规定停止条件和验证步骤(“运行测试并粘贴输出”),而不是只给出宽泛目标。
  • 官方仅支持 tool_choice 设为 auto。AIHubMix 接受了 "required"(Chat)和 {"type": "any"}(Messages),模型也确实调用了工具,但 MiniMax 并未记录强制调用是否有效。不要将其作为安全检查的基础。

MiniMax 表示,后续轮次中应原样返回 thinking 块(Messages),并保持 reasoning_content 完整不变(Chat)。在我们的测试中,剥离 thinking 块后进行简短的工具往返仍然可行,但在较长的智能体循环中,请遵循文档中的规则。

编程工具

AIHubMix 为常用编程工具所需的三种协议都提供 minimax-m3.1-flash。我们于 10 月 19 日分别使用文本、工具调用和工具结果往返流程对每种工具进行了测试。

工具 所需协议 通过 AIHubMix 可用 Effort 字段
Claude Code Anthropic Messages 是 output_config.effort
Codex CLI OpenAI Responses 是 reasoning.effort
OpenCode OpenAI-compatible 是 reasoning_effort

MiniMax API 上的上下文窗口为 1,000,000。根据 magpie 项目中一位维护者引用的 MiniMax 文档,MiniMax Code 将客户端默认设为 512K,“以平衡使用体验与成本”;API 没有窗口参数。

Claude Code。按照AIHubMix Claude Code 指南将其连接至 AIHubMix,并将模型设为 minimax-m3.1-flash:

export ANTHROPIC_BASE_URL="https://aihubmix.com"
export ANTHROPIC_AUTH_TOKEN="$AIHUBMIX_API_KEY"
export ANTHROPIC_MODEL="minimax-m3.1-flash"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="minimax-m3.1-flash"   # background tasks too

Anthropic 风格的客户端会发送两种思考模式:带预算的 enabled 和 adaptive。在我们的测试中,两者都返回了 200,因此你不会遇到 400。已知问题:目前尚无文档说明 Claude Code 的 effort 设置是否会以 output_config.effort 的形式传递给非 Claude 模型。如果没有传递,模型就会按默认的 max 运行,每轮耗时会比 M2.7 更长。下面的冒烟测试会说明如何判断。

Codex CLI。 Codex 使用 Responses API,该 API 适用于此模型:函数调用会以 function_call 项的形式返回。按照 AIHubMix Codex 指南配置自定义提供商,并设置 wire_api = "responses",然后将 model = "minimax-m3.1-flash" 和 model_reasoning_effort 设好。xhigh 和 minimal 均被接受;minimal 不是 MiniMax 支持的级别,而且模型仍然会思考。

OpenCode。 OpenCode issue #54801(在 v2.0.27 上复现)报告称,OpenCode 无法为此模型解析出任何 effort 变体,因此按 ctrl+t 毫无作用。该 issue 提供的变通方法是在 opencode.json 中自行声明五种变体。对于 AIHubMix 的 OpenAI 兼容提供商,每种变体应设置的请求字段是 reasoning_effort(low … max),而不是 issue 中的 output_config.effort。不要添加 none 变体。

以下是适用于这三种工具的15 分钟冒烟测试:

  1. 创建一个临时文件夹,里面放一个有一处已知错误的函数,以及一个会因该错误而失败的测试文件。
  2. 向代理提出要求:“运行测试,修复错误,再次运行测试,并向我展示输出。”
  3. 成功的表现是:代理在修复前后都运行了测试,最后一次运行通过,几轮内就完成,而且没有任何一轮返回 400。
  4. 查看 AIHubMix 使用日志。你应该能看到带有推理 token 的 minimax-m3.1-flash 请求。如果每轮耗时接近一分钟,说明 effort 设置没有传递到模型,模型正在以 max 运行。

迁移清单

  • 在 11 月 18 日之前,将 MiniMax-M2.5 / M2.7 ID(在 AIHubMix 上)替换为 minimax-m3.1-flash。
  • 从请求中移除 thinking disabled、effort none 和 effort minimal。
  • 为每个请求明确指定 effort 级别;从 low 开始。
  • 提高 max_tokens,避免思考过程截断回答;检查 finish_reason。
  • 移除 cache_control 和 service_tier 字段。
  • 以 base64 形式发送图片,或使用上游服务能够获取的图片托管地址。
  • 在工具调用轮次之间,保持 thinking 块和 reasoning_content 完整。
  • 重新运行评估:名称相同,但模型和采样默认值已变。
  • 在编程工具中,确认 effort 设置已传递到模型(轮次耗时是个快速判断方法)。

常见问题

为什么会出现“requires adaptive thinking”?
你的请求禁用了思考,通常是因为在 Chat Completions 端点将 thinking type 设为了 disabled。M3.1 Flash 始终会进行思考。请移除该字段或将其设为 adaptive;如果想要更快,可以使用 effort low。

我的 M2.7 请求没有变化,但回答变了。为什么?
如果你使用的是 MiniMax M Plan 或 Token Plan,那么自 2026 年 10 月 19 日起,指定 M2.5 或 M2.7 的请求一直由 M3.1 Flash 处理,只是仍沿用旧名称。

按量付费用户的截止日期是什么时候?
2026 年 11 月 18 日。此后,发往 M2.5 和 M2.7 的 MiniMax API 请求将无法使用。

在 AIHubMix 上,reasoning_effort none 能用吗?
它会返回 200,但模型仍然会思考。实际生效的最低级别是 low。

我还需要 cache_control 吗?
不需要。MiniMax 的 M3.1 Flash 不支持此字段。缓存会自动进行,AIHubMix 对缓存输入的收费为每百万 token $0.0165。

我可以在 Claude Code 和 Codex 中使用 M3.1 Flash 吗?
可以。AIHubMix 在 Claude Code 中通过 Anthropic Messages API 提供该模型,在 Codex 中则通过 Responses API 提供。两者均于 2026 年 10 月 19 日通过了文本、工具调用和工具结果测试。

为什么我的回答被截断了?
思考 token 也计入 max_tokens。如果 finish_reason 为 length,请提高 max_tokens。MiniMax 建议使用 131,072。

继续阅读:MiniMax M3.1 Flash 系列

资料来源