Files
zk-data-agent/skills/model-iteration/references/knowledge/multiturn_continuity_rules.md
T
hupenglong1 1a94cec822 修改
2026-05-20 15:04:19 +08:00

58 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 多轮对话连贯性 —— ComplexTask 继承规则
## 核心判定
| 场景 | 输出 | 示例 |
|------|------|------|
| 上轮是 ComplexTask + 当前 query 和上轮**相关**(延续/细化/替换/挑选/追加) | 当前仍 `ComplexTask(tag="...")` | 上轮 CT 导航多目的地,当前"第二家导航过去" → CT |
| 上轮是 Agent + 当前 query 是独立新任务 | 按当前 query 独立分类 | 上轮 Agent 导航,当前"播放周杰伦" → Agent(音乐播放) |
| 上轮是 ComplexTask + 当前 query 是**无关**新任务 | 按当前独立分类 | 上轮 CT 旅游,当前"今天天气怎么样" → QA/WeatherQA |
## 判定要点
- **"相关"的定义**:当前 query 是对上轮任务的**延续、细化、替换、挑选、追加**中的任一类:
- 延续:用户在上轮的同一任务线上继续操作("继续导航"/"换一条不堵的"
- 细化:对上轮结果加筛选条件("人少一点的"/"评分最高的"/"最近的那个"
- 替换:换掉上轮的某个要素,同领域保持("不要 A 换成 B"
- 挑选:从上轮推荐的候选中选择("第一个"/"第二家"/"刚给的那个"
- 追加:在上轮任务基础上加步骤("路上再加个加油站"/"顺便找个 ATM"
- **prev 侧"隐式 CT 信号"R17777 补充)**:prev 即使只是一轮用户独白,只要含以下任一信号也视作 CT 场景:
- **单轮内自我修正/替换**:"导航到 A 哦不对 B"、"去 X 啊不 Y"、"到 A 嗯就是 B" —— 用户在说的过程中换目的地,系统需处理替换逻辑
- **候选选择犹豫**"是 A 还是 B"、"哪个近就哪个"、"算了不去 A 了"
- **多 POI 枚举/对比**"A 和 B 哪个近"、"先说 A 再说 B"
> 注:单 POI + 多重形容词筛选("最便宜的有车位的充电站")**不算** CT 信号,按 R1 归 Agent。
- **继承的是 `complex` 维度,不是 tag 内容**:tag 仍可能是 Agent 标签,但 complex=true,因为复合任务语境未结束
## 反例(不适用继承)
- 当前 query 明显切换意图:上轮 CT 导航 → 当前"打开空调"(tag=车载控制,无关)→ 独立分类
- 当前 query 是独立的闲聊 / 时间 / 天气问答:上轮 CT → 当前"现在几点" → 独立分类
- 上轮是 CT 但失败/取消("算了不要了"):后续 query 不再继承
## 为什么需要这条规则(经验来源)
R17775 迭代中,我们修改了训练集 47 条"纯路线偏好"样本 complex=true → false,对齐 0511 专项 gold60% → 76.67%)。但这产生副作用:
- `复杂导航线上真实_rag` -3.30pp11 条 gold=true 被过度修正为 false
- 如 "我要重新选一个路线"、"嗯经过凤雏路去江北虹悦城"
- `0511 专项` 新引入 6 条错全是**多轮延续 POI/挑选**类
- 如 "评分最高的那个导航过去"、"第二家导航过去"、"人少一点的"
根因:单看 query 这些表达像"纯偏好",但在多轮上下文中是**对上轮 ComplexTask 的挑选/细化**,应继承 CT。SFT 模型在只看当前 query 时判错。
## 应用场景
- **数据增强**:生成带 prev_session 的训练样本时,如果 prev 是 `ComplexTask(...)`,当前 query 与之相关 → ground_truth 必须是 ComplexTask(不能矛盾)
- **训练集清洗**:不要把"多轮延续同任务"类样本的 complex=true 改为 falseR17774 的 47 条改动里,L10752 / L10943 / L10954 等 multi_turn_deixis 已保留未改,正确)
- **Badcase 分析**:错例 query 如果语境是对上轮 CT 的延续,SFT 模型判错不能靠修改训练集同 pattern 样本的 label 来解,需要补"带 prev_session 的延续 CT"仿写增强模型学到上下文信号
- **Reward 函数**:对违反此规则的预测(prev=CT + 相关继续 但 pred complex=false)应被惩罚
## 反模式
- ❌ 只看当前 query 文本判 complex,忽略 prev_session
- ❌ 训练集批改 complex=true→false 时未检查 prev_session,导致多轮延续样本被误改
- ❌ 生成仿写时当前 query 与 prev_session 矛盾(prev CT 但 current 标 complex=false