[Wake/VAD/STT 与 Live runtime]:完成真实重复语音运行,包含云端ASR/TTS开关、run-live和临时上下文测试

This commit is contained in:
mkbk
2026-06-17 20:00:55 +08:00
parent ac97daa1e7
commit 4b7cd18a0f
20 changed files with 1043 additions and 68 deletions
@@ -4,7 +4,7 @@
### 完整业务价值
本变更把现有语音桌宠从“可用 mock/fixture 验收链路”升级为“可真实运行的无 GUI 实时语音程序”。完成后,用户可以在 macOS 本机启动 `owner_voice_pet run-live`,程序常驻监听本机麦克风,说出唤醒词“小杰小杰”后进入录音,完成 VAD 端点检测、STT 转写、云端 LLM 回复、本地 TTS 语音合成和扬声器播放,然后自动回到待机继续监听下一轮。
本变更把现有语音桌宠从“可用 mock/fixture 验收链路”升级为“可真实运行的无 GUI 实时语音程序”。完成后,用户可以在 macOS 本机启动 `owner_voice_pet run-live`,程序常驻监听本机麦克风,说出唤醒词“小杰小杰”后进入录音,完成 VAD 端点检测、`.env` 选择的 ASR 转写、云端 LLM 回复、按 `.env` 选择的 TTS 语音合成和扬声器播放,然后自动回到待机继续监听下一轮。
该能力的核心价值是让桌宠语音链路从工程骨架变成可反复使用的真实语音入口。用户不需要手动运行一次性 acceptance,也不需要手工提供文本输入;只要进程存活,就可以多轮唤醒、多轮提问、多轮播放,并且同一次运行进程内的第二轮、第三轮会携带前面 user/assistant 历史,从而支持“刚才那句话”“继续解释上一轮”这类连续对话。
@@ -33,8 +33,8 @@
2. CLI 增加 `run-live``model-check``device-check`README 增加 `.env`、模型下载和真实运行说明。
3. Runtime 增加常驻循环,成功或失败都返回待机;`--once` 只用于测试和单轮人工验收。
4. Audio Transport 从占位实现升级为 `sounddevice` 本机麦克风输入和本机扬声器/播放器输出。
5. VAD/STT 从占位边界升级为 `sherpa-onnx` 本地模型 Provider 或明确的本地 Provider 装载路径;模型下载到项目 `models/`,不提交 Git
6. TTS 第一版选择 macOS 本地 `say/afplay`,优先保证真实播出;后续可用 OpenSpec 新变更替换为 `sherpa-onnx` TTS
5. ASR/TTS 从占位边界升级为可配置 Provider`OWNER_SPEECH_PROVIDER=cloud` 默认使用 NewAPI `mimo-v2.5-asr``mimo-v2.5-tts``OWNER_SPEECH_PROVIDER=local` 使用本地模型/本地播放路径
6. 本地模型仍下载到项目 `models/`,不提交 Git,并通过 `model-check` 验证
7. 对话上下文策略明确为“进程内临时历史”:同一个 `run-live` 进程保留多轮 user/assistant,进程退出即丢弃,不落盘。
8. 测试套件新增重复 runtime、临时上下文、进程本地上下文隔离、模型检查、设备检查的自动化覆盖。
@@ -67,7 +67,7 @@
6. `run-live` 必须使用本机扬声器播放回复音频,TTS 第一版允许通过 macOS `say` 生成音频,再用 `afplay` 或 transport 播放。
7. 唤醒词必须固定为“小杰小杰”;第一版可通过短语音段 STT 命中唤醒词,或通过本地 KWS Provider 命中唤醒词,但检测链路必须在本机执行。
8. 唤醒命中后必须进入录音和 VAD 端点检测;录音结束后进入 STT。
9. STT 必须优先本地实现,默认候选为 `sherpa-onnx`;模型文件必须位于项目 `models/`
9. STT/ASR 必须由 `.env``OWNER_SPEECH_PROVIDER` 决定;`cloud` 使用 `OWNER_ASR_MODEL=mimo-v2.5-asr``local` 使用项目 `models/` 下的本地模型
10. LLM 必须使用 `.env` 配置的云端 NewAPI/OpenAI 兼容接口;模型名来自配置,不能写死在核心逻辑。
11. 每轮 LLM 请求必须包含 system prompt、本次进程内最近 user/assistant 历史和当前 user message。
12. LLM 回复成功后必须追加 assistant 消息到同一个进程内 `ConversationContext`
@@ -144,7 +144,10 @@
4. `OWNER_LLM_API_STYLE`:第一版保留 `chat_completions` 或现有兼容值。
5. `OWNER_CONTEXT_MAX_MESSAGES`:本次进程内历史最大消息数。
6. `OWNER_CONTEXT_MAX_CHARS`:本次进程内历史最大字符数。
7. `OWNER_SPEECH_MODELS_DIR`:可选,默认 `models/`
7. `OWNER_SPEECH_PROVIDER``cloud``local`,默认 `cloud`
8. `OWNER_ASR_MODEL`:云 ASR 模型,默认 `mimo-v2.5-asr`
9. `OWNER_TTS_MODEL`:云 TTS 模型,默认 `mimo-v2.5-tts`
10. `OWNER_SPEECH_MODELS_DIR`:本地模型目录,默认 `models/`
#### CLI 输入
@@ -185,7 +188,7 @@
1. 新增 `LiveVoiceRuntime` 或等价 runtime 编排器,管理常驻循环、一次性模式、状态输出、错误恢复和共享 `ConversationContext`
2. 扩展 `SoundDeviceAudioTransport`,真实打开 `sounddevice` 输入流,提供录音片段读取,并支持本机播放或与 macOS 播放命令协作。
3. 新增或完善 `SherpaOnnxVadProvider``SherpaOnnxSttProvider` `models/` 加载本地模型
3. 新增或完善 `CloudAsrSttProvider``CloudTtsProvider``SherpaOnnxVadProvider``SherpaOnnxSttProvider` `OWNER_SPEECH_PROVIDER` 选择云端或本地语音路径
4. 新增模型下载脚本和检查命令,把模型资产生命周期从“人工假设”变成“可诊断前置条件”。
5. 修改 README 和 `.env.example`,用 `.env` 作为默认配置路径,明确运行命令和本地依赖安装命令。
6. 新增两轮 runtime 测试,证明真实运行层不是单轮 acceptance 的包装。