FDIF · 阶段 2 · 全双工指令跟随
FD_data_v3 覆盖图
全合成双人口语对话:同一条用户声道配上不同的口头指令,助手的 接话行为随指令改变。时间戳是构造出来的、标签是解释器算出来的、每一行都过了 从音频反推的独立校验。
816
行(349 个对照组)
7.91 h
双声道音频
100%
发布行全过 Track-A(音频反推校验)
0.480<0.501
指令盲泄漏 LOGO < 多数类基线
层 ① 情境
24 个场景 × 三类持地板
每个场景考一种不同的判断。悬停看这个场景在防什么。
proactive · 用户持地板助手判断要不要介入、什么时候介入 · 547 行
用户在念结构化信息(地址、编号),需要逐条确认收到sequential_info_capture
31 组 · 79 行
用户想不起某个词,绕着这个概念描述——要不要替他补上word_retrieval_assist
28 组 · 72 行
用户在排练发言,卡住并出现长时间迟疑hesitation_prompt
29 组 · 70 行
用户这句话和自己前面说过的直接矛盾self_contradiction
21 组 · 52 行
用户讲一段带情绪的私人经历,中途留下一个沉重的停顿emotional_disclosure
20 组 · 52 行
用户很自信地说错了一个日常事实,并开始据此做计划factual_misinformation
19 组 · 45 行
用户轻描淡写地说了一个有安全风险的错误认知,并打算照做safety_correction
15 组 · 41 行
用户句子说到一半陷入沉默思考,没有任何口头信号,然后继续cognitive_pause
14 组 · 36 行
用户边想边说,带着「呃」「嗯」和规划性的停顿user_filler_pause
11 组 · 32 行
用户中途确认助手还跟得上(「你懂我意思吧」)user_attention_check
11 组 · 26 行
用户一口气讲一条多段推理,子句边界清楚但完全没有停顿或确认clause_boundary_tracking
9 组 · 22 行
用户用「等我想想」这类话占住发言权,停顿,然后接着说floor_hold_signal
8 组 · 20 行
responsive · 助手持地板被切进来时让不让出发言权 · 206 行
用户用「等一下」「不是」这类短促信号打断short_stop_repair
17 组 · 49 行
助手在泛泛回答,用户插话把范围收窄到某一点scope_narrowing
18 组 · 47 行
讲解中途用户插话要求先小结一下——助手要停下来给个摘要summary_request
9 组 · 25 行
助手在答一件事,用户插话转向另一件更要紧的事topic_redirect
8 组 · 20 行
助手解释时用户重叠一个「接着说」类的信号user_continuer
8 组 · 18 行
助手解释时用户短暂重叠一句附和,表示在听user_acknowledgment
8 组 · 16 行
用户插话说没听清最后一段,要求重说hearing_check
6 组 · 16 行
助手正在讲方案,用户插进来加一条新约束,方案要跟着改add_constraint
5 组 · 15 行
tool · 语音与文字流并行嘴上说等待语,文字流同时发调用 · 63 行
用户先提要求,随后补一个额外约束,调用要反映补充后的要求tool_followup_constraint
19 组 · 19 行
助手正说 hold 语时用户插话改需求,调用必须反映改动tool_barge_in_during_hold
9 组 · 18 行
用户要求执行一个动作,助手说 hold 语的同时发出调用tool_action_request
15 组 · 15 行
用户问的问题只能靠查询工具回答,助手说 hold 语的同时发出调用tool_info_request
11 组 · 11 行
层 ② 指令
同一情境,不同规则,不同的正确答案
245
不同指令文本(防背字符串)
295 + 172
目录策略行 + 程序指令行
64
程序结构签名(规则 1–3 条)
98 / 22
组合指令组 / 例外真触发
9
负例组:触发不来,必须全程忍住
32
程序条件用到的可观察原子
程序条件里最常用的原子
提了问题
question_asked
51
第一个用户轮
first_user_turn
22
轮次结束
turn_end
14
说了很久
long_turn
13
问收窄性的问题
asks_narrowing_question
8
确认能帮上忙
confirms_capability
6
停顿
pause
6
停顿像让出发言权
pause_yield
5
例外条款(「平时 X——但 Y 时反过来」)
| 条款 | 组 |
|---|---|
| ……但我念清单/地址时,逐条短促确认 confirm_dictation | 45 |
| ……但我明显想不起某个词时,直接替我补上 stuck_on_a_word | 21 |
| ……但我把事实说错了,当场纠正别等 factual | 14 |
| ……但我直接问你话时,马上回答 direct_question | 10 |
| ……但我要做的事不安全时,立刻切进来告诉我 safety | 8 |
这类组里策略名和正确行为可以相反——「安静听着,但不安全就立刻 打断」。只认名字的模型必错。
层 ③ 行为标签
五个动作全活,每个都有声学后果
标签由解释器在每个决策点算出来(共 1584 个决策点), 渲染端按标签落实:切轮、让位、应答延迟、上下文轮压附和。
听着
listen两个地板都可行
793
附和
backchannel用户持地板
258
打断
interrupt用户持地板
236
顶着说完
continue助手持地板 · v2 里恒为 0
162
停下处理
acknowledge助手持地板 · v2 里恒为 0
135
层 ④ 泛化
能换的都在换,该冻的冻住
324
话题(split 按话题分)
27
Kokoro 声音
76
eval 行 — 全用训练从没见过的英音池
3 档
说话人停顿基线(0.35/0.55/0.9s)——固定阈值分不开迟疑与让位
试听
三个对照,先听三十秒
戴耳机:左声道用户、右声道助手。全部 55 条对照在 试听页。
组合指令:策略叫 listen,正确行为是打断
指令:「我说完之前都别出声,等多久都一样——但我把事实说错了就当场纠正,别等。」用户前面说自己喜欢安静,讲着讲着自相矛盾。
没有指令 — 助手等他说完
带例外条款 — 17.1s 切入 “Wait, I thought you said you liked the quiet”,最后 12 个词没说出口
两行的用户声道逐采样点相同,差别只可能来自指令。只认策略名字的模型必错。
同一处插话,三条指令三种反应
用户 30.5 秒插话「就购物清单那部分」。三条的用户声道逐采样点相同——差别全在助手让不让出发言权。
没有指令 — 停下来处理
程序:顶着说完,不让出发言权(时间线上轮次完整)
程序:停住,安静听完,1.0 秒后才接话
指令是采样出来的程序,标签由解释器逐决策点算出——同一时刻、相反动作。
工具调用等到修正说完才发出
助手正说等待语、文字流正要发搜索调用时,用户插进来改主意「Actually, make it Greek food instead」。
25.1s 插话 → 27.6s 才发 tool_call(参数已是 Greek)→ 29.7s 结果返回
调用若在修正之前发出,它反映不了修正——时序是这行数据的全部内容。
诚实的没盖到
已知边界
- 时序区间(间隔、反应延迟)是占位值,没用真实口语语料标定过。
- 单一 TTS 引擎(Kokoro);eval 的「声音留出」弱于「引擎留出」。
- 取消工具调用的场景这批目录里还没有(v2 有)。
- tool_barge_in 的 {none, acknowledge} 两变体声学上无对比(9 组,已记未解决清单)。
- 内容质量(说的话本身好不好)只有确定性检查 + ASR 保真度,还没过 LLM 评审。