/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"}'