feat(skill): improve multi-turn fast-slow routing
This commit is contained in:
@@ -15,7 +15,7 @@ description: 依据 2026.7 产品标准,对单条或批量 query 进行“快
|
|||||||
|
|
||||||
1. 第一动作读取 [references/index.md](references/index.md),完成垂域召回和结构信号预判;垂域不明显或命中召回边界时,再读取 [references/preclassification.md](references/preclassification.md)。
|
1. 第一动作读取 [references/index.md](references/index.md),完成垂域召回和结构信号预判;垂域不明显或命中召回边界时,再读取 [references/preclassification.md](references/preclassification.md)。
|
||||||
2. 读取一个主垂域卡;只有主垂域确实无法确定时,才读取第二个候选垂域卡。
|
2. 读取一个主垂域卡;只有主垂域确实无法确定时,才读取第二个候选垂域卡。
|
||||||
3. 出现多指令或自动任务信号时,再读取对应结构卡。自动任务还要读取自动化垂域卡。
|
3. 出现多轮依赖、多指令或自动任务信号时,再读取对应结构卡。多轮先重建当前任务,自动任务还要读取自动化垂域卡。
|
||||||
4. 垂域和结构卡都没有明确覆盖时,才读取 [references/core-policy.md](references/core-policy.md)。
|
4. 垂域和结构卡都没有明确覆盖时,才读取 [references/core-policy.md](references/core-policy.md)。
|
||||||
5. 命中标记为冲突的规则,或做规则维护时,再读取 [references/policy-conflicts.md](references/policy-conflicts.md)。
|
5. 命中标记为冲突的规则,或做规则维护时,再读取 [references/policy-conflicts.md](references/policy-conflicts.md)。
|
||||||
6. 处理边界样本或校准时,按需读取 [references/golden-examples.md](references/golden-examples.md)。
|
6. 处理边界样本或校准时,按需读取 [references/golden-examples.md](references/golden-examples.md)。
|
||||||
@@ -38,12 +38,13 @@ description: 依据 2026.7 产品标准,对单条或批量 query 进行“快
|
|||||||
|
|
||||||
1. 提取当前 query、前轮、设备、端侧、时间窗口和已提供的能力清单。
|
1. 提取当前 query、前轮、设备、端侧、时间窗口和已提供的能力清单。
|
||||||
2. 使用索引输出一个主垂域、最多两个候选垂域,以及多指令、自动任务、上下文依赖信号。
|
2. 使用索引输出一个主垂域、最多两个候选垂域,以及多指令、自动任务、上下文依赖信号。
|
||||||
3. 读取主垂域卡并查找明确规则。命中时设置 `decision_level="domain"`。
|
3. 存在上下文依赖时读取 `references/structure-multi-turn.md`,识别上下文关系并重建当前完整任务;不得按上一轮实际路由直接继承标签。
|
||||||
4. 未命中垂域规则时检查结构卡。命中时设置 `decision_level="structure"`。
|
4. 读取主垂域卡并查找明确规则。命中时设置 `decision_level="domain"`。
|
||||||
5. 仍未命中时使用核心原则,设置 `decision_level="core"`。
|
5. 未命中垂域规则时检查结构卡。命中时设置 `decision_level="structure"`。
|
||||||
6. 做反证检查,说明为什么没有选择其他档位。
|
6. 仍未命中时使用核心原则,设置 `decision_level="core"`。
|
||||||
7. 只在有明确能力清单或验证结果时填写 `fast_system_pending`;未检查时填 `null`。
|
7. 做反证检查,说明为什么没有选择其他档位。
|
||||||
8. 需要完整落盘时,按 schema 输出并运行校验脚本。
|
8. 只在有明确能力清单或验证结果时填写 `fast_system_pending`;未检查时填 `null`。
|
||||||
|
9. 需要完整落盘时,按 schema 输出并运行校验脚本。
|
||||||
|
|
||||||
## 输出
|
## 输出
|
||||||
|
|
||||||
@@ -89,6 +90,7 @@ description: 依据 2026.7 产品标准,对单条或批量 query 进行“快
|
|||||||
"context_dependent": false
|
"context_dependent": false
|
||||||
},
|
},
|
||||||
"context_used": false,
|
"context_used": false,
|
||||||
|
"context_relation": "independent",
|
||||||
"fast_system_pending": null,
|
"fast_system_pending": null,
|
||||||
"route_override": null,
|
"route_override": null,
|
||||||
"policy_conflict": true,
|
"policy_conflict": true,
|
||||||
@@ -100,6 +102,12 @@ description: 依据 2026.7 产品标准,对单条或批量 query 进行“快
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
新生成的多轮记录应填写 `context_relation`,取值和判断方法见
|
||||||
|
`references/structure-multi-turn.md`。单轮或与历史无关时填写
|
||||||
|
`"independent"`;为兼容旧产物,该字段在 schema 中保持可选。只有实际使用了
|
||||||
|
历史内容时,`context_used` 和 `structural_signals.context_dependent` 才能为
|
||||||
|
`true`。
|
||||||
|
|
||||||
使用 `null` 表示未评估,不要猜测端侧、上下文、能力状态或复杂度。
|
使用 `null` 表示未评估,不要猜测端侧、上下文、能力状态或复杂度。
|
||||||
|
|
||||||
## 校验
|
## 校验
|
||||||
@@ -123,6 +131,7 @@ python scripts/validate_label.py --file output/fast_slow_labels.jsonl
|
|||||||
满足任一情况时设置 `review_required=true`:
|
满足任一情况时设置 `review_required=true`:
|
||||||
|
|
||||||
- 缺少会改变垂域或标签的前轮、端侧或设备信息。
|
- 缺少会改变垂域或标签的前轮、端侧或设备信息。
|
||||||
|
- 当前轮明显依赖前文,但无法唯一重建原任务。
|
||||||
- 两个同优先级规则给出不同结论。
|
- 两个同优先级规则给出不同结论。
|
||||||
- 自动任务端侧未知,且不同端侧策略不同。
|
- 自动任务端侧未知,且不同端侧策略不同。
|
||||||
- 只能依赖未确认的能力清单。
|
- 只能依赖未确认的能力清单。
|
||||||
@@ -136,5 +145,6 @@ python scripts/validate_label.py --file output/fast_slow_labels.jsonl
|
|||||||
- 不因快系统当前不支持而把 `快`改成`慢`。
|
- 不因快系统当前不支持而把 `快`改成`慢`。
|
||||||
- 不把 `complex=true` 直接等同于`慢`。
|
- 不把 `complex=true` 直接等同于`慢`。
|
||||||
- 不把所有多指令或自动任务无条件判慢,必须检查专项例外。
|
- 不把所有多指令或自动任务无条件判慢,必须检查专项例外。
|
||||||
|
- 不把多轮、指代、确认、取消或上一轮实际路由直接等同于快慢标签。
|
||||||
- 不使用 2026.6、`FAST_DIRECT` 或 `SLOW_*` 旧策略。
|
- 不使用 2026.6、`FAST_DIRECT` 或 `SLOW_*` 旧策略。
|
||||||
- 不输出没有规则 ID、证据和判断层级的裸标签。
|
- 不输出没有规则 ID、证据和判断层级的裸标签。
|
||||||
|
|||||||
@@ -20,6 +20,8 @@
|
|||||||
|
|
||||||
条件修饰、感受描述和非标准叫法不会自动变慢。只要动作与目标仍然明确,保持快。
|
条件修饰、感受描述和非标准叫法不会自动变慢。只要动作与目标仍然明确,保持快。
|
||||||
|
|
||||||
|
多轮不会自动变慢。前文只补全唯一对象或简单槽位,当前轮仍是直接动作、明确操作流或确定性查询时,保持快。
|
||||||
|
|
||||||
## 慢
|
## 慢
|
||||||
|
|
||||||
- `CORE_SLOW_INTENT_INFERENCE`:只表达感受、状态或不满,没有明确动作和功能,需要反推动作。
|
- `CORE_SLOW_INTENT_INFERENCE`:只表达感受、状态或不满,没有明确动作和功能,需要反推动作。
|
||||||
@@ -27,6 +29,8 @@
|
|||||||
- `CORE_SLOW_MULTI_STEP_PLANNING`:需要多步计算、换算、跨源聚合、上下文推理或先规划再执行。
|
- `CORE_SLOW_MULTI_STEP_PLANNING`:需要多步计算、换算、跨源聚合、上下文推理或先规划再执行。
|
||||||
- `CORE_SLOW_TRUE_DISAMBIGUATION`:存在真实多候选或必需槽位缺失,需要澄清或推断。
|
- `CORE_SLOW_TRUE_DISAMBIGUATION`:存在真实多候选或必需槽位缺失,需要澄清或推断。
|
||||||
|
|
||||||
|
当前轮继续上一轮的推荐、分析、故障排查或规划,或者新增约束导致需要重新检索和规划时,按慢处理。详细关系先读取 `structure-multi-turn.md`。
|
||||||
|
|
||||||
## 模糊
|
## 模糊
|
||||||
|
|
||||||
- `CORE_AMBIGUOUS_OPEN_QA`:闲聊或不属于明确垂域的开放问答。
|
- `CORE_AMBIGUOUS_OPEN_QA`:闲聊或不属于明确垂域的开放问答。
|
||||||
|
|||||||
@@ -16,3 +16,12 @@
|
|||||||
- `AUTO_AMBIGUOUS_ENDPOINT_UNKNOWN`:端侧未知且音箱、车载策略会产生不同结论时,给模糊并设置 `review_required=true`。
|
- `AUTO_AMBIGUOUS_ENDPOINT_UNKNOWN`:端侧未知且音箱、车载策略会产生不同结论时,给模糊并设置 `review_required=true`。
|
||||||
|
|
||||||
无条件创建普通闹钟、提醒或日程不属于自动任务,回到通用工具垂域。
|
无条件创建普通闹钟、提醒或日程不属于自动任务,回到通用工具垂域。
|
||||||
|
|
||||||
|
## 多轮
|
||||||
|
|
||||||
|
先按 `structure-multi-turn.md` 合并当前轮补充的触发条件、动作和端侧,再应用本卡规则:
|
||||||
|
|
||||||
|
- `AUTO_CONTEXT_RECONSTRUCTED`:多轮只负责重建完整自动任务,不因轮次直接改变标签。
|
||||||
|
- 当前轮补全后可确定是车载提醒、车载常规任务或家庭自动化时,分别使用对应规则。
|
||||||
|
- 历史和当前轮合并后端侧仍未知,且不同端侧结论不同,命中 `AUTO_AMBIGUOUS_ENDPOINT_UNKNOWN`。
|
||||||
|
- 缺少会改变自动任务类型或端侧判断的历史时,设置 `review_required=true`。
|
||||||
|
|||||||
@@ -8,12 +8,15 @@
|
|||||||
- `CAR_SLOW_SCENE_EXPRESSION`:只描述会议、睡眠、节日氛围等场景目标,需要组合车辆功能。
|
- `CAR_SLOW_SCENE_EXPRESSION`:只描述会议、睡眠、节日氛围等场景目标,需要组合车辆功能。
|
||||||
- `CAR_SLOW_FUZZY_FUNCTION`:不知道功能名称,以模糊描述指代车辆功能。
|
- `CAR_SLOW_FUZZY_FUNCTION`:不知道功能名称,以模糊描述指代车辆功能。
|
||||||
- `CAR_SLOW_MULTI_POSITION_REASONING`:包含位置选择、排除或复杂设备逻辑。
|
- `CAR_SLOW_MULTI_POSITION_REASONING`:包含位置选择、排除或复杂设备逻辑。
|
||||||
- `CAR_SLOW_CONFIRMATION_CHAIN`:前轮慢系统主动询问,当前轮只表达确认、取消或简短执行。
|
- `CAR_SLOW_CONFIRMATION_CHAIN`:当前轮回答的是场景映射、模糊功能识别或复杂位置选择等慢车控任务的澄清,重建后原任务仍命中车控慢规则。
|
||||||
|
|
||||||
## 快
|
## 快
|
||||||
|
|
||||||
- `CAR_FAST_EXPLICIT_CONTROL`:除上述慢场景外,动作、车辆设备或功能可直接识别。
|
- `CAR_FAST_EXPLICIT_CONTROL`:除上述慢场景外,动作、车辆设备或功能可直接识别。
|
||||||
- `CAR_FAST_EXPLICIT_MULTI_CONTROL`:多个动作全部是明确车辆设备控制,且不需要规划依赖。
|
- `CAR_FAST_EXPLICIT_MULTI_CONTROL`:多个动作全部是明确车辆设备控制,且不需要规划依赖。
|
||||||
|
- `CAR_FAST_CONTEXT_DIRECT`:前文只补全唯一车辆设备、位置或属性,当前轮合并后是明确直接控制。
|
||||||
|
|
||||||
|
确认、取消或简短补槽不直接继承上一轮系统路由。先按 `structure-multi-turn.md` 重建完整车控任务。
|
||||||
|
|
||||||
## 冲突标记
|
## 冲突标记
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,9 @@
|
|||||||
|
|
||||||
## 多轮
|
## 多轮
|
||||||
|
|
||||||
- `CONTENT_SLOW_CONTEXT_INHERIT`:前轮为慢路径,90 秒内当前轮补充、修正或反馈,且与上轮请求存在明确重叠。
|
- `CONTENT_SLOW_CONTEXT_PLANNING`:当前轮继续上一轮的内容推荐、知识问答、描述搜索、歌单编排或复杂个人资源检索。
|
||||||
|
- `CONTENT_SLOW_CONTEXT_CONSTRAINT`:当前轮为既有内容请求新增时效、排行、场景、风格或其他需要重新检索的约束。
|
||||||
- `CONTENT_FAST_CONTEXT_CONTROL`:前轮建立明确资源上下文后,当前轮执行直接播控。
|
- `CONTENT_FAST_CONTEXT_CONTROL`:前轮建立明确资源上下文后,当前轮执行直接播控。
|
||||||
|
- `CONTENT_FAST_CONTEXT_SWITCH`:前轮已经唯一确定资源集合,当前轮直接选择、切换或播放其中明确的一项。
|
||||||
|
|
||||||
仅因当前快系统没有资源或能力失败,不修改语义标签;失败后的实际升级属于执行策略。
|
90 秒时间窗口和前后轮关键词重叠只用于判断是否延续同一任务,不直接决定快慢。仅因当前快系统没有资源或能力失败,也不修改语义标签;失败后的实际升级属于执行策略。
|
||||||
|
|||||||
@@ -13,5 +13,8 @@
|
|||||||
|
|
||||||
- `TOOLS_FAST_DETERMINISTIC_QUERY`:当前时间、简单天气、确定性换算等可直接查询或计算。
|
- `TOOLS_FAST_DETERMINISTIC_QUERY`:当前时间、简单天气、确定性换算等可直接查询或计算。
|
||||||
- `TOOLS_FAST_EXPLICIT_ACTION`:时间、对象和动作明确的闹钟、提醒、电话等操作。
|
- `TOOLS_FAST_EXPLICIT_ACTION`:时间、对象和动作明确的闹钟、提醒、电话等操作。
|
||||||
|
- `TOOLS_FAST_CONTEXT_COMPLETED_ACTION`:前文补全唯一时间、联系人、地点或对象后,重建任务可直接结构化为一次工具调用。
|
||||||
|
|
||||||
普通“明天提醒我开会”属于工具操作;带事件触发条件的提醒继续读取自动化规则。
|
普通“明天提醒我开会”属于工具操作;带事件触发条件的提醒继续读取自动化规则。
|
||||||
|
|
||||||
|
只有结合前文后关键槽位仍缺失,才命中 `TOOLS_SLOW_MISSING_SLOT`;不能因为当前轮单独看不完整就直接判慢。
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
- `IOT_SLOW_INTENT_CONTROL`:只给舒适、温馨等目标状态,需要反推设备组合。
|
- `IOT_SLOW_INTENT_CONTROL`:只给舒适、温馨等目标状态,需要反推设备组合。
|
||||||
- `IOT_SLOW_ENV_QUERY`:环境查询未明确指定房间或需要比较、聚合。
|
- `IOT_SLOW_ENV_QUERY`:环境查询未明确指定房间或需要比较、聚合。
|
||||||
- `IOT_SLOW_OTHER_QUERY`:其他 IoT 查询没有明确设备与属性。
|
- `IOT_SLOW_OTHER_QUERY`:其他 IoT 查询没有明确设备与属性。
|
||||||
|
- `IOT_SLOW_CONTEXT_REASONING`:当前轮依赖前文继续场景设计、环境比较、设备选择或聚合判断。
|
||||||
|
- `IOT_SLOW_CONTEXT_UNRESOLVED`:结合历史后设备、房间或属性仍不唯一。
|
||||||
|
|
||||||
## 快
|
## 快
|
||||||
|
|
||||||
@@ -14,6 +16,7 @@
|
|||||||
- `IOT_FAST_ROOM_ENV_QUERY`:环境查询明确指定房间。
|
- `IOT_FAST_ROOM_ENV_QUERY`:环境查询明确指定房间。
|
||||||
- `IOT_FAST_DEVICE_PROPERTY_QUERY`:明确指定设备和属性。
|
- `IOT_FAST_DEVICE_PROPERTY_QUERY`:明确指定设备和属性。
|
||||||
- `IOT_FAST_EXPLICIT_MULTI_CONTROL`:多个动作全部是明确 IoT 设备控制。
|
- `IOT_FAST_EXPLICIT_MULTI_CONTROL`:多个动作全部是明确 IoT 设备控制。
|
||||||
|
- `IOT_FAST_CONTEXT_DIRECT`:前文已经唯一确定设备、房间或属性,当前轮是直接控制或单属性查询。
|
||||||
|
|
||||||
## 冲突标记
|
## 冲突标记
|
||||||
|
|
||||||
|
|||||||
@@ -10,14 +10,15 @@
|
|||||||
- `NAV_SLOW_MULTI_ACTION`:导航请求同时要求路线选择、沿途搜索、终点搜索等多个动作。
|
- `NAV_SLOW_MULTI_ACTION`:导航请求同时要求路线选择、沿途搜索、终点搜索等多个动作。
|
||||||
- `NAV_SLOW_LOW_FREQUENCY_QA`:沿途城市、红绿灯数量等非高频复杂问答。
|
- `NAV_SLOW_LOW_FREQUENCY_QA`:沿途城市、红绿灯数量等非高频复杂问答。
|
||||||
- `NAV_SLOW_COMPLEX_EXPRESSION`:自纠正、非人机话语或描述性表达使目标需要额外推理。
|
- `NAV_SLOW_COMPLEX_EXPRESSION`:自纠正、非人机话语或描述性表达使目标需要额外推理。
|
||||||
- `NAV_SLOW_CONTEXT_INHERIT`:前轮进入慢系统,当前轮延续同一规划或补充约束。
|
- `NAV_SLOW_CONTEXT_PLANNING`:当前轮继续上一轮的路线规划、沿途搜索或多地点任务。
|
||||||
|
- `NAV_SLOW_CONTEXT_CONSTRAINT`:当前轮为既有目的地新增评分、品类属性、排除条件或多个约束,需要重新检索或规划。
|
||||||
|
|
||||||
## 快
|
## 快
|
||||||
|
|
||||||
- `NAV_FAST_SIMPLE_SINGLE_POI`:不带筛选条件的单地点规划,包括 A、A 的 B、A 附近的 B、顺路的 A、A 最近的 B。
|
- `NAV_FAST_SIMPLE_SINGLE_POI`:不带筛选条件的单地点规划,包括 A、A 的 B、A 附近的 B、顺路的 A、A 最近的 B。
|
||||||
- `NAV_FAST_MAP_OPERATION`:删除途经点、地址设置、导航播报、路线切换等地图操作。
|
- `NAV_FAST_MAP_OPERATION`:删除途经点、地址设置、导航播报、路线切换等地图操作。
|
||||||
- `NAV_FAST_HIGH_FREQUENCY_QA`:到目的地或途经点的时间、距离、位置,当前位置、路名和路况查询。
|
- `NAV_FAST_HIGH_FREQUENCY_QA`:到目的地或途经点的时间、距离、位置,当前位置、路名和路况查询。
|
||||||
- `NAV_FAST_CONTEXT_SIMPLE`:前轮为快路径,当前轮是同一操作流中的简单续接。
|
- `NAV_FAST_CONTEXT_SIMPLE`:前文已经唯一确定目的地、途经点或路线,当前轮只是开始导航、查询时间距离、切换路线或其他简单续接。
|
||||||
|
|
||||||
## 冲突标记
|
## 冲突标记
|
||||||
|
|
||||||
@@ -29,3 +30,5 @@ conflict_refs=["CONFLICT_NAV_CONDITIONED_POI"]
|
|||||||
```
|
```
|
||||||
|
|
||||||
“最近、附近、顺路”在本垂域被明确列为无筛选条件的快路径,不按普通筛选条件处理。
|
“最近、附近、顺路”在本垂域被明确列为无筛选条件的快路径,不按普通筛选条件处理。
|
||||||
|
|
||||||
|
上一轮实际走快系统还是慢系统不直接决定当前标签。先按 `structure-multi-turn.md` 重建任务,再判断当前续接是否需要重新规划。
|
||||||
|
|||||||
@@ -7,12 +7,16 @@
|
|||||||
- `PRODUCT_SLOW_FAULT_DIAGNOSIS`:报告异常、询问原因、要求排查或处理建议。
|
- `PRODUCT_SLOW_FAULT_DIAGNOSIS`:报告异常、询问原因、要求排查或处理建议。
|
||||||
- `PRODUCT_SLOW_STATIC_KNOWLEDGE`:询问功能说明、概念、规则、规格、使用方法或知识库内容。
|
- `PRODUCT_SLOW_STATIC_KNOWLEDGE`:询问功能说明、概念、规则、规格、使用方法或知识库内容。
|
||||||
- `PRODUCT_SLOW_COMPLEX_DYNAMIC_QUERY`:读取本车信号、档案或统计值,并进行条件判断、聚合、比较、换算或够否判断。
|
- `PRODUCT_SLOW_COMPLEX_DYNAMIC_QUERY`:读取本车信号、档案或统计值,并进行条件判断、聚合、比较、换算或够否判断。
|
||||||
- `PRODUCT_SLOW_CONTEXT_REQUIRED`:当前 query 省略对象或属性,必须依赖上一轮才能判断。
|
- `PRODUCT_SLOW_CONTEXT_REASONING`:当前轮依赖前文继续知识问答、故障诊断、条件判断、比较、聚合或够否判断。
|
||||||
|
- `PRODUCT_SLOW_CONTEXT_UNRESOLVED`:结合已有历史后对象或属性仍不唯一,需要追问或推断。
|
||||||
|
|
||||||
## 快
|
## 快
|
||||||
|
|
||||||
- `PRODUCT_FAST_SETTINGS_ENTRY`:定位设置项入口、询问在哪里设置或直接跳转设置页。
|
- `PRODUCT_FAST_SETTINGS_ENTRY`:定位设置项入口、询问在哪里设置或直接跳转设置页。
|
||||||
- `PRODUCT_FAST_SIMPLE_DYNAMIC_QUERY`:直接读取一个当前值、档案值或统计值。
|
- `PRODUCT_FAST_SIMPLE_DYNAMIC_QUERY`:直接读取一个当前值、档案值或统计值。
|
||||||
|
- `PRODUCT_FAST_CONTEXT_SIMPLE_QUERY`:前文已经唯一确定对象或属性,当前轮只读取一个当前值、档案值或统计值。
|
||||||
|
|
||||||
|
“依赖上一轮”本身不是慢规则。历史只完成唯一指代消解时,应按重建后的完整问题判断。
|
||||||
|
|
||||||
## 冲突标记
|
## 冲突标记
|
||||||
|
|
||||||
|
|||||||
@@ -14,5 +14,8 @@
|
|||||||
- `SYSTEM_FAST_EXPLICIT_CONTROL`:系统功能、应用、页面或屏幕元素可直接识别,动作明确。
|
- `SYSTEM_FAST_EXPLICIT_CONTROL`:系统功能、应用、页面或屏幕元素可直接识别,动作明确。
|
||||||
- `SYSTEM_FAST_OPERATION_FLOW`:当前操作流中的返回、确认、取消、点击、切换等直接动作。
|
- `SYSTEM_FAST_OPERATION_FLOW`:当前操作流中的返回、确认、取消、点击、切换等直接动作。
|
||||||
- `SYSTEM_FAST_EXPLICIT_MULTI_CONTROL`:多个动作全部是明确系统或设备控制,且没有规划依赖。
|
- `SYSTEM_FAST_EXPLICIT_MULTI_CONTROL`:多个动作全部是明确系统或设备控制,且没有规划依赖。
|
||||||
|
- `SYSTEM_FAST_CONTEXT_DIRECT`:前文已经唯一确定应用、页面、功能或屏幕元素,当前轮执行直接操作。
|
||||||
|
|
||||||
应用内搜索、内容消费或外部服务如果已有更具体垂域卡,优先进入对应垂域。
|
应用内搜索、内容消费或外部服务如果已有更具体垂域卡,优先进入对应垂域。
|
||||||
|
|
||||||
|
当前轮虽然含“这个、那里、确认”等词,但历史能唯一解析且动作直接时给快;历史仍有多个候选时命中 `SYSTEM_SLOW_DISAMBIGUATION`。
|
||||||
|
|||||||
@@ -29,6 +29,19 @@
|
|||||||
| 车载端:每次上车就导航去公司 | 慢 | 自动化 | `AUTO_SLOW_CAR_REGULAR_TASK` |
|
| 车载端:每次上车就导航去公司 | 慢 | 自动化 | `AUTO_SLOW_CAR_REGULAR_TASK` |
|
||||||
| 自动帮我设置一下,端侧未知 | 模糊 | 自动化 | `AUTO_AMBIGUOUS_ENDPOINT_UNKNOWN` |
|
| 自动帮我设置一下,端侧未知 | 模糊 | 自动化 | `AUTO_AMBIGUOUS_ENDPOINT_UNKNOWN` |
|
||||||
| 无聊了,陪我聊聊天 | 模糊 | 核心 | `CORE_AMBIGUOUS_OPEN_QA` |
|
| 无聊了,陪我聊聊天 | 模糊 | 核心 | `CORE_AMBIGUOUS_OPEN_QA` |
|
||||||
|
| 上轮:导航去公司;当前:换一条路线 | 快 | 导航/生服 | `NAV_FAST_CONTEXT_SIMPLE` |
|
||||||
|
| 上轮:导航去附近餐厅;当前:要评分 4.5 以上并且方便停车 | 慢 | 导航/生服 | `NAV_SLOW_CONTEXT_CONSTRAINT` |
|
||||||
|
| 上轮:公司和家选一个;当前:去公司 | 快 | 导航/生服 | `NAV_FAST_CONTEXT_SIMPLE` |
|
||||||
|
| 上轮:播放周杰伦的歌;当前:下一首 | 快 | 内容 | `CONTENT_FAST_CONTEXT_CONTROL` |
|
||||||
|
| 上轮:推荐通勤音乐;当前:安静一点但不能太困 | 慢 | 内容 | `CONTENT_SLOW_CONTEXT_CONSTRAINT` |
|
||||||
|
| 上轮:要打开哪个车窗;当前:副驾 | 快 | 车控 | `CAR_FAST_CONTEXT_DIRECT` |
|
||||||
|
| 上轮:帮我把车里布置得浪漫一点;系统询问是否继续;当前:确认 | 慢 | 车控 | `CAR_SLOW_CONFIRMATION_CHAIN` |
|
||||||
|
| 上轮:现在胎压是多少;当前:后轮呢 | 快 | 产品问答 | `PRODUCT_FAST_CONTEXT_SIMPLE_QUERY` |
|
||||||
|
| 上轮:为什么车机没声音;当前:刚升级系统以后开始的 | 慢 | 产品问答 | `PRODUCT_SLOW_CONTEXT_REASONING` |
|
||||||
|
| 上轮:打开微信设置;当前:点通知 | 快 | 系统/App控制 | `SYSTEM_FAST_CONTEXT_DIRECT` |
|
||||||
|
| 上轮:明天上午开会;当前:十点提醒我 | 快 | 通用工具 | `TOOLS_FAST_CONTEXT_COMPLETED_ACTION` |
|
||||||
|
| 上轮:客厅和卧室都有空调;当前:打开那个 | 慢 | IoT | `IOT_SLOW_CONTEXT_UNRESOLVED` |
|
||||||
|
| 当前:就按刚才那个办,但未提供任何历史(需复核) | 模糊 | 多轮结构 | `CONTEXT_REVIEW_HISTORY_MISSING` |
|
||||||
|
|
||||||
重点检查以下紧邻对:
|
重点检查以下紧邻对:
|
||||||
|
|
||||||
@@ -44,4 +57,9 @@
|
|||||||
|
|
||||||
多个明确设备控制 -> 快
|
多个明确设备控制 -> 快
|
||||||
查询结果决定后续控制 -> 慢
|
查询结果决定后续控制 -> 慢
|
||||||
|
|
||||||
|
前文只补全唯一对象 -> 按完整任务判断,直接动作通常快
|
||||||
|
当前轮增加检索或规划约束 -> 慢
|
||||||
|
确认或取消 -> 重建原任务,不按表面词定标
|
||||||
|
缺少会改变结论的历史 -> 不猜测,进入复核
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
| --- | --- |
|
| --- | --- |
|
||||||
| 多个独立动作、跨对象/跨垂域、并列连接、多方向调整 | `references/structure-multi-instruction.md` |
|
| 多个独立动作、跨对象/跨垂域、并列连接、多方向调整 | `references/structure-multi-instruction.md` |
|
||||||
| 条件触发 + 动作、自动化、智能习惯、超级任务 | `references/structure-automation.md`,并读取 `references/domain-automation.md` |
|
| 条件触发 + 动作、自动化、智能习惯、超级任务 | `references/structure-automation.md`,并读取 `references/domain-automation.md` |
|
||||||
| 当前轮含省略、指代、确认/取消,且结论依赖前轮 | 读取主垂域卡中的多轮规则 |
|
| 当前轮含省略、指代、确认/取消、修正或补充,且结论可能依赖前轮 | 先读取 `references/structure-multi-turn.md` 重建任务,再读取主垂域卡 |
|
||||||
|
|
||||||
## 停止条件
|
## 停止条件
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# 多轮上下文结构
|
||||||
|
|
||||||
|
本文件统一判断当前轮如何依赖前文。多轮本身不是快慢依据;先重建用户当前真正要完成的任务,再由主垂域裁决。
|
||||||
|
|
||||||
|
## 第一步:判断是否真的依赖前文
|
||||||
|
|
||||||
|
移除对话历史后,当前 query 的对象、动作、约束和满足方式仍然明确,则:
|
||||||
|
|
||||||
|
- `CONTEXT_INDEPENDENT`:前文与当前结论无关,按当前 query 的普通垂域规则判断。
|
||||||
|
- `context_dependent=false`
|
||||||
|
- `context_used=false`
|
||||||
|
- `context_relation="independent"`
|
||||||
|
|
||||||
|
只有省略、指代、确认、修正或补充会改变当前任务解释时,才设置 `context_dependent=true` 和 `context_used=true`。
|
||||||
|
|
||||||
|
时间相邻、同一 session、相同关键词或上一轮走过某个系统,只能作为同一任务的辅助证据,不能单独证明上下文依赖。
|
||||||
|
|
||||||
|
## 第二步:重建当前任务
|
||||||
|
|
||||||
|
只继承完成当前判断所需的最少信息:
|
||||||
|
|
||||||
|
1. 找到仍在延续的最近一个有效用户任务。
|
||||||
|
2. 解析当前轮是在直接执行、补槽、改约束、继续规划,还是回答澄清。
|
||||||
|
3. 合并成语义完整的当前任务,但不得继承已经被用户取消、否定或改写的条件。
|
||||||
|
4. 前文存在多个可继承候选时,不猜测用户指向。
|
||||||
|
|
||||||
|
## 继承边界
|
||||||
|
|
||||||
|
- 当前轮明确说出新对象、新任务或“不是 A,是 B”时,以当前轮为准;被替换的旧信息不得继续保留。
|
||||||
|
- 当前轮已经能独立构成完整任务时,不因词面相似强行继承前文。
|
||||||
|
- 助手上一轮的追问可以帮助理解用户简短回答,但助手自行猜测、推荐或生成的内容不能当作用户已确认事实。
|
||||||
|
- 工具失败、能力不足、拒绝或上一轮实际路由不改变任务的语义快慢;只在能力承接字段中记录。
|
||||||
|
- 多段历史都可能被指代且无法唯一选择时,按未消歧处理。
|
||||||
|
|
||||||
|
## 上下文关系
|
||||||
|
|
||||||
|
### 可快的关系
|
||||||
|
|
||||||
|
- `CONTEXT_FAST_RESOLVED_DIRECT`:前文只提供唯一对象、位置、资源或简单槽位,当前轮是直接控制、确定性查询或明确资源切换。设置 `context_relation="resolved_direct"`。
|
||||||
|
- `CONTEXT_FAST_OPERATION_CONTINUATION`:用户处于已经明确的操作流中,当前轮执行返回、确认、取消、暂停、继续、切换等直接动作。设置 `context_relation="operation_continuation"`。
|
||||||
|
|
||||||
|
这两类只是“具备判快条件”。若重建后的完整任务命中垂域慢规则,仍按垂域规则给慢。
|
||||||
|
|
||||||
|
### 应慢的关系
|
||||||
|
|
||||||
|
- `CONTEXT_SLOW_CONSTRAINT_EXTENSION`:当前轮新增或修改筛选、排序、比较、排除、路线、场景等约束,需要重新检索或规划。设置 `context_relation="constraint_extension"`。
|
||||||
|
- `CONTEXT_SLOW_PLANNING_CONTINUATION`:当前轮继续上一轮的分析、推荐、生成、故障排查或多步规划。设置 `context_relation="planning_continuation"`。
|
||||||
|
- `CONTEXT_SLOW_TRUE_DISAMBIGUATION`:结合现有历史后仍有多个真实候选,或关键槽位仍缺失,需要追问或推断。设置 `context_relation="unresolved_reference"`。
|
||||||
|
|
||||||
|
### 回答澄清
|
||||||
|
|
||||||
|
- `CONTEXT_CLARIFICATION_COMPLETION`:当前轮只回答系统上一轮的澄清、确认或补槽问题。设置 `context_relation="clarification_completion"`。
|
||||||
|
|
||||||
|
这类不按“是、不是、确认、取消”等表面词直接定标,而是重建完整任务:
|
||||||
|
|
||||||
|
- 澄清完成后是明确直接操作或确定性查询,按对应快规则判断。
|
||||||
|
- 澄清完成后仍是推荐、规划、故障分析或场景映射,按对应慢规则判断。
|
||||||
|
- 无法确认系统究竟在澄清哪个任务时,进入复核。
|
||||||
|
|
||||||
|
## 历史缺失与复核
|
||||||
|
|
||||||
|
- `CONTEXT_REVIEW_HISTORY_MISSING`:当前轮明显依赖前文,但输入没有提供足够历史,且不同解释会改变垂域或标签。
|
||||||
|
|
||||||
|
此时不得凭空补全:
|
||||||
|
|
||||||
|
```text
|
||||||
|
context_relation="unresolved_reference"
|
||||||
|
confidence="low"
|
||||||
|
review_required=true
|
||||||
|
```
|
||||||
|
|
||||||
|
## 裁决顺序
|
||||||
|
|
||||||
|
1. 使用本文件识别 `context_relation` 并重建当前任务。
|
||||||
|
2. 使用重建后的任务读取主垂域卡。
|
||||||
|
3. 主垂域有明确多轮或业务规则时,以垂域规则为最终结论。
|
||||||
|
4. 主垂域没有覆盖时,才使用本文件中的 `CONTEXT_FAST_*` 或 `CONTEXT_SLOW_*` 作为结构层结论。
|
||||||
|
|
||||||
|
禁止根据上一轮实际走快系统还是慢系统直接继承标签。
|
||||||
@@ -135,6 +135,18 @@
|
|||||||
"context_used": {
|
"context_used": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
|
"context_relation": {
|
||||||
|
"enum": [
|
||||||
|
"independent",
|
||||||
|
"resolved_direct",
|
||||||
|
"operation_continuation",
|
||||||
|
"constraint_extension",
|
||||||
|
"planning_continuation",
|
||||||
|
"clarification_completion",
|
||||||
|
"unresolved_reference",
|
||||||
|
null
|
||||||
|
]
|
||||||
|
},
|
||||||
"fast_system_pending": {
|
"fast_system_pending": {
|
||||||
"type": ["boolean", "null"]
|
"type": ["boolean", "null"]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -61,6 +61,16 @@ REQUIRED_FIELDS = {
|
|||||||
OPTIONAL_FIELDS = {
|
OPTIONAL_FIELDS = {
|
||||||
"id",
|
"id",
|
||||||
"counterevidence",
|
"counterevidence",
|
||||||
|
"context_relation",
|
||||||
|
}
|
||||||
|
CONTEXT_RELATION_VALUES = {
|
||||||
|
"independent",
|
||||||
|
"resolved_direct",
|
||||||
|
"operation_continuation",
|
||||||
|
"constraint_extension",
|
||||||
|
"planning_continuation",
|
||||||
|
"clarification_completion",
|
||||||
|
"unresolved_reference",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -285,6 +295,24 @@ def validate_record(record: Any, index: int) -> dict[str, Any]:
|
|||||||
|
|
||||||
if not isinstance(record.get("context_used"), bool):
|
if not isinstance(record.get("context_used"), bool):
|
||||||
errors.append("context_used 必须是布尔值")
|
errors.append("context_used 必须是布尔值")
|
||||||
|
context_relation = record.get("context_relation")
|
||||||
|
if context_relation is not None and (
|
||||||
|
not isinstance(context_relation, str)
|
||||||
|
or context_relation not in CONTEXT_RELATION_VALUES
|
||||||
|
):
|
||||||
|
errors.append("context_relation 不是受支持的上下文关系")
|
||||||
|
if context_relation == "independent" and record.get("context_used") is True:
|
||||||
|
errors.append("context_relation=independent 时 context_used 必须为 false")
|
||||||
|
if context_relation not in {None, "independent"}:
|
||||||
|
if record.get("context_used") is not True:
|
||||||
|
errors.append("依赖上下文的 context_relation 要求 context_used=true")
|
||||||
|
if isinstance(structural_signals, dict) and (
|
||||||
|
structural_signals.get("context_dependent") is not True
|
||||||
|
):
|
||||||
|
errors.append(
|
||||||
|
"依赖上下文的 context_relation 要求 "
|
||||||
|
"structural_signals.context_dependent=true"
|
||||||
|
)
|
||||||
|
|
||||||
fast_system_pending = record.get("fast_system_pending")
|
fast_system_pending = record.get("fast_system_pending")
|
||||||
if fast_system_pending is not None and not isinstance(fast_system_pending, bool):
|
if fast_system_pending is not None and not isinstance(fast_system_pending, bool):
|
||||||
|
|||||||
Reference in New Issue
Block a user