本文档介绍如何测试 TIS AI Agent 的任务取消功能。该功能允许用户在发送请求后终止服务端执行流程,避免长时间无效等待和服务端计算资源浪费。
- 前端文件:
/Users/mozhenghua/j2ee_solution/project/tis-console/src/runtime/chat.pipeline.component.ts - 后端文件:
/Users/mozhenghua/j2ee_solution/project/tis-solr/tis-console/src/main/java/com/qlangtech/tis/coredefine/module/action/ChatPipelineAction.java
# 前端编译
cd /Users/mozhenghua/j2ee_solution/project/tis-console
npm run build
# 后端编译
cd /Users/mozhenghua/j2ee_solution/project/tis-solr
mvn clean package -Dmaven.test.skip=true-
启动对话
- 打开 AI Agent 聊天界面
- 选择一个大模型提供者
-
发送任务请求
- 输入一个需要较长时间处理的任务,例如:
- "创建一个MySQL到Doris的完整数据同步管道"
- "配置所有数据源连接并同步10张表"
- 输入一个需要较长时间处理的任务,例如:
-
执行取消操作
- 观察"发送"按钮变为红色的"取消执行"按钮
- 在任务执行过程中点击"取消执行"按钮
-
验证结果
- ✅ 应该看到成功通知:"当前执行任务已经停止"
- ✅ 按钮应该恢复为"发送"状态
- ✅ 打字机效果应该停止
- ✅ SSE连接应该关闭
- ✅ 后续步骤不应该继续执行
-
快速操作
- 发送消息后立即点击取消
- 验证系统能够正确处理快速取消
-
预期结果
- ✅ 系统应该能够正确处理
- ✅ 不应该出现界面卡死或异常
-
创建多个会话
- 创建会话A,发送任务并执行
- 切换到新会话B,发送另一个任务
-
取消特定会话
- 在会话B中点击取消
- 切换回会话A,验证A的任务不受影响
-
预期结果
- ✅ 只有当前会话的任务被取消
- ✅ 其他会话不受影响
-
取消当前任务
- 发送任务并取消
-
重新发送新任务
- 取消成功后,输入新的请求并发送
-
预期结果
- ✅ 能够正常发送新任务
- ✅ 新任务能够正常执行
-
触发用户输入请求
- 发送一个需要用户选择或输入的任务
- 等待系统显示选择框或输入框
-
执行取消
- 在等待用户输入时点击取消
-
预期结果
- ✅ 倒计时应该停止
- ✅ 输入框/选择框应该变为禁用状态
- ✅ 系统正确退出等待状态
-
模拟网络中断
- 发送任务后断开网络
- 点击取消按钮
-
预期结果
- ✅ 应该显示错误消息
- ✅ 界面状态应该正确重置
-
清理后端会话
- 重启后端服务
- 在前端点击取消(此时后端会话已丢失)
-
预期结果
- ✅ 应该显示友好的错误提示
- ✅ 界面应该正确重置状态
-
同时操作多个浏览器标签
- 在多个标签页中同时发送任务
- 同时点击取消
-
预期结果
- ✅ 每个会话都能独立取消
- ✅ 不应该出现资源竞争或死锁
tail -f /path/to/tis/logs/tis.log | grep "cancelled task"应该看到类似日志:
INFO - User admin cancelled task for session: xxx-xxx-xxx
打开浏览器开发者工具,查看:
- Network标签:确认取消请求已发送
- Console标签:确认没有JavaScript错误
| 测试场景 | 测试结果 | 备注 |
|---|---|---|
| 基本取消功能 | ⬜ 通过 / ⬜ 失败 | |
| 快速取消 | ⬜ 通过 / ⬜ 失败 | |
| 多会话取消 | ⬜ 通过 / ⬜ 失败 | |
| 取消后重新发送 | ⬜ 通过 / ⬜ 失败 | |
| 等待用户输入时取消 | ⬜ 通过 / ⬜ 失败 | |
| 网络异常 | ⬜ 通过 / ⬜ 失败 | |
| 会话不存在 | ⬜ 通过 / ⬜ 失败 | |
| 并发取消 | ⬜ 通过 / ⬜ 失败 |
-
当前正在执行的步骤不会被强制中断
- 系统会等待当前步骤完成后停止后续步骤
- 这是为了保证数据一致性和避免执行逻辑混乱
-
取消操作不可撤销
- 一旦取消,需要重新发送任务
如果取消功能不工作,请检查:
-
前端检查
- 确认按钮切换逻辑是否正常
- 确认取消请求是否正确发送
- 检查浏览器控制台是否有错误
-
后端检查
- 确认
doCancelCurrentTask方法是否被调用 - 检查
AgentContext是否正确保存在会话中 - 查看后端日志是否有异常
- 确认
-
常见问题
- 按钮没有切换:检查
isProcessing状态管理 - 取消不生效:验证
AgentContext.cancel()是否被调用 - 状态未重置:检查前端状态重置逻辑
- 按钮没有切换:检查
- 添加取消确认对话框(避免误操作)
- 显示取消进度(哪些步骤已完成,哪些被跳过)
- 支持部分取消(选择性跳过某些步骤)
- 添加取消操作的审计日志
- 优化取消响应时间