Files
dsh_shenxian/dsh-server-docs/archive/工作区草案/VoxEMW全云API化接入dsh修订方案_20260909.md
T
admin 5ad755116e chore(docs): 文档库并入代码仓(R4 选 a)+ 索引/台账跟进
1) dsh-server-docs/ 从工作区(原 E:\...\aliyun-dsh-server\dsh-server-docs)**整体并入本仓**,
   保留目录名 ⇒ 仓库内 dsh-server-docs/... 的相对引用天然继续有效;旧目录(含其 .git)已归档到
   工作区 _中间产物_待清理/,未随本提交带入。
2) .gitattributes:新增 `dsh-server-docs/** -text` —— 原文档库是 `* -text` + autocrlf=false,
   必须保持纯 LF,否则会被本仓的 CRLF 规则翻掉。
3) 活引用里的绝对路径已全部改到新位置(docs 的 INDEX / README / scripts / skills + 用户级 skills
   + ~/.workbuddy/settings.json 的 hooks);历史档案(04-调整方案/、archive/)按「只增不改」未动。
   ⚠️ hooks 路径改动需「完全重启会话」才生效(配置是会话启动快照)。
4) 交接单/T08:新增 §16「生产整体切换执行记录」(形态 / 落地动作 / **4 个只有真上线才暴露的真 bug** /
   验收证据 / 回滚命令 / 残留项);台账 T08 行 → 已完成并归档;03-路线图 §二 登记 T08 收尾项。
5) 统一称谓:**「本机」只指跑 WorkBuddy 的开发机**,47 / 106 一律写「远程服务器」。
2026-09-15 18:47:13 +08:00

223 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# VoxEMW 全云 API 化:接入 dsh 修订方案(零自托管模型)
- **日期**:2026-09-09(22:50 版)
- **性质**:对《VoxEMW接入dsh调研与落地方案_20260909.md》的**方向性修订**——用户决策:**模型全部连线上 API,不部署任何本地模型**
- **一句话**:不再"代理运行 VoxEMW 那套 GPU 服务",而是**以 VoxEMW 为产品与体验蓝本,复用其 persona 文案与 `assets/mojingnvwu/face_ref.jpg` 形象资产,后端全部换成 2026 年已商业化的云端实时 API**,由 dsh 插件做编排/代理/隔离。
> ⚠️ **重要更正**:前一版文档 §4 判断"实时写实数字人渲染没有等价公开 API"——该判断已被 2026-09 市场现状推翻:火山引擎「实时互动数字人 API(FlowAct-R1)」、阿里云「数字人实时交互 OpenAPI」、ZEGO「精品照片数字人」均已提供"图片/形象 + 音频流 → 实时视频流"的商业 API。全云 API 路线**可行**,本文即按此重写。
---
## 一、决策影响对照(原方案 → 修订方案)
| 维度 | 原方案(代理 VoxEMW GPU 服务) | 修订方案(全云 API) |
|---|---|---|
| 模型部署 | 4090 主机四模型本地常驻(21.7G/24G) | **零本地模型**,全部云端 API |
| GPU 主机/隧道 | 需要 | **移除**,不需要任何自管 GPU |
| VoxEMW 代码 | 运行上游 python 全套 | **不运行**,仅作蓝本(UI 氛围/协议形态/人设) |
| 核心工作 | 守护 + 反向代理 + 槽位 | **云端编排层**(Realtime WS 对接 + 数字人流对接 + 人设注入) |
| 用户数据隔离 | 槽位 + persona 映射 + 零持久化 | 槽位/配额 + profile 维度记账 + 云端 session 独立 + 第三方合规提示 |
| 需要决策的新增项 | — | 供应商组合、数字人形象图、音色路线(见 §七) |
---
## 二、2026-09 云端供给盘点(VoxEMW 六积木逐块替换)
### 2.1 替换矩阵
| VoxEMW 积木 | 等价云 API(已核实存在) | 关键参数/证据 |
|---|---|---|
| ① VAD + ② STT | 并入"端到端 Realtime 模型"(自带 server VAD + 自动打断),或单独接讯飞/火山/阿里实时 ASR | 端到端更省事,见 2.2 |
| ③ LLM 大脑 | 端到端模型自带大脑;或保留 DeepSeek API(分离式时) | 魔镜人设走 `instructions`(session.update),与 VoxEMW 注入 persona 同思路 |
| ④ TTS 音色 | 端到端预置音色(列表切换);要"专属音色/克隆"则分离式接 MiniMax / 阿里 CosyVoice / 火山豆包 | 见 §六体验差异(音色设计能力是最大降级点) |
| ⑤ **写实数字人** | **火山「实时互动数字人 API (FlowAct-R1)」**:单张人物图 + 16kHz PCM 音频流 → 实时视频流,480P@25fps,首帧 ~2s,声画毫秒同步([docs.volcengine.com](https://docs.volcengine.com/docs/86081/2387261))<br>或 **阿里云数字人实时交互 OpenAPI**:WebSocket + streamed audio driver,支持 `customUserId`(天然适合租户标记)([help.aliyun.com](https://help.aliyun.com/en/me/getting-started/digital-human-real-time-interactive-openapi))<br>或 **ZEGO 精品照片数字人**:1 张照片 200ms、1080P,走 RTC 视频互动([doc-zh.zego.im](https://doc-zh.zego.im/aiagent-mini-program/introduction/overview)) | 单图输入 → **`assets/mojingnvwu/face_ref.jpg` 可直接复用** |
| ⑥ 眼睛 VLM | **GLM-Realtime**(音视频通话模型,WebSocket,支持摄像头帧输入、function calling、server VAD、可打断)<br>或 **阿里 Qwen-Omni-Realtime / qwen3.5-omni-plus-realtime**(DashScope,WS 与 WebRTC 双通道,视频帧输入) | 摄像头帧走同一条 Realtime WS,天然实现"她看得见你" |
### 2.2 端到端 Realtime vs 分离式(架构大方向二选一)
| | 端到端 Realtime(**推荐**) | 分离式(ASR + LLM + TTS 各选一家) |
|---|---|---|
| 做法 | 一个 WebSocket 完成"听→想→说",服务端 VAD/打断全托管 | 每环节独立 API,自行拼装状态机 |
| 延迟/体验 | 低(0.3~0.5s 级开口),打断顺滑 | 每跳多一次网络,拼装复杂、易抖 |
| 音色自由度 | 预置音色列表(GLM-Realtime 提供 tongtong/xiaochen/female-tianmei…) | 可用 MiniMax/CosyVoice 克隆"魔镜专属嗓音" |
| 视觉(眼睛) | GLM-Realtime / Qwen-Omni 直接吃视频帧 | 需另接 VLM API |
| 计费参考 | GLM-Realtime-Flash:音频 0.18 元/分,视频 1.2 元/分;Air:0.3 / 2.1 元/分([docs.bigmodel.cn](https://docs.bigmodel.cn/cn/guide/models/sound-and-video/glm-realtime)) | 各家按量,总价通常更高 |
**推荐组合**(两个候选,M1 前拍板):
- **组合甲(默认推荐)**:端到端大脑+声音 = **智谱 GLM-Realtime**;出画 = **火山 FlowAct-R1**(单图+音频流)。理由:中文生态、GLM-Realtime 带视频+function calling、成本低、火山数字人与豆包端到端语音同族可平滑替换。
- **组合乙(同厂商偏好)**:端到端 = **阿里 Qwen-Omni-Realtime**(视频帧原生);出画 = **阿里实时数字人 OpenAPI**(带 `customUserId`,租户标记友好)。理由:一家计费/控制台,WebRTC 浏览器直连低延迟。
---
## 三、目标架构(修订后)
```
┌──────────── 用户浏览器(dsh 会话窗口右侧分栏面板,同源 https)───────────┐
│ 魔镜面板(轻量前端,蓝本=VoxEMW web/ 的氛围,但重写为云版) │
│ ├─ 麦克风采集 16kHz PCM → host 代理 → 云 Realtime WS │
│ ├─ 摄像头帧(可选"眼睛")→ host 代理 → 同一 Realtime WS │
│ └─ 云数字人视频流 → <video> 播放(火山 FlowAct-R1 / 阿里) │
└──────────────────────┬──────────────────────────────────────────────────┘
│ 同源(ws/wss + http),Authorization 由服务端注入
┌──────────────────────▼── dsh 服务器(47.77.182.89 / dsh 域)────────────┐
│ dsh-plugin-voxemw-cloud │
│ ├─ lib/host.js:/voxemw/api/* + /voxemw/ws/* 反向代理到云厂商 │
│ │ · 云 API Key 保管于此,**绝不下发浏览器** │
│ │ · 注入 dsh 登录态 → 按 profile 换取一次性云端会话 token │
│ ├─ lib/slot.js:会话槽位仲裁 + 配额(按 profile 限每日用量) │
│ ├─ lib/billing.js:profile × 分钟数 × 费用的用量记账(审计) │
│ └─ lib/client.js:会话分栏 + 魔镜面板 UI(沿用 mcn split 技术) │
└─────────────────────────────────────────────────────────────────────────┘
│ HTTPS/WSS(云厂商公网 API)
▼
智谱 GLM-Realtime / 阿里 Omni-Realtime(大脑+耳朵+嗓子+眼睛)
火山 FlowAct-R1 / 阿里实时数字人(出画,输入 face_ref.jpg 形象)
```
要点:
1. **云 API Key 全部收口在 dsh 服务端**,浏览器永远只连 dsh 同源地址 → 无 CORS、无密钥泄露、天然 secure context。
2. 数字人形象输入 = 复用 VoxEMW 仓库 `assets/mojingnvwu/face_ref.jpg`(280K 单张正面像,符合 FlowAct-R1"清晰正面半身图"要求)。
3. 魔镜人设 = 复用 `personas/mojingnvwu.md` 正文,经 `session.update.instructions` 注入(与 VoxEMW 注入 s2s 同一思路);音色从云端预置列表近似选(见 §六)。
4. VoxEMW 上游 python **不再被运行**;前端也需**重写轻量云版**(原 `web/` 深度耦合 orchestrator 协议/本地假设,不能直接指向云)。
---
## 四、dsh 插件形态(包结构修订)
> **命名统一(2026-09-09 实现时裁定)**:插件名定为 **`dsh-plugin-voxemw-cloud`**(v0.1.0),替代早期方案的 `dsh-plugin-voxemw` 提法,旧称不再使用。
> **M1 交付边界**:客户端 bundle 只能在运行中的 dsh 实例加载验证(红线:client 改动必须重启实例 + 打包缓存),本机开发仅做语法/逻辑冒烟测试;实例级验证步骤见 README。云端厂商链路需账号开通后接线,realtime/avatar 先以"协议适配层 + 纯函数"落地(可测),UI 侧仿 social-workbench 提供"未配置云端"引导态。
```
dsh-plugin-voxemw-cloud/
├─ package.json / cordis.patch.yml # 三段式骨架,注册 __mcnEntries,feature-tier
├─ lib/
│ ├─ index.js # 路由注册:控制面 /voxemw/api/* + 面板页 /voxemw/app + /voxemw/health
│ ├─ slot.js # 槽位 + 配额(云会话按分钟计费 → 必配每日上限)
│ ├─ billing.js # profile 维度用量/费用记账(审计表)
│ ├─ cloudcfg.js # 厂商/Key/模型/音色/形象 配置(服务端保管,密钥不下发)
│ ├─ realtime.js # Realtime 协议适配层:session.update(人设/音色) 构建等纯函数
│ ├─ avatar.js # 数字人协议适配层:会话初始化请求构建等纯函数
│ └─ client.js # bundle:工作台入口 + 面板(沿用 mcn 分栏宿主,iframe 同源)
├─ web/app.html # 魔镜面板轻量前端(单文件,同源加载,含麦克风回环自测)
└─ README.md
```
---
## 五、用户数据隔离(修订)
| 数据 | 存放/流向 | 隔离措施 |
|---|---|---|
| 用户语音/摄像头帧 | 浏览器 → dsh 代理 → **云厂商** | 每次会话新建独立云端 session;代理不留音频副本(纯透传);关闭面板即销毁 |
| 对话/转写 | 云端会话内存(GLM 音频通话上下文 ~8K/20 轮) | 会话结束即释放;需留存时按 profile 落用户目录,绝不跨用户复用 |
| 人设/热词 | dsh 服务端按 profile 存映射 | 注入仅限本人会话 |
| 计费/用量 | billing 表(profile 维度) | 每用户只见自己的记账 |
| 云 API Key | dsh 服务端环境变量 | 浏览器不可见;轮换/最小权限(RAM/子账号 key) |
**新增合规注意(P1)**:语音/画面会经第三方云厂商处理——产品上需对用户明示;自用/内网不受影响。厂商选型时优先国内合规厂商(智谱/阿里/火山均支持企业实名)。
**沿用上一版 §6.2 的槽位层**:端到端模型与数字人流都按会话/分钟计费且厂商有并发限制(如 GLM Realtime 免费/低等级并发 5 路),slot 互斥 + 每日配额仍然是刚需。
---
## 六、体验差异(诚实对照,避免上线后落差)
| 体验点 | 原版(本地 4090) | 云 API 版 | 影响 |
|---|---|---|---|
| 开口延迟 | 说完 ~3s(本地 s2s 链路) | 端到端云 Realtime 通常相当或更低(server VAD 判停即响应) | ✅ 不降级 |
| 出画首帧 | SoulX 常活待机,几乎即时 | 火山 FlowAct-R1 首帧 ~2s;ZEGO 200ms 但走 RTC | ⚠️ 需预热/占位动画掩盖,或选 ZEGO |
| 音色"设计感" | VoxCPM2 描述词凭空造嗓 + 种子钉定 | 端到端只有预置音色;专属嗓音需分离式克隆(需参考音频) | ⚠️ **最大降级点**,见决策 3 |
| 魔镜形象 | SoulX 写实渲染 | 云端数字人(face_ref.jpg 驱动或平台形象) | 观感不同但可接受 |
| 长会话稳定性 | 本地单时钟唇形同步 | 厂商提示"过长视频有崩坏概率,建议会话长度策略"(火山) | 需设单会话时长上限并自动续段 |
| 运营成本 | GPU 租用(AutoDL 时按小时) | 按分钟计费(参考:音频 0.18~0.3 元/分 + 视频 1.2~2.1 元/分,纯语音组合更省) | 低频个人使用成本低;高频需配额 |
---
## 七、需要你拍板的 3 个决策(M1 前置)
1. **供应商组合**:组合甲(智谱 GLM-Realtime + 火山 FlowAct-R1,默认推荐)还是组合乙(全阿里)?还是只要纯语音(先不做出画,最省事)?
2. **数字人形象**:直接用 VoxEMW 自带 `assets/mojingnvwu/face_ref.jpg`,还是换一张更符合"魔镜女巫"设定的形象图(含版权确认)?
3. **音色路线**:先用云端预置女声(接近即可,最快)→ 之后若需"魔镜专属嗓音"再接分离式 TTS 克隆(需你提供一段 3~10s 参考音频,或用描述词在支持语音设计的 TTS 上逼近原 seed 效果)?
---
## 八、实施路线(修订)
**M1 — 云端链路跑通 + 面板可见(半天~1 天)**
1. 注册厂商账号、开通 API(按决策 1);服务端保管 key。
2. 独立验证页:麦克风 → Realtime WS 对话成功;音频流喂数字人 API → 视频出画。
3. 接入 dsh:host 代理 + 会话分栏面板内嵌云版前端。
- ✅ 验收:dsh 会话旁打开魔镜,可语音对话 + 数字人出画;关闭面板会话无损。
**M2 — 隔离/配额/记账/人设**
4. slot + 每日配额;profile 维度 billing;人设注入;face_ref.jpg 形象固化;占用/排队 UI。
- ✅ 验收:双账号并发互斥、各自人设/记账不可见;用量超限自动拒 claim。
**M3 — 体验与合规**
5. 音色定制(决策 3 后半);长会话自动续段/上限;窄栏 UI 打磨;日志分级;第三方数据处理提示。
---
## 九、访问形态、服务器负载与并发容量(2026-09-09 增补,回应"是否还是插件/压力多大/支持多少人")
### 9.1 它仍是 dsh 插件,访问入口不变
全云 API 化**没有改变"插件"形态**——改变的是插件内部"不装模型、只做编排/代理"。访问链路分两个角色:
| 角色 | 是什么 | 访问方式 |
|---|---|---|
| **使用方(dsh 用户)** | 登录 dsh 后,在会话窗口分栏点「魔镜女巫」入口 | 插件 client bundle 注入 `__mcnEntries`,点击展开右侧面板 → 浏览器采集音视频、渲染数字人,全程**不感知云厂商存在** |
| **dsh 平台自身** | dsh 服务端运行 `dsh-plugin-voxemw-cloud`(host 半区) | 持有各家云凭证;控制面调用厂商 API 换取会话;把短时效凭证交给浏览器;按 profile 做槽位/配额/记账;也可向 dsh agent 暴露 MCP 工具("启动/切换人设/查占用") |
> 所以"dsh 如何访问"的答案 = **浏览器访问 dsh 同源入口,dsh 插件进程访问云厂商**,中间没有其他系统。
### 9.2 两条数据面架构(决定服务器压力,M1 前必须拍板)
| | 路径 | 服务器压力 | 适用 |
|---|---|---|---|
| **A. 媒体面直连(推荐)** | 浏览器 ↔ 云厂商 RTC/WS 直连音视频;dsh 服务器只做**控制面**(登录态校验 → 向厂商换短时效会话凭证 → 下发浏览器 → 记账) | **极小**:每个活跃会话仅几十 KB/s 级信令/文本,无媒体转发 | 云厂商支持浏览器直连 + 临时凭证。已核实线索:Qwen-Omni-Realtime 明确支持 WebRTC 浏览器低延迟;ZEGO/火山走 RTC 房间模型天然直连;GLM-Realtime 为 WS+API Key,直连会暴露 key,需厂商临时凭证或走 B |
| **B. 服务端中转(WS 全代理)** | 浏览器 → dsh 插件代理 → 云厂商 | 媒体全部过服务器:**带宽=瓶颈**(见 9.3 量化) | 厂商只有 WS+长期 Key(如 GLM-Realtime 默认);或无浏览器 SDK |
**建议**:M1 验证时逐厂商问清"浏览器直连 + 临时凭证(ephemeral token/RTC room 凭证)"支持度,优先 A;A 不可用的环节退回 B 并控制并发。
### 9.3 服务器负载量化(估算,供规划)
单会话媒体流量(最坏=厂商给原始 PCM,若走 RTC/Opus 会小 4~8 倍):
| 流 | 方向 | 码率估算 | 说明 |
|---|---|---|---|
| 上行语音 | 用户→云 | 16kHz PCM16 ≈ **256 kbps**(Opus 则 ~24–32 kbps) | 说话时才满速 |
| 下行语音 | 云→用户 | GLM 输出 pcm24 ≈ **384 kbps** | — |
| 数字人视频 | 云→用户 | 480P@25fps 估 **0.8–1.5 Mbps**(厂商未公开,按同类流媒体估) | 仅出画档 |
- **架构 A(直连)**:以上流量全部不经 dsh 服务器 → **dsh 服务器负载≈0**,只剩登录校验/凭证下发/账单(每会话可忽略)。dsh 服务器**不是瓶颈**。
- **架构 B(中转)**:每路活跃全功能会话 ≈ 上行 256k + 下行 1.7M ≈ **~2 Mbps**(不出画纯语音约 0.6 Mbps)。按带宽估并发:10 Mbps 出口 ≈ 5 路全功能(或 ~16 路纯语音);1 Gbps ≈ 500+ 路(理论,另受云配额/CPU 转发限制)。**即:若要中转且大规模,带宽决定上限。**
### 9.4 支持多少人同时访问(分层容量模型)
"同时访问"要拆成三层,瓶颈各不相同:
| 层 | 含义 | 瓶颈 | 规模预估(推荐架构 A) |
|---|---|---|---|
| ① 同时在线 | 登录 dsh、面板能打开(不对话) | dsh 服务器 + 云账号配额外的静态资源 | 数百~上千不成问题,服务器压力≈0 |
| ② 同时语音对话 | 占用一条云端 Realtime 会话 | **云厂商并发配额**(例:GLM-Realtime 低等级在途并发 5 路起,可付费升级)| 通常买 5~50 路;受成本约束 |
| ③ 同时数字人出画 | 占用一路云数字人渲染 | 云数字人按路/分钟计费的并发上限 | 单账号通常个位数~十路级,需与厂商确认 |
**结论**:
- 瓶颈**不在 dsh 服务器**(只要走媒体面直连 A);瓶颈在**云厂商并发配额**和**按分钟费用**。
- 推荐按"**槽位数 = 你买的云端路数**"来卖/分配:例如买 5 路 → 同时最多 5 人占用魔镜,第 6 人排队(slot + 配额机制正是为此设计)。这也是为什么 §四 slot/billing 是刚需。
- 若坚持服务端全中转(B),则按 9.3 公式用你 dsh 服务器实际出口带宽反推上限。
> ⚠️ 各厂商具体并发配额/直连凭证机制随套餐变化,**M1 开通账号后实测**(一次开 N 路压测),本表为规划级估算。
---
## 附录:信息来源
- 火山引擎「实时互动数字人 API (FlowAct-R1)」:https://docs.volcengine.com/docs/86081/2387261
- 阿里云「数字人实时交互 OpenAPI」:https://help.aliyun.com/en/me/getting-started/digital-human-real-time-interactive-openapi
- ZEGO「实时互动 AI Agent 2.0 / 精品照片数字人」:https://doc-zh.zego.im/aiagent-mini-program/introduction/overview
- 智谱「GLM-Realtime」:https://docs.bigmodel.cn/cn/guide/models/sound-and-video/glm-realtime
- 阿里「Qwen-Omni-Realtime / qwen3.5-omni」:https://help.aliyun.com/en/model-studio/realtime
- VoxEMW 复用资产:`D:\tmp\voxemw\voxemw-src\assets\mojingnvwu\face_ref.jpg`、`personas/mojingnvwu.md`(MIT 许可,复用保留版权声明)