SpringAI实战:5分钟搞定智能天气查询+用户管理Demo(含Ollama本地模型配置)
·
SpringAI极速实践:5分钟构建智能天气查询与用户管理系统
当Java开发者首次接触AI能力集成时,往往面临环境配置复杂、学习曲线陡峭的困境。本文将带你用SpringAI框架,在5分钟内完成一个具备智能天气查询和用户管理功能的完整Demo,特别包含Ollama本地模型配置方案,解决企业内网环境下的AI集成难题。
1. 环境准备与项目初始化
首先确保你的开发环境满足以下基础要求:
- JDK 17+
- Maven 3.8+
- Docker(用于Ollama本地模型)
使用Spring Initializr快速创建项目,关键依赖配置如下:
<dependencies>
<!-- SpringAI核心 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
<!-- 阿里云DashScope备用 -->
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
<!-- Web支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
配置文件application.yml的基础设置:
spring:
ai:
type: ollama # 默认使用本地模型
ollama:
base-url: http://localhost:11434
chat.model: llama3 # 本地模型名称
dashscope:
api-key: ${DASHSCOPE_API_KEY} # 阿里云备用密钥
2. Ollama本地模型部署
对于需要在内网环境开发的场景,Ollama提供了极简的本地模型部署方案。执行以下Docker命令即可启动服务:
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
然后下载所需的AI模型(以Llama3为例):
docker exec -it ollama ollama pull llama3
提示:首次运行会下载模型文件,耗时取决于网络环境,建议提前准备基础镜像
验证模型是否正常运行:
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt":"Why is the sky blue?"
}'
3. 智能天气服务实现
创建天气查询服务核心类,包含AI集成关键逻辑:
@Service
public class WeatherService {
private final ChatClient chatClient;
// 模拟天气数据存储
private final Map<String, WeatherInfo> weatherDB = Map.of(
"北京", new WeatherInfo("北京", 25.5, 65, "晴朗"),
"上海", new WeatherInfo("上海", 28.0, 70, "多云")
);
public WeatherInfo getWeatherByCity(String city) {
// 先尝试从数据库获取
WeatherInfo info = weatherDB.get(city);
if (info == null) {
// 调用AI生成模拟数据
String response = chatClient.prompt()
.user("生成{city}的模拟天气数据,温度范围-10到40,湿度30-80")
.param("city", city)
.call()
.content();
info = parseAIResponse(response);
}
return info;
}
private WeatherInfo parseAIResponse(String json) {
// 实现JSON解析逻辑
}
}
配套的REST控制器提供API端点:
@RestController
@RequestMapping("/api/weather")
public class WeatherController {
@GetMapping("/{city}")
public WeatherInfo getWeather(@PathVariable String city) {
return weatherService.getWeatherByCity(city);
}
@PostMapping("/query")
public String naturalLanguageQuery(@RequestBody String query) {
return chatClient.prompt()
.system("你是一个天气助手,只能回答与天气相关的问题")
.user(query)
.call()
.content();
}
}
4. 用户管理系统集成
用户管理模块采用经典的三层架构,特别增加了AI增强功能:
实体层:
@Data
public class User {
private Long id;
private String username;
private String password;
private LocalDateTime createTime;
}
AI增强的Service层:
@Service
public class UserService {
public User createUser(User user) {
// 密码强度AI校验
String advice = chatClient.prompt()
.system("分析密码强度,给出改进建议")
.user(user.getPassword())
.call()
.content();
if (advice.contains("弱")) {
throw new IllegalArgumentException("密码强度不足:" + advice);
}
// 保存用户逻辑
return userRepository.save(user);
}
public String resetPassword(Long userId) {
// 使用AI生成随机密码
String newPassword = chatClient.prompt()
.system("生成一个12位的随机密码,包含大小写字母和数字")
.call()
.content();
// 更新密码逻辑
return newPassword;
}
}
5. 双模型切换策略
针对不同环境需求,我们实现模型动态切换机制。创建配置类实现智能路由:
@Configuration
public class AIConfig {
@Bean
public ChatClient chatClient(
OllamaChatModel ollamaModel,
DashScopeChatModel dashscopeModel,
Environment env) {
boolean useCloud = env.getProperty("spring.ai.type", String.class, "ollama")
.equalsIgnoreCase("dashscope");
return ChatClient.builder(useCloud ? dashscopeModel : ollamaModel)
.defaultSystem("你是一个专业的业务助手")
.build();
}
}
在application.yml中可通过简单配置切换模式:
spring:
ai:
type: dashscope # 切换为阿里云模型
# type: ollama # 切换为本地模型
6. 实战技巧与优化建议
经过多个项目的实践验证,以下配置能显著提升开发效率:
性能优化配置:
spring:
ai:
ollama:
options:
temperature: 0.7 # 控制创造性
num-predict: 512 # 最大输出长度
常用调试命令:
# 查看Ollama日志
docker logs -f ollama
# 模型管理
ollama list # 查看已安装模型
ollama rm llama3 # 删除模型
异常处理建议:
- 网络超时:配置合理的超时参数
- 模型加载失败:检查Docker资源限制
- 内存不足:为Ollama分配更多内存
@ControllerAdvice
public class AIExceptionHandler {
@ExceptionHandler(AIException.class)
public ResponseEntity<String> handleAIException(AIException ex) {
// 特殊处理AI服务异常
return ResponseEntity.status(503).body(ex.getMessage());
}
}
通过这个极简Demo,我们实现了SpringAI的核心功能集成。无论是本地开发还是云端部署,这套方案都能快速验证AI能力。建议在实际项目中根据业务需求扩展工具调用和记忆管理功能,逐步构建更复杂的AI应用场景。
更多推荐
所有评论(0)