快速结论:当你在 Ollama 中用 `/api/generate` 并设置 `”think”: true` 调用带 `thinking` 能力的 Qwen 模型(如 `qwen3:14b`)时,如果返回的 `response` 里混入了完整的 <think>...</think> 内容、而 `thinking` 字段为空,通常说明你正在使用过期的本地模型版本或偏旧的 Ollama。优先检查并更新 `qwen3:14b` 模型和 Ollama 本体。
适用环境:Issue 已确认环境为 Ollama 0.34.0(Windows / Nvidia GPU / Intel CPU),模型为 `qwen3:14b`,请求为非流式 `POST /api/generate`,参数包含 `”think”: true`、`”stream”: false`、`options: {temperature:0, seed:1, num_predict:2048}`。后续作者升级到 Ollama 0.34.2 并更新模型后不再复现。
最快修复方案:ollama pull qwen3:14b 拉取最新模型,并升级 Ollama 到 0.34.2(或更新版本),然后重跑相同的 `/api/generate` 请求。Issue 作者正是通过这两步更新后恢复正常。
注意事项:由于作者同时更新了模型和 Ollama,无法确定是哪一项单独修复了问题,因此建议两项都更新。升级前可用 ollama list 记录旧的模型 ID 以便回退。
问题场景
用户在本地运行 Ollama 服务,用非流式 /api/generate 请求 qwen3:14b,并设置顶层参数 "think": true。模型声明支持 `thinking` 能力,但返回结果中,完整的 <think>...</think> 推理内容被塞进了 response 字段,而本该承载推理过程的 thinking 字段长度为 0。对同样的模型与提示,/api/chat 请求能正确把推理分离到 message.thinking,只把最终答案放到 message.content。两个请求的 prompt、seed、temperature、num_predict 均一致,且都以 done_reason: "stop" 正常结束,未使用 stop、format、tools 或 raw 模式。
报错原文
/api/generate
done_reason=stop
eval_count=160
response_len=752
thinking_len=0
response starts with "<think>\nOkay, the user wants me to reply..."
response contains both <think> and </think>
/api/chat
done_reason=stop
eval_count=163
message.content="OK"
message.thinking_len=729
message.content contains no thinking tags
原因分析
维护者最初怀疑 GenerateHandler 在配置了内置 parser 时会跳过 thinking 标签抽取,即使该 parser 并不处理 thinking。这可以解释为什么 <think> 块残留在 response 中。但随后维护者修正了说法:handler 测试中复现的失败是在显式配置内置 qwen3 parser 的情况下出现的,而当前 qwen3:14b 的 registry 配置并未声明该 parser,因此这并不能作为上报行为的确定原因。
问题最终由上报者自己定位:他使用的是 16 个月前发布的旧版 qwen3:14b(模型 ID 7d7da67570e2)。在更新模型到 bdbd181c33f2、并把 Ollama 从 0.34.0 升级到 0.34.2 之后,/api/generate 就能正确把推理写进 thinking。由于两项同时变更,无法确定单独哪一项决定了修复。
环境排查
- 确认 Ollama 版本:
ollama -v,若为 0.34.0 及更早,考虑升级到 0.34.2 或更新。 - 确认
qwen3:14b的模型 ID 与拉取时间:ollama list。出现问题的旧模型为7d7da67570e2(约 16 个月前)。 - 确认请求参数:非流式、顶层
think: true、未使用format/tools/raw/stop。 - 确认返回值中
response是否仍含<think>/</think>标签、thinking是否为空。 - 操作系统/GPU 在本 Issue 中为 Windows + Nvidia + Intel,但这不是问题成因的直接证据。
解决步骤
- 用
ollama -v查看当前 Ollama 版本。 - 用
ollama list记录qwen3:14b当前的模型 ID,便于必要时回退。 - 执行
ollama pull qwen3:14b拉取最新版模型。 - 将 Ollama 升级到 0.34.2 或更新版本(Windows 下重新运行官方安装包即可)。
- 重启 Ollama 服务,再次发起原本的非流式
/api/generate请求,观察response与thinking字段。
验证方法
重新执行上报中的请求,例如:
curl -s http://localhost:11434/api/generate -d '{
"model": "qwen3:14b",
"prompt": "Reply with exactly OK after thinking.",
"think": true,
"stream": false,
"options": {"temperature": 0, "seed": 1, "num_predict": 2048}
}' | jq '{response,thinking}'
预期结果:response 只包含最终答案(如 "OK"),不含 <think>/</think> 标签;thinking 字段非空并包含推理内容。若与 /api/chat 的输出行为一致,即说明问题已解决。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


