[全双工自测]:完成Agent自我测试体系,包含回声、打断、记忆和工具场景
This commit is contained in:
@@ -8,7 +8,10 @@
|
||||
|
||||
- `owner_voice_pet run-live`:真实常驻语音循环。
|
||||
- `owner_voice_pet run-live --once`:只跑一轮,便于验收。
|
||||
- `owner_voice_pet run-agent-live --check-config`:全双工 Agent 新入口的配置检查。当前用于迁移期验收,真实运行仍走 `run-live`。
|
||||
- `owner_voice_pet run-agent-live`:完整全双工 Agent 主入口,启动后直接 listening,播放中可被有效用户语音打断。
|
||||
- `owner_voice_pet run-agent-live --check-config`:只检查全双工 Agent 配置和 APM 就绪状态,不打开麦克风。
|
||||
- `owner_voice_pet agent-self-test --profile full-duplex --turns 3`:无人值守自测 STT、LLM、TTS、打断、记忆和工具路由。
|
||||
- `owner_voice_pet audio-self-test --duration 10 --check-echo`:检查设备、WebRTC APM、回声抑制和打断延迟。
|
||||
- `.env` 直接读取配置,不要求导出 shell 环境变量。
|
||||
- 唤醒词检测使用本地 `sherpa-onnx` KWS 模型,不走云端 ASR。
|
||||
- `OWNER_SPEECH_PROVIDER=local`:默认除 LLM 外全用本地语音链路;`cloud` 仅作为显式兼容选项。
|
||||
@@ -97,11 +100,11 @@ OWNER_INTERRUPT_TARGET_LATENCY_MS=200
|
||||
OWNER_STREAMING_STT_PROVIDER=faster_whisper
|
||||
OWNER_STREAMING_STT_PRODUCT_CANDIDATE=sensevoice
|
||||
OWNER_STREAMING_TTS_PROVIDER=cosyvoice
|
||||
OWNER_MEMORY_ENABLED=0
|
||||
OWNER_MEMORY_ENABLED=1
|
||||
OWNER_MEMORY_PROVIDER=faiss_sqlite
|
||||
OWNER_MEMORY_TOP_K=5
|
||||
OWNER_MEMORY_AUTO_SAVE_SENSITIVE=0
|
||||
OWNER_TOOL_ROUTER_ENABLED=0
|
||||
OWNER_TOOL_ROUTER_ENABLED=1
|
||||
OWNER_TOOL_MAX_CALLS_PER_TURN=5
|
||||
OWNER_TOOL_TIMEOUT_MS=30000
|
||||
OWNER_OPENINTERPRETER_ENABLED=0
|
||||
@@ -130,7 +133,7 @@ OWNER_COMPUTER_CONTROL_ENABLED=0
|
||||
.venv/bin/python -m owner_voice_pet run-agent-live
|
||||
```
|
||||
|
||||
`run-agent-live` 不需要先说唤醒词,启动后会直接进入 listening。你可以直接说问题;助手播放回复时,后台麦克风仍在监听。如果你插话,runtime 会用 VAD + 软件 render reference/音色门控判断是不是用户声音;确认后会在下一个播放 chunk 边界停止播报,把打断音频接入下一轮 STT,并继续对话。
|
||||
`run-agent-live` 不需要先说唤醒词,启动后会直接进入 listening。完整模式默认要求 `OWNER_AUDIO_APM_PROVIDER=webrtc` 和 `OWNER_AUDIO_APM_REQUIRED=1`,麦克风 capture 必须经过 WebRTC APM 的 AEC/NS/AGC 后再进入 VAD、STT 和打断检测;播放 PCM 会同步写入 render reference。若本机没有真实 WebRTC APM provider,入口会以 `AUDIO_APM_UNAVAILABLE` 明确失败,不再回退到旧 `run-live` 或伪全双工。
|
||||
|
||||
只检查全双工配置、不打开麦克风:
|
||||
|
||||
@@ -144,14 +147,29 @@ OWNER_COMPUTER_CONTROL_ENABLED=0
|
||||
.venv/bin/python -m owner_voice_pet run-live
|
||||
```
|
||||
|
||||
全双工 Agent 第一版使用软件回声抑制,不强制新增 WebRTC APM 重依赖:播放 PCM 会作为 render reference 供打断门控使用,只有助手回放时不应触发打断,用户声音叠加回放时应停止播报。`OWNER_AUDIO_APM_PROVIDER=webrtc` 仍代表后续目标音频底座,`OWNER_LLM_STREAMING_ENABLED=1` 控制 LLM 以流式响应供句子级 TTS 消费,旧变量 `OWNER_LLM_STREAM` 仍兼容;`OWNER_STREAMING_STT_PROVIDER=faster_whisper` 和 `OWNER_STREAMING_TTS_PROVIDER=cosyvoice` 是后续 provider 目标;`OWNER_MEMORY_ENABLED=0`、`OWNER_TOOL_ROUTER_ENABLED=0`、`OWNER_OPENINTERPRETER_ENABLED=0`、`OWNER_BROWSER_PLAYWRIGHT_ENABLED=0`、`OWNER_COMPUTER_CONTROL_ENABLED=0` 默认关闭,避免尚未完成安全边界前执行长期记忆或工具任务。
|
||||
全双工 Agent 当前架构使用单一 `AudioHub` 拥有麦克风输入,VAD、STT、InterruptController 和诊断订阅各自独立的 processed capture cursor,不再抢读同一个 Transport 队列。打断不等待 STT partial:在 `thinking/speaking/tool_running` 中,只要 processed capture 上的有效用户语音达到阈值,就取消当前 LLM/TTS/playback/tool 子图,并把已确认的用户音频缓存给下一轮输入。`OWNER_LLM_STREAMING_ENABLED=1` 控制 LLM 以流式响应供句子级 TTS 消费,旧变量 `OWNER_LLM_STREAM` 仍兼容;`OWNER_STREAMING_STT_PROVIDER=faster_whisper` 和 `OWNER_STREAMING_TTS_PROVIDER=cosyvoice` 是 provider 目标;`OWNER_MEMORY_ENABLED=1` 和 `OWNER_TOOL_ROUTER_ENABLED=1` 默认开启,`OWNER_OPENINTERPRETER_ENABLED=0`、`OWNER_BROWSER_PLAYWRIGHT_ENABLED=0`、`OWNER_COMPUTER_CONTROL_ENABLED=0` 默认关闭,避免未确认的外部控制自动执行。
|
||||
|
||||
无人值守 Agent 自测:
|
||||
|
||||
```bash
|
||||
.venv/bin/python -m owner_voice_pet agent-self-test --profile full-duplex --turns 3
|
||||
```
|
||||
|
||||
音频/APM 诊断:
|
||||
|
||||
```bash
|
||||
.venv/bin/python -m owner_voice_pet audio-self-test --duration 10 --check-echo
|
||||
```
|
||||
|
||||
如果当前机器没有真实 WebRTC APM binding,`audio-self-test` 会返回 `success=false` 和 `AUDIO_APM_UNAVAILABLE`;这表示完整全双工音频底座尚未满足,不应把 fake APM 结果当成人工验收通过。需要做确定性开发自测时,可以临时使用 `OWNER_AUDIO_APM_PROVIDER=fake`。
|
||||
|
||||
当前已落地的全双工基础模块:
|
||||
|
||||
- `full_duplex_audio`:音频帧 fixture、capture/render ring buffer、fake WebRTC APM、APM 探针和 fallback 决策。
|
||||
- `full_duplex_audio`:AudioHub、多消费者 capture/render ring buffer、fake WebRTC APM、APM 探针和 required startup 决策。
|
||||
- `full_duplex_control`:全双工状态机、事件诊断字段、取消 token graph 和恢复协调器。
|
||||
- `full_duplex_speech`:VAD provider contract、Silero VAD 边界、Streaming STT contract、fake STT 和 interruption detector。
|
||||
- `full_duplex_response`:LLM streaming contract、句子切分、TTS 文本净化、fake Streaming TTS 和可中断播放队列。
|
||||
- `full_duplex_speech`:VAD provider contract、Silero VAD 边界、Streaming STT worker、fake STT、InterruptionDetector 和 InterruptController。
|
||||
- `full_duplex_response`:LLM streaming contract、句子切分、TTS 文本净化、Streaming TTS wrapper、fake Streaming TTS 和可中断播放队列。
|
||||
- `full_duplex_runtime`:新 `run-agent-live` runtime 边界,串联 AudioHub、取消图、流式回复、长期记忆和 ToolRouter。
|
||||
- `agent_memory`:SQLite memory schema、FAISS index manifest 校验、fake/disabled memory manager、敏感写入策略和 memory recall 注入。
|
||||
- `tool_router`:结构化工具调用、风险分类、预算防循环、审计脱敏、`memory.search`、`memory.save` 和 `shell.readonly`。
|
||||
- `external_adapters`:Open Interpreter、Playwright 和 Computer Control 的默认关闭边界。
|
||||
|
||||
Reference in New Issue
Block a user