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应用场景。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐