1. Ollama思考模式变更的背景与影响
最近在使用Spring AI集成Ollama时,我发现一个重要的API变更:Ollama的思考内容不再包含在常规的content字段中,而是独立到了thinking字段。这个变化直接影响到了我们获取模型推理过程的方式。
在Ollama 0.12之前的版本中,模型的推理思考过程通常与最终答案一起混在content字段中。这种设计导致开发者需要手动解析内容,区分哪些是中间思考过程,哪些是最终答案。随着Ollama对推理模型(如Qwen3、DeepSeek系列)支持的增强,新版本将thinking内容完全独立出来,形成了更清晰的数据结构。
这个变更带来的主要影响包括:
- 思考内容与最终答案完全分离,不再需要复杂的文本解析
- 可以通过metadata直接访问完整的推理链条
- 支持更精细的思考级别控制(如GPT-OSS模型的高/中/低思考级别)
- 为后续的推理过程分析和优化提供了结构化数据基础
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Spring AI中获取思考内容的新方法
2.1 基础获取方式
在Spring AI中,现在可以通过ChatResponse的metadata来获取思考内容。以下是基本代码示例:
java复制ChatResponse response = chatModel.call(
new Prompt(
"计算17乘以23的值并展示计算过程",
OllamaChatOptions.builder()
.model("deepseek-r1")
.enableThinking() // 明确启用思考模式
.build()
));
// 获取思考过程
String thinking = response.getResult().getMetadata().get("thinking");
System.out.println("模型思考过程: " + thinking);
// 获取最终答案
String answer = response.getResult().getOutput().getText();
System.out.println("最终答案: " + answer);
对于支持思考级别的模型(如GPT-OSS),可以指定不同的思考深度:
java复制// 低思考级别 - 适合简单问题
OllamaChatOptions.builder().thinkLow()
// 中思考级别 - 适合中等复杂度问题
OllamaChatOptions.builder().thinkMedium()
// 高思考级别 - 适合复杂推理问题
OllamaChatOptions.builder().thinkHigh()
2.2 流式响应中的思考内容处理
当使用流式API时,思考内容会作为独立的chunk发送。处理方式如下:
java复制Flux<ChatResponse> stream = chatModel.stream(
new Prompt(
"解释量子纠缠现象",
Olla
