Files
digital-me-history/PLAN.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

202 lines
16 KiB
Markdown
Executable File
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.
# 数字我 / Digital Me — 项目计划
> 「有脸、有声音、有知识库的另一个你」——个人 AI 数字分身 / Digital Twin。
## 一句话定位
**不是**又一个知识库 App(那是 IMA / Notion AI / NotebookLM 的赛道),
**而是**「替你出现的有脸有声音的 AI 分身」。
- IMA = 帮你做事的**隐形** AI 助理(无脸无声,文档/阅读/写作)。
- 数字我 = **替你现身**的 AI 化身(有脸有声,形象 + 声音 + 人格化知识三位一体)。
两者错位互补:IMA 帮你工作更快;数字我帮你**分身多地出现、长久被记住**。
## 差异化原则(指导取舍)
1. 重「拟人交互」,轻「办公深度」——初期**不碰**长文档深度解析 / 复杂报告生成。
2. 形象/声音/人格三位一体;知识库只为「像你一样思考表达」服务,不做通用资料管理。
3. 记忆分层:不仅存知识,还录人生时间线、重要事件态度、口头禅——强化「这是你,不是通用 Bot」。
4. 隐私即壁垒:长期主打本地/私有部署(人脸声音不出本地)。MVP 先用 DashScope 云换速度。
## 技术内核(已复用,非自建)
整条多模态管线搬自已验证的 `super-individual-app` 平台(其艺术家垂直 =
The Digital Atelier)。本仓库是面向「复刻自己」的消费级独立产品。
| 能力 | 实现 | 状态 |
|---|---|---|
| 人格化对话 + RAG | Qwen / DashScope + `text-embedding-v3` | ✅ 已接 |
| 形象捏脸 | 通义万相 wanx-style-repaint | ✅ 已接 |
| 声音克隆 + TTS | CosyVoice v2(WebSocket) | ✅ 已接 |
| 口播视频(口型同步) | 通义 EMO(audio→talking head) | ✅ 已接 |
| 可嵌入「和我分身聊天」 | 公开 slug 路由 `/api/embed/:slug` | ✅ 已接 |
| 社交分身(可授权社交节点) | 社交卡片 + 守护边界 + 公开 `/api/social/:token` | ✅ 已接 |
## 决策记录(本次已定)
- **代码形态**:全新独立仓库 `digital-me`(非复用平台入口、非平台内 fork)。
- **MVP 首发场景**:个人 IP 分身(博主/咨询师/讲师)。
- **部署路线**:MVP 先用 DashScope 云;本地/私有部署作为后续高隐私版本卖点。
- **2026-07 定位收敛:去掉青少年版,只做成人版。** 删除 错题反考(quiz) + 家长监护(guardian)
+ `audience`/`EDITION` 分版机制;**互考擂台 + 排行榜**从青少年重归类为**成人通用裂变**保留。
共享内核(AI 管线 / altauth 短信微信登录 / moderation 内容安全)不变。
## 路线图
### 阶段 1 — MVP:个人 IP 分身(进行中)
- [x] 后端骨架:auth + twins + knowledge(RAG) + avatar + voice + ask/speak + talk-video + 公开 embed
- [x] 后端韧性:缺 AI key 时各接口优雅降级(502 JSON),不再崩溃;全局错误兜底
- [x] 前端 `digital-me-web`(Vue3+Vite+TS+Tailwind+Pinia):登录/注册、分身列表、Studio(形象/声音/知识库/对话/口播视频/发布)、公开嵌入页 `/me/:slug`
- [x] 契约冒烟测试通过(register→create→knowledge→publish→embed),UTF-8 中文正确入库
- [x] 填 `DASHSCOPE_API_KEY` + cloudflared 隧道,真 AI 端到端跑通(RAG 对话实测 qwen-max + 真 embedding;捏脸/声音/EMO 路径已正确用公网 PUBLIC_URL)
- [x] 建分身向导(`CreateWizard.vue` 三步引导)+ Studio 配置进度条
- [x] 「和我分身聊天」嵌入挂件:iframe 之外新增 **JS SDK 悬浮气泡**(`public/widget.js` + `GET /widget.js`,发布页一键生成代码)
### 阶段 2 — 知识与记忆深化
- [x] PDF / Word(.docx) / 图片 → RAG(`services/extract.js`:pdf-parse / mammoth / Qwen-VL 读图 OCR)
- [x] 记忆分层:人生时间线 / 重要事件态度 / 口头禅 的结构化录入(`services/memory.js`,口头禅注入人设、全部入 RAG)
- [x] 多轮会话管理(按主题分线,`services/session.js` + Studio 会话侧栏)
### 阶段 3 — 场景扩展
- [ ] 家人情感记忆 / 数字遗产(情感壁垒,IMA 不碰)
- [ ] 小微商务接待(中介/培训老师用分身接待初访客户)
- [x] 实时视频对话(搬 `live.js`,摄像头帧 + 语音)— WS `/api/live`,前端 `Live.vue`,Studio「视频通话」入口
### 阶段 4 — 隐私护城河
- [ ] 本地/私有部署版(人脸声音模型不出本地设备)
- [ ] 「真正拥有你的数字自我」——纪念包 / 名人高端定制
### PRD 对齐(按《数字我》PRD 补全)
- ~~**FR-3 学伴·错题反考**~~ **(已移除,青少年功能,2026-07 随收敛为成人版删除)**
- [x] **FR-1.4 性格标签** + **FR-4.1 专家模式** + **FR-4.3 强制免责声明**
(专家分身对外回答自动前置「我是 AI 数字分身,仅供参考,不构成专业建议」)。
Studio「人设」标签。
- [x] **4.2 权限回收**:`DELETE /api/auth/account` 注销并物理删除该用户全部数据
(twins/knowledge/messages/memories/sessions/errors/shares/social/rooms)。
- [x] **FR-3.3/3.4 学友互考 + 战报 + 排行榜(裂变引擎)**:同学给公开分身出题 →
分身(AI)应战作答 → LLM 判分 → 记录战报;双榜(分身按守擂胜率、出题官按
「难倒数」)。`services/challenge.js` + 公开 `/api/challenge/:slug[/battles]`
+ `/api/leaderboard[/challengers]`;前端 `Challenge.vue`(出题应战) +
`Leaderboard.vue`(双榜) + 聊天页「出题考考 TA」入口 + 头部「排行榜」。
- [x] **FR-4.2 付费咨询墙(Token 闸门 + 钱包)**:用户 Token 钱包(余额/流水/充值)、
专家分身定价(单次费+可问条数)、付费解锁深度咨询会话(逐条扣次)、平台分成
(专家得 70%)。`services/wallet.js`(原子扣款 + 充值 seam) + `services/consult.js`
+ `/api/wallet[/topup]` + `/api/consult/expert|start|session|mine`;前端
`Wallet.vue`(充值) + `Consult.vue`(付费解锁聊天) + Studio 人设定价 + Embed 入口。
**支付 SDK 留接口**:`PAYMENT_PROVIDER=stub` 即时到账;接微信/Stripe 时实现
topup() 下单 + 回调到账(验签)。
- [x] **FR-5 策展 → 降维为通用「作品集」**(产品决策):不单列「艺术家计划」模块——
艺术家=专家人设的一种。抽出唯一不可替代的能力「答问时展示并讲解作品」,
泛化为**任何分身可用**的作品集:上传图(+说明/自动识图)→入 RAG;聊到相关
内容时按相似度阈值内联展示对应作品图。`services/gallery.js`(works) +
`/api/twins/:id/works` + `ask()` 附 `works` + ChatPanel 内联渲染 +
Studio「作品集」标签。「艺术家计划」仅作为 GTM 包装(名人入驻/博物馆 kiosk
= To B 定制),不是代码模块。
- [x] **真实支付通道架构**:订单生命周期(payments) + 幂等入账(原子 pending→paid,
防 webhook 重复) + 可插拔 provider。`services/payments.js`:`mock` 网关完整
模拟下单→支付→回调→入账(已本地验证含幂等);`stripe` Checkout(REST,无 SDK)
+ Webhook HMAC 验签(`/api/wallet/webhook/stripe`,raw body),填 STRIPE_* 即用;
`wechat` 预留 seam。前端 Wallet 充值跳转 payUrl + 返回轮询。**只差商户密钥**。
- [x] **双语对话 + 标准发音 + 英语陪练**:对话可切中/英(per-chat 语言选择器),
回复语言与语音随之切换;英文发音链 Azure Neural(标准, key-gated) → CosyVoice
克隆音色 → 浏览器 TTS 兜底;`英语陪练`模式让分身自然对话并纠错引导(💡 Better:…),
为「指导学生英语对话」打底。`services/azureTts.js` + speak.js 双语链 +
twins/embed ask 支持 lang/tutor + ChatPanel 语言/语音/陪练开关。
- [x] **UI 中英切换(i18n)全站完成**:vue-i18n + 顶部语言开关(中/EN,持久化、设
`<html lang>`);`i18n.ts` 由 {zh,en} 目录生成(18 命名空间 / 390 键),**全部
视图**已接 `t()`(App/Login/Dashboard/Studio/Plaza/Leaderboard/Rooms/Room/
Embed/Social/Consult/Challenge/Admin/Wallet/ChatPanel/CreateWizard),含插值。
保留为内容/品牌:性格标签值、`数字我·Digital Me` 品牌、语言名。
- [x] **三种登录**:邮箱密码(内置)+ 手机短信验证码 + 微信扫码。`services/altauth.js`
+ `/api/auth/sms/{send,verify}`、`/api/auth/wechat/{qr,poll,callback,mock-scan}`;
users 支持 email/phone/wechatOpenId(partial-unique),/me 改按 id 查;前端 Login
三标签页。短信(aliyun)/微信(开放平台)真实通道 key-gated,未配置走 stub
(短信 devCode 回显、微信 mock 扫码),均已本地端到端验证。
- ~~**成人/青少年分系统**、**家长监护**、**EDITION 参数化拆分**~~ **(已移除,2026-07 收敛为纯
成人版)**:删 `audience`/`EDITION`/`requireAdult`、`services/guardian.js`+`quiz.js`、
前端 `edition.ts`/版本选择器/Guardian.vue/ReQuiz.vue;互考擂台/排行榜转为成人无条件挂载。
- [x] **两个单点工具 MVP**:口播侠(TalkShot,照片+声+文案→口播视频)、互考擂台(Arena,上擂台+
战绩+排行榜)。复用现有后端,`useMyTwin` 自动管理分身;`VITE_APP` 可独立打包(DEPLOY §5c)。
(反考机 ReQuiz 已随青少年收敛移除。)
- [x] **每 MVP 独立落地页 + Slogan + 埋点漏斗**:`Landing.vue`(/welcome, 按 VITE_APP)
+ Slogan;`analytics.ts track()` → `/api/track` 入库 → 超管 `/api/admin/funnel`。
北极星指标——口播侠: video_generated;互考擂台: challenge_submitted。
- [x] **产品工厂(商店+购买即开通+权益门控)**:`src/products.js` SKU 目录(上架=加一条);
`/store` 商店 + `/buy/:sku` 独立购买链接;`checkout→fulfill(开通权益+magic token)→redeem(自动登入)`;
`requireEntitlement` 门控;`VITE_FACTORY=b|c` 工厂部署;utm 渠道归因(DEPLOY §5d)。
- [ ] 小程序(uni-app);3D/视频通话;接微信支付商户号 + 短信/微信登录商户密钥;外接 GA/umami。
## 数字我 · 社交分身(从「个人工具」升级为「社交载体」)
把「数字我」从私有资产变成**可授权的社交节点**:用户留在平台,不只为自己用,
而是为了「让别人认识数字版的我」。
### 身份三重分身
- **本体(Me)**:本人,最高权限,负责训练与审核。
- **社交分身(Social Clone)**:部署在好友/陌生人面前的**受限**版本——只有被授权的范围,带场景、边界、红线、有效期、可随时掐断。
- **访客(Friend)**:匿名与分身互动的人。
### 已落地(阶段一 MVP:熟人社交,验证「像不像」)
- **社交卡片(share)**:一个分身可生成多张卡片,各自独立链接 `/s/:token`。
- 场景模式:朋友 / 职场 / 恋人 / 自定义(注入人设,决定 HOW 说)。
- 边界:开放程度(含蓄/适中/健谈)、红线话题(被问到礼貌岔开)。
- 隐私红线:硬性禁止透露住址/电话/证件/行程等,即使知识库有也不说。
- 安全:访客输入内容硬过滤(违法/暴恐/儿童不良)直接拒答、不调模型;诱导违规由人设守护拒绝。
- 记忆隔离:访客对话**不进**本体私人历史/知识库;按 visitorId 单独记录供本体回看(反馈回流,默认开、可关)。
- 时效 + 拉黑:可设有效期;可一键停用(访客侧 410)。
- 防冒充:`twin.verified` 蓝V 字段(平台置位),访客页展示认证标识。
- 后端:`services/social.js` + `routes/social.js`(公开)+ `/api/twins/:id/shares` 管理 + `ask()` 注入社交守护 system 块。
- 前端:Studio「社交分身」标签(建卡/模式/红线/有效期/链接复制/访客反馈)+ 公开名片页 `/s/:token`(bare,可 iframe)。
- 已端到端实测:正常延展 / 红线岔开 / 有害硬过滤 / 访客回流分线 / 停用 410 全部通过。
### 阶段二 — 广场社交(扩大影响力,进行中)
- [x] 发现页 / 数字人广场:本体上架已发布分身(标签/分类),陌生人按标签搜索/浏览。后端 `services/plaza.js` + 公开 `routes/plaza.js`(`GET /api/plaza`、`/api/plaza/tags`、`POST /api/plaza/:slug/rate`)+ owner `PUT /api/twins/:id/plaza`(须先公开);前端 `views/Plaza.vue`(`/plaza`,搜索+标签 chips+卡片)+ Studio 发布页「上架到广场」+ 头部「广场」入口。
- [x] 「灵魂测试」:访客在聊天页给「像不像本人」打分(1–5),均分+评数沉淀为社交背书,广场卡片展示。
- [x] 「AI 代聊」:本体设状态语(如「他在开车,我先帮回」),聊天页顶部 banner 展示。
- [ ] 直播替身(2.5):本体开播,分身帮回弹幕(需接直播流,较重,后做)。
### 阶段三 — 群聊与协作(已落地)
- [x] 平台原生群聊房间:本体拉自己/公开分身进群,生成分享链接 `/room/:token`,
任何人取昵称即可加入。后端 `services/room.js` + `routes/rooms.js`
(authed 管理 `/api/rooms` + 公开参与 `/api/room/:token`)。
- [x] 群里 @召唤某分身:消息 @名字 或选择成员 → 该分身带群聊上下文+社交守护+审核作答。
- [x] 会议助手:`POST /api/rooms/:id/summary` 把群聊整理成「要点/决定/待办」纪要。
- [x] 群消息加密落库(AES-256-GCM)+ 输入输出审核 + AI 限流。
- 前端:`views/Rooms.vue`(建群/选成员/链接/纪要) + `views/Room.vue`(公开群聊, 轮询)。
- [ ] 接入微信群/外部 IM(需对接第三方,后续)。
### 社交商业化(待接)
- 本体付费:分身装扮/皮肤、算力包(免费每日限句)、多模态解锁(视频通话看脸)。
- 访客付费:与专家分身按分钟深度咨询;「解锁隐藏答案」微支付。
- B 端:社交名片(求职者把数字我放简历,HR 随时面试分身)。
### 安全红线(生死线)— 已做生产级加固
- **内容审核**:`services/moderation.js` 输入+输出**双向**审核(社交 / embed / 群聊)。
三档(高优先级优先、逐级兜底):`MODERATION_URL` 外部专业服务 → `MODERATION_MODE=llm`
DashScope/Qwen 分类(已实测能拦截正则漏网的诈骗话术)→ 本地正则地板。
- **超管认证后台**:前端 `/admin`(仅 `isSuperAdmin` 可见/可用)授/撤蓝V。
- **访客记录加密**:`services/crypto.js` AES-256-GCM 落库加密(`DATA_ENC_KEY`),
本体读取自动解密;旧明文与无 key 场景均兼容。
- **蓝V 认证流程**:`routes/admin.js` 仅 `SUPER_ADMIN_EMAILS` 可授,用户无法自我认证(防冒充)。
- **分层限流**:登录/注册防爆破(20/min)、公开 AI 接口防刷量(30/min)、广场(60/min)、全局(200/min)。
- **基础硬化**:helmet 安全头、密码常量时间比较、生产默认 `JWT_SECRET` fail-fast、
输入长度上限(`MAX_QUESTION_LEN`)、`trust proxy` 取真实 IP。
- 仍建议:接专业审核服务(替换本地兜底)、密钥走 KMS、访客数据主权条款落地到产品文案。
## 商业模式(参考,不锁死)
- C 端订阅:基础(静态形象+文本)免费/低价;高级(动态视频+声音克隆+长记忆)月费。
- 定制服务:上门拍照录音建高精度分身(纪念包);名人/艺术家高端定制。
- B 端垂类:画廊/教育/诊所的「专家数字分身」,项目制收费。
## 仓库结构
```
digital-me/
PLAN.md ← 本文件
digital-me-backend/ ← Node + Express + MongoDB + DashScope
digital-me-web/ ← Vue3 + Vite + TS + Tailwind + Pinia 前端
.github/workflows/ ← CI/CD(push master 自动部署到 ECS)
```