SpringAI实战:5分钟搞定智能天气查询+用户管理Demo(Spring Boot 3.5.0 + Ollama本地模型)
·
SpringAI实战:5分钟搭建本地智能服务(Spring Boot 3.5.0 + Ollama)
在AI技术快速落地的今天,开发者常面临云服务成本高、响应延迟等问题。本文将带你用Spring Boot 3.5.0和Ollama本地模型,在5分钟内构建具备天气查询与用户管理功能的智能服务,实现零成本AI应用部署。
1. 环境准备与项目初始化
首先确保系统已安装:
- JDK 17+
- Docker(用于运行Ollama)
- Maven 3.8+
创建Spring Boot项目时,在pom.xml中添加关键依赖:
<dependencies>
<!-- SpringAI核心依赖 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
<!-- Web支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
提示:SpringAI 1.0.0已正式支持Ollama,无需额外配置云服务密钥
2. Ollama本地模型部署
通过Docker快速启动Ollama服务并加载模型:
# 拉取Ollama镜像
docker pull ollama/ollama
# 启动服务(自动下载llama3模型)
docker run -d -p 11434:11434 --name ollama ollama/ollama
# 验证模型可用性
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt": "Hello"
}'
在application.yml中配置模型连接:
spring:
ai:
ollama:
base-url: http://localhost:11434
chat:
options:
model: llama3
temperature: 0.7
3. 智能天气服务实现
创建天气查询工具类,支持自然语言解析:
@Service
public class WeatherService {
private static final Map<String, WeatherData> WEATHER_DB = Map.of(
"北京", new WeatherData(25.5, 65, "晴"),
"上海", new WeatherData(28.0, 70, "多云")
);
@Tool(name = "WeatherQuery", description = "根据城市名称查询天气")
public WeatherData getWeather(@ToolParam("城市名称") String city) {
return WEATHER_DB.getOrDefault(city, new WeatherData(0, 0, "未知"));
}
}
@Data
@AllArgsConstructor
class WeatherData {
private double temperature;
private int humidity;
private String condition;
}
4. 用户管理系统集成
实现带AI辅助的用户注册功能:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private ChatClient chatClient;
@PostMapping
public String register(@RequestBody User user) {
// AI生成欢迎语
String welcome = chatClient.prompt()
.user("为新用户生成欢迎语,用户名:" + user.getUsername())
.call()
.content();
return welcome + "\n注册成功!";
}
}
@Data
class User {
private String username;
private String password;
}
5. 完整功能联调测试
启动应用后,可通过以下方式验证:
1. 直接调用天气接口
curl -X POST http://localhost:8080/weather -H "Content-Type: application/json" -d '{"city":"北京"}'
2. 通过自然语言交互
@RestController
public class ChatEndpoint {
@Autowired
private ChatClient chatClient;
@GetMapping("/ask")
public String ask(@RequestParam String question) {
return chatClient.prompt()
.user(question)
.call()
.content();
}
}
测试示例:
问:"北京天气怎么样?"
答:"北京当前天气晴,温度25.5℃,湿度65%"
6. 性能优化技巧
为提升本地模型响应速度,建议:
-
模型量化:使用4bit量化版本减小内存占用
docker exec ollama ollama pull llama3:8b-instruct-q4_0 -
缓存策略:对天气数据添加缓存
@Cacheable("weather") public WeatherData getWeather(String city) { // ... } -
对话记忆:配置上下文保留
@Bean public ChatMemory chatMemory() { return MessageWindowChatMemory.builder() .maxMessages(10) .build(); }
实际测试中,本地部署的llama3-8b模型在消费级PC(i7-12700K + 32GB RAM)上平均响应时间约1.8秒,完全满足轻量级应用需求。
更多推荐


所有评论(0)