一、SpringAI介绍
1.1 定义
Spring AI是Spring官方社区项目,旨在简化Java AI应用程序开发,让Java开发者像使用Spring开发普通应用一样开发AI应用。它将人工智能能力无缝集成到Spring生态系统中,为Java开发者提供了一套工具和框架,使得在Spring应用程序中使用AI技术变得更加简单和高效。
1.2 特点
- 统一的API抽象:支持多种主流AI服务,如OpenAI、Anthropic、Hugging Face、DeepSeek、Google、Microsoft、Amazon等,开发者可通过标准化接口调用,无需关注不同服务差异,降低代码复杂性,提高可维护性和可移植性,便于在不同AI服务间切换。例如,调用不同模型的聊天功能时,只需使用Spring AI提供的统一的ChatClient接口。
- 丰富的模型支持:涵盖多种类型的AI模型,包括聊天、文生图、嵌入式模型等。在聊天模型方面,支持OpenAI的ChatGPT系列、Anthropic的Claude等;文本到图像模型中,支持OpenAI的DALL - E、Stability AI等;还提供音频转录和文本到语音模型支持,以及嵌入模型用于将文本或多模态内容转换为向量表示,满足不同领域和场景的应用需求。
- 低代码集成:借助Spring Boot Starter依赖,实现低代码集成AI服务。开发者只需在项目中添加相应依赖,并在配置文件中配置好AI服务的相关参数,如API Key、基础URL等,即可快速接入AI服务。以接入OpenAI服务为例,在Maven项目中添加spring - ai - openai - spring - boot - starter依赖,然后在application.yml文件中配置OpenAI的API Key和基础URL,就可在代码中直接使用其模型服务。
- 结构化数据输出:能够将模型的响应直接映射为Java对象,实现结构化数据输出。通过提供OutputParser接口,可根据预定义规则将AI模型返回的自然语言响应解析为结构化的Java对象,如POJO,方便后续的数据处理和存储。例如,在诗歌生成应用中,可将AI模型返回的诗歌文本解析为包含作者、朝代、标题、内容等字段的Java对象。
- 流式数据响应:支持Flux流式输出,适用于实时对话等高并发场景。在实时对话系统中,用户与聊天机器人交互时,可实现逐字生成响应内容,提升用户体验。
- 多模态支持:不仅支持文本处理,还能轻松处理图像、音频等多模态数据,API设计保持一致性。例如,可将图片等资源添加到消息对象中,一起发送给AI进行处理。
- 向量存储增强与RAG框架:提供更完善的向量存储抽象,支持Pinecone、Milvus、Weaviate等主流向量数据库。内置完整的RAG(检索增强生成)框架,让构建企业知识库变得更加简单。
- 提示工程工具集:引入强大的提示工程工具,让提示模板更灵活。开发者可通过配置模板并填充变量,生成特定的提示内容,提高与AI模型交互的效果。
- 模型评估与监控:新增模型评估框架,提供与Spring Boot Actuator的无缝集成,可对AI应用运行状况进行监控,包括模型延迟、token使用情况、工具调用和检索等关键指标,方便开发者进行故障排除和性能优化。
1.3 核心功能
- 机器学习(Machine Learning):支持与主流机器学习框架(如TensorFlow、PyTorch)的集成,提供模型训练、评估和部署的工具,支持分布式训练和推理。
- 自然语言处理(NLP):提供文本分类、情感分析、命名实体识别等功能,支持与现有NLP库(如spaCy、Hugging Face Transformers)的集成,支持生成式AI模型(如GPT、LLaMA)的调用。
- 计算机视觉(Computer Vision):支持图像分类、目标检测、图像分割等任务,提供与OpenCV、TensorFlow等计算机视觉库的集成。
- AI模型管理:提供模型版本控制、部署和监控功能,支持模型的生命周期管理。
- 云AI服务集成:支持与主流云AI服务(如AWS SageMaker、Google AI Platform、Azure Machine Learning)的集成,提供统一的API来调用云端AI功能。
1.4 应用场景
- 智能客服系统:利用自然语言处理功能理解用户问题,并给出相应解答。通过Spring AI提供的自然语言处理工具处理用户输入的文本,利用机器学习模型预测用户问题的意图,最终给出回答。例如,电商平台的智能客服可快速响应用户关于商品信息、订单状态等问题。
- 图像识别应用:在图像管理系统中,使用Spring AI集成图像识别模型,对上传的图片进行自动分类和标注。如安防领域可通过图像识别技术识别监控画面中的人物、物体等。
- 数据分析与预测:在金融风险预测等应用里,借助Spring AI集成机器学习模型,对金融数据进行分析和预测,帮助企业做出决策。例如,银行可通过分析客户的信用数据、交易记录等,预测客户的违约风险。
- 智能推荐系统:利用机器学习算法分析用户行为,提供个性化推荐。如电商平台根据用户的浏览历史、购买记录等,为用户推荐符合其兴趣的商品。
- 自动文档处理:使用NLP技术自动提取和分析文档中的关键信息。例如,企业可自动处理合同、报告等文档,提取重要条款和数据。
二、搭建springboot+springAI+deepSeek实现案例
3.1 环境准备
- JDK:JDK 17或更高版本,推荐使用JDK 21。可通过命令
java - version
检查JDK版本,若未安装,可从Oracle官网或OpenJDK官网下载安装。 - 构建工具:Maven或Gradle。
- DeepSeek API Key:可通过DeepSeek官网(DeepSeek )注册获取,可能需要购买才能访问
3.2 创建Spring Boot项目
- 使用Spring Initializr:访问https://start.spring.io/ ,进行如下配置:
- Project:选择Maven Project。
- Language:选择Java。
- Spring Boot Version:选择3.2.x及以上版本。
- Dependencies:勾选Spring Web、Spring AI OpenAI Starter、Lombok(可选)、Spring Boot DevTools(可选,用于开发时的热部署)。
- 点击“Generate”按钮下载项目压缩包,并解压到本地。
- 使用IDEA:在IDEA中创建Spring Boot项目,填写项目名字、保存位置、类型选择Maven、包名等信息,在选择依赖时勾选上述相关依赖,然后点击“Create”。
3.3 添加依赖
在项目的pom.xml文件中添加以下依赖:
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-deepseek</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.4 配置文件
在application.yml中添加DeepSeek的配置信息:
server:
port: 8080
spring:
ai:
deepseek:
api-key: sk - your - api - key
base-url: https://api.deepseek.com
chat:
options:
model: deepseek-chat
其中,api - key是在DeepSeek官网注册后获取的密钥,base - url是DeepSeek API的服务地址,model指定使用的模型版本。DeepSeek目前支持deepseek - chat(V3)适用于聊天机器人、智能客服、内容生成等;deepseek - reasoner(R1)专为复杂推理任务设计。
3.5 编写代码
创建一个控制器类,用于处理与DeepSeek的交互,示例代码如下:
package com.springaidemo.control;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.deepseek.DeepSeekChatModel;
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;
import reactor.core.publisher.Flux;
import java.util.Map;
@RestController
@RequestMapping("/api/chat")
public class ChatController {
@Resource
private DeepSeekChatModel chatModel;
@GetMapping("/ai/generate")
public Map<String, String> generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", chatModel.call(message));
}
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
var prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt);
}
}
在上述代码中,generate
方法用于处理普通的非流式请求,generateStream
方法支持流式响应,能够实时返回AI的推理结果。
3.6 运行项目
在IDE中右键点击项目的启动类,选择“Run”启动项目。项目启动后,可通过访问 http://localhost:8080/api/chat/ai/generate?message=你是谁
来获取响应。