AI技术

Ollama OpenAI 兼容 API 关闭思考模式

方法:

添加参数:

{
  "reasoning_effort": "none"
}

项目原本对接了 DeepSeek API,走的是 OpenAI 兼容接口。最近在公司本地部署了一个 Ollama App,运行 Qwen3.5:9B 模型,想试试看实际效果怎么样。

结果一上来就遇到一个问题:思考模式关不了。

不仅 Spring AI(Java 框架)里原本用于关闭思考的配置不生效,Cherry Studio 里关闭思考模式也一样不生效。

比较奇怪的是,同一套 Spring AI 配置在 DeepSeek 的 OpenAI 兼容接口上是可以正常关闭思考的。

网上查了一圈,很多资料都说:

Ollama 只有原生 API 才能关闭思考模式。

例如这篇:

我也实际测试了一下 Ollama 原生接口,确实可以通过类似:

{
  "think": false
}

关闭思考。

但问题是,总不能为了接 Ollama,把项目里已经统一使用的 OpenAI 兼容接口改成 Ollama 原生接口吧?

现在项目既要调用 DeepSeek,也要调用 Ollama。如果因为 Ollama 单独改一套调用协议,那原本通过 OpenAI SDK / Spring AI 统一接入不同模型的意义就没了。

继续搜,还看到另一种比较硬核的方案:修改 GGUF 中的 Chat Template,把控制思考模式的模板条件直接固定成 false。

参考:

这个方法看起来挺牛逼,本质上就是从模型模板层面直接把 thinking 关掉。

不过也是真的麻烦。

我试了一下,连模板信息都没正常读出来,可能是我的操作有问题。

折腾到这里已经有点想换 App 了。

ChatGPT 当时还给我推荐了 vLLM,说 OpenAI API 兼容性和参数支持会更完整一些,我都已经开始考虑是不是干脆不用 Ollama 了。

不过它又建议我先排查一下:

到底是 Ollama 不支持,还是客户端根本没有把正确的参数传给 Ollama。

还好我继续试了一下。

最后才发现:

Ollama 的 OpenAI 兼容 API 是支持关闭思考模式的!!!

只需要在 /v1/chat/completions 请求中增加:

{
  "reasoning_effort": "none"
}

例如:

curl http://127.0.0.1:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model":"qwen3.5:9b", "messages":[ { "role":"user", "content":"你好" } ], "reasoning_effort":"none", "stream":false }'

加上以后,Qwen3.5:9B 直接秒回,思考模式正常关闭。

所以实际并不是:

Ollama OpenAI API 不支持关闭思考。

而是:

Ollama OpenAI 兼容接口使用的参数是 reasoning_effort: "none"

网上很多资料可能是比较早的,或者讨论的是 Ollama 原生 API、Qwen Chat Template、GGUF 等不同层级的问题,混在一起之后就很容易让人误以为 OpenAI 兼容接口根本不支持。

再吐槽一下 Cherry Studio

我排查 Cherry Studio 请求时发现,它在 OpenAI 兼容接口下,关闭思考时默认发送的是:

{
  "enable_thinking": false
}

我一开始也不知道这是啥。

GPT 说这个更接近 Qwen 自己的 thinking 参数,而 Ollama 的 OpenAI 兼容接口并不认这个参数。

所以 Cherry Studio UI 里虽然已经把“思考模式”关了,但实际请求到了 Ollama 后,模型还是继续思考。

我后来又测试了一下 Cherry Studio 的 Anthropic 接口,关闭思考配置同样没有正常生效。

不过 Cherry Studio 有一个还不错的功能:

Custom Parameters

可以自己往请求里添加额外参数。

于是我直接加:

{
  "reasoningEffort": "none"
}

然后就正常了。

这里还有一个坑:

Cherry Studio 的 Custom Parameters 输入使用的是 camelCase

也就是说要写:

reasoningEffort

不能直接写:

reasoning_effort

Cherry Studio 会自动把:

reasoningEffort

转换成最终请求里的:

reasoning_effort

如果直接在 Custom Parameters 里写 snake_case,我测试下来它会被过滤掉,最终根本不会出现在 HTTP 请求里。

所以最终 Cherry Studio 的配置应该写:

{
  "reasoningEffort": "none"
}

实际发送给 Ollama 的请求则会变成:

{
  "reasoning_effort": "none"
}

最终结论

Ollama 的 OpenAI 兼容 API 可以正常关闭 Qwen3.5 的思考模式。

使用:

{
  "reasoning_effort": "none"
}

即可。

如果你发现设置了“关闭思考”却仍然在 thinking,建议先抓一下实际 HTTP 请求。

重点确认最终发送给:

/v1/chat/completions

的请求体里,是否真的包含:

{
  "reasoning_effort": "none"
}

不要看到客户端 UI 上显示“关闭思考”就默认它一定传对参数了。

这次折腾半天,最后发现 Ollama 本身其实支持。

坑主要在参数没有传对。

发表回复

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