推理模式(thinking)
# 1. 推理模式(thinking)
对于支持「推理模式」的模型来说,在输出最终回答之前,模型会先输出一段思维链内容,以提升最终答案的准确性。
说人话,就是在每一轮对话过程中,模型会输出思维链内容(reasoning_content)和最终回答(content)。对应到 ai_chat_message 表里,就是 reasoning_content 字段和 content 字段。
注意:「返回思维链」和「思考等级」是两件事!
- 返回思维链:模型的响应里是否带
reasoning_content,取决于厂商接口,以及 Spring AI 客户端是否解析它,见「3. 哪些模型平台支持?」小节。 - 思考等级:调用模型时,是否发送开启、关闭思考或推理强度等参数,需要在「模型配置」里配置,见「4. 思考等级配置」小节。
配置了思考等级,不代表一定能看到思维链(例如说 OpenAI 不返回思维链文本);没有配置,推理模型也可能按厂商的默认值进行思考。
# 2. 如何使用?
AI 对话时,使用支持「推理模式」的模型(如 DeepSeek 的 deepseek-flash、通义千问的 qwen3.8-max 等)时,模型返回结果就会包含思维链内容。如下图所示:

# 3. 哪些模型平台支持?
基本上,目前所有模型平台,都有支持「推理模式」的模型。目前碰到的问题,更多的还是 Spring AI 是否对该模型(平台)提供了支持。
注意,本小节说的是「能否返回思维链」,能否配置思考参数,见「4.2 支持的平台」小节。
# 3.1 Spring AI 已支持
友情提示:如下模型,官方文档写明会通过 `reasoning_content` 返回思维链!
一般情况下,你可以使用对应模型的 ChatModelTests 类的 #testStream_thinking() 方法进行测试。
① DeepSeek:deepseek-flash、deepseek-v4-pro 默认开启思考,可见 《思考模式》 (opens new window) 文档。
② 通义千问:qwen3.8-max、qwen3.8-flash、qwen3.7-plus 等混合思考模型,默认开启思考,可见 《深度思考》 (opens new window) 文档。
③ 字节豆包:doubao-seed-2-1-pro-260915、doubao-seed-2-1-lite-260915 等,可见 《深度思考》 (opens new window) 文档。
④ 腾讯混元:hy4-preview、hy3 默认开启思考,可见 《深度思考》 (opens new window) 文档。
⑤ 硅基流动:deepseek-ai/DeepSeek-V4-Pro 等,可见 《推理模型》 (opens new window) 文档,具体模型见 《硅基流动 —— 模型广场》 (opens new window) 的「推理模型」标签。
⑥ 讯飞星火:x2-flash 默认开启思考,可见 《X2-Flash》 (opens new window) 文档。
⑦ 《小米 MiMo》 的 V2.6 系列默认开启思考,通过 reasoning_content 返回思维链,详见 《深度思考》 (opens new window)。
# 3.2 Spring AI 未支持
① OpenAI:官方的 Chat Completions 接口不返回思维链文本,推理 Token 不可见,但会计入输出 Token,见 《Reasoning models》 (opens new window) 文档。如需返回推理内容,需要基于它的 Responses API,可见 https://github.com/spring-projects/spring-ai/issues/2962 (opens new window) 讨论。
不过,OpenAI 的推理强度(reasoning_effort)可以通过「4. 思考等级配置」进行控制。
# 3.3 其它
① BaiChuan:暂未跟进
② Coze、Dify:是 AI 工作流,暂时也不会返回执行过程中的思维链。
# 4. 思考等级配置
很多模型,使用相同的【模型标识】,通过请求参数来控制是否思考、思考多深。例如说:
- DeepSeek:
thinking开关 +reasoning_effort推理强度,见 《思考模式》 (opens new window) 文档 - 通义千问:
enable_thinking开关 +thinking_budget思考长度,见 《深度思考》 (opens new window) 文档 - OpenAI:
reasoning_effort推理强度,见 《Reasoning models》 (opens new window) 文档 - 字节豆包:
thinking开关 +reasoning_effort推理强度,见 《深度思考》 (opens new window) 文档
由于各家的参数都不一样,所以项目在「模型配置」中,为每个模型配置若干「思考档位」以及对应的请求参数。用户对话时,再选择使用哪个档位。
# 4.1 模型配置
在 [AI 大模型 -> 控制台 -> 模型配置] 菜单,编辑聊天模型,打开「思考配置」开关。如下图所示:

① 点击「从预设填入」,可以选择 DeepSeek、通义、OpenAI、小米 MiMo 等预设,快速填好档位。MiMo V2.6 通过 thinking.type 选择开启或关闭思考。也可以点击「添加档位」,自己填写「档位值」和「思考参数 JSON 对象」。
② 档位按从低到高排列,其中 off 表示关闭思考。没有配置 off 档位,对话时就不能关闭思考。
③ 选择「默认档位」,用户没有选择时,使用该档位。
注意:预设只是示例!
同一厂商的不同型号,支持的思考参数可能不同(例如说有的型号不能关闭思考,传入关闭参数会报错),请按厂商文档、以及对应的模型接入文档核对。
保存后,配置存储在 ai_model 表的 reasoning_config 字段(表结构可见 《功能开启》 的「4.2 模型表」小节),JSON 格式。例如说 DeepSeek 的配置:
{
"levels": [
{ "level": "off", "options": { "thinking": { "type": "disabled" } } },
{ "level": "low", "options": { "thinking": { "type": "enabled" }, "reasoning_effort": "low" } },
{ "level": "high", "options": { "thinking": { "type": "enabled" }, "reasoning_effort": "high" } },
{ "level": "max", "options": { "thinking": { "type": "enabled" }, "reasoning_effort": "max" } }
],
"defaultLevel": "high"
}
level:档位值,只能是小写字母、数字、_、-,不能重复。options:思考参数,任意层级都不允许为null。defaultLevel:默认档位,必须在levels中。
关闭「思考配置」开关后保存,即清空配置,模型按原有方式调用,不额外发送思考参数。
# 4.2 支持的平台
目前,思考参数的传递方式如下,具体可见 AiReasoningUtils 类:
- DeepSeek、豆包、混元、硅基流动、文心一言、智谱、讯飞星火、MiniMax、月之暗面、百川、阶跃星辰、小米 MiMo:
options合并到请求体中。 - OpenAI、Grok:
reasoning_effort作为推理强度传递,其它参数追加到请求体中,但不能覆盖temperature、max_tokens等已有参数。使用 OpenAI 平台接入的 OpenRouter 等兼容服务,也是如此。 - Gemini:
master-jdk17分支通过 OpenAI 兼容接口调用,传递方式同 OpenAI。master-jdk25分支使用 Google GenAI 原生客户端,每个档位只能填写reasoning_effort、thinking_budget其中一个:reasoning_effort:Gemini 3 及以上可选minimal、low、medium、high;更早的型号只能为none(关闭思考)。无法从模型标识识别 Gemini 版本时,请改用thinking_budget。thinking_budget:不小于 -1 的整数,-1 表示动态思考,0 表示关闭思考。- Gemini 3 及以上、Gemini 2.5 Pro 不能关闭思考,不支持
none或thinking_budget为 0。
- 通义千问:只支持
enable_thinking、thinking_budget两个参数,并且每个档位都必须填写enable_thinking。 - 微软 OpenAI、Anthropic(Claude)、Ollama 等其它平台:暂不支持。
# 4.3 对话时选择
在 [AI 大模型 -> AI 对话] 菜单,如果当前模型配置了思考档位,消息发送框的左下角会展示「思考等级:xx」按钮,点击即可选择本次使用的档位。如下图所示:

- 只配置了一个档位时,固定展示,不可点击。
- 切换对话、切换模型时,会重置为模型的默认档位。
它的后端 HTTP 接口,是 AiChatMessageController 的 #sendChatMessageStream(...) 接口,通过 reasoningLevel 参数传递档位,为空时使用默认档位。
注意:
- 思考 Token 一般也计入「回复 Token 数」(
max_tokens),档位越高,回答越可能被截断。 - 目前只有 AI 对话使用思考档位,AI 写作、AI 思维导图暂不使用。