This commit is contained in:
xsl
2026-08-11 23:42:30 +08:00
parent c3a8c60e6f
commit d784d4ae15
5 changed files with 2159 additions and 212 deletions
@@ -0,0 +1,414 @@
# 用户系统与记忆系统需求文档
> 本文档为「美搭」App 的用户体系与个性化记忆体系需求文档,与 [产品方案](./鸿蒙美搭-智能穿搭美学助手-产品方案.md)、[美学报告需求文档](./美学报告-需求文档.md)、[穿搭 Agent 需求文档](./穿搭Agent-需求文档.md)、[美学知识库建设方案](./美学知识库-建设方案.md) 配套使用。
## 1. 概述
### 1.1 为什么需要记忆系统
穿搭建议的价值高度依赖"懂这个人"。同一句"帮我搭一套通勤 look",对梨型身材柔夏型的设计师和对倒三角身材深冬型的销售,正确答案完全不同。没有记忆系统,产品只能给出百科式的通用答案,而通用答案在小红书上免费且更丰富——**记忆系统是本产品相对于内容平台和通用大模型的核心护城河**。
同时,记忆系统解决三个具体问题:
| 问题 | 无记忆的表现 | 有记忆的表现 |
|------|-------------|-------------|
| 重复询问 | 每次对话都问"你的身高体重体型是?" | 一次诊断,永久复用 |
| 建议漂移 | 今天推荐紧身裙,明天说避免紧身 | 结论一致且可解释 |
| 无法进化 | 用户拒绝 10 次露肩款,第 11 次还推荐 | 自动学习禁忌,越用越准 |
### 1.2 设计目标
1. **一次输入,全局可用**:任何一处采集的用户信息,所有模块都能读到
2. **越用越懂**:显式设置 + 隐式行为共同塑造画像,无需用户额外操心
3. **用户可见可控**:记忆全部可查看、可修改、可删除(既是信任基础,也是《个人信息保护法》的硬要求)
4. **可解释**:任何推荐都能回答"为什么推荐给我",追溯到具体记忆项
5. **成本可控**:注入模型的记忆有 token 预算上限,不做无脑全量拼接
---
## 2. 用户系统
### 2.1 账号与登录
| 方式 | 优先级 | 说明 |
|------|-------|------|
| **华为账号一键登录** | P0(鸿蒙首发主路径) | 首发平台原生能力,转化率最高,V1 必须支持 |
| 手机号 + 验证码 | P0 | 通用兜底,跨端一致 |
| **游客模式** | P0 | 未登录即可体验核心功能,降低首启流失 |
| 微信 / Apple 登录 | P2 | 多端扩展阶段接入 |
#### 游客模式与数据迁移(关键设计)
用户第一次打开 App 就被要求注册,是最大的流失点之一。设计如下:
- 游客获得本地 `guest_id`(设备级),可完成:1 次换装、1 次发型试戴、1 次初级报告、3 次 Agent 对话
- 游客数据(画像、试穿结果、报告)存储在本地 + 服务端匿名档案
- 触发注册时机:游客额度用尽 / 主动保存收藏 / 主动分享 → 提示"注册以永久保存你的形象档案"
- **注册后自动迁移**:`guest_id` 全部数据归属到 `user_id`,迁移过程对用户无感,且必须幂等(防重复迁移)
- 同一设备多游客、同一游客多设备的冲突以"先注册者绑定"为准,冲突时提示用户选择
### 2.2 用户数据模型
#### 用户主表 `user`
| 字段 | 类型 | 说明 |
|------|------|------|
| `user_id` | string | 全局唯一 ID(雪花号) |
| `phone` | string | 手机号(加密存储,脱敏展示) |
| `huawei_open_id` | string | 华为账号标识 |
| `nickname` / `avatar` | string | 昵称、头像 |
| `gender` | enum | 女 / 男 / 不便告知 |
| `birthday` | date | 生日(用于色彩、五行、生日权益) |
| `member_level` | enum | free / member / premium |
| `member_expire_at` | datetime | 会员到期时间 |
| `points_balance` | int | 权益点数余额(见 §2.4) |
| `register_channel` | string | 注册渠道(归因) |
| `status` | enum | active / frozen / deleting / deleted |
| `created_at` / `last_active_at` | datetime | — |
#### 授权记录表 `user_consent`(合规必需)
| 字段 | 说明 |
|------|------|
| `consent_type` | 隐私政策 / 人脸信息处理 / 个性化推荐 / 推送通知 |
| `version` | 协议版本号 |
| `granted` | 是否同意 |
| `granted_at` / `revoked_at` | 授权与撤回时间 |
| `evidence` | 授权来源页面与操作记录 |
> 人脸信息属敏感个人信息,必须**单独授权**并可**单独撤回**;撤回后停止相关功能并删除派生数据。
### 2.3 用户中心功能
```
我的
├─ 形象档案
│ ├─ 我的形象报告(历史版本时间轴 + 前后对比)
│ ├─ 我的美学画像(结构化维度,可逐项修正)
│ └─ 我的记忆(偏好与禁忌管理,见 §3.7)
├─ 我的作品
│ ├─ 换装记录
│ ├─ 发型记录
│ └─ 收藏夹(搭配 / 发型 / 单品 / 色板)
├─ 我的衣橱(V2)
├─ 会员中心(权益、点数、订单)
├─ 设置
│ ├─ 隐私与授权管理(单项开关、撤回)
│ ├─ 数据管理(导出个人数据 / 清空照片 / 注销账号)
│ ├─ 内容偏好(关闭五行模块、关闭个性化推荐)
│ └─ 通知设置
└─ 帮助与反馈
```
### 2.4 会员与权益(含点数制改造)
**现存风险**:原方案"会员 ¥9.9/月 = 无限换装"在成本上不成立。换装单次为长耗时 GPU 推理(几十秒到几分钟),单次成本量级在角到元,重度用户一个月可轻松消耗数十元,会员越活跃越亏损。
**改造方案:基础权益 + 点数制**
| 权益项 | 免费 | 会员 ¥9.9/月 | 高级 ¥29.9/月 |
|--------|------|-------------|--------------|
| 每日免费换装 | 3 次 | 10 次 | 20 次 |
| 每日免费试戴发型 | 3 次 | 10 次 | 20 次 |
| 每日 AI 对话 | 10 轮 | 100 轮 | 不限(防刷上限) |
| 月度权益点数 | 0 | 300 点 | 1000 点 |
| 初级美学报告 | 每 30 天 1 次 | 每 7 天 1 次 | 不限(每日 ≤3) |
| 全面美学报告(V2) | 单次 ¥29.9 | 单次 ¥19.9 | 含 1 次/季 |
| 广告 | 有 | 无 | 无 |
| 我的衣橱容量(V2) | 20 件 | 200 件 | 不限 |
| 记忆条数上限 | 50 条 | 500 条 | 不限 |
| 高清导出 / 去水印 | ❌ | ✅ | ✅ |
- **点数消耗**:换装 10 点/次、发型 5 点/次、全面报告 200 点、高清重绘 20 点
- **点数获取**:会员月度赠送、签到、邀请好友、观看激励广告、单独购买(¥6 = 100 点)
- **免费额度与点数关系**:先扣免费次数,用尽后扣点数,点数不足才引导付费
- 每次消耗都要有明确的前置提示("本次将消耗 10 点,剩余 290 点"),禁止静默扣费
> V1 落地范围:**只做免费额度与计量**(记录每次调用的成本与次数),会员/点数/支付在 V2 开启。V1 期间用埋点数据校准真实单用户成本,再定价。
### 2.5 配额与计量
- 所有 AI 能力调用统一走**配额中心**:`check(user_id, ability) → allow/deny + 扣减方式`
- 每次调用落 `usage_log`:`user_id / ability / cost_estimate / duration / result / trace_id`
- 失败调用不扣额度(区分用户侧失败与服务端失败)
- 风控:设备维度 + 账号维度 + IP 维度三重限流,异常账号冻结并进人工审核
### 2.6 账号生命周期
| 操作 | 处理 |
|------|------|
| 注销 | 二次确认 + 短信验证 → 状态置 `deleting`,7 日冷静期内可恢复,到期彻底删除全部个人数据与派生画像 |
| 数据导出 | 提供 JSON + 图片包下载(画像、报告、记忆、作品),24h 内生成 |
| 清空照片 | 单独入口,删除所有上传原图与结果图(保留结论型画像,需明确告知) |
| 撤回人脸授权 | 停用报告与换装功能,删除人脸派生特征,保留自评类画像 |
| 冻结 | 违规内容触发,功能受限但数据保留 |
---
## 3. 记忆系统
### 3.1 设计原则
| 原则 | 说明 |
|------|------|
| **分层** | 稳定信息与易变信息分开存储,注入策略不同 |
| **带证据** | 每条记忆记录来源与证据,可回溯、可解释、可撤销 |
| **带置信度** | 显式 > 隐式,新证据 > 旧证据,用户确认 = 最高置信 |
| **会衰减** | 长期未被强化的隐式记忆自动降权,避免陈旧偏好长期干扰 |
| **可编辑** | 用户可见、可改、可删,且改动立即生效 |
| **有预算** | 注入模型的记忆有 token 上限,超出则摘要压缩 |
| **不存敏感原图** | 记忆库只存结论与特征,不存人脸原图 |
### 3.2 分层记忆模型
| 层级 | 名称 | 内容示例 | 写入方式 | 生命周期 | 主要消费方 |
|------|------|---------|---------|---------|-----------|
| **L0** | 身份档案<br>Identity | 性别、生日、身高、体重、职业、城市 | 用户填写 | 长期,随时可改 | 全模块(硬约束) |
| **L1** | 美学画像<br>Aesthetic Profile | 体型、脸型、肤色、季型、量感、直曲、动静、基因/心理风格、核心诉求 | **美学报告生成时写入**(唯一权威源) | 长期,90 天建议复核 | 报告、Agent、换装、发型推荐 |
| **L2** | 偏好与禁忌<br>Preference | 偏好风格/颜色/品类/长度;禁忌项(不穿短裙、不露肩、不接受高饱和);预算区间;品牌倾向 | 显式设置 + 隐式行为推断 | 长期,隐式项带衰减 | Agent、推荐排序与过滤 |
| **L3** | 事件记忆<br>Episodic | 试穿记录、收藏、分享、采纳/拒绝、对话摘要、报告版本 | 自动埋点 | 180 天滚动 | 相似召回、复盘、主动推荐 |
| **L4** | 会话记忆<br>Working | 当前多轮对话上下文、当前场景槽位(场合/天气/日期) | 运行时写入 | 会话结束或 24h 过期 | Agent 多轮对话 |
| **L5** | 衣橱记忆<br>Wardrobe | 用户已有单品(图片 + 结构化属性 + 使用频率) | 用户上传 + 视觉识别 | 长期,可标记淘汰 | 基于已有衣物的搭配(V2 核心差异化) |
**分层的意义**:L0/L1 是"硬约束",进任何一次推荐的系统提示;L2 是"排序与过滤器";L3 是"检索素材",按需 Top-K 召回而非全量注入;L4 是短时状态;L5 是差异化能力。
### 3.3 记忆项数据结构
```json
{
"memory_id": "mem_8f3a2c",
"user_id": "u_10086",
"layer": "L2",
"type": "taboo",
"key": "avoid_category",
"value": "短裙",
"display": "不接受短裙",
"confidence": 0.92,
"source": "explicit_user_input",
"evidence": [
{ "type": "chat", "ref": "conv_991", "at": "2026-08-10T21:03:00+08:00", "excerpt": "我从来不穿短裙" }
],
"scope": ["outfit_recommend", "agent_chat", "report"],
"created_at": "2026-08-10T21:03:12+08:00",
"last_reinforced_at": "2026-08-10T21:03:12+08:00",
"decay_after_days": 365,
"status": "active",
"user_editable": true
}
```
字段约定:
- `source`:`explicit_user_input`(用户明说)/ `user_setting`(设置页配置)/ `report_vision`(报告视觉分析)/ `self_reported`(自评问卷)/ `behavior_inferred`(行为推断)/ `llm_extracted`(对话抽取)
- `confidence`:见 §3.5 置信度规则
- `status`:`active` / `pending_confirm`(待用户确认)/ `decayed` / `overridden` / `deleted`
- `scope`:该记忆生效的业务域,避免"对话里说的玩笑话"污染报告结论
### 3.4 写入机制
#### ① 显式写入(高置信)
- 问卷填写、设置页配置、报告数据修正
- 对话中的明确陈述:"我不喜欢黄色""我 160cm""帮我记住我不穿高跟鞋"
- 对话抽取到显式偏好时,**回执确认**:"已记住:不穿高跟鞋。可在「我的记忆」中修改" —— 让用户感知到系统在学习,是信任建立的关键动作
#### ② 隐式推断(低置信,需累积)
从行为中提取候选记忆,不直接生效:
| 行为信号 | 推断方向 | 生效阈值 |
|---------|---------|---------|
| 采纳/试穿某搭配 | 该风格、色系、品类为正样本 | 累积计数,用于排序加权 |
| 收藏 | 强正样本(权重 > 试穿) | 同上 |
| 连续拒绝/换一套 | 该方案的共有属性为负样本 | **同属性连续 3 次拒绝** → 生成 `pending_confirm` 候选 |
| 长时间浏览未操作 | 弱兴趣 | 仅作排序微调,不落记忆 |
| 主动删除某记录 | 负样本 | 计数 |
| 反复搜索某关键词 | 兴趣点 | 3 次以上 → 候选偏好 |
- 候选记忆生成后,选择**恰当时机**征询确认(不打断当前任务,放在下一次推荐结果页):"看起来你不太喜欢露肩款,要设为不推荐吗?[是/否/不再提示]"
- 用户确认 → `confidence = 1.0`,`source` 升级为 `explicit`;用户否认 → 记录反例并不再推断该项
#### ③ 派生写入
- 报告生成完成 → 批量写入 L1 全部维度
- 换装/试戴成功 → 写入 L3 事件
- 对话结束 → LLM 生成 ≤100 字对话摘要写入 L3
### 3.5 置信度与衰减
**置信度初值**:
| 来源 | 初始置信度 |
|------|-----------|
| 用户确认 / 设置页配置 | 1.00 |
| 对话中明确陈述 | 0.90 |
| 报告视觉分析(高置信维度,如体型) | 0.85 |
| 报告视觉分析(争议维度,如十二季细分) | 0.65 |
| 自评问卷 | 0.60 |
| 行为推断(达阈值) | 0.50 |
**衰减规则**:
- 每 30 天未被强化,隐式记忆(`source = behavior_inferred / llm_extracted`)置信度 × 0.9
- 置信度 < 0.3 时状态置 `decayed`,不再参与推荐,但保留可查(用户可恢复)
- 显式记忆与 L0/L1 不衰减,仅通过新证据覆盖
- 每次被新证据强化:`confidence = min(1.0, confidence + 0.1)`,刷新 `last_reinforced_at`
### 3.6 冲突消解
多来源必然冲突(自评"我是苹果型",视觉分析"梨型"),规则如下:
1. **优先级**:`用户确认` > `显式陈述` > `视觉分析` > `自评` > `行为推断`
2. **同级取新**:同优先级时以时间更新者为准
3. **画像 vs 偏好冲突**:专业结论与用户主观偏好冲突时,**以用户偏好执行,同时给出专业提示**
> 示例:报告判定不适合正红色,但用户明确喜欢正红色 → 仍然推荐正红色单品,附加建议"可通过下装用低饱和色平衡,或让红色远离面部"
这条规则很重要:产品不能因为"专业正确"而否定用户喜好,否则会被感知为说教。
4. **视觉覆盖自评**:有照片诊断结果时自动覆盖自评项,并提示用户"已根据照片更新你的体型判定"
5. **冲突留痕**:被覆盖的记忆置 `overridden` 而非删除,保留在历史中可追溯
### 3.7 用户可见可控:「我的记忆」页面
这是合规刚需,也是差异化体验(大多数 AI 产品的记忆是黑盒)。
```
我的记忆
├─ 我的画像(L0 + L1)
│ └─ 逐项展示:值 + 来源 + 置信度标签("照片诊断" / "你告诉我的" / "我猜的")
│ └─ 操作:修正 / 恢复系统判定
├─ 我的偏好(L2)
│ ├─ 喜欢:风格标签、颜色、品类(可增删)
│ └─ 不接受:禁忌清单(可增删,删除后不再过滤)
├─ 待确认(pending_confirm)
│ └─ "看起来你不太喜欢露肩款?" [确认 / 否认]
├─ 最近记录(L3,按时间线)
│ └─ 单条可删除(删除后不再参与推荐计算)
└─ 全局操作
├─ 关闭个性化推荐(关闭后仅用 L0 通用建议)
└─ 清空全部记忆(二次确认)
```
- 置信度不向用户暴露数值,用自然语言标签表达("照片诊断""你告诉我的""我猜的")
- 任何修改**立即生效**,且明确反馈影响范围:"已更新,之后的搭配建议会避开短裙"
### 3.8 记忆检索与注入
**Token 预算是硬约束**,不能把全部记忆塞进提示词。策略:
| 阶段 | 处理 | 预算 |
|------|------|------|
| 画像摘要 | L0 + L1 压缩为固定结构短文本(模板化,非 LLM 生成) | ≤ 250 token |
| 偏好摘要 | L2 中 `confidence ≥ 0.5` 的项,按置信度排序取 Top 15 | ≤ 150 token |
| 事件召回 | 按当前 query 向量检索 L3,取 Top 3~5 条摘要 | ≤ 200 token |
| 会话上下文 | L4 最近 6 轮原文 + 更早轮次的滚动摘要 | ≤ 800 token |
| **合计** | — | **≤ 1400 token** |
画像摘要示例(注入 Agent 系统提示的实际形态):
```
【用户画像】女 / 160cm / 53kg / 设计师 / 上海
体型:梨型(A型),溜肩,核心诉求:显高显瘦、修饰溜肩与下半身
面部:鹅蛋脸,三庭五眼均匀,中量感,轮廓适中,静态型
色彩:黄二白,柔夏型(低饱和冷调),最佳色:灰蓝/灰紫/雾霾蓝/冷灰粉/浅灰绿
风格:基因自然型 + 心理优雅型 → 自然优雅
【偏好】喜欢:法式、通勤、真丝/棉麻|不接受:短裙、露肩、高饱和亮色
【近期】3 天前试穿"灰蓝西装 + 冷米黄西裤"并收藏;拒绝过 2 套包臀裙方案
```
- 缓存策略:画像摘要在画像未变更时缓存复用,避免每轮重算
- 未命中记忆时的降级:明确告知"我还不了解你的身材数据,建议先做个形象诊断(1 分钟)",而不是编造假设
### 3.9 存储与技术形态
| 数据 | 存储 | 说明 |
|------|------|------|
| L0 / L1 / L2 结构化画像 | 关系型数据库 | 强一致、可索引、可审计 |
| L3 事件与对话摘要 | 关系库 + 向量库 | 向量库用于语义召回 |
| L4 会话状态 | KV 缓存(带 TTL) | 高频读写 |
| L5 衣橱单品 | 关系库 + 对象存储(图片)+ 图像向量 | 支持图搜与属性筛选 |
| 变更审计 | 追加写日志表 | 记录每次记忆变更的 before/after 与操作者 |
- 端侧缓存画像摘要,支持弱网/离线时的基础个性化展示
- 所有记忆读写走统一 `MemoryService`,禁止各业务模块直连表,保证冲突消解与审计逻辑唯一
### 3.10 隐私与合规
- 记忆系统写入必须建立在「个性化推荐」授权之上,用户可随时关闭(关闭后仅保留 L0)
- 人脸原图不入记忆库;L1 只存结论型特征
- 记忆数据参与账号注销的彻底删除流程
- 记忆内容不得包含健康、宗教信仰、政治倾向等敏感类别推断(即使用户提及,也不作为记忆项持久化)
- 未成年人账号不启用行为推断类隐式记忆
---
## 4. 与各模块的关系
```
┌──────────────────┐
照片 + 问卷 ───▶ │ 美学报告 │ ──写入 L1──┐
└──────────────────┘ │
▼
显式设置 ─────────────────────────────▶ ┌──────────────┐
对话陈述 ─────────────────────────────▶ │ 记忆系统 │
行为埋点 ─────────────────────────────▶ │ L0~L5 │
└──────┬───────┘
│ 画像摘要 + 偏好过滤 + 事件召回
┌──────────────────────┼──────────────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ 穿搭 Agent │ │ 换装/发型 │ │ 知识库 │
│ │ │ 推荐 │ │ 检索过滤 │
└────────────┘ └────────────┘ └────────────┘
│ │
└──── 采纳/拒绝反馈 ───┴──▶ 回写 L2 / L3
```
| 模块 | 读取 | 写入 |
|------|------|------|
| 美学报告 | L0、L2(禁忌影响建议) | L1 全量、L3 报告版本 |
| 穿搭 Agent | L0/L1/L2 摘要、L3 召回、L4 上下文 | L2 候选偏好、L3 对话摘要、L4 上下文 |
| 换装模块 | L1(体型/季型用于素材推荐)、L2(禁忌过滤) | L3 试穿事件 |
| 发型模块 | L1(脸型/量感/直曲/发色) | L3 试戴事件 |
| 知识库检索 | L0/L1/L2 作为硬过滤条件 | — |
| 我的衣橱(V2) | L1/L2 用于衣橱适配分析 | L5 单品 |
---
## 5. 指标
### 5.1 用户系统
- 游客 → 注册转化率 > 25%
- 华为账号一键登录占比 > 60%(首发平台)
- 登录成功率 > 99%,注销请求处理时效 100% 达标
- 人脸授权通过率 > 60%
### 5.2 记忆系统
| 指标 | 目标 | 意义 |
|------|------|------|
| 画像完备率(L1 关键 8 项填充率) | > 70% | 个性化能力的地基 |
| 人均记忆条数(L2) | > 8 条 | 衡量学习深度 |
| 记忆确认率(pending → active) | > 50% | 隐式推断的准确性 |
| 记忆修正率 | < 20% | 过高说明诊断或推断不准 |
| 「我的记忆」页访问率 | > 15% | 透明度是否被感知 |
| 关闭个性化推荐比例 | < 5% | 信任度反向指标 |
| 有画像 vs 无画像用户的建议采纳率差值 | > 15pp | **验证记忆系统的实际价值** |
| 重复询问率(Agent 询问已知信息的比例) | < 3% | 记忆注入是否生效 |
---
## 6. 待确认事项
- [ ] 华为账号登录的接入方式与 Uni-App-x 兼容性验证
- [ ] 游客数据迁移的边界情况(多设备、换机、重装)处理方案
- [ ] 向量库选型(自建 / 云服务)与成本评估
- [ ] 会员点数制的最终定价与点数消耗比(依赖 V1 真实成本数据)
- [ ] 隐式记忆推断的阈值与确认时机的 A/B 方案
- [ ] 记忆数据保留时长与法务确认(L3 事件建议 180 天)
- [ ] 是否支持家庭/多人档案(一个账号多个形象档案,如帮家人做诊断)——影响数据模型,建议 V1 预留 `profile_id` 字段
- [ ] 端侧记忆缓存的加密方案
---
**文档版本**:v1.0
**创建日期**:2026-08-11
**作者**:产品团队
**状态**:待评审
**关联文档**:
- [美搭 · 智能穿搭美学助手 产品方案](./鸿蒙美搭-智能穿搭美学助手-产品方案.md)
- [美学报告需求文档](./美学报告-需求文档.md)
- [穿搭 Agent 需求文档](./穿搭Agent-需求文档.md)
- [美学知识库建设方案](./美学知识库-建设方案.md)