Spring AI 应用开发

Spring AI 应用开发

一、应用背景

  1. 项目场景
    基于 "铁路智能运维管理系统",AI 应用聚焦于 "铁路设备维修" 功能模块及专业知识顾问场景,辅助管理人员与用户完成日常数据维护。

二、开发准备工作

(一)环境要求

  1. 基础依赖

    • Spring Boot 版本:3.2.x 及以上
    • JDK 版本:JDK 17 及以上
  2. 大模型配置(以 ZhiPu AI 为例)

    xml

    <!-- ZhiPu AI依赖 -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-zhipuai-spring-boot-starter</artifactId>
    </dependency>
    
  3. application.yml 配置

    yaml

    spring:
      application:
        name: railway-Ai
      ai:
        zhipuai:
          chat:
            enabled: true
            options:
              model: GLM-4-Air
          base-url: http://open.bigmodel.cn/api/paas
          api-key: your-api-key  # 替换为实际API密钥
          embedding:
            enabled: true
            model: embedding-2
    

三、核心功能实现

(一)普通聊天对话

  1. 关键组件注入

    java

    @Autowired
    private ZhiPuAiChatModel chatModel;
    @Autowired
    private ChatMemory chatMemory; // 聊天记忆管理
    
  2. 对话逻辑代码

    java

    public String chatByVectorStore(String message) {
        return ChatClient.builder(chatModel)
                .defaultSystem(PROFESSIONAL_SYSTEM_PROMPT) // 设置系统提示词
                .build()
                .prompt()
                .advisors(new MessageChatMemoryAdvisor(chatMemory)) // 启用聊天记忆
                .user(message)
                .call()
                .content();
    }
    
  3. 内存配置(ChatMemory Bean)

    java

    @Configuration
    public class ChatClientConfig {
        @Bean
        public ChatMemory chatMemory() {
            return new InMemoryChatMemory(); // 内存存储聊天历史
        }
    }
    

(二)检索增强生成(RAG)

  1. 矢量数据库配置(Redis Stack)

    yaml

    spring:
      vectorstore:
        redis:
          index: my_vector_index       # 索引名称
          prefix: chatbot              # 键前缀
          initialize-schema: true      # 自动初始化模式
      data:
        redis:
          host: 127.0.0.1              # Redis地址
          port: 6379                   # 端口
    
  2. PDF 解析与知识库构建

    xml

    <!-- PDF解析依赖 -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-pdf-document-reader</artifactId>
    </dependency>
    
  3. 服务层实现(PDF 分割与存储)

    java

    public void saveSourceByPage(String url) {
        Resource resource = resourceLoader.getResource(url);
        PdfDocumentReaderConfig config = PdfDocumentReaderConfig.builder()
                .withPagesPerDocument(1) // 按页分割
                .build();
        PagePdfDocumentReader reader = new PagePdfDocumentReader(resource, config);
        vectorStore.accept(tokenTextSplitter.apply(reader.get())); // 存入矢量数据库
    }
    
  4. RAG 对话逻辑

    java

    public String chatByVectorStore(String message) {
        return ChatClient.builder(chatModel)
                .defaultSystem(PROFESSIONAL_SYSTEM_PROMPT)
                .build()
                .prompt()
                .advisors(
                    new MessageChatMemoryAdvisor(chatMemory),
                    new QuestionAnswerAdvisor(vectorStore) // 启用矢量数据库检索
                )
                .user(message)
                .call()
                .content();
    }
    

(三)工具调用(Tool Calling)

  1. 工具配置类(ToolConfig)

    java

    @Service
    public class ToolConfig {
        // 获取当前时间工具
        @Tool(name = "获取当前时间", description = "返回用户当前的日期时间")
        public String getCurrentDateTime() {
            return LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
        }
    
        // 发送维修通知邮件工具
        @Tool(name = "发送邮件", description = "根据设备信息生成维修通知邮件")
        public void sendMail(
            @ToolParam("设备信息列表") List<Map<String, String>> maintInfoList,
            @ToolParam("维修天数") Integer day,
            @ToolParam("接收工号列表") List<String> emailList
        ) {
            // 业务逻辑:转换参数并调用Feign客户端发送邮件
        }
    }
    
  2. 工具调用集成

    java

    public String invokeTool(String message) {
        return ChatClient.create(chatModel)
                .prompt()
                .advisors(new MessageChatMemoryAdvisor(chatMemory))
                .user(message)
                .tools(toolConfig) // 注入工具配置
                .call()
                .content();
    }
    

四、功能测试与效果展示

(一)RAG 功能测试

  • 测试数据:铁路设备维修规范 PDF 片段(示例内容如图 1 所示)
  • 预期效果:AI 基于知识库返回设备验收标准、安装条件等相关解答。

(二)工具调用测试

  1. 信息检索场景

    • 用户指令:"查询需要维修的设备"
    • 返回结果:AI 调用getExpire()工具,返回待维修设备列表(如馈线、隔离开关等)。
  2. 行动执行场景

    • 用户指令:"发送邮件通知维修避雷器,5 天后,工号 123457"
    • 执行结果:AI 调用sendMail()工具,生成维修通知邮件并发送(如图 2 所示)。

五、总结与限制

  1. 当前进展
    实现了 Spring AI 与铁路运维系统的核心功能集成,包括对话交互、RAG 知识库检索及工具调用。

  2. 已知问题

    • 知识库规模过大时,工具调用响应延迟增加;
    • 当知识库包含与工具描述冲突的信息时,可能导致 AI 决策错误。
  3. 未来优化方向

    • 引入分层检索机制提升 RAG 效率;
    • 增加工具调用权限控制与参数校验逻辑。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值