chat_test_cases.md 16 KB

/api/chat 对话测试用例

基于 dialog-interpret + needq-calc + wind-hazard-diagnosis 技能 + 全部 57 个 MCP 工具覆盖编写

测试方式:POST /api/chat,参数 message(form-data)

工具总数:57 个 MCP 包装函数 + 非 MCP 本地工具(知识库/计算/偏好/审批/搜索/文件/聊天记录/系统)


一、巷道监测数据解读(dialog-interpret 核心)

1.1 默认指标解读(风速 + 风量)

编号 用例 预期行为
C01 "15216 辅运起坡段当前情况怎么样" 触发 dialog-interpret,自动解读风速+风量,调用 query_tun_data_by_id → 输出对比报告
C02 "帮我看看北二盘区回风巷" 同上,未指定指标时默认解读风速+风量
C03 "三水平主运大巷现在数据如何" 如果 query_tunnel_list 匹配到多条,列出候选让用户继续提问

1.2 指定指标解读

编号 用例 预期行为
C04 "15216 工作面瓦斯浓度怎么样" 查询指定巷道瓦斯数据,对比规程阈值
C05 "北二回风巷 CO 是否超限" 查询 CO 浓度,判断是否 ≥0.0024%
C06 "15216 辅运起坡段温度多少" 查询温度,按采掘面 26/30℃ 规则判断
C07 "主运大巷氧气含量正常吗" 查询 O₂,判断是否 ≥20%

1.3 风量合规判断

编号 用例 预期行为
C08 "二水平辅运大巷风量满足计划吗" 查询实际风量 vs 计划风量,计算缺口比例
C09 "15216 工作面风速是否超限" 查询风速,对比规程允许范围

二、设备查询

2.1 设备类型字典

编号 用例 预期行为
C10 "系统里有哪些设备类型" 调用 get_device_kind_dict → 列出大类小类
C11 "传感器类型都有哪些" 同上
C12 "modelsensor_speed 是什么设备" 调用 get_device_kind_dict → 翻译编码为中文

2.2 按类型查设备列表

编号 用例 预期行为
C13 "列出所有风速传感器" 先 get_device_kind_dict 取编码 → get_device_list_by_kind → 输出设备清单
C14 "有哪些甲烷传感器" 同上
C15 "温度传感器有哪些" 同上

2.3 单设备实时数据

编号 用例 预期行为
C16 "设备 FAN-001 当前读数多少" 调用 query_device_realtime_data(device_id="FAN-001")
C17 "传感器 11111004 现在什么状态" 同上,返回在线状态、读数、报警

2.4 设备信息查询(新增)

编号 用例 预期行为
C18 "fanmain 是什么设备类型" 调用 query_device_type_info(device_type="fanmain") → 返回大类小类信息
C19 "风速传感器有哪些测点参数" 调用 query_monitor_params → 列出点表监测参数
C20 "帮我查一下 fanmain_stem_wp_2 的详细信息" 调用 query_device_info(str_type="fanmain_stem_wp_2") → 设备信息列表

2.5 巷道关联设备 + 模型设备

编号 用例 预期行为
C21 "15216 辅运起坡段绑了哪些设备" 调用 query_devices_by_tunnel
C22 "模型 2012326636757958658 下面绑了多少设备" 调用 query_devices_by_model → 设备数量和清单

2.6 设备监测风量 / 字典(新增)

编号 用例 预期行为
C23 "帮我查一下这个模型的设备监测风量" 调用 get_sensor_wind(model_id) → 各设备风量数据
C24 "测风装置风量和模型解算风量对比" 先 get_sensor_wind 再 get_model_wind → 对比差异
C25 "系统字典里有没有通风方式的编码" 调用 get_dict_list_by_dictcode → 字典项列表

三、历史趋势查询

编号 用例 预期行为
C26 "15216 工作面近7天风速变化趋势" 调用 list_ventanaly_monitor_data_days → 输出趋势图描述(均值/最值/趋势方向)
C27 "北二回风巷上个月温度怎么样" 换算时间范围,调用历史数据工具
C28 "三水平主运大巷最近24小时风量有波动吗" 同上

四、巷道/模型列表查询

编号 用例 预期行为
C29 "帮我查一下模型下面有哪些巷道" 调用 query_tunnels_by_model
C30 "搜一下名字带'辅运'的巷道" 调用 query_tunnel_list 模糊匹配
C31 "15216 这个模型下有多少条巷道" 调用 query_tunnels_by_model

五、规程知识库查询

编号 用例 预期行为
C32 "煤矿安全规程对回风巷风速有什么要求" 调用 query_knowledge_base → 返回条款原文
C33 "采煤工作面瓦斯报警浓度是多少" 同上
C34 "AQ1056 风量计算方法是什么" 同上

六、需风量计算(needq-calc 技能 + MCP 模拟)

6.1 采煤工作面计算

编号 用例 预期行为
C35 "计算一下 15216 工作面的需风量" 触发 needq-calc,逐步引导填写参数(采高、控顶距、瓦斯涌出量等)
C36 "采煤面按瓦斯量算需风量,绝对涌出量 3.2,不均衡系数 1.5" 调用 calc_face_by_gas
C37 "采煤面按人数算需风量,最多 40 人" 调用 calc_face_by_workers
C38 "采煤面按风速验算,断面 18 平米" 调用 calc_face_by_wind_speed

6.2 掘进工作面计算

编号 用例 预期行为
C39 "掘进面需风量怎么算" 触发 needq-calc,引导参数
C40 "掘进面炸药量 8kg,帮我算需风量" 调用 calc_tunnel_by_explosives
C41 "掘进面 15 个人同时作业,需风量多少" 调用 calc_tunnel_by_workers

6.3 硐室计算

编号 用例 预期行为
C42 "机电硐室需风量,设备功率 200kW" 调用 calc_chamber_by_equipment
C43 "硐室按风速验算,断面 12 平米" 调用 calc_chamber_by_wind_speed

6.4 管控平台数据

编号 用例 预期行为
C44 "通防管控平台上各地点需风量是多少" 调用 get_needq_all_data → 展示所有用风地点数据
C45 "管控平台的配风情况帮我看看" 同上
C46 "管控平台上的默认模型参数有哪些" 调用 get_model_param_pub_list → 分页展示

6.5 MCP 需风量模拟计算(新增)

编号 用例 预期行为
C47 "用管控平台的模型帮我算一下这个掘进面的需风量" 调用 simulate_needq_heading_face → 模拟计算结果
C48 "这个硐室在管控平台上需风量模拟是多少" 调用 simulate_needq_room → 模拟计算结果
C49 "采煤工作面用系统模拟算一下需风量" 调用 simulate_needq_ret_work_face → 模拟计算结果
C50 "其他用风地点也帮我模拟算一下" 调用 simulate_needq_other → 模拟计算结果

6.6 汇总计算

编号 用例 预期行为
C51 "帮我把刚才算的各地点汇总一下总需风量" 调用 calc_total_air_volume
C52 "这个工作面的有效断面帮我算一下" 调用 calc_effective_area

七、风速风量隐患判识(wind-hazard-diagnosis 技能)

7.1 全量诊断触发

编号 用例 预期行为
C61 "查询当前风速风量数据有没有问题" 触发 wind-hazard-diagnosis,走 Step1~Step8 全流程
C62 "帮我做一次测风数据判识" 同上,触发完整诊断流程
C63 "风速风量有没有隐患" 同上,最后询问是否生成 md 报告
C64 "全矿测风装置数据排查一下" 获取全量清单,逐台判识,输出总览+逐台明细

7.2 生成报告

编号 用例 预期行为
C65 "生成测风数据分析报告" 触发技能 Step9:生成固定格式 md 报告
C66 "把刚才的诊断结果写成报告" 同上,复用前一轮已获取的数据
C67 "不要报告,就告诉我结论" 技能结束时不写文件,仅输出会话结论

7.3 重点巷道诊断

编号 用例 预期行为
C68 "15216 工作面的测风数据有没有超限" 触发技能,定位该工作面关联测风装置
C69 "北二回风巷风速风量排查隐患" 同上,按巷道类型判定
C70 "总回风巷风量够不够" 关联通风系统总需风量 qra 判定

7.4 模拟/离线数据场景

编号 用例 预期行为
C71 "测风数据看起来很规律像是模拟的怎么办" 模拟数据识别 → 标注"模拟数据,不可用于生产判识"
C72 "有台测风装置离线了怎么处理" 标记"无实时数据/离线",归入 🔴 高风险

7.5 隐患分级与红线判定

编号 用例 预期行为
C73 "有没有触犯重大隐患判定标准的" 系统级/用风点级供风量 < 需风量×75% → 判定重大隐患
C74 "帮我列出所有高风险点" 输出 🔴 高风险清单

八、多轮对话

编号 用例 预期行为
C75 第1轮:"15216 辅运起坡段风速怎么样" → 第2轮:"那风量呢" 第2轮应记住上下文(同一巷道)
C76 第1轮:"帮我算采煤面需风量" → 第2轮:"刚才算的是按瓦斯算的吗" 记住前一轮计算上下文
C77 第1轮:"列出所有风速传感器" → 第2轮:"第3个的实时数据" 记住设备列表上下文
C78 第1轮:"全矿风速风量排查" → 第2轮:"生成报告" 复用前一轮诊断数据生成 md 报告

九、边缘/异常场景

编号 用例 预期行为
C79 "全矿瓦斯浓度最高的三个点在哪儿" 告知暂不支持跨巷道聚合排序,引导指定巷道
C80 "某某不存在的巷道风速怎么样" query_tunnel_list 无结果,告知未找到
C81 "今天天气怎么样" 不进通风技能,作为通用对话回复或引导回通风话题
C82 空消息 "" 返回 422 参数校验错误
C83 "帮我解读"(无巷道名) 反问用户需要解读哪条巷道
C84 "计算需风量"(无参数) needq-calc 技能引导用户逐步提供计算参数
C85 "测风数据有没有隐患"(tf_mcp 不可用) 明确告知"缺少 tf_mcp 或云知识库,无法完整执行"

十、模型数据查询(新增)

编号 用例 预期行为
C86 "这个模型的巷道解算风量是多少" 调用 get_model_wind(model_id) → 解算风量数据
C87 "帮我查看管控平台默认模型参数" 调用 get_model_param_pub_list → 分页模型参数
C88 "设备监测风量和模型解算风量差多少" get_sensor_wind + get_model_wind → 对比分析

十一、故障诊断(新增)

编号 用例 预期行为
C89 "检查一下这个模型通风网络有没有问题" 调用 check_model_connect_status → 连通块诊断
C90 "模型里有没有循环风路" 调用 check_model_one_dir_cycle → 循环风路检查
C91 "帮我看一下有没有单风向节点" 调用 check_model_one_dir_node → 单向节点检查
C92 "模型角联结构诊断一下" 调用 check_model_diagonal_structure → 角联诊断(耗时较长)
C93 "模型全面故障诊断,包含角联" 调用 get_model_fault_diagnosis(include_diagonal=True) → 聚合诊断

十二、避灾路线(新增)

编号 用例 预期行为
C94 "如果 4 号巷道发生火灾,6 号巷道的人怎么逃生" 调用 get_escape_path(fire_tun_id="4", person_tun_id="6") → 逃生路线
C95 "各出口的避灾路线都帮我算一下,CO 浓度 2000" 调用 get_escape_path_each_exit → 各出口路线

十三、关键阻力 / 压能(新增)

编号 用例 预期行为
C96 "这个模型有哪些回风井" 调用 get_out_shafts → 回风井巷道ID列表
C97 "进风井有哪些" 调用 get_in_shafts → 进风井列表
C98 "回风井的最大阻力路线是什么" 先 get_out_shafts 取节点ID → get_max_resistance_path
C99 "三区阻力分布帮我看看" 调用 get_three_area_distribution → 进风/用风/回风区阻力
C100 "关键路径控风方案决策数据" 调用 get_key_path_decision → 决策数据
C101 "从进风井到回风井的压能图" 调用 get_path_press_power → 节点压能数据

十四、网络解算(新增)

编号 用例 预期行为
C102 "对当前模型做一次网络解算" 调用 net_cal → 各巷道风量分配(耗时较长)
C103 "模拟反风方案,按这个方案解算" 调用 net_cal_for_plan → 方案模拟结果

十五、报警 / 日志查询(新增)

编号 用例 预期行为
C104 "最近一周有哪些设备报警了" 调用 get_alarm_log_history → 报警记录
C105 "上个月设备控制操作记录给我看看" 调用 get_device_set_log_history → 控制历史
C106 "最近有哪些人登录过系统" 调用 get_sys_log_history → 登录历史

十六、场景管理(新增)

编号 用例 预期行为
C107 "通风场景有哪些" 调用 get_manage_system_by_strType → 场景列表
C108 "帮我打开场景 ID 为 xxx 的数据" 调用 query_system_by_systemID → 场景数据

十七、煤矿基础数据(新增)

编号 用例 预期行为
C109 "合阳县金桥煤矿的瓦斯等级鉴定报告" 调用 get_gas_identify_vo(mine_name="合阳县金桥")
C110 "这个矿的工作面设计规程是什么" 调用 get_by_mine_name → 设计规程
C111 "对 11111004 这个测风装置执行一键测风" 调用 query_control_testWind → 测风结果

十八、数据库 / 文件(新增)

编号 用例 预期行为
C112 "从 vent 库查一下风机运行参数" 调用 execute_sql_query → SQL 查询结果
C113 "文件共享中心有哪些测风报表" 调用 get_file_list_by_type → 文件列表
C114 "帮我把这个文件的内容取出来" 调用 get_file_base64_by_id → Base64 文件内容

十九、测风报表(新增)

编号 用例 预期行为
C115 "最新的测风报表给我看看" 调用 get_latest_report → 最新报表数据
C116 "合阳县金桥煤矿 2026年6月的测风报表" 调用 get_latest_report(mine_name, date_month)

二十、会话管理工具(新增)

编号 用例 预期行为
C117 "当前这个会话的ID是什么" 调用 get_current_session_id → 返回 session_id
C118 "帮我查一下之前关于瓦斯的那次对话" search_chat_history → get_session_chat 串联查询

二十一、联网搜索 + 文件读取

编号 用例 预期行为
C119 "帮我搜一下最新的煤矿安全规程修订" 调用 web_search → 搜索结果
C120 "把这个网页内容抓下来分析" 调用 web_fetch → 网页内容
C121 "上传的这份测风报表帮我看看内容" 调用 read_file_content → 解析 PDF/XLSX 内容

运行说明

# 单条测试
curl -X POST http://localhost:8070/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "15216 辅运起坡段风速怎么样"}'

# 多轮(带上轮 session_id)
curl -X POST http://localhost:8070/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "那风量呢", "session_id": "上轮返回的session_id"}'