切到 GLM-5.3 之后,Thinking 参数写成 disabled 为什么请求直接失败?

把请求里的 model 改成 glm-5.3 以后,旧习惯里用来关思考的 thinking.type: "disabled" 一送上去,整段会被拒。智谱文档《GLM-5.3》写得很死:这个型号会始终启用思考,不再支持禁用。迁模型 ID 之前如果参数还按旧习惯传,很容易卡在这一步。

文档里的参数表

《GLM-5.3》页的功能变更一段写明:目前只处理文本,支持 1M 上下文窗口,最大输出 Tokens 为 128K。思考相关参数如下:

  • thinking.type:只接受 enabled,默认也是 enabled,不支持禁用。
  • reasoning_effort:low、high、max,默认 max。文档对三档的说明是轻量 / 增强 / 深度推理。

页面上的迁移提示原文大意是:若应用里还在用 thinking.type: "disabled",请在把模型 ID 更新为 glm-5.3 之前,先改成 enabled,并把 reasoning_effort 设为 low。否则请求会失败。复杂 Coding 任务文档建议用 max。

最小请求形态可以按文档示例收成:

{
  "model": "glm-5.3",
  "messages": [{"role": "user", "content": "…"}],
  "thinking": { "type": "enabled" },
  "reasoning_effort": "max"
}

日常想省一点思考开销,把 reasoning_effort 调成 low 即可,不要再传 disabled。需要更深推理时再用 high 或 max。三档怎么选没有统一公式,文档只给了 Coding 等复杂任务偏 max 的建议。延迟和费用体感要自己用同一条提示对比,这篇不引用任何竞品分数表。

迁的时候先改哪一步

容易踩坑的顺序是:先改 model,请求一发就失败,再回头翻文档。按迁移提示,应先改客户端或网关里的 thinking / reasoning_effort,确认不再出现 disabled,再切模型 ID。代理层、SDK 封装、提示词模板、CI 里的 fixture 如果还写着旧字段,也会在切模型后一起爆。

有的封装会把「关闭思考」做成布尔开关,内部仍序列化成 thinking.type: "disabled"。开关在旧模型上能用,不代表新模型还认。切 glm-5.3 前,把序列化结果抓一条出来看字段,比只改 UI 开关更靠谱。流式和非流式示例在文档里都要求带上 thinking.type: "enabled",别只改了非流式路径。

接入端点文档列了 OpenAI Chat Completions、OpenAI Response、Anthropic Message 几类 Base URL。若曾经订阅过 GLM Coding Plan(含已过期),文档备注暂时只能走 OpenAI Chat Completions 协议调模型 API,其余协议的开放进度以页面后续更新为准。这篇只核思考参数。套餐积分、Flash / FlashX 进不进 Coding Plan 另说,不在这里展开价目。

排错时先看返回体里是不是明确抱怨 thinking / disabled,再查本地配置。有的网关会把未知字段丢掉,表面上看请求「成功了」,实际上思考强度一直停在默认 max,账单和延迟都会和预期不一致。另一类相反:网关把旧的 disabled 原样转发给新模型,于是整段失败。两种都要在代理日志里把 outbound JSON 打出来对一下。

文档里的能力列表还提到流式输出、Function Calling、上下文缓存、结构化输出等,这些和「能不能关思考」不是同一件事。思考被迫开启之后,工具调用轮次里还要不要回传思维链字段,以智谱深度思考专题文档为准,这篇不把旧模型的习惯直接搬过来。基准评测数字、和其他型号的对比表一律不抄,避免写成跑分帖。

如果业务上必须「完全不思考」的短链路,按当前文档做不到,只能继续留在仍支持 disabled 的旧模型 ID,或接受 reasoning_effort: "low" 作为最轻的一档。把模型名先改掉再指望参数兼容,是这次迁移里最常见的顺序错误。团队若有统一的模型路由配置,把 glm-5.3 的默认思考参数写进同一处,比让每个业务服务自己猜字段名省事。

已经切到 glm-5.3 的,你们是统一把 reasoning_effort 钉在 low,还是按任务在 low / high / max 之间切换?