Spring AI介绍、应用场景和示例代码

时间:2025-05-09 07:49:51

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 调用,让开发者专注业务逻辑。