什么是Spring AISpring AI是面向 Java 和 Spring 生态的原生生成式人工智能框架。它不是简单地将 Python 中的 LangChain 或 LlamaIndex 移植到 Java而是依据 Spring 的设计理念——如依赖注入、POJO、模块化和可配置——重构生成式 AI 的全流程。通过 Spring Boot 的自动装配机制开发者可以像调用数据库或 Web API 一样轻松地接入聊天、嵌入、图像生成、语音处理等 AI 能力并且能够毫不费力地将企业内部数据与 AI 模型关联起来如同 RAG 检索增强生成中常用的数据注入方式。Spring AI 倡导“一套接口多种实现”开发者无须为不同 AI 提供商逐一适配而是可以通过统一抽象实现轻松切换比如 OpenAI、Anthropic、Bedrock、Hugging Face、Vertex AI、Ollama 等服务。Spring AI 官网地址https://spring.io/projects/spring-aiSpring AI 文档地址https://docs.spring.io/spring-ai/reference/index.htmlSpring AI 中文文档地址https://spring-ai.spring-doc.cn/docs/1.0.0/index.htmlSpring AI 特点Spring AI 功能模块丰富涵盖AI应用开发的各个环节具备如下特点1. 多供应商模型支持支持主流的AI模型提供商例如Anthropic、OpenAI、Microsoft、Amazon、Google、Ollama 等模型服务。通过这些模型可以实现聊天、文本嵌入、文生图、音频转录、文本转语音、内容审核等多种能力。2. 统一抽象API提供如 ChatClient, EmbeddingModel, ImageModel 等统一接口无论切换到哪家 AI 平台调用方式一致同时支持同步与流式调用也能够访问模型特定功能。3. Spring Boot集成以 Starter 和自动装配方式支持 AI 模型、向量数据库、ETL 工具等开发者可通过 Initializr 快速上手。4. 结构化输出与类型安全模型的响应可解析并映射到 Java POJO保证后续处理的类型安全与可维护性。5. 向量存储与RAG集成了主流向量数据库PostgreSQL/pgvector、Pinecone、Qdrant、Redis、Weaviate 等及其元数据过滤通过内置的 ETL 文档处理流程结合检索增强生成RAG实现文档问答和聊天检索。6. Tool/Function Calling支持模型发起函数调用类似 OpenAI Function Calling可以注册 Spring Bean 作为可调用工具从而访问实时业务系统或执行外部操作。7. 可观测性与评估内建对于 AI 调用的监控指标与日志、模型评估工具可用于检测响应准确性、防止“幻觉”。Spring AI 快速上手环境要求Spring AI构建在Spring Boot 3.x之上Spring Boot 3.x系列最低Java要求版本是JDK17不支持Java8/11/16等低于17的版本推荐使用Maven3.6及以上版本。我们后续使用Spring AI 时对应环境版本如下SpringBoot 3.5.0版本JDK17版本Maven3.9.9版本这里在Windows中下载并安装JDK17。使用如下链接下载JDK 17后进行安装这里安装在D盘“D:\Program Files\Java\jdk17\jdk”中不需要配置环境变量只需要在相应的SpringBoot项目中设置使用的JDK17版本即可。JDK17下载地址https://www.oracle.com/cn/java/technologies/downloads/#java17Deepseek对话案例下面以Spring AI中通过与Deepseek模型对话为例演示Spring AI相关配置。1) 创建SpringBoot项目命名为“SpringAIQuickStart”2) 配置项目pom.xml?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.5.0/version relativePath/ !-- lookup parent from repository -- /parent groupIdcom.example/groupId artifactIdSpringAIQuickStart/artifactId version0.0.1-SNAPSHOT/version nameSpringAIQuickStart/name descriptionSpringAIQuickStart/description properties java.version17/java.version /properties !-- 导入 Spring AI BOM用于统一管理 Spring AI 依赖的版本 引用每个 Spring AI 模块时不用再写 version只要依赖什么模块 Mavens 自动使用 BOM 推荐的版本 -- dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version1.0.0-SNAPSHOT/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-model-deepseek/artifactId /dependency /dependencies !-- 声明仓库 用于获取 Spring AI 以及相关预发布版本-- repositories repository idspring-snapshots/id nameSpring Snapshots/name urlhttps://repo.spring.io/snapshot/url releases enabledfalse/enabled /releases /repository repository nameCentral Portal Snapshots/name idcentral-portal-snapshots/id urlhttps://central.sonatype.com/repository/maven-snapshots//url releases enabledfalse/enabled /releases snapshots enabledtrue/enabled /snapshots /repository /repositories /project3) 配置resources/application.propertiesspring.application.nameSpringAIQuickStart server.port8080 #配置 Deepseek的基础URL、密钥和使用模型 spring.ai.deepseek.base-urlhttps://api.deepseek.com spring.ai.deepseek.api-keysk-81bxxx62c6a821 spring.ai.deepseek.chat.options.modeldeepseek-chat # 介于0和2之间0表示随机性最小2表示随机性最大。 spring.ai.deepseek.chat.options.temperature0.84) 创建controller包并创建ChatController.java文件import org.springframework.ai.deepseek.DeepSeekChatModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController RequestMapping(/ai) public class ChatController { Autowired private DeepSeekChatModel chatModel; GetMapping(/generate) public String generate(RequestParam(value message, defaultValue 给我讲个笑话) String message) { System.out.println(收到消息message); String result chatModel.call(message); //模型返回的内容 System.out.println(result); return result; } }5) 启动项目并测试启动项目后浏览器输入“http://localhost:8080/ai/generate?message你是谁”可以看到输出内容如下我是DeepSeek Chat由深度求索公司DeepSeek开发的智能AI助手✨ 我可以帮你解答问题、提供建议、陪你聊天还能处理各种文本、文档等内容。无论是学习、工作还是日常生活中的疑问都可以来问我哦 有什么我可以帮你的吗为了更好的可视化与Deepseek模型聊天我们还可以在项目的“resources/static”目录下创建“index.html”实现聊天可视化index.html内容如下!-- src/main/resources/static/index.html -- !DOCTYPE html html langzh-CN head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 titleAI 聊天/title script srchttps://cdn.jsdelivr.net/npm/marked/marked.min.js/script style body { font-family: Arial, sans-serif; padding: 20px; max-width: 800px; margin: 0 auto; } h1 { text-align: center; color: #333; } textarea { width: 100%; padding: 10px; font-size: 16px; border: 1px solid #ccc; border-radius: 4px; margin-bottom: 10px; box-sizing: border-box; } button { width: 100%; padding: 10px; font-size: 16px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer; } button:hover { background-color: #0056b3; } #response { margin-top: 20px; padding: 10px; border: 1px solid #ccc; border-radius: 4px; background-color: #f9f9f9; } /* Loading Spinner */ #loading { display: none; margin: 20px auto; border: 4px solid #f3f3f3; border-top: 4px solid #3498db; border-radius: 50%; width: 50px; height: 50px; animation: spin 2s linear infinite; } keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /style /head body h1与 AI 聊天/h1 textarea iduserMessage rows4 placeholder请输入您的问题.../textareabrbr button onclicksendMessage()发送/button div idloading/div div idresponse/div script function sendMessage() { const message document.getElementById(userMessage).value; if (!message) { alert(请输入消息); return; } // 显示加载动画 document.getElementById(loading).style.display block; fetch(/ai/generate?message${encodeURIComponent(message)}) .then(response response.text()) .then(data { // 隐藏加载动画 document.getElementById(loading).style.display none; document.getElementById(response).innerHTML marked.parse(data); }) .catch(error { console.error(请求失败:, error); alert(请求失败请稍后再试); // 隐藏加载动画 document.getElementById(loading).style.display none; }); } /script /body /html重启Springboot项目后直接访问“http://localhost:8080”可以直接访问到resource/static/index.html进行可视化与模型对话