OpenClaw人人养虾:语音覆盖层生命周期

张开发
2026/4/20 15:14:14 15 分钟阅读

分享文章

OpenClaw人人养虾:语音覆盖层生命周期
当前设计意图如果覆盖层已因唤醒词可见用户按下快捷键时快捷键会话接管现有文本而不是重置它。在快捷键按住期间覆盖层保持显示。用户松开时如果有修剪后的文本则发送否则关闭。单独的唤醒词在静默时仍然自动发送按住说话在松开时立即发送。已实现功能2025 年 12 月 9 日覆盖层会话现在每次捕获唤醒词或按住说话都携带一个 token。当 token 不匹配时部分/最终/发送/关闭/级别更新会被丢弃避免过期回调。按住说话会接管任何可见的覆盖层文本作为前缀因此在唤醒覆盖层显示时按快捷键会保留文本并附加新语音。它在回退到当前文本之前等待最多 1.5 秒获取最终转录。提示音/覆盖层日志以info级别输出到类别voicewake.overlay、voicewake.ptt和voicewake.chime会话开始、部分、最终、发送、关闭、提示音原因。后续步骤1. VoiceSessionCoordinatoractor同一时间恰好拥有一个VoiceSession。API基于 tokenbeginWakeCapture、beginPushToTalk、updatePartial、endCapture、cancel、applyCooldown。丢弃携带过期 token 的回调防止旧识别器重新打开覆盖层。2. VoiceSession模型字段token、sourcewakeWord|pushToTalk、committed/volatile 文本、提示音标志、计时器自动发送、空闲、overlayModedisplay|editing|sending、冷却截止时间。3. 覆盖层绑定VoiceSessionPublisherObservableObject将活跃会话镜像到 SwiftUI。VoiceWakeOverlayView仅通过 publisher 渲染它从不直接修改全局单例。覆盖层用户操作sendNow、dismiss、edit带会话 token 回调到 coordinator。4. 统一发送路径endCapture时如果修剪后文本为空 → 关闭否则performSend(session:)播放一次发送提示音转发关闭。按住说话无延迟唤醒词可选的自动发送延迟。按住说话结束后对唤醒运行时应用短暂冷却防止唤醒词立即重新触发。5. 日志Coordinator 在子系统ai.openclaw中输出.info日志类别为voicewake.overlay和voicewake.chime。关键事件session_started、adopted_by_push_to_talk、partial、finalized、send、dismiss、cancel、cooldown。调试清单在重现粘滞覆盖层时流式传输日志sudo log stream --predicate subsystem ai.openclaw AND category CONTAINS voicewake --level info --style compact验证只有一个活跃会话 token过期回调应被 coordinator 丢弃。确保按住说话松开始终使用活跃 token 调用endCapture如果文本为空预期dismiss且无提示音或发送。迁移步骤建议添加VoiceSessionCoordinator、VoiceSession和VoiceSessionPublisher。重构VoiceWakeRuntime以创建/更新/结束会话而不是直接操作VoiceWakeOverlayController。重构VoicePushToTalk以接管现有会话并在松开时调用endCapture应用运行时冷却。将VoiceWakeOverlayController连接到 publisher移除运行时/PTT 的直接调用。添加会话接管、冷却和空文本关闭的集成测试。《DeepSeek高效数据分析从数据清洗到行业案例》聚焦DeepSeek在数据分析领域的高效应用是系统讲解其从数据处理到可视化全流程的实用指南。作者结合多年职场实战经验不仅深入拆解DeepSeek数据分析的核心功能——涵盖数据采集、清洗、预处理、探索分析、建模回归、聚类、时间序列等及模型评估更通过金融量化数据分析、电商平台数据分析等真实行业案例搭配报告撰写技巧提供独到见解与落地建议。助力职场人在激烈竞争中凭借先进技能突破瓶颈实现职业进阶开启发展新篇。

更多文章