# /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 内容 | --- ## 运行说明 ```bash # 单条测试 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"}' ```