# 自然语言转 CAN 控制指令测试报告 ## 1. 测试结论 | 项目 | 结果 | | --- | ---: | | 测试日期 | 2026-08-25 | | pytest 测试入口 | 2 | | 生成式组合用例 | 1133 | | 定向 CAN0/CAN1 组合用例 | 6 | | 实际执行子用例 | **1139** | | 通过 | **1139** | | 失败 | **0** | | 跳过 | **0** | | 通过率 | **100%** | | 执行耗时 | 35.42 s | **结论:**当前本地规则能够将本次覆盖的自然语言控制指令正确解析为 CAN0/CAN1 语义控制指令;跨通道组合中,副驾座椅指令保持在 CAN0,主驾座椅、空调、灯光、车窗、门锁和遮阳帘等指令保持在 CAN1。白名单外指令未生成 CAN 控制流。 ## 2. 测试方式 - 解析器:本地规则(`provider=local`) - 执行模式:`dry_run` - 硬件执行:关闭 - 真实 CAN 报文下发:未进行 - 测试入口:`tests/integration/test_natural_can_command_combinations.py` - 机器可执行用例:`tests/fixtures/natural_can_command_combination_suite.json` - 完整逐条用例:`docs/testing/自然语言转CAN组合测试用例.csv` 执行命令: ```bash PYTHONPATH=src:domains/seat/src .venv/bin/python -m pytest -q tests/integration/test_natural_can_command_combinations.py ``` 原始结果: ```text 2 passed, 2 warnings, 1139 subtests passed in 35.42s ``` 2 个警告均为 `jsonschema.RefResolver` 弃用提示,不影响本次解析结果。 ## 3. 1133 条生成式用例分布 ### 3.1 按组合类型 | 用例类型 | 数量 | 说明 | | --- | ---: | --- | | atomic | 177 | 单条原子指令 | | pairwise | 300 | 两两组合 | | pairwise_separator_variant | 300 | 两两组合的不同分隔方式 | | three_command | 84 | 三指令组合 | | four_command | 126 | 四指令组合 | | cross_can0_can1 | 120 | CAN0/CAN1 跨通道组合 | | multi_command_scene | 10 | 常用多指令场景 | | safety_rejection | 16 | 白名单外和不安全输入拒绝 | | **合计** | **1133** | | ### 3.2 按 CAN 通道 | 预期通道 | 数量 | 说明 | | --- | ---: | --- | | CAN0 | 13 | 副驾座椅单通道控制 | | CAN1 | 899 | 车身、空调、主驾座椅、灯光等控制 | | CAN0 + CAN1 | 205 | 副驾座椅与车身功能组合控制 | | none | 16 | 安全拒绝,不应生成控制指令 | | **合计** | **1133** | | ## 4. 代表性解析结果 | 自然语言输入 | 通道 | 预期 CAN 语义控制指令/操作 | 结果 | | --- | --- | --- | --- | | 后排车门上锁 | CAN1 | `door rear lock` | 通过 | | 打开左前车窗 | CAN1 | `window front-left open` | 通过 | | 副驾驶座椅加热开到2档 | CAN0 | `seat.set_heating(state=on, level=2)` | 通过 | | 后排车门上锁,打开左前车窗,副驾驶座椅加热开到2档 | CAN0 + CAN1 | CAN1: `door rear lock`; CAN1: `window front-left open`; CAN0: `seat.set_heating(state=on, level=2)` | 通过 | | 开启木马模式并打开氛围灯 | CAN0 + CAN1 | CAN0: `seat.start_dynamic_mode(mode_id=1)`; CAN1: `light ambient on` | 通过 | | 开启动态摇篮模式,空调24度,打开遮阳帘 | CAN0 + CAN1 | CAN0: `seat.start_dynamic_mode(mode_id=2)`; CAN1: `ac temp driver 24`; CAN1: `shade open` | 通过 | | 副驾座椅前后调到20%、坐盆调到30%、靠背调到40%、腿托调到50%,空调风量3档,关闭全部车窗 | CAN0 + CAN1 | CAN0: 四轴绝对位置 20/30/40/50; CAN1: `ac fan 3`; CAN1: `window all close` | 通过 | | 副驾靠背向后移动15%,主驾温度设为25度,遮阳帘打开 | CAN0 + CAN1 | CAN0: 靠背相对后移 15%; CAN1: `ac temp driver 25`; CAN1: `shade open` | 通过 | | 主驾座椅通风4档 | none | 白名单外,不生成 CAN 指令 | 通过 | | 主驾进入零重力模式 | none | 未验证能力,不生成 CAN 指令 | 通过 | ## 5. 6 条新增定向 CAN0/CAN1 用例 | # | 自然语言 | CAN0 结果 | CAN1 结果 | | ---: | --- | --- | --- | | 1 | 把副驾座椅水平位置调到35%,空调温度设置为24度,打开氛围灯 | 水平绝对位置 35% | `ac temp driver 24`; `light ambient on` | | 2 | 副驾坐盆向上调整10%,关闭后排车窗,空调风量2档 | 坐盆相对上调 10% | `window rear close`; `ac fan 2` | | 3 | 开启木马模式并打开氛围灯 | 木马模式 | `light ambient on` | | 4 | 开启动态摇篮模式,空调24度,打开遮阳帘 | 摇篮模式 | `ac temp driver 24`; `shade open` | | 5 | 副驾座椅前后调到20%、坐盆调到30%、靠背调到40%、腿托调到50%,空调风量3档,关闭全部车窗 | 四轴绝对位置 | `ac fan 3`; `window all close` | | 6 | 副驾靠背向后移动15%,主驾温度设为25度,遮阳帘打开 | 靠背相对后移 15% | `ac temp driver 25`; `shade open` | 以上 6 条用例全部通过。 ## 6. 覆盖能力 - CAN0:副驾座椅加热、通风、绝对位置、相对位置、木马模式和摇篮模式。 - CAN1:门锁、车窗、空调、风口、主驾座椅、室内灯、阅读灯、氛围灯和遮阳帘。 - 组合解析:两指令、三指令、四指令、场景化多指令以及 CAN0/CAN1 跨通道组合。 - 位置语义:主驾、副驾、左前、右前、左后、右后、前排、后排。 - 安全约束:越界档位、未验证能力和白名单外目标不生成 CAN 控制流。 ## 7. 范围和限制 1. 本报告验证的是“自然语言 → CAN 语义控制指令/操作”解析层。 2. 本次使用 `dry_run`,未向真实 CAN0/CAN1 总线或 MQTT Broker 下发报文。 3. 通过本报告不等于实车执行器、USB-CAN 适配器、MQTT 转发和 ECU 物理动作已完成端到端验证。 4. 如需验证真实执行,应单独进行有线 CAN 和无线 MQTT 台架测试,并记录原始报文、状态回馈和物理动作。