共计 1888 个字符,预计需要花费 5 分钟才能阅读完成。
Spring AI 简介与定位
Spring AI 是 Spring 官方推出的 AI 集成框架,它让开发者能够以熟悉的 Spring 方式调用各类 AI 模型(如 OpenAI、Hugging Face 等)。它的核心价值在于:

- 统一不同 AI 服务的 API 规范
- 简化模型调用和结果处理流程
- 与 Spring 生态无缝集成
典型应用场景包括:智能客服问答、文档摘要生成、代码辅助编写等需要自然语言处理的业务场景。
环境搭建
基础准备
- JDK 17+(推荐使用 Amazon Corretto 或 OpenJDK)
- Maven 3.8+ 或 Gradle 8+
- IDE(IntelliJ IDEA 或 VS Code)
项目初始化
使用 Spring Initializr 创建项目时勾选:
- Spring Boot 3.2+
- Spring Web
- Lombok(可选)
添加 Spring AI 依赖
在 pom.xml 中添加如下配置(示例使用 OpenAI 模块):
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>0.8.0</version>
</dependency>
配置 API 密钥
在 application.properties 中配置:
spring.ai.openai.api-key=your-api-key
# 国内可能需要配置代理
spring.ai.openai.base-url=https://api.openai.com/v1
核心概念解析
1. 模型(Model)
指具体执行的 AI 能力单元,例如:
- text-davinci-003(文本生成)
- gpt-3.5-turbo(对话模型)
2. 提示词(Prompt)
包含:
- 指令(明确任务要求)
- 上下文(相关背景信息)
- 示例(few-shot learning)
示例结构:
请用中文回答以下问题。问题:{{question}}
3. 嵌入(Embedding)
将文本转换为数值向量的过程,常用于语义搜索和分类任务。
实战:构建天气问答机器人
项目结构
src/main/java
└── com.example
├── WeatherController.java
└── DemoApplication.java
控制器实现
@RestController
@RequiredArgsConstructor
public class WeatherController {
private final OpenAiChatClient chatClient;
@GetMapping("/weather")
public String getWeatherAdvice(@RequestParam String city) {
Prompt prompt = new Prompt("给出" + city + "的穿衣建议,用中文回答,不超过 50 字");
return chatClient.call(prompt).getResult().getOutput().getContent();}
}
测试请求
curl 'http://localhost:8080/weather?city= 北京'
预期返回示例:
北京当前建议穿轻薄外套,早晚温差大注意增减衣物。
常见问题解决方案
1. 超时错误
现象:SocketTimeoutException
解决:调整超时设置
spring.ai.openai.connect-timeout=30s
spring.ai.openai.read-timeout=60s
2. 中文乱码
现象:返回内容包含乱码
解决:确保项目 UTF- 8 编码,添加响应头:
@GetMapping(produces = "text/plain;charset=UTF-8")
3. Token 超限
现象:”maximum context length” 错误
解决:
- 精简输入文本
- 使用 stream 模式分块处理
生产环境注意事项
- 延迟优化 :
- 启用响应缓存
-
采用异步调用
-
Token 管理 :
- 监控使用量(1token≈3/ 4 英文单词)
-
设置用量告警
-
降级方案 :
- 准备本地简化模型
- 超时后返回默认应答
进阶学习建议
- 官方文档精读:
- Spring AI Reference
-
OpenAI API 文档
-
扩展实践:
- 实现多轮对话上下文保持
-
结合 RAG 构建知识库问答
-
性能调优:
- 负载测试(JMeter)
- 向量数据库集成
结语
通过这个简单的天气应用,我们体验了 Spring AI 的核心开发流程。建议从这个小项目出发,逐步尝试更复杂的提示词工程和模型组合。遇到问题时,不妨先查阅 Spring AI 的 GitHub Issues,通常能找到解决方案。
正文完
