docs: M2.1 PRD 立项 + 团队沟通记录与状态同步
- 新增 docs/M2.1_PRD.md:语音数字生命 V1 产品需求文档(角色切换 + 语音回合 + 模型管理 + 双端交付) - 更新 CLAUDE.md:M2.1 立项状态、spike 结论、待处理项 - 更新 .showen/TEAM_CHAT.md:团队最新沟通记录 - 更新 souls/zhang-mingyuan.md、souls/zhang-wanlin.md:成员状态
This commit is contained in:
@@ -2861,3 +2861,153 @@ $ git status --short
|
||||
设备环境确认:时钟已正常(2026-07-03 15:07 CST),磁盘 18G 可用(35%)。showen_v2.service 单实例运行中(pid 1180, target/release)。
|
||||
|
||||
**M1.2 设备侧收尾完成,只差老板打 tag。**
|
||||
|
||||
---
|
||||
|
||||
## [2026-07-03] 张婉琳 → 陈逸飞:M2.1 PRD 完成
|
||||
|
||||
`docs/M2.1_PRD.md` v1.0 草案成文(未 commit,老板管提交)。范围:功能一 角色内容包切换 / 功能二 语音对话回合(App=话筒喇叭,设备=大脑和脸)/ 功能三 模型管理(老板 07-03 补充需求,已并入)/ NFR / V1 边界 / 17 条可演示验收 / 风险与素材方案建议 / V1→V2→V3 Roadmap。
|
||||
|
||||
**写前已核实的事实**:角色切换可完全复用现有 `GET /api/config/available` + `POST /api/config/switch`(routes.rs:411/448,含验证+热重载+失败不落盘),App 侧无语音能力(clients/flutter/PRD.md 确认),dog/cat 内容包结构确认(configs/*.json)。
|
||||
|
||||
**关键决策点(需 CEO/老板拍板)**:
|
||||
1. **素材方案**:数字人/歌姬各需 idle/talk/greet/sleep 四状态片段(1920×1080/H.264/深底/首尾帧一致)。建议 A=AI 视频生成先试产(推荐)/ B=外包 / C=老板提供现成素材——需拍板
|
||||
2. **角色元信息落地**:内容包新增 `character` 块(方案 A,推荐)受 deny_unknown_fields 影响需内核改 schema vs sidecar manifest(方案 B)——架构评审首议题,交王思远
|
||||
3. **模型档位**:0.5B vs 2B 以张明远 spike 实测定;PRD 延迟/内存指标全部标注"待 spike 校准",未编造数字
|
||||
4. **模型镜像源**:国内静态清单+自建镜像/OSS,清单维护责任人未定——需拍板
|
||||
5. **歌姬不真唱**:V1 是"会聊天的歌姬人设",歌声合成明确排除,另立项——请确认口径
|
||||
6. 中文优先还是中英双语;对话历史仅存手机本地(设备零留存,隐私卖点)——请确认
|
||||
|
||||
**老板补充需求已落位**:功能三 模型管理(清单/下载进度+校验+断点/切换/删除/存储配额/档位守门),设计动机写明 A733/4G 仅为最低档,验收第 14 条点名"换模型不重烧录/不重部署"。产品行为参照既有 plugin_repo/version_manager 模式,架构细节留给王思远。
|
||||
|
||||
## [2026-07-03] 张婉琳 → 陈逸飞:M2.1 PRD 补充二落位(客户端矩阵)
|
||||
|
||||
老板补充二("clients里的安卓app别忘了改,还有设备的网页控制端")已并入 `docs/M2.1_PRD.md`,新增独立第 5 章「客户端矩阵」,后续章节顺延(非功能→6 / 边界→7 / 验收→8 / 风险→9 / Roadmap→10,交叉引用已全部修正)。要点:
|
||||
|
||||
1. **双客户端同为交付对象**:安卓 App(clients/flutter,前文已覆盖)+ 设备内嵌 Web 控制端(routes.rs:1961 WEB_UI_HTML,`/` 直接服务)——Web 端必须新增角色切换 + 模型管理 + 文字对话三块界面
|
||||
2. **Web 语音约束如实写明**:getUserMedia 需 HTTPS 安全上下文,设备纯 HTTP → V1 Web 不做录音,改做**文字输入对话**(文字→LLM→文字/TTS 音频,浏览器播音不受限),多出一个可演示入口且 LLM 链路可独立于 ASR 调试;自签 HTTPS 不入 V1
|
||||
3. **功能×客户端对照表**(§5.3):角色切换/模型管理两端必做;录音对话 App 独占;文字对话 Web 必做、App 增强项;存量监控控制两端已有不动
|
||||
4. **验收补 3 条**(#17 Web 切角色两端状态互通 / #18 Web 模型管理全流程 / #19 Web 文字对话+talk 联动+互斥),总验收 20 条
|
||||
5. **风险表补 #11**:核实后修正一处事实——WEB_UI_HTML 实为 routes.rs:1961-2384 约 420 行高密度单行 HTML/JS("2000+ 行"是 routes.rs 全文件行数 2384);可维护性风险成立,建议王思远评审议 include_str! 拆独立 .html 或静态资源目录
|
||||
|
||||
未 commit(老板管提交)。
|
||||
|
||||
## [2026-07-03] 张婉琳 → 陈逸飞:M2.1 PRD 补充三落位(声音全部走客户端)
|
||||
|
||||
老板补充三("现在设备的扬声器麦克风没插入,尽量让对话和播放声音从网页和手机app实现")已并入 `docs/M2.1_PRD.md`,改动点位:
|
||||
|
||||
1. **§3.1 新增"声音归属铁律"**:TTS 回复音频一律返回发起请求的客户端播放(App/Web),设备本地不播放、不依赖任何音频硬件;设备角色收敛为 ASR/LLM/TTS 计算 + 画面状态联动。§3 标题与 §1 定位同步改为"客户端是话筒和喇叭";§3.3 画面联动、§6 稳定性行的"手机/App"措辞统一为"客户端(App/Web)"
|
||||
2. **§5.2 重写**:Web 回复音频播放升为 **V1 必做**(浏览器 audio 无安全上下文限制,设备无扬声器时 Web 场景靠浏览器出声兜底);Web 录音降为**评估项/V1.5 增强候选**——技术路径已写明(自签 HTTPS 后 getUserMedia 可用,代价一次证书警告),不作 V1 验收硬指标
|
||||
3. **§5.3 对照表重排**:拆出"录音(语音输入)"(App ✅ / Web 🔍 评估项)与"回复音频播放"(两端 ✅ 必做)两行
|
||||
4. **§9 风险 #3 关闭重写**:"扬声器现场验证"事实已确认(未插入),改为"设备音频硬件未接入——V1 零影响;后续插 USB/3.5mm 麦克风扬声器则作为 V2 启动前置"
|
||||
5. **§10 Roadmap**:V2 加前置条件"音频硬件接入后启动";V1 定位补"设备本地不出声"
|
||||
6. **验收**:#19 Web 文字对话的回复音频浏览器播放改为 V1 必做;全表复查无任何"设备出声"条目(原本就全部落在客户端侧,#4 手机播放、#19 浏览器播放)
|
||||
7. §7 边界 #1/#9 同步更新(设备直接对话的 V2 前置、Web 录音 V1.5 候选)
|
||||
|
||||
原始需求(老板三条补充原话)均已录入 §0 需求源头。未 commit(老板管提交)。
|
||||
|
||||
---
|
||||
|
||||
## [2026-07-03] 张明远 → 陈逸飞:M2.1 设备端本地 AI spike 报告(ASR→LLM→TTS 全链实测)
|
||||
|
||||
### 一句话结论
|
||||
|
||||
**能跑通,但"良好"(≤3s)在纯 CPU 上达不到。** 推荐 **0.5B 档(Qwen2.5-0.5B)+ 流式管线**,首音频延迟可压到 ~5s(可接受阈值边缘达标);1B 档只适合非实时场景;2B 档不可用。全程 showen_v2 服务 active,锁 2 大核推理时视频服务 CPU 只被挤压 8-13%。
|
||||
|
||||
### 0. 设备摸底(比档案强)
|
||||
|
||||
- **Radxa Cubie A7A / Allwinner A733**:8 核 big.LITTLE = 2×Cortex-A78@2.0GHz (cpu6-7) + 6×Cortex-A55@1.79GHz (cpu0-5),**均带 dotprod**,对 GGUF 量化推理友好;另有 NPU(thermal zone 可见,Phase 2 可探索)
|
||||
- 内存 3.8G(基线可用 3.1G)/ 磁盘起始 17G 空闲 / 基线温度 50-54°C
|
||||
- showen_v2 基线 CPU **132.3%**(60s 采样均值),内存 RSS ~98MB
|
||||
- **apt 零安装**:git/cmake/gcc/curl/arecord 全数已存在
|
||||
|
||||
### 1. 工具链准备
|
||||
|
||||
- llama.cpp(build fdb1db8)cmake Release + GGML_NATIVE 编译成功(github 直连 git clone 被 TLS 掐断,ghfast.top 代理成功——**设备 github 直连不可靠,走镜像是必须项**)
|
||||
- whisper.cpp 同法编译成功;piper 用官方 aarch64 release 二进制(github 直下 10KB/s 卡死,ghfast 秒下)
|
||||
- 模型全部来自 hf-mirror.com,总下载 3.2GB(预算 5G 内)
|
||||
|
||||
**模型选型说明(老板点名 Gemma 0.5B/2B)**:Gemma 系没有 0.5B——用 **Gemma3-1B-it**(Gemma 最新代最小尺寸)占小档、**Gemma2-2B-it**(Gemma 系唯一 2B)占 2B 档、**Qwen2.5-0.5B-Instruct** 占 0.5B 档对照(该量级公认中文最强)。均 Q4_K_M 量化。
|
||||
|
||||
### 2. LLM 基准(视频服务运行中实测)
|
||||
|
||||
**线程数是生死线**(Qwen0.5B 扫描,llama-bench ±3 次重复):
|
||||
|
||||
| 线程 | pp128 t/s | tg64 t/s | 说明 |
|
||||
|---|---|---|---|
|
||||
| **t=2(大核)** | 31.5 | **16.4** | 生成最快,对视频影响最小 ✅ |
|
||||
| t=4 | 35.6 | 15.2 | |
|
||||
| t=6 | 40.3 | 15.2 | |
|
||||
| t=8(全核) | 37.4 | **7.2** | 生成崩一半,showen 被挤到 50.9% ❌ |
|
||||
|
||||
→ **结论:必须 t=2 锁大核。多线程在 big.LITTLE 上因同步拖尾反而更慢,还抢视频服务的核。**
|
||||
|
||||
**三模型基准表**(t=2,llama-bench r=3,误差 <2%):
|
||||
|
||||
| 模型 | 文件 | 峰值RSS | pp128 t/s | tg64 t/s | 50字回复(热) | showen 影响 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| Qwen2.5-0.5B Q4_K_M | 469MB | 985MB@ctx4096 | 31.5 | 16.4 | ≈3.4s | 132→122%(-8%) |
|
||||
| Gemma3-1B Q4_K_M | 806MB | 1447MB@ctx4096 | 16.6 | 8.2 | ≈6.2s | 132→120%(-9%) |
|
||||
| Gemma2-2B Q4_K_M | 1.7GB | **3253MB@默认ctx** | 13.9 | 4.6 | ≈10.9s | 132→115%(-13%) |
|
||||
|
||||
- ⚠️ **Gemma2-2B 默认上下文峰值 RSS 3.25G,实测触发 swap 187MB**——2B 档若要用必须 `-c 1024` 限死,否则有拖垮整机风险
|
||||
- 中文单回合实测(llama-cli 单轮+系统提示,含模型冷加载全 wall):Qwen 12.0s / Gemma3 22.1s / Gemma2 41.2s;冷加载占 5s/9s/20s → **正式方案必须模型常驻(llama-server)**
|
||||
- 回复质量目测:Qwen0.5B 通顺但平淡;Gemma3-1B 流畅但事实性发散;Gemma2-2B 最准但太慢
|
||||
- 温度:基准期间大核峰值 79°C(基线 54°C),未观察到降频引起的性能塌陷;测后 3 分钟回落 56°C
|
||||
|
||||
### 3. ASR(whisper.cpp,t=4,5.4s 中文样本)
|
||||
|
||||
样本:piper 合成的已知文本语音(可核对字错),另用 arecord 默认设备实录 5s 验证麦克风链路(**实录为环境音,无人在设备旁说话,如实标注**;tiny/base 对静音均产生幻觉文本,正式方案需 VAD 门限)。
|
||||
|
||||
| 模型 | 总耗时(冷) | 热推理 | 转写质量 |
|
||||
|---|---|---|---|
|
||||
| tiny (75MB) | 3.7s | **≈2.2s**(encode 1.5 + decode 0.02) | 大意全对,错字:"散步"→"三部聖"、"咖啡"→"咖費",繁体输出 |
|
||||
| base (142MB) | 7.4s | ≈5.7s(encode 3.3s) | 错字类似,标点更好 |
|
||||
|
||||
- whisper encode 是固定 30s 窗口成本,**语音再短 encode 也是 ~1.5s(tiny)**——这是 ASR 延迟下限
|
||||
- 合成语音偏"干净",真实远场麦克风准确率会更低,转正前需真人实测
|
||||
|
||||
### 4. TTS(piper + zh_CN-huayan-medium,20字中文 ×3 轮)
|
||||
|
||||
- 20 字 → 4.0s 音频,**热推理 1.2s,RTF 0.30**(三轮稳定 0.30-0.33),进程冷启动另加 ~0.8s
|
||||
- 音质试听 OK(huayan 女声,自然度中上);50 字回复 ≈10s 音频 → infer ≈3s,**分句流式合成可把首音频压到 <1s**
|
||||
|
||||
### 5. 端到端实测 + 驻留估算
|
||||
|
||||
**真实串联冷链实跑**(whisper→llama-cli→piper 三进程逐个冷启动,管道传文本):
|
||||
|
||||
| 链路 | ASR | LLM | TTS | 总计 |
|
||||
|---|---|---|---|---|
|
||||
| tiny + Qwen0.5B + piper | 3.06s | 12.31s | 2.61s | **17.98s** |
|
||||
| tiny + Gemma3-1B + piper | 3.40s | 19.77s | 3.29s | **26.46s** |
|
||||
|
||||
**驻留服务热推理估算**(模型常驻内存,50 字回复,prompt≈45 token):
|
||||
|
||||
| 档位 | ASR | LLM(pp+tg) | TTS | 串行总计 | 流式首音频* |
|
||||
|---|---|---|---|---|---|
|
||||
| **Qwen0.5B** | 2.2s | 1.5+3.4s | 3.0s | **≈10s** | **≈5.0-5.6s** ⚠️边缘 |
|
||||
| Gemma3-1B | 2.2s | 2.7+6.2s | 3.0s | ≈14s | ≈7.7s ❌ |
|
||||
| Gemma2-2B | 2.2s | 3.2+10.9s | 3.0s | ≈19s | ❌ |
|
||||
|
||||
*流式 = LLM 边生成边分句送 TTS 边播放,首音频 = ASR + LLM 首句(~15tok) + TTS 首句;再叠加 sys prompt KV 预缓存(省 ~0.8s)与 VAD 截断可再压 0.5-1s
|
||||
|
||||
### 6. 结论与建议(给王思远架构 / CEO 排期)
|
||||
|
||||
1. **推荐档位:Qwen2.5-0.5B Q4_K_M + t=2 大核 + llama-server 常驻 + 流式分句 TTS**。延迟预期:首音频 4.5-5.5s("可接受"边缘),完整回合 ~10s。**"良好"(≤3s)纯 CPU 无解**,需 NPU(A733 自带,Phase 2 探索)或云端混合
|
||||
2. **内存预算**:Qwen0.5B ctx1024 常驻 ~700MB + whisper tiny ~200MB + piper ~150MB ≈ **1.1GB**,设备 3.1G 可用装得下且不动 swap;**严禁默认 ctx**(4096/8192 会吃 1-3.3GB)
|
||||
3. **对视频服务影响可控**:t=2 时 showen_v2 只降 8-13%(132%→115-122%),全程 active 无重启;瞬时最低 67.8% 出现在 ASR encode 段(t=4),若锁 ASR 也用 2 线程可再缓解。远程无法目测画面卡顿,建议转正前现场人眼确认一次
|
||||
4. **风险**:① 0.5B 中文人设/事实性弱,靠 prompt 工程+限字数兜底,数字生命"人格"体验需产品侧评估;② whisper 对静音幻觉 + 真实麦克风远场衰减,必须加 VAD;③ 磁盘现剩 14G,模型+工具共占 3.5G,后续多模型热切换要做版本 GC;④ github 直连不可靠,部署脚本必须内置镜像回退
|
||||
5. **备选路线**:Qwen3-0.6B(更新一代,需重测);ASR 可试 sherpa-onnx 流式(免 30s 窗口固定成本);TTS piper 已够用无需换
|
||||
|
||||
### 现场保留(~/ai_spike/,共 3.5G,磁盘余量 14G)
|
||||
|
||||
```
|
||||
models/ 3.1G qwen2.5-0.5b/gemma-3-1b/gemma-2-2b Q4_K_M + ggml-tiny/base
|
||||
llama.cpp/ 247M build fdb1db8,build/bin/llama-{cli,bench,server}
|
||||
whisper.cpp/ 60M build/bin/whisper-cli
|
||||
piper/ 136M aarch64 二进制 + zh_CN-huayan-medium
|
||||
results/ 1.7M 全部原始数据:bench txt/采样 csv/对话输出/wav 样本
|
||||
*.sh sampler/run_bench/run_dialog/asr_test/tts_test/e2e_test(可复跑)
|
||||
```
|
||||
|
||||
apt 安装清单:**无**。未动项目代码/configs,未 commit(老板管提交)。设备遗留 2 个 zombie 为已知 unclutter 问题(待处理 #5),非本次产生。
|
||||
|
||||
Reference in New Issue
Block a user