1. 什么是 Spring AI?

Spring AI 是 Spring 官方推出的一个项目,旨在将生成式 AI 能力无缝集成到 Spring 生态系统中。它提供了一套统一的 API 和抽象,让 Java 开发者能够轻松地在应用中调用各种大语言模型(如 OpenAI GPT、Anthropic Claude、Google Gemini 等)、嵌入模型和图像生成模型,而无需关心底层供应商的 API 差异。

其核心目标是:简化 AI 集成,提升开发效率

2. 核心概念与模块

Spring AI 主要围绕以下几个核心模块构建:

  • Chat Client:用于与大语言模型(LLM)进行对话式交互。
  • Embedding Client:用于将文本转换为向量(嵌入),是构建 RAG(检索增强生成)应用的基础。
  • Image Client:用于调用图像生成模型(如 DALL-E、Stable Diffusion)。
  • Prompt Templates:提供强大的提示词模板功能,支持变量替换和结构化输出。
  • Output Parsers:将模型的非结构化文本输出解析为 Java 对象(如 JSON、List 等)。
  • Vector Stores:集成多种向量数据库(如 Pinecone、Redis、PGVector),用于存储和检索嵌入向量。

3. 快速开始:你的第一个 Spring AI 应用

3.1 环境准备

确保你的开发环境满足以下条件:

  • JDK 17 或更高版本
  • Maven 3.6+ 或 Gradle 7.x+
  • 一个可用的 AI 模型 API 密钥(例如 OpenAI API Key)

3.2 创建项目

使用 Spring Initializr 快速创建一个 Spring Boot 项目,并添加 spring-ai-openai-spring-boot-starter 依赖。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0-M5</version> <!-- 请使用最新稳定版本 -->
</dependency>

3.3 配置 API 密钥

application.propertiesapplication.yml 中配置你的 OpenAI API 密钥:

spring.ai.openai.api-key=${OPENAI_API_KEY}

3.4 编写第一个对话服务

创建一个简单的 Service 来调用 ChatGPT:

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.stereotype.Service;

@Service
public class ChatService {

    private final ChatClient chatClient;

    public ChatService(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    public String chat(String message) {
        return chatClient.prompt()
                .user(message)
                .call()
                .content();
    }
}

3.5 创建控制器并测试

创建一个 REST 控制器来暴露聊天接口:

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/ai")
public class ChatController {

    private final ChatService chatService;

    public ChatController(ChatService chatService) {
        this.chatService = chatService;
    }

    @PostMapping("/chat")
    public String chat(@RequestBody String message) {
        return chatService.chat(message);
    }
}

启动应用后,你可以通过 POST 请求 /ai/chat 与 AI 对话。

4. 进阶功能与实践

4.1 使用提示词模板

Spring AI 的提示词模板支持变量和结构化指令,让提示管理更清晰。

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.PromptTemplate;

// 定义模板
String template = """
        你是一位专业的{role}。
        请用{style}风格,回答以下问题:
        {question}
        """;

PromptTemplate promptTemplate = new PromptTemplate(template);
Prompt prompt = promptTemplate.create(Map.of(
        "role", "Java 架构师",
        "style", "简洁明了",
        "question", "如何设计一个高可用的微服务系统?"
));

String response = chatClient.prompt(prompt).call().content();

4.2 构建 RAG 应用

结合 Embedding Client 和 Vector Store,可以轻松构建知识库问答系统。

  1. 文档加载与分块:使用 Spring AI 的文档加载器读取 PDF、Word 等文件,并进行文本分块。
  2. 生成嵌入并存储:为每个文本块生成向量,并存入向量数据库。
  3. 检索与生成:用户提问时,先检索相关文本块,再将其作为上下文提供给 LLM 生成答案。

4.3 流式响应

对于长文本生成,使用流式响应可以提升用户体验。

@GetMapping("/stream")
public Flux<String> streamChat(@RequestParam String message) {
    return chatClient.prompt()
            .user(message)
            .stream()
            .content();
}

5. 总结与最佳实践

  • 选择合适的模型供应商:根据成本、性能和应用场景(聊天、嵌入、图像)选择。
  • 充分利用抽象层:Spring AI 的抽象让你可以轻松切换底层模型,避免供应商锁定。
  • 关注提示工程:好的提示词是获得高质量回答的关键,利用好 PromptTemplate
  • 考虑成本与速率限制:在生产环境中,注意 API 调用的成本和频率限制。
  • 持续关注生态发展:Spring AI 仍在快速发展,及时关注官方文档和版本更新。

Spring AI 极大地降低了在 Java 应用中集成 AI 能力的门槛,让开发者可以更专注于业务逻辑和创新。从简单的聊天机器人到复杂的 RAG 系统,它都能提供强大的支持。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐