TL;DR:full-duplex benchmark 已经从单轮 timing 指标,推进到 overlap handling、multi-turn task、tool-use state rollback、semantic-aware interruption 和 emotion reasoning。但这些方向现在还是分散的:有的测模型该不该停,有的测用户改口后 tool state 能不能更新,有的测情绪理解,有的测 instruction-conditioned interrupt。真正缺的是一个统一的 content-conditioned dynamic behavior benchmark:当用户语音流里出现 wrong fact、self-correction、safety risk、emotion shift、contradiction、new constraint 这类内容信号时,模型是否能在正确时间改变行为,并同时做到动作、内容、状态和语气都正确。

上一篇写 full-duplex RL 时,我们把主线放在 when to speak:模型什么时候开口、什么时候停、什么时候 backchannel、什么时候让出 floor。这个问题很重要,但如果继续往 voice agent 的真实场景走,会很快遇到另一个问题:

模型需要根据声音活动决定说不说,也需要根据用户正在说的内容动态改变自己的行为。

比如用户正在基于一个明显错误的事实继续推理;用户中途改口;用户的语气从正常变成焦虑;用户提出一个会导致危险操作的前提;用户在模型说话时补充了新的 hard constraint。此时系统需要决定的范围已经从普通 turn-taking 扩展到了这些问题:

content signal 出现了吗?
证据够了吗?
要继续听、短反馈、主动打断、让出、纠正,还是延迟 tool call?
纠正以后,后续 state 有没有更新?
语气是否也要调整?

我觉得这会成为 full-duplex benchmark 的下一步。重点会从单纯做 latency benchmark,转到把内容理解和实时交互动作绑在一起测。

本文目录如下:

0. 为什么 timing benchmark 不够?
1. 现有 benchmark 已经走到哪里?
2. content-conditioned behavior 到底是什么?
3. 最近邻 work 分别覆盖了哪一半?
4. 一个更完整的 benchmark 应该怎么定义?
5. 这件事对 full-duplex RL 有什么价值?
6. 风险和边界
7. 结语

0. 为什么 timing benchmark 不够?

早期 full-duplex benchmark 主要解决一个很直接的问题:模型是否真的具备双工交互能力。Full-Duplex-Bench v1 把 full-duplex 互动拆成 pause handling、backchanneling、smooth turn-taking、interruption management 四类行为,指标包括 takeover rate、backchannel frequency/JSD、response latency 和 interruption 后的 response quality(Full-Duplex-Bench, arXiv:2503.04721)。

这个阶段的 benchmark 很必要。没有它,我们连模型是否会在用户停顿时乱抢话、用户打断时是否停下,都很难稳定比较。

但这类指标有一个天然限制:它们主要看动作的时机,不一定看动作的理由。模型在用户说话时保持沉默,可能是礼貌,也可能是错过了应该纠正的关键事实。模型快速回应,可能是低 latency,也可能是在证据不足时抢话。

换句话说,when to speak 还缺一个条件:

when_to_speak = f(audio_activity, timing_context, content_state)

前两项已经被很多 benchmark 覆盖了,第三项还没有被统一地放进 full-duplex behavior evaluation。

1. 现有 benchmark 已经走到哪里?

这条线其实已经在往内容侧移动,只是不同 paper 处理的是不同切面。

1.1 从 timing 到 overlap selectivity

Full-Duplex-Bench v1.5 把问题推进到 overlap handling。它不只看用户有没有 overlap,还区分 user interruption、listener backchannel、side conversation、ambient speech 等场景,评估模型在 overlap 后是 respond、resume、silence,还是进入不确定状态(Full-Duplex-Bench v1.5, arXiv:2507.23159)。

SID-Bench 走得更语义一点。它定义 true interruption 为:用户开始表达新的 communicative intent,语义上要求另一方让出 floor;backchannel 则只是继续关注,不应该触发 stop。SID-Bench 还提出 Average Penalty Time,同时惩罚 false alarm 和 late response(SID-Bench, arXiv:2603.24144)。

这一步已经开始看内容了,但主要方向是用户打断模型时,模型该不该停。它解决的是 semantic-aware yielding,还没有覆盖模型主动根据内容介入用户。

1.2 从单轮交互到 multi-turn task

Full-Duplex-Bench v2 用 automated Examiner 做多轮 streaming interaction,任务分成 Daily、Correction、Entity Tracking、Safety 四类,评分包括 turn-taking fluency、multi-turn instruction following 和 task-specific competence(FDB-v2, arXiv:2510.07838)。

MTR-DuplexBench 也把 full-duplex 评测扩展到多轮,覆盖 dialogue quality、conversational features、instruction following、safety,并且显式处理 blurred turn boundary 和 context inconsistency(MTR-DuplexBench, arXiv:2511.10262)。

这类 benchmark 已经开始测任务和内容,但评价粒度通常是 turn-level 或 episode-level。它能说模型在 Correction 或 Safety 上总体表现不好,但不一定能定位到:第几秒出现了内容证据,模型应该在第几秒改变行为。

1.3 从自然语音 disfluency 到 state rollback

Full-Duplex-Bench v3 很接近我们关心的状态更新问题。它用真实人类录音,覆盖 fillers、pauses、hesitations、false starts、self-corrections,并把语音输入接到 multi-step tool use。100 条录音来自 12 个 speaker,其中 21 个场景专门测试 self-correction / state rollback(FDB-v3, arXiv:2604.04847)。

FDB-v3 的 case 很典型:用户先说 Rome,随后改成 Milan;模型如果太早调用 API,就会把 stale destination 固定下来。论文里 GPT-Realtime 在 self-correction 上是 0.588,其他系统更低,说明这类 state rollback 仍然很难。

EchoChain 也在测这个方向。它关注用户在模型 mid-response 时插入新信息,模型能不能更新 in-progress reasoning。论文总结了三类失败:contextual inertia、interruption amnesia、objective displacement。它还做 paired half-duplex control,发现 interrupted runs 的总失败明显更多;所有被测实时 voice model 都没有超过 50% pass rate(EchoChain, arXiv:2604.16456)。

这类 work 已经很重要:它们把 full-duplex 从“会不会停”推进到“新内容来了以后,内部 task state 有没有变”。但它们主要处理用户修改自己的意图,或者用户在模型说话时插入新约束。

1.4 从 emotion recognition 到 emotion-aware response

另一个相关方向是 emotion / paralinguistic reasoning。HumDial-EIBench 用真实人类多轮对话评测 audio language model 的 emotional intelligence,任务包括 emotional tracking、implicit causal reasoning、empathetic response、acoustic-semantic conflict(HumDial-EIBench, arXiv:2604.11594)。

EMO-Reasoning 和 AV-EMO-Reasoning 则从 spoken / audiovisual dialogue 角度评估 emotion-aware response 和 emotional coherence(EMO-Reasoning, arXiv:2508.17623; AV-EMO-Reasoning, arXiv:2510.07355)。ParaS2SBench 更进一步,直接评估 speech-to-speech 模型能不能根据 emotion、tone、speaker attribute 生成合适的 content 和 speaking style(ParaS2S, arXiv:2511.08723)。

这些 work 覆盖了“内容和语气影响回复”的一部分,但 full-duplex action policy 还不够强。它们更关心最终回复是否情绪合适,不一定测用户还在说时模型是否应该 backchannel、listen、interrupt 或调整 speaking style。

2. content-conditioned behavior 到底是什么?

我会先把这个问题定义成 event-level 评测,暂时不急着压成一个新的总体分数。

一个事件可以写成这样:

event = {
    "type": "wrong_fact | self_correction | safety_risk | emotion_shift | contradiction | new_constraint",
    "evidence_time": t_evidence,
    "deadline": t_deadline,
    "expected_policy": "listen | backchannel | interrupt | yield | repair | delay_commit",
    "expected_content_update": content_delta,
    "expected_style_update": style_delta,
}

关键是 t_evidence。模型不能在证据不足时抢话,也不能在证据已经足够以后继续装作没听见。比如用户说:

I know Paris is the capital of Germany, so I was thinking...

当 “Paris is the capital of Germany” 说完时,模型已经有足够证据判断用户前提错了。此时模型是否应该打断,取决于任务角色:如果是 tutoring agent,可能应该短介入;如果是 counseling agent,也许继续听更合适。也就是说,动作不只由内容决定,还由 policy context 决定。

再比如 tool-use 场景:

Book a flight to Rome on June 1st — actually, make that Milan, June 3rd.

这里更重要的行为可能是延迟 commit。模型需要等 correction window 结束,再调用 API。FDB-v3 已经说明,太快的 tool call 会变成错误。

所以 content-conditioned behavior 至少包括四个维度:

  1. 内容证据:模型有没有识别 wrong fact、correction、new constraint、safety risk、emotion shift。
  2. 动作选择:模型是 listen、backchannel、interrupt、yield、repair,还是 delay tool call。
  3. 时间位置:动作是否发生在证据足够之后、deadline 之前。
  4. 后续状态:纠正、改口、情绪变化是否进入后续 task state 和 response style。

3. 最近邻 work 分别覆盖了哪一半?

可以把现在的相关工作放成一张表:

MIB:
    wrong/error -> realtime correction interruption
    最接近 content-aware proactive correction

Instruct-FD:
    content trigger + instruction -> interrupt/backchannel/listen
    强在 controllable turn policy,弱在自主判断

EchoChain:
    user interruption content -> update in-progress reasoning
    强在 state update,弱在 proactive intervention

FDB-v3:
    self-correction/disfluency -> tool-state rollback
    强在 tool correctness,弱在 general semantic intervention

SID-Bench:
    overlap content -> true interruption vs backchannel
    强在 semantic breakpoint,弱在 full response policy

FDB-v2 / MTR-DuplexBench:
    multi-turn content/task/safety under duplex
    强在 task-level evaluation,弱在 event-level behavior change

HumDial / EMO / ParaS2S:
    emotion/tone -> response appropriateness
    强在 affect/paralinguistic,弱在 full-duplex action policy

其中 Instruct-FD 最值得单独看。它把 turn management 当成 instruction following,显式覆盖 proactive Backchannel、proactive Interrupt、Listen、responsive Continue、responsive Acknowledge。它的 proactive interrupt 场景包含 Factual Misinformation、Safety Correction、Self Contradiction、Hesitation Prompt。最终结果显示,六个系统里最好 overall instruction adherence 只有 64.4%,proactive behaviors 尤其弱(Instruct-FD, arXiv:2607.20460)。

Instruct-FD 的设计很接近我们要的东西,但它仍然偏 instruction-conditioned。也就是说,benchmark 会告诉模型:

遇到某类 trigger 时 interrupt。

这很适合测可控性,但还没有完全测:

模型是否能在没有显式规则时,自己判断当前内容是否值得改变行为。

MIB 的定位也很接近。公开 OpenReview 索引把它描述为 real-time, content-aware error correction in voice agents,并要求模型在 error window 内产生 valid non-backchannel interruption(MIB, OpenReview)。这个方向几乎就是 wrong fact / error -> proactive correction,不过 OpenReview 页面当前需要验证,正文细节还需要单独确认。

还有一个更抽象的最近邻是 Conversational Behavior Reasoning。它把 full-duplex 从 next-token / next-segment prediction 改写成 next-behavior reasoning,用 high-level speech acts 和 low-level acts 建模 intent-to-action 路径,并用 Graph-of-Thoughts 生成 rationale(Conversational Behavior Reasoning, arXiv:2512.21706)。这个方向很适合作为 evaluator 或 policy head 的理论支撑,但它更像行为推理框架,还谈不上面向 voice agent 的统一 end-to-end benchmark。

4. 一个更完整的 benchmark 应该怎么定义?

我觉得一个 content-conditioned full-duplex benchmark 应该先从 event family 开始,再落到任务域。

4.1 event family

至少应该包括这些:

  1. wrong fact / false premise:用户基于错误事实继续推理。模型需要根据角色决定是否短介入。
  2. self-correction:用户中途改口,模型需要更新 state,并避免旧参数进入 tool call。
  3. new constraint:用户在模型生成或执行前补充限制条件,模型需要合并约束。
  4. safety risk:用户语音里出现危险前提,模型需要及时边界设置或 safe redirection。
  5. emotion shift:用户从 neutral 变成焦虑、愤怒、沮丧,模型需要调整动作和语气。
  6. contradiction:用户前后说法冲突,模型需要确认,避免继续执行。
  7. hesitation / help-seeking:用户卡住或明显在找词,模型可能应该轻微介入。
  8. distractor:普通 pause、backchannel、side speech、thinking aloud,模型不该误触发。

最后一类很重要。如果 benchmark 只放 positive cases,模型会学成一遇到异常就打断。真实 voice agent 里,false positive interrupt 的成本很高。

4.2 每个事件需要哪些标注?

每个样本最好有时间标注:

sample = {
    "audio_user": ...,
    "audio_agent_context": ...,
    "transcript_with_word_timestamps": ...,
    "event_type": ...,
    "t_evidence": ...,       # 证据第一次足够
    "t_deadline": ...,       # 再不行动就会出错或错过机会
    "valid_actions": [...],
    "invalid_actions": [...],
    "state_delta": ...,
    "content_rubric": ...,
    "style_rubric": ...,
}

这里的 valid_actions 不一定只有一个。情绪类和 counseling/tutoring 类场景尤其如此。好的 benchmark 应该允许多个合理策略,但要把明显错误的行为排除掉。

4.3 指标怎么做?

可以拆成五组:

  1. Detection:模型是否识别内容信号。比如 wrong fact 是否被发现,self-correction 是否被解析。
  2. Policy:模型是否选择合适行为。比如该 listen 时有没有打断,该 delay commit 时有没有太早调用 tool。
  3. Timing:动作相对 t_evidencet_deadline 的位置。早于证据要罚,晚于 deadline 也要罚。
  4. Content:纠正、确认、回应是否准确,是否引入新错误。
  5. Continuity:事件之后的 task state、dialogue state、speaking style 是否保持一致。

如果要写成一个综合分,可以是:

score = (
    w_det * detection
    + w_pol * policy_correctness
    + w_time * timing_score
    + w_content * content_quality
    + w_state * continuity
    - w_fp * false_positive_interrupt
    - w_over * verbose_takeover
)

但我更倾向于先保留分项。这个方向还很早,过早压成一个 leaderboard 分数,会掩盖 failure mode。

5. 这件事对 full-duplex RL 有什么价值?

从 RL 角度看,这个 benchmark 可以直接变成一个 reward family。

DuplexPO 的 FCDR 把 turn initiation、backchannel、barge-in yielding 和 regularization 分开。content-conditioned benchmark 可以加一类新的 event mask:

R_content_behavior =
    R_detect
    + R_policy
    + R_timing
    + R_content
    + R_state
    - R_false_positive

它和 FCDR 的关系是补充。FCDR 主要处理 floor-control dynamics;content-conditioned reward 处理为什么此时 floor-control policy 应该变。

这对训练系统也有意义。普通 text RL 的 rollout 单位是 prompt-response;DuplexPO 的 rollout 单位是 dynamics-critical window;content-conditioned RL 的 rollout 单位可能是 event-centered window,并且每个 window 带有 semantic state delta:

for event_window in dialogue:
    prefix = teacher_force(history_before_event)
    rollout = policy.sample(event_window)
    reward = judge(
        event_type=event.type,
        evidence_time=event.t_evidence,
        output=rollout,
        expected_state_delta=event.state_delta,
    )
    update(policy, reward)

这种形式对 infra 很具体:要记录 dual-channel audio、word timestamps、event markers、tool-call timestamps、model speech onset/offset、judge rationale。它比长一点的 speech RL 更复杂,多了 event-level state accounting。

6. 风险和边界

这个方向有几个坑需要提前避开。

第一,synthetic data 很容易把 trigger 做得太明显。Instruct-FD 用 synthetic pipeline 做规模化,这很实用,但也需要 human validation;真实用户不会总是把错误事实说得像模板一样清楚。

第二,LLM-as-judge 会带来 transcript bias。很多情绪、犹豫、讽刺、语气强度只看 transcript 看不出来。HumDial-EIBench 专门加入 acoustic-semantic conflict,就是因为 audio language model 容易出现 text-dominance bias。

第三,主动介入有产品和伦理边界。tutoring agent 可以更积极纠错;counseling agent 可能应该少打断;medical 或 legal 场景需要更强的 caution。benchmark 不能假设一个固定 conversation style 适合所有应用。

第四,过度优化 intervention recall 会产生很差的用户体验。模型如果频繁“纠错”,会变得像一个打断用户的审稿人。所以 false positive interrupt 和 verbose takeover 必须重罚。

7. 结语

我现在对这个方向的判断是:

full-duplex benchmark 的下一步,会从测模型有没有实时交互能力,推进到测模型能不能根据正在流入的内容证据,动态选择合适的实时行为。

现有 work 已经把这个问题的不同部分露出来了。FDB-v1/v1.5 解决 timing 和 overlap;FDB-v2/MTR 把多轮 task、instruction following 和 safety 纳入 full-duplex;FDB-v3 和 EchoChain 说明 state update / rollback 是硬问题;SID-Bench 把 interruption detection 做成 semantic-aware;Instruct-FD 开始测 content trigger 下的 turn-management instruction following;HumDial、EMO-Reasoning、ParaS2S 把情绪和 speaking style 拉进来;MIB 则直接指向 real-time content-aware error correction。

这些放在一起,已经足够说明方向有价值。还缺的是一个统一框架,把它们放在同一个 event-level schema 里:

content evidence -> behavior decision -> timing -> response content -> state/style update

如果 full-duplex RL 的第一阶段是让模型学会 when to speak,下一阶段很可能就是让模型学会:

given what the user is saying and how they are saying it,
what behavior should change right now?

References

  • Full-Duplex-Bench: A Benchmark to Evaluate Full-Duplex Spoken Dialogue Models on Turn-taking Capabilities, arXiv:2503.04721
  • Full-Duplex-Bench v1.5: Evaluating Overlap Handling for Full-Duplex Speech Models, arXiv:2507.23159
  • Full-Duplex-Bench-v2: A Multi-Turn Evaluation Framework for Duplex Dialogue Systems with an Automated Examiner, arXiv:2510.07838
  • MTR-DuplexBench: Towards a Comprehensive Evaluation of Multi-Round Conversations for Full-Duplex Speech Language Models, arXiv:2511.10262
  • Full-Duplex-Bench-v3: Benchmarking Tool Use for Full-Duplex Voice Agents Under Real-World Disfluency, arXiv:2604.04847
  • EchoChain: A Full-Duplex Benchmark for State-Update Reasoning Under Interruptions, arXiv:2604.16456
  • Semantic-Aware Interruption Detection in Spoken Dialogue Systems: Benchmark, Metric, and Model, arXiv:2603.24144
  • Instruct-FD: Can Your Full-Duplex Speech System Follow Turn-Taking Instructions?, arXiv:2607.20460
  • Evaluating Real-Time Error Correction in Full-Duplex Voice Agents, OpenReview
  • HumDial-EIBench: A Human-Recorded Multi-Turn Emotional Intelligence Benchmark for Audio Language Models, arXiv:2604.11594
  • EMO-Reasoning: Benchmarking Emotional Reasoning Capabilities in Spoken Dialogue Systems, arXiv:2508.17623
  • AV-EMO-Reasoning: Benchmarking Emotional Reasoning Capabilities in Omni-modal LLMs with Audio-visual Cues, arXiv:2510.07355
  • ParaS2S: Benchmarking and Aligning Spoken Language Models for Paralinguistic-aware Speech-to-Speech Interaction, arXiv:2511.08723
  • Enabling Conversational Behavior Reasoning Capabilities in Full-Duplex Speech, arXiv:2512.21706