Skip to content

feat(assistant): 组合式连续对话在 LLM 和播音残留窗口内打断 - #381

Closed
gac0812 wants to merge 5 commits into
1024XEngineer:mainfrom
gac0812:feat/composed-voice-barge-in
Closed

feat(assistant): 组合式连续对话在 LLM 和播音残留窗口内打断#381
gac0812 wants to merge 5 commits into
1024XEngineer:mainfrom
gac0812:feat/composed-voice-barge-in

Conversation

@gac0812

@gac0812 gac0812 commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Summary

  • 基于最新 mainfeat(observability): 接入 Prometheus 指标与 OpenTelemetry/Tempo 链路 #360 已合入)。相对 main 只含本 PR 的 barge-in 改动。
  • 组合式免提(TIMEFLOW_VOICE_AGENT_MODE=2)在 LLM/工具执行期间也能打断,避免快任务已经提交后,用户说的「取消」被当成新指令。
  • TTS 发完后仍保留一段播音残留窗口(下限 0.4s,max(音频时长, 0.4));窗口内的 barge-in 会取消正在播的回复。
  • 日程工具在 barge-in 时若业务结果已提交,仍把 tool result 写进对话历史,下一轮可以接着处理。
  • tts.end 之后残留窗口里迟到的 voice.tts.canceled 只停播放,不把客户端从 listening 打成 interrupted;流式回复尚未 tts.start 时的打断仍会进入 interrupted,避免波形和跨轮覆盖回归。

Related to #358

Test plan

  • 组合式连续对话:TTS 播放中说话,应取消当前回复
  • 组合式连续对话:LLM/工具还在跑时说话,应取消该轮而不是等它提交
  • 工具已提交后打断:对话历史里仍有 tool result,下一句不应当全新指令
  • 播音残留窗口过期后再说话,应作为新指令,不发 voice.tts.canceled
  • tts.end 之后迟到的 voice.tts.canceled 不应把客户端切到 interrupted
  • 流式回复尚未 tts.start 时 barge-in:气泡去掉 pending 波形,下一轮回复不覆盖被打断轮次

Verification

cd backend
uv run pytest tests/intelligence/composed/test_composed_agent.py tests/intelligence/conversation/test_agent.py tests/intelligence/conversation/test_schedule_tools.py -q --tb=short --cov-fail-under=0
cd ../frontend
npx jest --runInBand tests/unit/features/assistant/application/AssistantContinuousConversationService.test.ts

@gac0812
gac0812 force-pushed the feat/composed-voice-barge-in branch 2 times, most recently from e02f466 to 78f5d63 Compare August 26, 2026 06:21
免提里用户说「取消」时,若上一轮工具已提交或 TTS 已发完但手机还在播,不应再当成新指令;在 leftover playback 窗口内取消当前回复。
缩短 TTS 发完后仍可 barge-in 的最短窗口,减少把下一句新指令当成打断的时间。
日程工具被取消时仍会提交,需要把 tool result 写进对话历史;播音残留窗口改回 time.monotonic,以免打乱注入的 turn timing 时钟。
日程工具在 barge-in 时无法撤回已提交的业务结果,需要把 tool result 写进对话历史;TTS 结束后残留窗口里迟到的 voice.tts.canceled 只停播放,避免把 listening 打成 interrupted。
残留窗口里 currentAudioId 已清空,但流式回复尚未 tts.start 时也是 null;若一律忽略 canceled,被打断轮次的波形和跨轮覆盖会回归。
@gac0812
gac0812 force-pushed the feat/composed-voice-barge-in branch from 78f5d63 to 134856d Compare August 27, 2026 05:58
@gac0812 gac0812 closed this Aug 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant