Files
digital-me-history/docs/realtime-avatar.md
T
admin 0593ff7e62
nginx serve /uploads direct (audio speed) / patch-nginx (push) Failing after 1m34s
数字我 Digital Me:全量入库(大文件走 Git LFS)
2026-10-10 16:24:43 +08:00

39 lines
2.7 KiB
Markdown
Executable File

# 实时互动数字人(2b)接入方案
> 状态:**接口/架构缝已就绪,端到端待接入某供应商的实时 SDK + 客户 BYO-key。**
> 异步口播(2a:EMO/VideoRetalk)已上线;本档是「实时流式对话数字人」的落地路线。
## 为什么单独一档
2a 是「离线渲染一段 mp4」;2b 是「实时:你说话/打字,数字人即时用你的脸+声流式回你」。
2b 需要 **WebRTC/供应商 Web SDK + 低延迟流** + 服务端换会话 token,和 2a 不是一套栈。
## 已就绪(本仓已落地)
- `services/realtimeAvatar.js` — 实时引擎目录 `REALTIME_ENGINES`(硅基 DUIX / 腾讯云数智人 / HeyGen LiveAvatar,均 `available:false` 待接入)+ `createSession(twin, engineId)` 换会话缝。
- BYO-key 复用异步那套 `engine_creds`(加密),`createSession` 已按 twin 取客户 key。
- 路由 `POST /api/twins/:id/realtime-session` → 现诚实返回 `{ ready:false, reason:'not-integrated' }`。
- 前端 `GET /api/twins/:id/engine` 已带 `realtime` 目录(前端可展示为「即将上线」)。
## 接入某供应商 = 三步(以 DUIX / 腾讯 / HeyGen 任一为例)
1. **服务端换会话**:在 `realtimeAvatar.js` 的 `createSession` switch 里补该供应商 case——
用客户 key 调其「创建实时会话」API,返回 `{ ready:true, provider, sessionToken, wsUrl/roomUrl, avatarId }`。
2. **前端挂载 SDK**:在 `Live.vue`(视频通话页)按 provider 动态加载其 Web SDK,用会话凭据
挂载实时 avatar 流到一个 `<video>`;把 ChatPanel 的 LLM 流式回答 + TTS 驱动进 avatar。
⚠ CSP:外部 SDK 脚本/媒体域名需加进前端 CSP 白名单。
3. **驱动闭环**:用户输入 → 现有 `/ask`(RAG+人设)出流式文本 → 供应商 avatar「说」出来
(供应商内置 TTS,或用我们 CosyVoice 克隆音色喂它,取决于供应商能力)。
## 选型建议(先 POC 再定)
| 供应商 | 实时 | 形象门槛 | 备注 |
|---|---|---|---|
| 硅基 DUIX | ✅ API+SDK,还有开源 | 视频克隆 | 实时最强、可私有化;国内 |
| 腾讯云数智人 | ✅ 交互数智人,云/端渲染 | 3min 视频 | 生态成熟、并发计费;国内 |
| HeyGen LiveAvatar | ✅ ~$0.2/min | 照片/视频 | 最写实;海外(延迟/合规/付款) |
## 红线(与 2a 一致,统一在底座)
- **成本**:实时按分钟/并发计费,更贵 → 必须 BYO-key(客户自付)+ 会话时长/并发上限门控。
- **合规**:同 `services/compliance.js` 的肖像授权门 + 实时画面也要「AI 生成」标识。
## 下一步
你**选定一家 + 提供该家 key**,我在 `createSession` 补该家 case + 在 `Live.vue` 接其 Web SDK,
即可端到端跑通。没有供应商实时凭据前,无法真实联调(不做假)。