# 多指令判断

多指令是独立维度，不属于业务标签树。它用于判断一个 query 是否需要拆成多个可独立执行的子任务，以及每个子任务对应的业务标签或 function。

## 输出目标

当前数据开发默认口径下，多指令最终 target 不是一个 JSON group，而是：

1. 先把原 query 拆成多个可独立判断的子句。
2. 每个子句单独判断业务标签和输出形态。
3. 每个子句单独输出一条叶子 target。
4. 如果需要输出 complex，complex 作为独立行放在最前面，不属于任何单个子句。

示例：

```text
complex=true
Agent(query="退出导航",tag="地图导航")
Agent(query="打开后视镜加热",tag="车载控制")
```

其中 `query` 字段保留拆分后的子句文本，`tag` 字段是该子句的业务标签。

注意：

- 多指令只决定“是否拆分、怎么拆分、如何改写子句”。
- 每个子句的 `tag` 或 function 仍要继续走业务标签判断和输出形态判断。
- 多指令不是和 `Agent(...)` / function 并列的最终标签，而是把多个叶子 target 组合起来的结构。
- `condition` 由自动任务维度负责；普通多指令没有 condition。

## 单意图

以下情况通常不要拆分：

- 简单单意图：只有一个核心动作或询问目标。
- 子句存在强执行依赖：拆分会导致参数丢失、顺序错误或重复执行。
- 同品类单操作：同一动作作用于同一功能品类的多个位置或实例。
- 多查询：多个查询类目标可以作为一个查询意图处理。
- 内容播放 + 播放控制：播放具体内容并设置上一首、下一首、循环等，通常视为单个播放意图。
- 顺序执行操作：多个连续步骤共同完成单一任务，例如打开应用、搜索内容、点击结果。
- 改口重复：口误、重复词或重说只保留一次核心意图。
- 相反操作：同一设备或功能连续相反动作，通常视为单意图或口语修正。

## 需要切分

以下情况通常需要拆成多个子任务：

- 并列连词：和、并、然后、再、顺便、同时、并且。
- 明显语义独立的动作或查询目标。
- 同属一个意图类别但语义完整且可独立执行的子句。
- 同一设备或部件存在多个不同方向调整，例如“后视镜往里往前调”。

## 切分原则

- 每个子句必须能独立构成一个完整意图。
- 不可过度细分，导致子句无法理解。
- 拆分后需要继承必要动作、位置或设备信息。

## 改写规则

### 动作继承

“打开空调和电视”应拆成两个子句并分别输出：

```text
Agent(query="打开空调",tag="设备控制")
Agent(query="打开电视",tag="设备控制")
```

### 无 trigger 的位置继承

“打开客厅电视和吸顶灯”应拆成两个子句，并继承必要位置信息：

```text
Agent(query="打开客厅电视",tag="设备控制")
Agent(query="打开客厅吸顶灯",tag="设备控制")
```

### 设备继承

“客厅吸顶灯调到最亮色温调到最大”应拆成两个子句，并继承设备名：

```text
Agent(query="客厅吸顶灯调到最亮",tag="设备控制")
Agent(query="客厅吸顶灯色温调到最大",tag="设备控制")
```

## 典型单意图例子

- 打开空调调到二十六度。
- 扫地机设置为又扫又拖清理一下客厅。
- 打开网易云音乐播放青花瓷。
- 关闭主驾和后排车窗。
- 明天武汉和北京的天气。
- 播放张杰的天下并调成单曲循环模式。

## 典型多指令例子

- 关闭所有的座椅加热然后声音放到十三。
- 将能量回收调到柔和并打开氛围灯。
- 关闭卧室的灯定一个明天下午四点的闹钟。
- 关闭 QQ 音乐打开网易云音乐。
- HUD 角度往左往上偏一点。
