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 一律写「远程服务器」。
223 lines
19 KiB
Markdown
223 lines
19 KiB
Markdown
# 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 许可,复用保留版权声明)
|