Spring AI 是由 Spring 团队推出的一个项目,旨在简化将 AI 能力(如大语言模型)集成到 Spring 应用中的过程。它为常见的 AI 模型服务(如 OpenAI、Azure OpenAI、HuggingFace、Ollama 等)提供统一的访问抽象。Spring AI 基于 Spring Boot 和 Spring Framework 的生态系统,结合 spring-ai
的组件,为开发者提供一致且可扩展的方式调用 AI 服务。
???? Spring AI 主要特性
-
对多种 LLM 提供统一抽象接口。
-
支持聊天模型(chat completion)、文本补全、文档问答(RAG)、embedding 等。
-
支持 VectorStore,如 PostgreSQL、Redis、Milvus、Pinecone 等。
-
集成 Spring Boot,支持配置驱动、自动装配、注入等。
-
简化 LLM 在服务端的调用与集成,便于构建 AI 驱动的应用。
???? 适用场景
场景 | 描述 |
---|---|
智能客服 | 利用 LLM 实现基于文档或 FAQ 的自动问答。 |
智能代码助手 | 结合 Embedding 和代码片段进行语义搜索与补全。 |
文档问答系统 | 使用 RAG 技术,对本地文档进行语义索引和问答。 |
自动摘要生成 | 处理输入内容生成简洁摘要。 |
多轮对话 | 搭建具备上下文记忆的聊天机器人。 |
嵌入搜索 | 对文档或数据做向量化表示,实现语义搜索。 |
???? 核心模块
-
ChatClient
:统一的聊天模型接口。 -
EmbeddingClient
:将文本转为向量的接口。 -
VectorStore
:用于存储和查询嵌入向量。 -
Retriever
:从 VectorStore 中检索相关信息。 -
PromptTemplate
:提示词模板,便于控制 LLM 输出。
一、基础示例代码(基于 OpenAI)
1. 添加依赖(Maven)
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.1</version> <!-- 最新版本请查询 Maven *仓库 -->
</dependency>
2. 配置 application.yml
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
3. 使用 ChatClient 实现对话
import org.springframework.ai.chat.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/chat")
public class ChatController {
@Autowired
private ChatClient chatClient;
@GetMapping
public String chat(@RequestParam String message) {
return chatClient.call(message);
}
}
4. 使用 PromptTemplate 构建 Prompt
import org.springframework.ai.chat.messages.*;
import org.springframework.ai.prompt.*;
import org.springframework.ai.chat.ChatClient;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class PromptService {
private final ChatClient chatClient;
public PromptService(ChatClient chatClient) {
this.chatClient = chatClient;
}
public String summarizeText(String text) {
PromptTemplate promptTemplate = new PromptTemplate("请总结以下文本内容:{text}");
Prompt prompt = promptTemplate.create(Map.of("text", text));
return chatClient.call(prompt).getResult().getOutput().getContent();
}
}
二、嵌入与向量存储(RAG 基础)
1. 添加依赖
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-chroma-store-spring-boot-starter</artifactId>
<version>0.8.1</version>
</dependency>
2. 配置嵌入和向量存储
spring:
ai:
openai:
embedding:
enabled: true
vectorstore:
chroma:
uri: http://localhost:8000
3. 示例代码:存储和查询文档
import org.springframework.ai.embedding.EmbeddingClient;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.VectorStoreRetriever;
import org.springframework.ai.document.Document;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class DocumentService {
private final VectorStore vectorStore;
private final VectorStoreRetriever retriever;
public DocumentService(VectorStore vectorStore) {
this.vectorStore = vectorStore;
this.retriever = vectorStore.retriever();
}
public void addDocument(String content) {
Document doc = new Document(content);
vectorStore.add(List.of(doc));
}
public List<Document> searchSimilar(String query) {
return retriever.similaritySearch(query);
}
}
三、进阶:RAG 模式整合
可以将 Retriever
检索的文档内容拼接到 prompt 中,作为“上下文”传给 ChatClient,从而实现 RAG 模式。
public String answerWithContext(String question) {
List<Document> docs = retriever.similaritySearch(question);
String context = docs.stream().map(Document::getContent).collect(Collectors.joining("\n"));
PromptTemplate promptTemplate = new PromptTemplate("根据以下内容回答问题:\n{context}\n问题:{question}");
Prompt prompt = promptTemplate.create(Map.of("context", context, "question", question));
return chatClient.call(prompt).getResult().getOutput().getContent();
}
四、可视化或 UI 集成
可通过 Spring Boot 提供 REST API,配合前端构建一个交互式的 Chat UI,如:
-
使用 Vue/React 搭建前端
-
使用 WebSocket 实时返回 AI 回复
-
将用户消息与 AI 回复保存到数据库(供审计或微调使用)
五、总结
Spring AI 是 Spring 生态中整合 AI 能力的标准方式,适合企业应用、安全可控地使用 AI,构建智能应用。它抽象了底层 API 调用,让开发者专注业务逻辑。