Spring AI 入门指南:三步将AI集成到Spring Boot应用

无需深入AI底层实现,Java开发者也能快速构建智能应用

本文将介绍如何使用 Spring AI 在 Spring Boot 项目中快速集成 AI 能力。通过三步操作------添加依赖、配置 API 凭证和编写调用代码,Java 开发者可以轻松构建 AI 应用。

一、Spring AI 简介

Spring AI 是 Spring 官方推出的 AI 应用开发框架,旨在将 大语言模型 (LLM) 和 AI 能力 无缝集成到 Spring 生态系统中3。它提供了一套简洁、统一、抽象的 API,让开发者能用熟悉的 Spring 风格(如 RestTemplateRepository 模式)调用不同 AI 提供商的模型3。

核心价值

  • 简化集成:无需手写 HTTP 请求、解析 JSON,Spring 帮你搞定3。

  • 统一抽象:更换 AI 提供商时,代码几乎不用改!3

  • Spring 风格:支持依赖注入、AOP、Actuator 等 Spring 全家桶特性3。

  • 模块化设计:按需引入文本、图像、嵌入、向量库等模块3。

应用场景

Spring AI 能帮助实现多种 AI 应用场景,包括但不限于:

  • 智能文本生成(如自动生成营销文案、产品描述、邮件草稿、代码片段、对话聊天机器人)3。

  • 多模态处理(如图像内容分析描述、基于文本描述生成图片)3。

  • 函数调用(让 AI 模型根据用户请求决定调用预定义的 Java 方法)3。

  • RAG (检索增强生成):结合向量数据库,让 AI 回答基于私有知识库的内容3。

二、环境准备

在开始前三步集成前,请确保你的开发环境满足以下要求:

  • JDK 17+:Spring Boot 3 和 Spring AI 需要 JDK 版本不低于 171。

  • Maven 或 Gradle:本文以 Maven 为例1。

  • IDE:推荐使用 IntelliJ IDEA 或其他你熟悉的 Java 开发环境1。

  • LLM API Key:本文以 DeepSeek 为例(因其价格便宜且无需科学上网),但你也可以使用 OpenAI、Azure OpenAI、阿里云百炼等兼容 OpenAI API 的模型服务110。

三、三步集成 Spring AI

下面我们通过三个步骤,演示如何将 Spring AI 集成到 Spring Boot 项目中。

步骤 1:添加依赖

首先创建一个新的 Maven 项目,并在 pom.xml 文件中进行如下配置:1

1. 设置 Spring Boot 父项目
复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.5.0</version> <!-- 建议使用最新稳定版 -->
</parent>
2. 管理 Spring AI 的版本

通过 BOM 统一管理 Spring AI 相关依赖的版本,避免版本冲突:

复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>1.0.0</version> <!-- 使用最新稳定版 -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
3. 添加具体依赖
复制代码
<dependencies>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring AI OpenAI Starter -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-model-openai</artifactId>
    </dependency>
</dependencies>

注意 :即使我们使用 DeepSeek 的 API,引入的也是 spring-ai-starter-model-openai。这是因为 DeepSeek 采用了与 OpenAI 完全兼容的 API 规范,我们可以直接复用 OpenAI 的客户端实现。这种设计让切换不同的 AI 服务商变得非常简单------只需要更换 API Key 和端点地址即可1。

步骤 2:配置凭证

有了依赖后,接下来需要配置如何连接到 AI 服务。在 src/main/resources 目录下的 application.yml 文件中添加以下配置:

复制代码
spring:
  ai:
    openai:
      api-key: your-api-key-here  # 替换为你的实际API密钥
      base-url: https://api.deepseek.com  # DeepSeek的API端点
      chat:
        options:
          model: deepseek-chat  # 使用的模型名称

安全提示 :直接将 API Key 写在配置文件中仅适合本地开发和快速测试,不要在生产环境中这样做!在生产环境中,推荐使用环境变量来管理你的密钥:

复制代码
spring:
  ai:
    openai:
      api-key: ${SPRING_AI_OPENAI_API_KEY:}  # 从环境变量读取
      base-url: https://api.deepseek.com
      chat:
        options:
          model: deepseek-chat

然后在你的系统环境变量或 IDE 运行配置中设置 SPRING_AI_OPENAI_API_KEY

步骤 3:编写代码调用

万事俱备,现在可以编写代码来调用 AI 模型了。1

1. 创建聊天控制器

创建一个 REST 控制器来处理 AI 对话请求:

复制代码
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.*;

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

    private final ChatClient chatClient;

    // 通过构造器注入ChatClient.Builder
    public ChatController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

    @GetMapping("/test")
    public String completion(@RequestParam String message) {
        return chatClient.prompt()
                .user(message)  // 设置用户输入
                .call()         // 调用AI模型
                .content();     // 获取响应内容
    }  
}
2. 启动应用测试

启动 Spring Boot 应用后,你可以通过浏览器、curl 或 API 测试工具(如 Apifox)访问接口:

复制代码
http://localhost:8080/chat/test?message=给我讲一个关于Java编程的笑话
3. 配置跨域支持(可选)

如果需要从前端应用调用这个接口,需要配置 CORS 支持:

复制代码
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")  // 允许所有来源,生产环境应限制
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

四、进阶用法

使用 PromptTemplate

PromptTemplate 可用于动态生成 Prompt,支持占位符,避免硬编码:

复制代码
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.prompt.PromptTemplate;
import org.springframework.web.bind.annotation.*;

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

    private final ChatClient chatClient;

    public AdvancedChatController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

    @GetMapping("/joke")
    public String getTechJoke(@RequestParam String topic) {
        PromptTemplate template = new PromptTemplate("给我讲一个关于 {topic} 的技术冷笑话。");
        String prompt = template.render(Map.of("topic", topic));
        
        return chatClient.prompt()
                .user(prompt)
                .call()
                .content();
    }
}

流式响应

对于长文本响应,可以使用流式响应提高用户体验:

复制代码
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamChat(@RequestParam String message) {
    return chatClient.prompt()
            .user(message)
            .stream()  // 使用流式调用
            .content();
}

配置默认系统提示

你可以在创建 ChatClient 时配置默认的系统提示,定义 AI 的角色和行为:

五、最佳实践与注意事项

  1. API 密钥管理:永远不要将 API 密钥提交到版本控制系统。使用环境变量或密钥管理服务1。

  2. 异常处理:在实际应用中,应该添加适当的异常处理机制:

    复制代码
    @GetMapping("/test")
    public ResponseEntity<String> completion(@RequestParam String message) {
        try {
            String response = chatClient.prompt()
                    .user(message)
                    .call()
                    .content();
            return ResponseEntity.ok(response);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                    .body("AI服务暂时不可用: " + e.getMessage());
        }
    }
  3. 性能考虑:AI API 调用可能有延迟,考虑添加超时设置和重试机制。

  4. 成本控制:设置使用限制和监控,避免意外的高额费用。

六、总结

通过 Spring AI,Java 开发者可以以熟悉的 Spring 方式快速集成 AI 能力。本文演示了如何通过三个简单步骤将 AI 功能添加到 Spring Boot 应用中:1

  1. 添加 Spring AI 依赖

  2. 配置 API 凭证

  3. 编写调用代码

Spring AI 的强大之处在于它提供了统一的抽象接口,让你可以轻松切换不同的 AI 提供商,而无需重写业务逻辑3。无论你是要构建智能聊天机器人、文本生成工具还是复杂的 RAG 系统,Spring AI 都能提供良好的支持。

相关推荐
三花AI2 分钟前
风口真的要来了,国务院关于深入实施“人工智能+”行动的意见
人工智能·开源
LLM精进之路13 分钟前
上海AI实验室突破扩散模型!GetMesh融合点云与三平面,重塑3D内容创作
人工智能·深度学习·机器学习·语言模型·transformer
肥仔哥哥193037 分钟前
基于OpenCv做照片分析(Java)
java·人工智能·opencv·图像原理
一枚小小程序员哈38 分钟前
基于Android的车位预售预租APP/基于Android的车位租赁系统APP/基于Android的车位管理系统APP
android·spring boot·后端·struts·spring·java-ee·maven
用户307429716715843 分钟前
Spring AI实战:基于ElevenLabs 实现文本转语音的实时音频流
java·spring boot·ai编程
2501_924879261 小时前
客流特征识别误报率↓76%!陌讯多模态时序融合算法在智慧零售的实战解析
大数据·人工智能·算法·目标检测·计算机视觉·视觉检测·零售
说私域1 小时前
消费、渠道与技术变革下新零售的崛起与开源AI大模型AI智能名片S2B2C商城小程序的融合发展
人工智能·开源·零售
北京地铁1号线1 小时前
广告推荐模型2:因子分解机(Factorization Machines, FM)
人工智能·算法·推荐算法
做一个快乐的小傻瓜1 小时前
机器学习笔记
人工智能·决策树·机器学习
居然JuRan1 小时前
MCP:基础概念、快速应用和背后原理
人工智能