构建 AI 驱动的 Java 应用
其目标是降低大语言模型(LLM)及生成式 AI 服务的调用复杂度,提供统一的 API 抽象层,并兼容 OpenAI、Azure AI、Hugging Face 等主流 AI 服务提供商。Spring Boot 是一个致力于简化 Spring 应用程序开发过程的框架,通过自动配置、内嵌 Web 服务器(如 Tomcat)以及“约定优于配置”的理念,赋能开发者快速搭建具备生产就绪能力的独立应用。-请使
一、引言
Spring Boot 是一个致力于简化 Spring 应用程序开发过程的框架,通过自动配置、内嵌 Web 服务器(如 Tomcat)以及“约定优于配置”的理念,赋能开发者快速搭建具备生产就绪能力的独立应用。
Spring AI 作为 Spring 生态系统中的关键成员,专注于集成人工智能能力。其目标是降低大语言模型(LLM)及生成式 AI 服务的调用复杂度,提供统一的 API 抽象层,并兼容 OpenAI、Azure AI、Hugging Face 等主流 AI 服务提供商。
二、实现过程:构建 Spring Boot + Spring AI 基础应用
1. 环境准备
JDK 17 或更高版本
Maven 3.6 或以上
有效的 OpenAI API 密钥(请于 platform.openai.com 获取)
2. 项目初始化
建议通过 start.spring.io 生成项目骨架,勾选以下依赖:
Spring Web
Spring AI(请选择适配的稳定版本)
也可直接在 `pom.xml` 中手动引入:
xml
<!-Spring AI OpenAI 集成 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.1</version> <!-请使用最新版本 -->
</dependency>
<!-Spring Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3. 配置 OpenAI API 密钥
在 `application.properties` 或 `application.yml` 中配置:
properties
# OpenAI 配置
spring.ai.openai.api-key=your-api-key-here
spring.ai.openai.chat.options.model=gpt-3.5-turbo
4. 构建控制器(Controller)
java
import org.springframework.ai.chat.ChatClient;
import org.springframework.web.bind.annotation.*;
@RestController
public class AIController {
private final ChatClient chatClient;
// 构造器注入
public AIController(ChatClient chatClient) {
this.chatClient = chatClient;
}
@GetMapping("/ai/chat")
public String chat(@RequestParam String message) {
return chatClient.call(message);
}
}
5. 进阶功能:结构化提示词模板
通过 PromptTemplate 实现更可控的 AI 交互逻辑:
java
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.web.bind.annotation.*;
@PostMapping("/ai/translate")
public String translate(@RequestBody TranslationRequest request) {
PromptTemplate promptTemplate = new PromptTemplate("""
将以下{sourceLang}文本翻译成{targetLang}:
{text}
""");
promptTemplate.add("sourceLang", request.sourceLang());
promptTemplate.add("targetLang", request.targetLang());
promptTemplate.add("text", request.text());
return chatClient.call(promptTemplate.render());
}
// 使用 Record 类型定义数据传输对象
record TranslationRequest(String sourceLang, String targetLang, String text) {}
6. 启动应用
通过 IDE 或命令行启动 Spring Boot 主类。
7. 接口测试示例
测试 `/ai/chat` 接口
访问:
`http://localhost:8080/ai/chat?message=用Java写一个Hello World程序`
预期返回(HTTP 200):
java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
测试 `/ai/translate` 接口
请求方式:POST
地址:`http://localhost:8080/ai/translate`
请求头:`Content-Type: application/json`
请求体:
json
{
"sourceLang": "中文",
"targetLang": "英文",
"text": "今天天气真好"
}
预期响应(HTTP 200):
`"Today's weather is really nice."`
8. 高级参数配置
在配置文件中调整生成参数:
properties
# 控制生成内容的创造性与长度
spring.ai.openai.chat.options.temperature=0.7
spring.ai.openai.chat.options.max-tokens=500
9. 异常统一处理
java
import org.springframework.ai.openai.api.OpenAiApiException;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(OpenAiApiException.class)
public ResponseEntity<String> handleOpenAiError(OpenAiApiException ex) {
return ResponseEntity.status(ex.getStatusCode())
.body("AI服务错误: " + ex.getMessage());
}
}
10. 项目结构概览
src/main/java
└── com.example
└── aiapp
├── AIController.java
├── GlobalExceptionHandler.java
└── AiAppApplication.java
11. 核心要点解析
依赖管理:Spring AI Starter 极大简化了 AI 能力集成过程
自动配置:ChatClient 自动装配已配置的 OpenAI 客户端实例
模板引擎:PromptTemplate 支持动态、结构化提示词的生成
扩展性:架构支持灵活切换不同的 AI 服务提供商
三、功能拓展与最佳实践
1. 典型错误场景
API 密钥无效将返回 401 状态码及错误描述
请求体缺少必要字段触发 400 Bad Request
指定不支持的语言时返回翻译失败提示
2. 输出差异性说明
实际返回内容可能因模型版本及温度(temperature)等参数产生合理差异。
3. 流式响应(高级特性)
如需实现类 ChatGPT 的实时输出效果,可使用 StreamingChatClient:
java
@GetMapping("/ai/chat-stream")
public Flux<String> chatStream(@RequestParam String message) {
return streamingChatClient.stream(message);
}
4. 长文本处理策略
超出模型 Token 限制的文本将被截断,可通过调整 `max-tokens` 参数予以缓解。
5. 响应格式定制
可配置接口返回 JSON 格式数据:
java
@PostMapping(value = "/ai/translate", produces = "application/json")
public Map<String, String> translate(...) {
return Map.of("result", translatedText);
}
6. 测试建议
建议使用多组不同场景验证接口稳定性,例如代码生成、多语种翻译等。
四、总结与发展展望
Spring Boot 作为现代 Java 应用开发的核心框架,与 Spring AI 的结合为传统业务系统注入智能化能力,在智能客服、文档解析、代码生成等场景中展现巨大潜力。
未来演进方向:
技术深化:加强多模态交互、本地模型集成与流式响应性能
生态完善:拓展对新兴模型的支持,强化与企业级组件的安全集成
行业渗透:发展垂直领域解决方案及 AI Agent 框架,推动智能化应用落地
更多推荐


所有评论(0)