Spring AI
Spring AI 是一个旨在将 Spring 生态系统的核心设计原则(如可移植性和模块化)扩展到人工智能领域的应用框架。
简单来说,它的作用是让 Java 开发者能够以 Spring 的方式,轻松、灵活地集成和使用各种大模型(Large Language Models, LLMs)和其他 AI 服务。
1. Spring AI 的主要作用
- 标准化接口: 它为不同的 AI 服务提供商(如 OpenAI、Azure OpenAI、Google Gemini、阿里云通义等)提供了一个统一的、标准的 Java 接口。
- 服务可插拔(可移植性): 开发者可以通过更改配置,快速切换底层使用的 AI 模型,而无需修改核心业务代码。这极大地降低了跨平台或跨模型迁移的成本。
- 简化开发流程: 它将 AI 功能的集成过程封装起来,使开发者可以使用熟悉的 POJO (Plain Old Java Objects) 和 Spring 习惯用法来构建 AI 应用。
- 提供核心 AI 功能抽象: 框架提供了聊天(Chat)、嵌入(Embedding)、图像生成(Image Generation)、语音合成(Text-to-Speech)等常见 AI 能力的抽象。
- 内置实用工具: 提供了如
OutputParser
(自动将模型的文本输出结构化为 Java 对象)、Prompt Template
(简化提示词管理)、Prompt Stuffing
(处理上下文和历史记录)等功能,帮助开发者更好地与模型交互。
2. Spring AI 的使用方法
使用 Spring AI 的基本步骤通常遵循 Spring Boot 的开发模式:
步骤 1: 引入依赖
在你的 Spring Boot 项目的 pom.xml
或 build.gradle
中,需要引入 Spring AI 的核心依赖和你要使用的特定模型提供商的依赖。
以使用 OpenAI 的聊天服务为例(Maven):
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-core</artifactId><version>...</version> </dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>...</version> </dependency>
步骤 2: 配置 API 密钥
在 application.properties
或 application.yml
中配置 AI 服务的 API 密钥和其他必要参数。
以配置 OpenAI 为例:
# application.properties
spring.ai.openai.api-key=<你的 OpenAI API 密钥>
# 可以指定使用的模型,例如 gpt-4o 或 gpt-3.5-turbo
spring.ai.openai.chat.options.model=gpt-3.5-turbo
步骤 3: 注入并使用 ChatClient
Spring AI 的核心接口之一是 ChatClient
。你可以像使用其他 Spring 组件一样将其注入到你的业务类中。
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.stereotype.Service;@Service
public class AIService {private final ChatClient chatClient;// 构造器注入public AIService(ChatClient.Builder chatClientBuilder) {// 使用 Builder 模式创建 ChatClient 实例// 这样可以方便地对客户端进行配置和定制this.chatClient = chatClientBuilder.build();}/*** 发送提示词并获取模型的文本回复* @param prompt 用户输入的问题* @return 模型的回复文本*/public String getAIResponse(String prompt) {String response = chatClient.prompt().user(prompt) // 设置用户的提示词.call() // 调用 AI 服务.content(); // 获取回复的文本内容return response;}
}
步骤 4: 结构化输出(Output Parser)
Spring AI 最强大的功能之一是将模型的非结构化文本输出自动转换为结构化的 Java POJO 对象,这通过 OutputParser
实现。
-
定义 POJO:
// 定义你期望的结构化数据 public record Joke(String setup, String punchline) {}
-
使用 Output Parser:
import org.springframework.ai.parser.BeanOutputParser;public Joke getStructuredJoke(String topic) {// 创建一个 OutputParser,用于解析成 Joke 对象BeanOutputParser<Joke> parser = new BeanOutputParser<>(Joke.class);// 构造提示词,并要求模型遵循指定的格式String systemMessage = parser.getFormat(); // 获取模型需要的格式指令String userPrompt = "讲一个关于 " + topic + " 的笑话。";String result = chatClient.prompt().system(systemMessage) // 告知模型输出的格式.user(userPrompt) // 实际的请求内容.call().content();// 将模型的原始文本输出解析为 Joke 对象return parser.parse(result); }
通过这些抽象,Spring AI 极大地简化了 Java 应用与 AI 模型交互的复杂性,让开发者能够专注于业务逻辑而不是底层 API 的细节。