Bug Report: Gemma 4 thinking cannot be reliably disabled through OpenAI-compatible API

这个报错通常出现在通过 Ollama 的 OpenAI 兼容端点( /v1/chat/completions )调用 Gemma 4 并尝试关闭思考时。此时 think: false 不生效,应改用 reasoning_effort ;排查时优先确认请求字段名,因为兼容端点不识别 think 。

快速结论:这个报错通常出现在通过 Ollama 的 OpenAI 兼容端点(/v1/chat/completions)调用 Gemma 4 并尝试关闭思考时。此时 think: false 不生效,应改用 reasoning_effort;排查时优先确认请求字段名,因为兼容端点不识别 think。

适用环境:Issue 已确认:Ollama 0.40.6、模型 gemma4:12b-mlx、Aider 0.86.2、macOS(Apple Silicon,Apple 平台 CPU/GPU)。

最快修复方案:在 /v1/chat/completions 请求中改用 "reasoning_effort": "none",不再使用 "think": false。Issue 评论中给出的 curl 测试已返回不含 reasoning 的 message。

注意事项:该做法验证范围是 Ollama 的 OpenAI 兼容端点;Ollama 原生接口(/api/chat)仍使用 "think": false,两者参数不同,不能混用。Aider 侧的配置支持情况在 Issue 中未得到确认。

问题场景

用户在 macOS Apple Silicon 上使用 Ollama 0.40.6 运行 gemma4:12b-mlx,并通过 Aider 0.86.2 进行自动化 SwiftUI 代码修复。Aider 走的是 Ollama 的 OpenAI 兼容 API(/v1/chat/completions),并尝试关闭模型的扩展推理,但响应中仍返回大量 message.reasoning 内容,导致修复过程反复分析、耗时异常(测试中曾约两小时未应用修正)。

报错原文

Bug Report: Gemma 4 thinking cannot be reliably disabled through OpenAI-compatible API

原因分析

可能原因:Ollama 的 OpenAI 兼容端点不接受 think 字段,而是使用 reasoning_effort(及 reasoning.effort)。因此用户在 /v1/chat/completions 中传入 "think": false 时会被忽略,模型仍输出 reasoning。Issue 中的对照测试与此一致:Ollama CLI 的 --think=false 和原生 /api/chat 的 "think": false 均正常,只有兼容端点失败。

环境排查

  • 确认 Ollama 版本:Issue 中为 0.40.6。
  • 确认模型名称:gemma4:12b-mlx,与请求体中的 model 字段一致。
  • 确认请求端点:走 /v1/chat/completions 时使用 OpenAI 兼容参数,不要沿用原生 API 的 think。
  • 确认调用工具(如 Aider)是否有透传 reasoning_effort 的能力;Issue 中 Aider 对 --thinking-tokens 0 直接拒绝并忽略,其实现还会在预算为零时移除 thinking 参数而非显式置为 false。
  • 本文未涉及 CUDA/PyTorch 相关信息,Apple Silicon 环境下无需按 CUDA 路径排查。

解决步骤

  1. 将请求字段从 "think": false 改为 "reasoning_effort": "none",请求发送到 http://127.0.0.1:11434/v1/chat/completions。
  2. 用 Issue 评论中的最小请求验证:请求体包含 model、reasoning_effort 和 messages,提示词为 Reply with exactly: THINKING TEST PASSED。
  3. 在自动化工具中接入时,确保工具确实把 reasoning_effort 传入兼容端点;如果工具不支持该字段,需要在其请求层手动添加或改用直接调用 API 的方式(Aider 的官方支持方式在 Issue 中未确认)。
  4. 如果仍需要走原生接口,则继续使用 /api/chat 配 "think": false,不要期望在兼容端点里生效。

验证方法

检查 /v1/chat/completions 响应的 choices[0].message:使用 reasoning_effort: "none" 后应只返回 role 与 content,不再出现 reasoning 字段。Issue 评论中的实际返回为 {"role": "assistant", "content": "THINKING TEST PASSED"},可作为对照基准。

参考来源

ollama/ollama #19217

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 30726

发表回复

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