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 都能提供良好的支持。

相关推荐
西猫雷婶3 小时前
CNN卷积计算
人工智能·神经网络·cnn
格林威5 小时前
常规线扫描镜头有哪些类型?能做什么?
人工智能·深度学习·数码相机·算法·计算机视觉·视觉检测·工业镜头
涵涵(互关)5 小时前
Maven多模块项目MyMetaObjectHandler自动填充日期未生效
spring·maven·mybatis
倔强青铜三6 小时前
苦练Python第63天:零基础玩转TOML配置读写,tomllib模块实战
人工智能·python·面试
B站计算机毕业设计之家6 小时前
智慧交通项目:Python+YOLOv8 实时交通标志系统 深度学习实战(TT100K+PySide6 源码+文档)✅
人工智能·python·深度学习·yolo·计算机视觉·智慧交通·交通标志
高工智能汽车6 小时前
棱镜观察|极氪销量遇阻?千里智驾左手服务吉利、右手对标华为
人工智能·华为
txwtech6 小时前
第6篇 OpenCV RotatedRect如何判断矩形的角度
人工智能·opencv·计算机视觉
正牌强哥6 小时前
Futures_ML——机器学习在期货量化交易中的应用与实践
人工智能·python·机器学习·ai·交易·akshare
倔强青铜三6 小时前
苦练Python第62天:零基础玩转CSV文件读写,csv模块实战
人工智能·python·面试
大模型真好玩7 小时前
低代码Agent开发框架使用指南(二)—Coze平台核心功能概览
人工智能·coze·deepseek