当前位置: 首页 > news >正文

玩转 AI · 思考过程可视化

玩转 AI · 思考过程可视化

我们在开发 AI 的思维链 / 处理流时,难免遇到耗时较长的流程,如果遇到处理过慢的,用户什么也看不到可能丧失使用兴趣,对于这种情况,一个巧妙的产品思维就是呈现处理进度。

示例

请添加图片描述
其实完成这个页面,展示处理进度、处理耗时、预估耗时、这一些列操作,在 Spring Boot 中只需10行代码

pom.xml 引入依赖

<dependency><groupId>cn.itlym</groupId><artifactId>shoulder-batch</artifactId><version>1.1.0</version>
</dependency>
<dependency><groupId>cn.itlym</groupId><artifactId>shoulder-starter</artifactId><version>1.1.0</version>
</dependency>

开发代码

编辑流程并注册

public enum MyAiFlow implements BatchActivityEnum<MyAiFlow> {TASK_1("👂", "识别用户意图", 0, 0),TASK_2("🧠", "改写查询、扩写查询", 0, 0),TASK_3("🔍", "查找相关数据", 0, 0),TASK_4("🧠", "总结信息", 0, 0),;// 省略实现方法

将这个枚举注册进 Spring 上下文

@Configuration
public class BatchConfiguration {@Beanpublic BatchActivityEnumRepositoryCustomizer batch() {return repository -> repository.register(MyAiFlow.class, "AI 思考过程");}
}

直接查看页面

启动后访问
http://localhost:8080/ui/activities/page.html?progressId=_shoulderMockAndTest&activityId=MyAiFlow
请添加图片描述

数一下刚刚的Java代码,不算大括号,确实10行代码 👍

控制流程处理进度

原文档里通过自定义枚举的 start、finish 即可方便的控制处理进度。

我更推荐使用 setTotalAndStart、addSuccess 来 控制任务开始与结束,毕竟一个步骤可能多个子任务。

public class DemoController {@GetMapping("chat")public String chat(String userInput) {String progressId = UUID.randomUUID().toString();// 开启异步线程处理,并直接返回处理进度页面Threads.execute("enhancedAiProcess", () -> enhancedAiProcess(userInput, progressId));return "redirect:/ui/activities/page.html?progressId=" + progressId + "&activityId=MyAiFlow";}public String enhancedAiProcess(String userInput, String progressId) {// 收到用户输入,解析用户意图MySimpleTaskEnum.TASK1.startOneStageTask(progressId);String userIntent = AiClient.analyzeUserIntent(userInput);MySimpleTaskEnum.TASK1.addSuccess(progressId);// 改写查询、扩写查询MySimpleTaskEnum.TASK2.startOneStageTask(progressId);String rewriteQuery = AiClient.rewriteUserInput(userInput, userIntent);MySimpleTaskEnum.TASK2.addSuccess(progressId);// 让 AI 去网上搜索MySimpleTaskEnum.TASK3.setTotalAndStart(progressId, 3);String aiWithSearchedResult = AiClient.chatWithTools(rewriteQuery, List.of("WebSearchTool"));MySimpleTaskEnum.TASK3.addSuccess(progressId);Thread.sleep(300);//模拟一个个网页搜索MySimpleTaskEnum.TASK3.addSuccess(progressId);Thread.sleep(300);//模拟一个个网页搜索MySimpleTaskEnum.TASK3.addSuccess(progressId);// 根据用户输入、意图、查找结果 总结信息返回用户MySimpleTaskEnum.TASK3.startOneStageTask(progressId);String finalOutput = AiClient.summary(aiWithSearchedResult, userIntent, userInput);MySimpleTaskEnum.TASK3.addSuccess(progressId);return finalOutput;}
}

高级:并行流程

修改后面的数字就可以自定义任意流程,这是我写的一个示例

public enum CurrentFlow implements BatchActivityEnum<CurrentFlow> {// 这两个任务在 第1个块,第1列(列数相同代表顺序布局)TASK_BLOCK1_MAIN_1("1.1.1", "任务1", 1, 1),TASK_BLOCK1_MAIN_2("1.1.2", "任务2", 1, 1),// 这个任务在 第2个块,第1列TASK_BLOCK1_MAIN_3("2.1.1", "任务3.1", 2, 1),// 这两个任务在 第2个块,第2列TASK_BLOCK1_MAIN_4("2.2.1", "任务3.2.1", 2, 2),TASK_BLOCK1_MAIN_5("2.2.2", "任务3.2.2", 2, 2),// 这个任务在 第3个块TASK_BLOCK1_MAIN_10("3.1.1", "任务3", 3, 0),;// 别忘了注册 BatchActivityEnumRepositoryCustomizer

在这里插入图片描述

自定义 UI 页面

把自己的 html 文件命名为 activityPage.html.config 放在 resources/shoulder/pages 目录下就好。
在这里插入图片描述

评价

方便快速:10行代码,即可实现页面开发与可视化,这比 DeepSeek 写代码都快好多。
轻量低耦合:业务代码编写中几乎只依赖了 Spring 的类,或者开发者自己定义的类,体现了设计者的巧妙构思。
🔧功能丰富:除了本文所写的,这个模块还有很多有意思的功能,比如导入、导出,上传校验等也有同样的有点。

参考

Ai 流程可视化
开源代码 Demo2

http://www.dtcms.com/a/196719.html

相关文章:

  • Ocean: Object-aware Anchor-free Tracking
  • 电动调节V型球阀:行业应用与材质选择全解析
  • ALIENTEK精英STM32F103开发板 实验0测试程序详解
  • 【VSCode】修改侧边文件资源管理器中的文件夹折叠模式
  • 【目标检测】【Transformer】Swin Transformer
  • 现代健康生活养生指南
  • 80. Java 枚举类 - 使用枚举实现单例模式
  • 【JDBC】JDBC概述、历史版本及特征
  • 【OpenCV】帧差法、级联分类器、透视变换
  • 基于51单片机温控风扇—PWM调速、2挡、数码管显示
  • 计算机发展的历程
  • 【Mysql】详解InnoDB存储引擎以及binlog,redelog,undolog+MVCC
  • 【springboot】HttpClient快速入门
  • 电子电路:什么是高频电路以及都有哪些应用?
  • 基于STM32的INA226电压电流检测仪
  • 混合学习:Bagging与Boosting的深度解析与实践指南
  • 《崩坏·星穹铁道2.2指令服》Linux架设教程(附资源工具)
  • 大模型在腰椎间盘突出症预测与治疗方案制定中的应用研究
  • 数据分析 —— 数据预处理
  • 博客打卡-求解流水线调度
  • ARM (Attention Refinement Module)
  • 51单片机课设基于GM65模块的二维码加条形码识别
  • 无法加载文件 E:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本
  • 2025年【道路运输企业安全生产管理人员】考试题库及道路运输企业安全生产管理人员考试内容
  • 1688 数据接口调用秘籍:高效获取商品实时信息的开发指南
  • MySQL多条件查询深度解析
  • MySQL 聚簇索引与非聚簇索引:底层原理与实战深度解析
  • Redis设计与实现——Redis命令参考与高级特性
  • 【Java】应对高并发的思路
  • 20250517 我设想一个空间,无限大,空间不与其中物质进行任何作用,甚至这个空间能容纳可以伸缩的空间