近日,Spring团队正式发布了Spring AI 1.1版本,这是自该项目成立以来的一个重要里程碑。Spring AI作为一个旨在简化AI应用开发的框架,在1.1版本中带来了多项重磅更新,从功能增强到性能优化,全方位提升了开发者的使用体验。

1️⃣ 🧰 Model Context Protocol(MCP)------ 统一 AI 工具/资源/提示注册
一句话:用注解一键暴露工具(Tool)、资源(Resource)、提示模板(Prompt)给 LLM,实现"AI 可调用你的业务能力"。
✅ 代码示例
java
import org.springframework.ai.mcp.annotation.*;
@Service
public class WeatherService {
@McpTool(description = "Get current weather for a location")
public String getCurrentWeather(String location) {
return "Sunny, 22°C in " + location;
}
@McpResource(description = "Database schema of users table")
public String getDatabaseSchema() {
return """
CREATE TABLE users (
id BIGINT,
name VARCHAR(100),
email VARCHAR(100)
);
""";
}
@McpPrompt(template = "Write a SQL query to {{intent}}")
public String generateSqlQuery(@PromptVariable("intent") String userIntent) {
return ""; // 实际由模板渲染
}
}
🔧 启动后,MCP 服务自动注册这些能力,供 AI Agent 调用(支持 HTTP/gRPC/STDIO 多种传输)。
📌 适用场景:构建企业级 AI Agent(如客服机器人可查订单、调库存、连数据库)。
2️⃣ ⚡ Prompt Caching(提示缓存)------ 降本 90% + 加速响应
一句话:对重复/相似提示自动缓存,避免重复计算 token,支持 Anthropic & AWS Bedrock。
✅ 代码示例(Anthropic)
java
@Autowired
private ChatClient chatClient;
public String askWithCache(String question) {
var message = UserMessage.from(question)
.withOption(AnthropicOptions.builder()
.cacheControl(true) // ✅ 启用缓存
.ttlMinutes(60) // 缓存 1 小时
.build());
return chatClient.call(message).getResult().getOutput().getContent();
}
📌 效果:
- 相同提示 → 后续调用直接命中缓存
- 成本下降最高 90%(Anthropic 官方数据)
- 响应延迟降低 50%+
3️⃣ 🤖 Recursive Advisors(递归顾问)------ 构建自优化 AI Agent
一句话:让 AI Agent 能"自己审自己",通过多轮反思提升输出质量。
✅ 代码示例:自修正问答 Agent
java
@Bean
public RecursiveAdvisor selfImprovingAdvisor(ChatClient chatClient) {
return RecursiveAdvisor.builder()
.chatClient(chatClient)
.maxIterations(3) // 最多反思 3 次
.feedbackPrompt("""
Review the previous answer for accuracy and completeness.
If it's sufficient, output [FINAL]: <answer>.
Otherwise, improve it.
Previous answer: {{output}}
""")
.build();
}
// 使用
String result = selfImprovingAdvisor.advise("Explain quantum entanglement simply");
🔍 输出可能为:
Iteration 1: Quantum entanglement is when particles are linked...
Iteration 2: Let me clarify: even if separated, measuring one instantly affects the other...
[FINAL]: Quantum entanglement is a phenomenon where two particles become correlated so that...
📌 适用场景:高精度任务(法律咨询、医疗建议、代码生成审查)。
4️⃣ 🌐 新增模型支持:Google GenAI + ElevenLabs TTS
一句话:开箱即用接入 Google 最新模型 + 高质量语音合成。
✅ 代码示例:Google GenAI 聊天 + 语音输出
java
// 1. 聊天(Google GenAI)
@Bean
public ChatModel googleChatModel(GoogleGenAiProperties props) {
return new GoogleGenAiChatModel(props);
}
// 2. 文字转语音(ElevenLabs)
@Autowired
private TextToSpeechModel elevenLabsTts;
public InputStream textToSpeech(String text) {
return elevenLabsTts.call(TextToSpeechPrompt.create(text));
}
🔧 配置 application.yml:
yaml
spring:
ai:
google:
api-key: ${GOOGLE_API_KEY}
elevenlabs:
api-key: ${ELEVENLABS_API_KEY}
voice-id: "21m00Tcm4TlvDq8ikWAM" # Rachel
📌 优势 :统一 TextToSpeechModel 接口,OpenAI / ElevenLabs 无缝切换。
5️⃣ 🧠 Reasoning Mode(推理模式)支持 ------ 获取模型"思考过程"
一句话:不只是答案,还能拿到模型的"解题步骤",用于调试/解释/评估。
✅ 代码示例(GLM/Zhipu)
java
var options = ZhipuOptions.builder()
.enableReasoning(true) // ✅ 启用推理模式
.responseFormat("json") // 要求 JSON 输出
.build();
var response = chatClient.call(
new Prompt("Calculate 15% of 200, show steps", options)
);
// 获取推理链(如:Step 1 → Step 2 → Final Answer)
ReasoningContent reasoning = response.getMetadata()
.get("reasoning", ReasoningContent.class);
System.out.println("Steps: " + reasoning.getSteps());
System.out.println("Final: " + reasoning.getFinalAnswer());
📌 适用场景:
- 教育类应用(展示解题过程)
- 审计/合规(为什么模型这么答?)
- 构建 CoT(Chain-of-Thought)增强系统