From e2bf012f60847d4f77cc3988fbf73e4f40920c37 Mon Sep 17 00:00:00 2001 From: wuyang6 Date: Fri, 24 Jul 2026 17:12:25 +0800 Subject: [PATCH] feat(skill): improve multi-turn fast-slow routing --- skills/label-fast-slow-routing/SKILL.md | 24 ++++-- .../references/core-policy.md | 4 + .../references/domain-automation.md | 9 +++ .../references/domain-car-control.md | 5 +- .../references/domain-content.md | 6 +- .../references/domain-general-tools.md | 3 + .../references/domain-iot.md | 3 + .../references/domain-navigation-life.md | 7 +- .../references/domain-product-qa.md | 6 +- .../references/domain-system-app.md | 3 + .../references/golden-examples.md | 18 +++++ .../references/index.md | 2 +- .../references/structure-multi-turn.md | 79 +++++++++++++++++++ .../schemas/label-record.schema.json | 12 +++ .../scripts/validate_label.py | 28 +++++++ 15 files changed, 195 insertions(+), 14 deletions(-) create mode 100644 skills/label-fast-slow-routing/references/structure-multi-turn.md diff --git a/skills/label-fast-slow-routing/SKILL.md b/skills/label-fast-slow-routing/SKILL.md index e962908..9fae9c9 100644 --- a/skills/label-fast-slow-routing/SKILL.md +++ b/skills/label-fast-slow-routing/SKILL.md @@ -15,7 +15,7 @@ description: 依据 2026.7 产品标准,对单条或批量 query 进行“快 1. 第一动作读取 [references/index.md](references/index.md),完成垂域召回和结构信号预判;垂域不明显或命中召回边界时,再读取 [references/preclassification.md](references/preclassification.md)。 2. 读取一个主垂域卡;只有主垂域确实无法确定时,才读取第二个候选垂域卡。 -3. 出现多指令或自动任务信号时,再读取对应结构卡。自动任务还要读取自动化垂域卡。 +3. 出现多轮依赖、多指令或自动任务信号时,再读取对应结构卡。多轮先重建当前任务,自动任务还要读取自动化垂域卡。 4. 垂域和结构卡都没有明确覆盖时,才读取 [references/core-policy.md](references/core-policy.md)。 5. 命中标记为冲突的规则,或做规则维护时,再读取 [references/policy-conflicts.md](references/policy-conflicts.md)。 6. 处理边界样本或校准时,按需读取 [references/golden-examples.md](references/golden-examples.md)。 @@ -38,12 +38,13 @@ description: 依据 2026.7 产品标准,对单条或批量 query 进行“快 1. 提取当前 query、前轮、设备、端侧、时间窗口和已提供的能力清单。 2. 使用索引输出一个主垂域、最多两个候选垂域,以及多指令、自动任务、上下文依赖信号。 -3. 读取主垂域卡并查找明确规则。命中时设置 `decision_level="domain"`。 -4. 未命中垂域规则时检查结构卡。命中时设置 `decision_level="structure"`。 -5. 仍未命中时使用核心原则,设置 `decision_level="core"`。 -6. 做反证检查,说明为什么没有选择其他档位。 -7. 只在有明确能力清单或验证结果时填写 `fast_system_pending`;未检查时填 `null`。 -8. 需要完整落盘时,按 schema 输出并运行校验脚本。 +3. 存在上下文依赖时读取 `references/structure-multi-turn.md`,识别上下文关系并重建当前完整任务;不得按上一轮实际路由直接继承标签。 +4. 读取主垂域卡并查找明确规则。命中时设置 `decision_level="domain"`。 +5. 未命中垂域规则时检查结构卡。命中时设置 `decision_level="structure"`。 +6. 仍未命中时使用核心原则,设置 `decision_level="core"`。 +7. 做反证检查,说明为什么没有选择其他档位。 +8. 只在有明确能力清单或验证结果时填写 `fast_system_pending`;未检查时填 `null`。 +9. 需要完整落盘时,按 schema 输出并运行校验脚本。 ## 输出 @@ -89,6 +90,7 @@ description: 依据 2026.7 产品标准,对单条或批量 query 进行“快 "context_dependent": false }, "context_used": false, + "context_relation": "independent", "fast_system_pending": null, "route_override": null, "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` 表示未评估,不要猜测端侧、上下文、能力状态或复杂度。 ## 校验 @@ -123,6 +131,7 @@ python scripts/validate_label.py --file output/fast_slow_labels.jsonl 满足任一情况时设置 `review_required=true`: - 缺少会改变垂域或标签的前轮、端侧或设备信息。 +- 当前轮明显依赖前文,但无法唯一重建原任务。 - 两个同优先级规则给出不同结论。 - 自动任务端侧未知,且不同端侧策略不同。 - 只能依赖未确认的能力清单。 @@ -136,5 +145,6 @@ python scripts/validate_label.py --file output/fast_slow_labels.jsonl - 不因快系统当前不支持而把 `快`改成`慢`。 - 不把 `complex=true` 直接等同于`慢`。 - 不把所有多指令或自动任务无条件判慢,必须检查专项例外。 +- 不把多轮、指代、确认、取消或上一轮实际路由直接等同于快慢标签。 - 不使用 2026.6、`FAST_DIRECT` 或 `SLOW_*` 旧策略。 - 不输出没有规则 ID、证据和判断层级的裸标签。 diff --git a/skills/label-fast-slow-routing/references/core-policy.md b/skills/label-fast-slow-routing/references/core-policy.md index 10cb637..d9cdd5a 100644 --- a/skills/label-fast-slow-routing/references/core-policy.md +++ b/skills/label-fast-slow-routing/references/core-policy.md @@ -20,6 +20,8 @@ 条件修饰、感受描述和非标准叫法不会自动变慢。只要动作与目标仍然明确,保持快。 +多轮不会自动变慢。前文只补全唯一对象或简单槽位,当前轮仍是直接动作、明确操作流或确定性查询时,保持快。 + ## 慢 - `CORE_SLOW_INTENT_INFERENCE`:只表达感受、状态或不满,没有明确动作和功能,需要反推动作。 @@ -27,6 +29,8 @@ - `CORE_SLOW_MULTI_STEP_PLANNING`:需要多步计算、换算、跨源聚合、上下文推理或先规划再执行。 - `CORE_SLOW_TRUE_DISAMBIGUATION`:存在真实多候选或必需槽位缺失,需要澄清或推断。 +当前轮继续上一轮的推荐、分析、故障排查或规划,或者新增约束导致需要重新检索和规划时,按慢处理。详细关系先读取 `structure-multi-turn.md`。 + ## 模糊 - `CORE_AMBIGUOUS_OPEN_QA`:闲聊或不属于明确垂域的开放问答。 diff --git a/skills/label-fast-slow-routing/references/domain-automation.md b/skills/label-fast-slow-routing/references/domain-automation.md index d161962..8554110 100644 --- a/skills/label-fast-slow-routing/references/domain-automation.md +++ b/skills/label-fast-slow-routing/references/domain-automation.md @@ -16,3 +16,12 @@ - `AUTO_AMBIGUOUS_ENDPOINT_UNKNOWN`:端侧未知且音箱、车载策略会产生不同结论时,给模糊并设置 `review_required=true`。 无条件创建普通闹钟、提醒或日程不属于自动任务,回到通用工具垂域。 + +## 多轮 + +先按 `structure-multi-turn.md` 合并当前轮补充的触发条件、动作和端侧,再应用本卡规则: + +- `AUTO_CONTEXT_RECONSTRUCTED`:多轮只负责重建完整自动任务,不因轮次直接改变标签。 +- 当前轮补全后可确定是车载提醒、车载常规任务或家庭自动化时,分别使用对应规则。 +- 历史和当前轮合并后端侧仍未知,且不同端侧结论不同,命中 `AUTO_AMBIGUOUS_ENDPOINT_UNKNOWN`。 +- 缺少会改变自动任务类型或端侧判断的历史时,设置 `review_required=true`。 diff --git a/skills/label-fast-slow-routing/references/domain-car-control.md b/skills/label-fast-slow-routing/references/domain-car-control.md index 31edfa3..ee78630 100644 --- a/skills/label-fast-slow-routing/references/domain-car-control.md +++ b/skills/label-fast-slow-routing/references/domain-car-control.md @@ -8,12 +8,15 @@ - `CAR_SLOW_SCENE_EXPRESSION`:只描述会议、睡眠、节日氛围等场景目标,需要组合车辆功能。 - `CAR_SLOW_FUZZY_FUNCTION`:不知道功能名称,以模糊描述指代车辆功能。 - `CAR_SLOW_MULTI_POSITION_REASONING`:包含位置选择、排除或复杂设备逻辑。 -- `CAR_SLOW_CONFIRMATION_CHAIN`:前轮慢系统主动询问,当前轮只表达确认、取消或简短执行。 +- `CAR_SLOW_CONFIRMATION_CHAIN`:当前轮回答的是场景映射、模糊功能识别或复杂位置选择等慢车控任务的澄清,重建后原任务仍命中车控慢规则。 ## 快 - `CAR_FAST_EXPLICIT_CONTROL`:除上述慢场景外,动作、车辆设备或功能可直接识别。 - `CAR_FAST_EXPLICIT_MULTI_CONTROL`:多个动作全部是明确车辆设备控制,且不需要规划依赖。 +- `CAR_FAST_CONTEXT_DIRECT`:前文只补全唯一车辆设备、位置或属性,当前轮合并后是明确直接控制。 + +确认、取消或简短补槽不直接继承上一轮系统路由。先按 `structure-multi-turn.md` 重建完整车控任务。 ## 冲突标记 diff --git a/skills/label-fast-slow-routing/references/domain-content.md b/skills/label-fast-slow-routing/references/domain-content.md index 4f85019..f41a31b 100644 --- a/skills/label-fast-slow-routing/references/domain-content.md +++ b/skills/label-fast-slow-routing/references/domain-content.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_SWITCH`:前轮已经唯一确定资源集合,当前轮直接选择、切换或播放其中明确的一项。 -仅因当前快系统没有资源或能力失败,不修改语义标签;失败后的实际升级属于执行策略。 +90 秒时间窗口和前后轮关键词重叠只用于判断是否延续同一任务,不直接决定快慢。仅因当前快系统没有资源或能力失败,也不修改语义标签;失败后的实际升级属于执行策略。 diff --git a/skills/label-fast-slow-routing/references/domain-general-tools.md b/skills/label-fast-slow-routing/references/domain-general-tools.md index 53e381f..df80247 100644 --- a/skills/label-fast-slow-routing/references/domain-general-tools.md +++ b/skills/label-fast-slow-routing/references/domain-general-tools.md @@ -13,5 +13,8 @@ - `TOOLS_FAST_DETERMINISTIC_QUERY`:当前时间、简单天气、确定性换算等可直接查询或计算。 - `TOOLS_FAST_EXPLICIT_ACTION`:时间、对象和动作明确的闹钟、提醒、电话等操作。 +- `TOOLS_FAST_CONTEXT_COMPLETED_ACTION`:前文补全唯一时间、联系人、地点或对象后,重建任务可直接结构化为一次工具调用。 普通“明天提醒我开会”属于工具操作;带事件触发条件的提醒继续读取自动化规则。 + +只有结合前文后关键槽位仍缺失,才命中 `TOOLS_SLOW_MISSING_SLOT`;不能因为当前轮单独看不完整就直接判慢。 diff --git a/skills/label-fast-slow-routing/references/domain-iot.md b/skills/label-fast-slow-routing/references/domain-iot.md index 42728c9..da431b7 100644 --- a/skills/label-fast-slow-routing/references/domain-iot.md +++ b/skills/label-fast-slow-routing/references/domain-iot.md @@ -7,6 +7,8 @@ - `IOT_SLOW_INTENT_CONTROL`:只给舒适、温馨等目标状态,需要反推设备组合。 - `IOT_SLOW_ENV_QUERY`:环境查询未明确指定房间或需要比较、聚合。 - `IOT_SLOW_OTHER_QUERY`:其他 IoT 查询没有明确设备与属性。 +- `IOT_SLOW_CONTEXT_REASONING`:当前轮依赖前文继续场景设计、环境比较、设备选择或聚合判断。 +- `IOT_SLOW_CONTEXT_UNRESOLVED`:结合历史后设备、房间或属性仍不唯一。 ## 快 @@ -14,6 +16,7 @@ - `IOT_FAST_ROOM_ENV_QUERY`:环境查询明确指定房间。 - `IOT_FAST_DEVICE_PROPERTY_QUERY`:明确指定设备和属性。 - `IOT_FAST_EXPLICIT_MULTI_CONTROL`:多个动作全部是明确 IoT 设备控制。 +- `IOT_FAST_CONTEXT_DIRECT`:前文已经唯一确定设备、房间或属性,当前轮是直接控制或单属性查询。 ## 冲突标记 diff --git a/skills/label-fast-slow-routing/references/domain-navigation-life.md b/skills/label-fast-slow-routing/references/domain-navigation-life.md index 53378f1..f54d040 100644 --- a/skills/label-fast-slow-routing/references/domain-navigation-life.md +++ b/skills/label-fast-slow-routing/references/domain-navigation-life.md @@ -10,14 +10,15 @@ - `NAV_SLOW_MULTI_ACTION`:导航请求同时要求路线选择、沿途搜索、终点搜索等多个动作。 - `NAV_SLOW_LOW_FREQUENCY_QA`:沿途城市、红绿灯数量等非高频复杂问答。 - `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_MAP_OPERATION`:删除途经点、地址设置、导航播报、路线切换等地图操作。 - `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` 重建任务,再判断当前续接是否需要重新规划。 diff --git a/skills/label-fast-slow-routing/references/domain-product-qa.md b/skills/label-fast-slow-routing/references/domain-product-qa.md index f36048b..b38735a 100644 --- a/skills/label-fast-slow-routing/references/domain-product-qa.md +++ b/skills/label-fast-slow-routing/references/domain-product-qa.md @@ -7,12 +7,16 @@ - `PRODUCT_SLOW_FAULT_DIAGNOSIS`:报告异常、询问原因、要求排查或处理建议。 - `PRODUCT_SLOW_STATIC_KNOWLEDGE`:询问功能说明、概念、规则、规格、使用方法或知识库内容。 - `PRODUCT_SLOW_COMPLEX_DYNAMIC_QUERY`:读取本车信号、档案或统计值,并进行条件判断、聚合、比较、换算或够否判断。 -- `PRODUCT_SLOW_CONTEXT_REQUIRED`:当前 query 省略对象或属性,必须依赖上一轮才能判断。 +- `PRODUCT_SLOW_CONTEXT_REASONING`:当前轮依赖前文继续知识问答、故障诊断、条件判断、比较、聚合或够否判断。 +- `PRODUCT_SLOW_CONTEXT_UNRESOLVED`:结合已有历史后对象或属性仍不唯一,需要追问或推断。 ## 快 - `PRODUCT_FAST_SETTINGS_ENTRY`:定位设置项入口、询问在哪里设置或直接跳转设置页。 - `PRODUCT_FAST_SIMPLE_DYNAMIC_QUERY`:直接读取一个当前值、档案值或统计值。 +- `PRODUCT_FAST_CONTEXT_SIMPLE_QUERY`:前文已经唯一确定对象或属性,当前轮只读取一个当前值、档案值或统计值。 + +“依赖上一轮”本身不是慢规则。历史只完成唯一指代消解时,应按重建后的完整问题判断。 ## 冲突标记 diff --git a/skills/label-fast-slow-routing/references/domain-system-app.md b/skills/label-fast-slow-routing/references/domain-system-app.md index 766043a..da31775 100644 --- a/skills/label-fast-slow-routing/references/domain-system-app.md +++ b/skills/label-fast-slow-routing/references/domain-system-app.md @@ -14,5 +14,8 @@ - `SYSTEM_FAST_EXPLICIT_CONTROL`:系统功能、应用、页面或屏幕元素可直接识别,动作明确。 - `SYSTEM_FAST_OPERATION_FLOW`:当前操作流中的返回、确认、取消、点击、切换等直接动作。 - `SYSTEM_FAST_EXPLICIT_MULTI_CONTROL`:多个动作全部是明确系统或设备控制,且没有规划依赖。 +- `SYSTEM_FAST_CONTEXT_DIRECT`:前文已经唯一确定应用、页面、功能或屏幕元素,当前轮执行直接操作。 应用内搜索、内容消费或外部服务如果已有更具体垂域卡,优先进入对应垂域。 + +当前轮虽然含“这个、那里、确认”等词,但历史能唯一解析且动作直接时给快;历史仍有多个候选时命中 `SYSTEM_SLOW_DISAMBIGUATION`。 diff --git a/skills/label-fast-slow-routing/references/golden-examples.md b/skills/label-fast-slow-routing/references/golden-examples.md index 4d0c0e1..cca70fd 100644 --- a/skills/label-fast-slow-routing/references/golden-examples.md +++ b/skills/label-fast-slow-routing/references/golden-examples.md @@ -29,6 +29,19 @@ | 车载端:每次上车就导航去公司 | 慢 | 自动化 | `AUTO_SLOW_CAR_REGULAR_TASK` | | 自动帮我设置一下,端侧未知 | 模糊 | 自动化 | `AUTO_AMBIGUOUS_ENDPOINT_UNKNOWN` | | 无聊了,陪我聊聊天 | 模糊 | 核心 | `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 @@ 多个明确设备控制 -> 快 查询结果决定后续控制 -> 慢 + +前文只补全唯一对象 -> 按完整任务判断,直接动作通常快 +当前轮增加检索或规划约束 -> 慢 +确认或取消 -> 重建原任务,不按表面词定标 +缺少会改变结论的历史 -> 不猜测,进入复核 ``` diff --git a/skills/label-fast-slow-routing/references/index.md b/skills/label-fast-slow-routing/references/index.md index d3802e5..e34dd4f 100644 --- a/skills/label-fast-slow-routing/references/index.md +++ b/skills/label-fast-slow-routing/references/index.md @@ -42,7 +42,7 @@ | --- | --- | | 多个独立动作、跨对象/跨垂域、并列连接、多方向调整 | `references/structure-multi-instruction.md` | | 条件触发 + 动作、自动化、智能习惯、超级任务 | `references/structure-automation.md`,并读取 `references/domain-automation.md` | -| 当前轮含省略、指代、确认/取消,且结论依赖前轮 | 读取主垂域卡中的多轮规则 | +| 当前轮含省略、指代、确认/取消、修正或补充,且结论可能依赖前轮 | 先读取 `references/structure-multi-turn.md` 重建任务,再读取主垂域卡 | ## 停止条件 diff --git a/skills/label-fast-slow-routing/references/structure-multi-turn.md b/skills/label-fast-slow-routing/references/structure-multi-turn.md new file mode 100644 index 0000000..52fa79d --- /dev/null +++ b/skills/label-fast-slow-routing/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_*` 作为结构层结论。 + +禁止根据上一轮实际走快系统还是慢系统直接继承标签。 diff --git a/skills/label-fast-slow-routing/schemas/label-record.schema.json b/skills/label-fast-slow-routing/schemas/label-record.schema.json index 91bc20e..aa2a3ec 100644 --- a/skills/label-fast-slow-routing/schemas/label-record.schema.json +++ b/skills/label-fast-slow-routing/schemas/label-record.schema.json @@ -135,6 +135,18 @@ "context_used": { "type": "boolean" }, + "context_relation": { + "enum": [ + "independent", + "resolved_direct", + "operation_continuation", + "constraint_extension", + "planning_continuation", + "clarification_completion", + "unresolved_reference", + null + ] + }, "fast_system_pending": { "type": ["boolean", "null"] }, diff --git a/skills/label-fast-slow-routing/scripts/validate_label.py b/skills/label-fast-slow-routing/scripts/validate_label.py index 8d57b02..07bd2c6 100644 --- a/skills/label-fast-slow-routing/scripts/validate_label.py +++ b/skills/label-fast-slow-routing/scripts/validate_label.py @@ -61,6 +61,16 @@ REQUIRED_FIELDS = { OPTIONAL_FIELDS = { "id", "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): 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") if fast_system_pending is not None and not isinstance(fast_system_pending, bool):