Spring AI 入门:Java 开发者的 AI 集成第一课
一、Spring AI 是什么Spring AI 是 Spring 生态下的 AI 框架目标是让 Java 应用接入 AI 大模型像操作数据库一样简单。用过 Spring 的人都熟悉 JDBC——它定义了一套标准接口不管你用 MySQL 还是 PostgreSQL代码写法是一样的。Spring AI 做的事类似它把 OpenAI、通义千问、DeepSeek、Claude、Ollama 等各种大模型统一成一套 API切换模型不需要改业务代码。核心能力三块1. 对话调用Chat——发消息给 AI拿回复2. 向量嵌入Embedding——把文本转成向量用于语义搜索3. 模型输出解析Structured Output——把 AI 的回复直接映射为 Java 对象官网https://docs.spring.io/spring-ai/reference/二、为什么需要 Spring AI没有 Spring AI 的时候Java 项目调大模型是什么画风1. 拿 HTTP 客户端手动拼 JSON 请求2. 解析返回的 JSON自己处理错误和重试3. 换模型时接口地址、参数名、认证方式全不同改一堆代码Spring AI 解决的问题- 统一 APIChatClient / EmbeddingClient / ImageClient 等接口- 自动管理 Prompt 模板、对话历史、Token 计数- 内置 RAG 支持文档读取、向量存储、检索增强- 与 Spring Boot 深度集成自动配置、属性注入- 支持函数调用Function Calling让 AI 能调你的 Java 方法三、快速上手3 分钟跑通 ChatSpring Boot 项目要求 JDK 17引入依赖properties java.version17/java.version spring-ai.version1.1.2/spring-ai.version /properties dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-dashscope/artifactId /dependency /dependencies配置 application.yml通义千问 API 密钥在 https://dashscope.aliyun.com 申请spring: ai: dashscope: api-key: ${DASHSCOPE_API_KEY} chat: options: model: qwen3 temperature: 0.7写一个 ServiceService public class AIService { private final ChatClient chatClient; public AIService(ChatClient.Builder builder) { this.chatClient builder.build(); } public String ask(String question) { return chatClient.prompt() .user(question) .call() .content(); } }Controller 暴露接口RestController public class AIController { private final AIService aiService; public AIController(AIService aiService) { this.aiService aiService; } GetMapping(/ask) public String ask(RequestParam String q) { return aiService.ask(q); } }启动项目访问 http://localhost:8080/ask?qSpring AI 是什么就能收到 AI 回复。四、结构化的回复输出纯文本回复很多时候不够用。比如你想让 AI 返回一个结构化的 JSON直接映射到 Java 对象// 定义输出结构 public record Book(String title, String author, int year) { } // 让 AI 按结构返回 Book book chatClient.prompt() .user(推荐一本 Java 入门书) .call() .entity(Book.class); System.out.println(book.title()); // 输出: Head First JavaSpring AI 底层会让 AI 以 JSON 格式输出然后用 Jackson 反序列化成你的目标类。支持 Record、POJO、List、Map 等常见类型。五、Prompt 模板实际项目中同一个 Prompt 结构要反复用只是参数不同。Spring AI 支持模板参数机制用 Java 17 文本块定义模板String prompt 你是一个翻译助手将以下文本从 {sourceLang} 翻译成 {targetLang} {text} 只返回翻译结果不要有任何额外说明。 ;然后传入参数调用String result chatClient.prompt() .user(u - u .text(prompt) .param(sourceLang, 英文) .param(targetLang, 中文) .param(text, Hello, Spring AI!) ) .call() .content(); // 输出: 你好Spring AI模板也可以外置为文件通过 Resource 读取适合生产环境。六、多模型切换Spring AI 最核心的价值——换模型不改业务代码。换配置就行# 换 DeepSeek也走 DashScope 兼容接口 spring: ai: dashscope: api-key: ${DASHSCOPE_API_KEY} chat: options: model: deepseek-chat# 换本地 Ollama spring: ai: ollama: base-url: http://localhost:11434 chat: options: model: qwen2.5代码里只用 ChatClient底层是通义千问、DeepSeek 还是 Ollama业务方法一行不用改。Spring AI 目前支持的模型提供商通义千问DashScope、OpenAI、Azure OpenAI、Anthropic Claude、Google Gemini、Ollama、DeepSeek、Mistral AI 等。通义千问是全链路都在国内网络延迟低推荐作为主力模型。七、工具调用Function Calling让 AI 能调用你的 Java 方法。比如用户问帮我查一下订单状态AI 可以触发一个查数据库的方法Configuration public class AITools { Bean ToolDescription(根据订单号查询订单状态) public ToolCallback orderStatus(OrderService orderService) { return ToolCallbacks.from(orderService::getOrderStatus, orderStatus, 根据订单号查询订单状态和物流信息); } }// 使用时ChatClient 自动把方法的描述和参数发给 AI // AI 判断需要调用时Spring AI 自动执行方法并返回结果给 AI String response chatClient.prompt() .user(我的订单 12345 到哪里了) .functions(orderStatus) .call() .content();整个流程用户提问 → AI 判断需要查订单 → Spring AI 调你的 Java 方法 → 结果返回给 AI → AI 组织自然语言回复。八、总结能力一句话ChatClient发消息收回复核心接口结构化输出AI 回复直接变 Java 对象Prompt 模板参数化复用 Prompt多模型切换改配置不改代码Function CallingAI 调你的 Java 方法Spring AI 的价值在于它让 Java 开发者用一个熟悉的方式Spring Boot 风格接入 AI不用去学 Python、不用写裸 HTTP 调用、不用手动处理 Token 和模型切换。如果你是 Spring 技术栈Spring AI 是目前最适合的 AI 集成方案。常见面试题与参考答案1. Spring AI 和 LangChain 有什么区别参考答案LangChain 是 Python 生态的 AI 框架Spring AI 是 Java 生态的对应方案。LangChain 发展早、生态更丰富但 Java 项目集成时需要额外封装。Spring AI 的优势是原生整合 Spring Boot——自动配置、属性注入、事务管理、Actuator 监控等全套 Spring 能力直接用学习成本低。两者设计理念相似统一模型接口、Prompt 模板、RAG 支持但 Spring AI 更深度绑定 Spring 生态。2. ChatClient 是线程安全的吗参考答案是的建议将 ChatClient 注册为 Spring Bean 单例使用。内部通过 Builder 模式创建每次 prompt() 调用都是独立请求不会共享状态。如果需要在同一个对话中维持上下文需要手动管理 ConversationId 或 Message 历史列表ChatClient 本身不保存会话状态。3. Spring AI 的项目状态适合生产吗参考答案Spring AI 1.1.2 是正式版本API 相对稳定但 Spring AI 生态仍在快速发展。生产使用建议在业务层和 AI 层之间加一层抽象接口方便后续版本升级时迁移。模型推荐以通义千问DashScope作为主力延迟低、国内合规Ollama 做本地开发和备份确保不会因为单一模型商的问题影响业务。