# 数字人 kiosk fork 验收清单（12 项）

> 来源：AI智工坊多次复制 fullbody_dh 数字人实例的实测台账，每一行都是踩过的坑，可直接打勾执行。
> 在线版：https://www.aizhigongfang.com/blog/digital-human-kiosk-fork-playbook

## A. 素材（4 项）

- [ ] **1. idle 不经口型引擎**：idle 必须是头像帧直接循环。实测引擎即使喂纯静音也会在嘴部合成一层微动（嘴区帧间差 4.20 vs 源片 0.53），用户会看到"嘴巴一直在动"。
- [ ] **2. talk 是 pingpong**：正放 + 倒放拼接，前端靠时长一半作折返点。不是 pingpong 就会"说到一半跳回开头"。
- [ ] **3. idle 首尾无缝**：抽首帧与末帧比对，差值应接近 0，否则循环时有跳帧。
- [ ] **4. 两段素材都无音轨**：声音由 TTS 单独输出，视频带音轨会出现回声/双声。

## B. 构图（2 项）

- [ ] **5. 人物占高 ≥95%、占宽约 83%、底部留黑 ≤5px**：竖屏 1080×1920 + object-fit cover，源图每多一像素黑边都会被放大成"视频没铺满"。
- [ ] **6. 腿间无暗缝**：裁到裙摆下沿即可让"黑三角"不在画面内。裁切点算法：某行在两条腿之间出现 ≥15 个近黑像素 → 该行为裙摆下沿。
  ⚠️ 暗缝检测器在已裁好的图上仍可能报 0.43（裙摆深棕本身偏暗 → 误报），**必须目视复核**，不要只信数值。

## C. 人设与知识库（4 项）

- [ ] **7. 身份文本 8 处全改**：人设常量 / 问候语快捷返回 / 自我介绍快捷返回 / 兜底回复 / 意图分类提示词 / 领域关键词表 / 后端 system prompt + mock 兜底 / 唤醒词表 + 页面标题。
- [ ] **8. 旧名残留归零**：`grep -n '旧人名' backend/*.py` 输出为空。漏改问候语最典型：说"你好"时自称旧名，因为那句不经过大模型。
- [ ] **9. 知识库文件名同步 rebase**：只改目录不改 KB 文件名 → 启动不报错、对话也通，但日志只有一句 `Knowledge not found`，知识永远加载不上。
- [ ] **10. 知识库开头写"背景参考，不要逐字背诵"**：否则会出现大段照读原文的机械回答。

## D. 服务与对外（2 项）

- [ ] **11. /healthz 返回 mode:"real"**：mock 时页面能开、能说话、有回复，但回复全是写死模板——等于交付了一个演示壳。
- [ ] **12. 对外地址是固定前门，不是 quick tunnel 域名**：临时隧道重启即换域名，发出去的链接会 404。做法：前门 Pages 302 + 5 分钟同步器（域名未变不重发）。

---

## 附：无麦克风测对话

链路是 麦 → WebSocket → ASR → 往日志写"[听] 文字" → 对话进程 tail → 生成回复 → TTS。所以直接追一行即可成轮：

```
echo '[听] 你们公司是做什么的' >> ~/<项目>/<日志文件>
```

两个坑：日志属主是 root（普通用户 >> 会 Permission denied，需 sudo）；后端 StandardOutput 与大脑 tail 的路径必须是**同一个文件**。

---

需要按你的形象与人设落地一套：https://www.aizhigongfang.com/services/
下单前缀 ORDER-FORK-（邮件主题写 ORDER-FORK-XXXXXX）。
