当前位置: 首页 > news >正文

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.comchat: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.Builderpublic 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 {@Overridepublic 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 都能提供良好的支持。

http://www.dtcms.com/a/351372.html

相关文章:

  • 开发避坑指南(38):DOM4J解析XML文件报错“前言中不允许有内容”的解决方案
  • WPF TabControl页面绑定ItemsSource
  • F006 vue+flask python 垃圾分类可视化系统+爬虫
  • 力扣(逆波兰表达式求值)
  • 英伟达 Spectrum-XGS:重构 AI 基础设施,开启跨域超级工厂时代
  • Day3--HOT100--42. 接雨水,3. 无重复字符的最长子串,438. 找到字符串中所有字母异位词
  • JHipster 生成器快速入门
  • 爬虫 API:从技术架构到实战落地的全维度解析
  • 功能强大的PDF工具箱-- PDF补丁丁,v1.1.0.4657新版本,免费无广告,开箱即用版~
  • HarmonyOS 中 @Observed 与 @ObjectLink:对象级别的响应式数据管理
  • 鸿蒙中使用极光推送
  • 阿里云docker搭建的mysql无法访问
  • 如何下载MySQL小白指南 (以 Windows 为例)
  • CNN 中 3×3 卷积核等设计背后的底层逻辑
  • 负载均衡之带权重的随机负载均衡算法详解与实现
  • 【LeetCode】动态规划——198.打家劫舍、213.打家劫舍||、337.打家劫舍|||
  • 开发避坑指南(37):Vue3 标签页实现攻略
  • 【Python系列】Flask 和 FastAPI对比
  • 高性价比的云手机该怎样进行选择?
  • GraphRAG——v0.3.5版本
  • 从MySQL到OpenTenBase:电商平台分布式数据库架构升级实战
  • TCP协议11种状态
  • 【人工智能AI、机器学习ML、深度学习DL、基础模型FM、LLM、GPT、Generative AI 分别是什么?他们之间的关系是什么?】
  • 一个头像图片滚动轮播组件(React实现)
  • vscode有的结构体不能补全,有的可以补全问题的解决.
  • 校园资讯平台|校园资讯平台系统|基于java和小程序的校园资讯平台设计与实现(源码+数据库+文档)
  • 《数据之心》——鱼小妖的觉醒(童年篇)
  • 【国密证书】CentOS 7 安装 GmSSL 并生成国密证书
  • SpringBoot启动优化
  • 肌肉力量训练