From 860c2909fcf1166669c77458a0d7b8ed18405888 Mon Sep 17 00:00:00 2001 From: mkbk Date: Wed, 17 Jun 2026 20:39:42 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=87=E6=A1=A3=E4=B8=8E=E9=AA=8C=E6=94=B6]?= =?UTF-8?q?=EF=BC=9A=E5=AE=8C=E6=88=90=E6=9C=AC=E5=9C=B0=E5=94=A4=E9=86=92?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E8=AF=B4=E6=98=8E=E5=92=8C=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=97=A8=E7=A6=81=EF=BC=8C=E5=8C=85=E5=90=ABREADME=E3=80=81?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E9=AA=8C=E6=94=B6=E5=92=8C=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 ++++++++++--- .../separate-wake-and-realtime-transcript/tasks.md | 6 +++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e8b284a..e2bb2f0 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ - `owner_voice_pet run-live`:真实常驻语音循环。 - `owner_voice_pet run-live --once`:只跑一轮,便于验收。 - `.env` 直接读取配置,不要求导出 shell 环境变量。 +- 唤醒词检测使用本地 `sherpa-onnx` KWS 模型,不走云端 ASR。 - `OWNER_SPEECH_PROVIDER=cloud|local`:选择云端语音模型或本地语音模型。 - 默认云端语音模型:`mimo-v2.5-asr`、`mimo-v2.5-tts`。 - 本地设备:`sounddevice` 读取麦克风,扬声器或 `afplay` 播放。 @@ -31,17 +32,21 @@ OWNER_LLM_BASE_URL=https://token-plan-cn.xiaomimimo.com/v1 OWNER_LLM_API_KEY= OWNER_LLM_MODEL=mimo-v2.5 OWNER_LLM_API_STYLE=chat_completions +OWNER_WAKE_PROVIDER=local_kws +OWNER_WAKE_KEYWORDS_FILE= +OWNER_WAKE_KWS_THRESHOLD=0.25 +OWNER_WAKE_KWS_SCORE=1.0 OWNER_SPEECH_PROVIDER=cloud OWNER_ASR_MODEL=mimo-v2.5-asr OWNER_TTS_MODEL=mimo-v2.5-tts OWNER_TTS_VOICE=mimo_default ``` -`OWNER_SPEECH_PROVIDER=cloud` 会把 VAD 切出来的语音片段发送到云端 ASR;不会上传连续麦克风流。改成 `local` 时使用项目 `models/` 下的本地语音模型路径。 +`OWNER_WAKE_PROVIDER=local_kws` 表示唤醒词“小杰小杰”由本地模型检测。`OWNER_SPEECH_PROVIDER=cloud` 只影响唤醒后的正式问题 ASR/TTS:它会把 VAD 切出来的用户问题片段发送到云端 ASR,不会上传连续麦克风流,也不会用云端判断唤醒。改成 `local` 时使用项目 `models/` 下的本地语音模型路径。 ## 本地模型 -即使默认走云端语音,也可以准备本地模型,便于切换到 `OWNER_SPEECH_PROVIDER=local`: +即使默认走云端 ASR/TTS,也必须准备本地唤醒模型;同一脚本会下载 wake、VAD、STT 模型,便于切换到 `OWNER_SPEECH_PROVIDER=local`: ```bash python3.11 scripts/download_speech_models.py --dir models @@ -50,6 +55,8 @@ python3.11 scripts/download_speech_models.py --dir models `models/` 已在 `.gitignore` 中,不会提交大模型文件。 +本地唤醒关键词文件位于 `models/wake/keywords.txt`。如果真人唤醒不灵敏,可以先把 `.env` 中 `OWNER_WAKE_KWS_THRESHOLD` 调低,例如 `0.15`,再重新运行。 + ## 设备检查 ```bash @@ -72,7 +79,7 @@ python3.11 scripts/download_speech_models.py --dir models .venv/bin/python -m owner_voice_pet run-live ``` -运行后终端会显示待机、唤醒命中、录音中、转写中、思考中、播放中、恢复待机等状态。说“小杰小杰”后提问;听到回复后可以再次说“小杰小杰”继续下一轮。本次进程内会携带临时历史,程序退出后不保存。 +运行后终端会显示待机、唤醒命中、录音中、转写中、转写结果、思考中、播放中、恢复待机等状态。说“小杰小杰”等待唤醒命中后再提问;听到回复后可以再次说“小杰小杰”继续下一轮。本次进程内会携带临时历史,程序退出后不保存。 ## 验证 diff --git a/openspec/changes/separate-wake-and-realtime-transcript/tasks.md b/openspec/changes/separate-wake-and-realtime-transcript/tasks.md index f7e8624..8f1ee3b 100644 --- a/openspec/changes/separate-wake-and-realtime-transcript/tasks.md +++ b/openspec/changes/separate-wake-and-realtime-transcript/tasks.md @@ -26,8 +26,8 @@ ## 4. 文档、真实验收与归档 -- [ ] 4.1 更新 README;前置条件:实现完成;验收标准:说明本地 KWS、模型下载、model-check、run-live 输出;测试要点:命令可复制;优先级:P0;预计:30 分钟。 -- [ ] 4.2 下载并验收 KWS 模型;前置条件:下载脚本完成;验收标准:`python3.11 scripts/download_speech_models.py --dir models` 和 `model-check` 通过;测试要点:输出不泄露 key;优先级:P0;预计:60 分钟。 +- [x] 4.1 更新 README;前置条件:实现完成;验收标准:说明本地 KWS、模型下载、model-check、run-live 输出;测试要点:命令可复制;优先级:P0;预计:30 分钟。 +- [x] 4.2 下载并验收 KWS 模型;前置条件:下载脚本完成;验收标准:`python3.11 scripts/download_speech_models.py --dir models` 和 `model-check` 通过;测试要点:输出不泄露 key;优先级:P0;预计:60 分钟。 - [ ] 4.3 执行真实 run-live 验收;前置条件:模型、设备、.env 齐全;验收标准:唤醒命中使用本地模型,终端显示转写结果;测试要点:单轮或两轮状态输出;优先级:P0;预计:60 分钟。 -- [ ] 4.4 最终门禁;前置条件:全部实现完成;验收标准:compileall、unittest、security-check、model-check、device-check、OpenSpec strict 全通过;优先级:P0;预计:30 分钟。 +- [x] 4.4 最终门禁;前置条件:全部实现完成;验收标准:compileall、unittest、security-check、model-check、device-check、OpenSpec strict 全通过;优先级:P0;预计:30 分钟。 - [ ] 4.5 归档变更并提交;前置条件:4.4 通过;验收标准:主 spec 更新,archive 完成,最终 commit,`git status --short` 为空;测试要点:中文提交信息;优先级:P0;预计:20 分钟。