# DPM 实时语音对话整合方案(复用 live-avatar 云化栈) > 目标:砍掉数字人/口型/wav2lip 等全部视觉部分,只保留「语音识别 + 对话 + 实时交互」链路; > 前端在 DPM React 应用中新增对话页(复用 live-avatar demo 前端的样式与逻辑); > 后端并入 DPM `backend/pyproject.toml`。 > 基线:live-avatar 云化栈已在 `/Volumes/Pine/mycode/opc/live` 跑通(s2s v0.2.11 + cloud-migration 补丁 + demo 前端)。 --- ## 0. 现状对比 | | live-avatar(已跑通) | DPM(现状) | |---|---|---| | 前端 | 原生 JS demo(index.html / main.js / s2s-ws-client.js / 两个 worklet) | React 19 + Vite + Tailwind;`/ai` 页已有 `AiChatPanel`(文字 + **录音上传式**语音) | | 后端 | s2s 独立进程 :8765(VAD 本地 + 云 ASR/LLM/TTS) | FastAPI :8000;已有 `app/asr.py`(dashscope paraformer)、`app/llm.py`(qwen + 工具)、`SSL_CERT_FILE=certifi` 同款处理 | | 语音体验 | **实时全双工**:本地 VAD → 流式云 ASR → 流式 LLM → 流式 TTS → 音频回放 | 录音 → 上传 → 转写 → 文字回复(无流式、无 TTS 回音) | **DPM 缺的正是 live-avatar 栈的实时交互能力**;两边的云凭据/CA 处理已一致(dashscope + certifi),合并成本低。 --- ## 1. 两个关键决策点 ### 1.1 后端:内嵌进 DPM FastAPI(推荐) vs 独立 s2s 进程 - **推荐:内嵌**。s2s v0.2.11 的 `api/openai_realtime/websocket_router.create_app(pool, stop_event)` 本身就返回一个 FastAPI 应用, 可在 DPM `app.main` 里构建管线池后 `app.mount("/v1", s2s_app)`,与现有 `/api/*` 共存、单进程单端口。 Tauri 桌面打包只需一个后端进程,无子进程管理。 - 备选:s2s 独立跑 :8765,DPM 负责拉起/守护。改动最小,但两进程两端口,打包与部署更重。 ### 1.2 前端:iframe 内嵌(推荐 v1) vs React 组件移植(v2) - **推荐 v1:iframe 内嵌**。把 live-avatar `demo/` 目录拷入 DPM `public/voice-demo/`(去掉数字人 iframe/视觉元素), React 新增 `VoiceAssistant.jsx`(路由 `/voice`)里 `