Spring AI 入门:快速构建智能 Spring Boot 应用
Spring AI 框架的使用指南,涵盖环境准备、项目搭建、配置及核心代码实现。内容包括如何集成 OpenAI 和阿里云通义千问模型,提供 RESTful 接口示例,并讨论了生产环境下的密钥管理、错误处理和监控等注意事项。旨在帮助开发者快速在 Spring Boot 应用中构建智能功能。

Spring AI 框架的使用指南,涵盖环境准备、项目搭建、配置及核心代码实现。内容包括如何集成 OpenAI 和阿里云通义千问模型,提供 RESTful 接口示例,并讨论了生产环境下的密钥管理、错误处理和监控等注意事项。旨在帮助开发者快速在 Spring Boot 应用中构建智能功能。

Spring AI 是 Spring 官方社区推出的开源框架,致力于简化 Java AI 应用程序开发。它的核心目标是将 Spring 生态中成熟的设计原则应用到 AI 领域,让开发者能够以熟悉的 Spring 方式来构建智能应用。
在开始之前,请确保你的开发环境满足以下要求:
通过 Spring Initializr 创建新项目,选择:
在 pom.xml 中添加以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<!-- 其他基础配置 -->
<dependencies>
<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-openai-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<!-- 添加 Spring AI BOM -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>0.8.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 添加 Spring Snapshots 仓库 -->
<repositories>
<repository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
注意:由于 Spring AI 尚未发布到中央仓库,需要添加 Spring Snapshots 仓库。
在 application.properties 中配置 OpenAI:
# OpenAI 配置
spring.ai.openai.api-key=${OPENAI_API_KEY}
spring.ai.openai.chat.options.model=gpt-3.5-turbo
spring.ai.openai.chat.options.temperature=0.7
或者使用 YAML 格式的 application.yml:
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-3.5-turbo
temperature: 0.7
安全提示:建议通过环境变量设置 API 密钥:
export OPENAI_API_KEY='你的实际 API 密钥'
创建应用启动类 SpringAiDemoApplication.java:
package com.example.springaidemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringAiDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringAiDemoApplication.class, args);
System.out.println("Spring AI Demo 应用启动成功!");
System.out.println("访问 http://localhost:8080/ai/chat?message=你好 测试 AI 功能");
}
}
创建 AiController.java,提供多种 AI 交互接口:
package com.example.springaidemo.controller;
import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/ai")
public class AiController {
private final ChatClient chatClient;
@Autowired
public AiController(ChatClient chatClient) {
this.chatClient = chatClient;
}
/**
* 基础聊天接口
* 示例:GET /ai/chat?message=你好
*/
@GetMapping("/chat")
public String chat(@RequestParam String message) {
return chatClient.call(message);
}
/**
* 详细响应接口 - 返回完整的响应信息
* 示例:POST /ai/chat/detailed {"message": "介绍 Spring AI"}
*/
@PostMapping("/chat/detailed")
public ChatResponse detailedChat(@RequestBody ChatRequest request) {
return chatClient.call(request.toPrompt());
}
/**
* 高级聊天接口 - 支持自定义参数
* 示例:GET /ai/chat/advanced?message=用 100 字介绍 Java
*/
@GetMapping("/chat/advanced")
public String advancedChat(@RequestParam String message) {
OpenAiChatOptions options = OpenAiChatOptions.builder()
.withModel()
.withTemperature()
.withMaxTokens()
.build();
chatClient.call(message, options);
}
String {
;
}
{
String message;
String model;
String {
message;
}
{
.message = message;
}
String {
model;
}
{
.model = model;
}
org.springframework.ai.prompt.Prompt {
.springframework.ai.prompt.Prompt(.message);
}
}
}
使用 Maven 启动应用:
mvn spring-boot:run
看到以下输出表示启动成功:
Spring AI Demo 应用启动成功!
访问 http://localhost:8080/ai/chat?message=你好 测试 AI 功能
curl "http://localhost:8080/ai/chat?message=给我讲一个编程相关的笑话"
curl -X POST "http://localhost:8080/ai/chat/detailed" \
-H "Content-Type: application/json" \
-d '{"message": "用三句话介绍微服务架构"}'
curl "http://localhost:8080/ai/chat/advanced?message=用简洁的语言解释设计模式"
curl "http://localhost:8080/ai/health"
直接在浏览器访问:
http://localhost:8080/ai/chat?message=你好,请介绍一下 Spring 框架的优势
如果你希望使用国产模型,Spring AI 同样支持阿里云的通义千问:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>2023.0.1.0</version>
</dependency>
# 阿里云通义千问配置
spring.ai.dashscope.api-key=你的阿里云 API-KEY
spring.ai.dashscope.chat.options.model=qwen-turbo
完成后的项目结构如下:
spring-ai-demo/
├── src/
│ └── main/
│ ├── java/
│ │ └── com/example/springaidemo/
│ │ ├── controller/
│ │ │ └── AiController.java # AI 控制器
│ │ └── SpringAiDemoApplication.java # 主应用类
│ └── resources/
│ ├── application.properties # 应用配置
│ └── static/ # 静态资源(可选)
├── pom.xml # Maven 依赖配置
└── README.md
API 密钥管理
错误处理
性能优化
监控观测
基于这个基础 Demo,你可以进一步扩展实现:
Spring AI 极大地降低了在 Java 应用中集成 AI 能力的门槛。通过本文的实战演示,你可以看到:
Spring AI 目前仍处于快速发展阶段,但已经展现出强大的潜力和实用性。无论是构建简单的聊天机器人,还是复杂的企业级 AI 应用,Spring AI 都提供了优雅的解决方案。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online