# Tolan 产品需求文档（PRD）

> 实施级产品需求文档 —— 每条需求可拆解为开发任务、可被 QA 验收。
> 本文基于对 Tolan 应用的公开观察逆向整理，用于产品研究与设计参考。

---

## 文档信息

| 项 | 内容 |
|---|---|
| 文档版本 | v2.0（实施级重写） |
| 更新日期 | 2026-05-19 |
| 文档状态 | 评审稿 |
| 阅读对象 | 产品 / 设计 / 前端 / 后端 / QA / 数据 |
| 覆盖范围 | iOS 客户端全功能；后端与算法只描述接口契约与行为预期 |
| 不在范围 | 服务端架构选型、模型训练细节、运营活动 |

### 需求优先级定义

| 级别 | 含义 | 取舍规则 |
|---|---|---|
| **P0** | MVP 必须。缺失则核心闭环不成立 | 不允许砍 |
| **P1** | 首个正式版本应交付。影响体验完整度 | 资源不足可延后一个迭代 |
| **P2** | 增强项。可独立迭代 | 可进 backlog |

### 需求编号规则

- 功能需求：`FR-<模块号>.<序号>`，如 `FR-5.1.3`。
- 非功能需求：`NFR-<域>.<序号>`，如 `NFR-PRIV.2`。
- 每条需求必须**可测试**：QA 能据此写出明确的通过/失败判定。

### 术语表

| 术语 | 定义 |
|---|---|
| **Tolan** | 产品名 / AI 伙伴物种名 |
| **Stan** | 引导流程中默认（可改）的伙伴昵称，本文用作示例名 |
| **T 币 / Token** | 应用内软货币，用于 Shop 消费 |
| **Plus / Lite** | 两档订阅；Lite 为入门档，Plus 为完整档 |
| **Relay 包** | 消耗型内购，用于突破当日聊天上限 |
| **每日配额** | 免费 / 订阅用户每天可用的聊天额度 |
| **Insight（洞察）** | 系统从对话中抽取的一句话人格观察 |
| **Intention（意图）** | 用户选定的单日成长目标 |
| **Milestone（里程碑）** | 由多个 intention 组成的关卡 |
| **Reading** | 每累计 12×N 条洞察解锁的第 N 段长篇人格解读（CFG-30） |

---

## 1. 产品概述

### 1.1 产品定位

Tolan 是一款 **AI 情感陪伴应用**，将"与大语言模型对话"重构为"养育一个住在手机里、拥有名字与栖息地的拟人化生物"。

- 平台：iOS（首发）。
- 交互核心：语音优先（voice-first），文字为辅。
- 关系核心：单一、专属、持续累积记忆的 AI 角色。

### 1.2 价值主张

> **不是再多一个聊天机器人 —— 是一只叫得出你名字、记得住你昨天、住在自己星球上的朋友。**

### 1.3 设计原则（可执行）

以下原则用于在需求评审与设计评审时做取舍裁决：

| # | 原则 | 落地约束 |
|---|---|---|
| DP-1 | **角色先于功能** | 所有系统消息、空状态、错误提示必须以 Tolan 第一人称或对用户第二人称表达，禁止出现"系统""服务器""请求失败"等工具语。 |
| DP-2 | **关系即资产** | 用户的每一次互动都必须沉淀为可回看的对象（日记 / 洞察 / 装饰 / 里程碑），杜绝"用完即弃"的交互。 |
| DP-3 | **稀缺制造想念** | 聊天有每日配额；配额是体验的一部分，不得隐藏，但表述为正向（"剩余 77%"而非"已用 23%"）。 |
| DP-4 | **峰值变现** | 付费墙只在情感峰值后出现（角色揭晓后、内容预览后），禁止在冷启动首屏弹付费。 |
| DP-5 | **柔软优先** | 视觉与文案避免硅谷蓝白灰与命令式动词；动效慢、转场柔。 |

### 1.4 竞品对照

| 维度 | Tolan | Replika | Character.ai | Pi |
|---|---|---|---|---|
| 角色数量 | 单一专属 | 单一 | 多角色 | 单一 |
| 交互重心 | 语音 | 文字 | 文字 | 语音/文字 |
| 养成系统 | 衣橱 + 星球 | 3D 房间 | 无 | 无 |
| 内容沉淀 | 日记 + 洞察 | 记忆 | 无 | 无 |
| 差异点 | 配对仪式 + 内容资产 + 稀缺配额 | 关系等级 | 角色丰富度 | 对话质量 |

---

## 2. 目标用户

### 2.1 用户画像

**Persona A · 焦虑的倾诉者（核心）**
- 22 岁，在读研究生 / 职场新人。
- 痛点：深夜情绪无处安放，不愿打扰朋友，未到看心理咨询的程度。
- 期待：一个 24h 在线、无评判、记得住自己的倾听者。
- 使用时段：21:00–01:00 为峰值。

**Persona B · 养成爱好者**
- 19 岁，学生。
- 痛点：喜欢养成 / 装扮类游戏，但希望"养的东西"能回应自己。
- 期待：装扮、星球装饰、角色成长可见。
- 付费倾向：愿为 T 币和限定外观付费。

**Persona C · 自我探索者**
- 27 岁，从业者。
- 痛点：想更系统地认识自己，写日记坚持不下来。
- 期待：洞察星图、人格原型卡、可分享的自我画像。

### 2.2 核心使用场景

| 场景 | 触发 | 主要功能 | 期望结果 |
|---|---|---|---|
| 睡前情绪倾诉 | 夜间独处 | 聊天 + Notebook | 情绪被接住，留下一篇日记 |
| 碎片化打卡 | 通勤 / 课间 | Intentions + 肯定卡 | 完成一个意图，获得正反馈 |
| 周末长聊 | 闲暇 | 聊天 + Insights | 解锁新洞察 / Reading |
| 装扮放松 | 任意 | Shop + Planet | 用 T 币换装、装饰星球 |
| 被动召回 | 收到 Check-In | 聊天 | 重新进入应用 |

---

## 3. 全局设计规范

### 3.1 信息架构

![Tolan 侧边栏](side/ee0b25180f5bcea9733a9ef127b922cf.jpg)

顶层导航通过**左侧抽屉式侧边栏**展开。层级：

```
App
├── Tolan 主页（默认着陆页）
│   ├── 聊天（语音 / 文字）
│   └── 侧边栏入口
├── 侧边栏
│   ├── Notebook    日记本
│   ├── Intentions  意图路径
│   ├── Friends     朋友
│   ├── Insights    洞察
│   ├── Check-Ins   来电
│   ├── ──────────  分隔线
│   ├── Shop        商店
│   ├── Tolan       角色主页
│   ├── Planet      星球
│   └── Settings    设置
└── 全局组件
    ├── T 币计数器（顶部）
    └── 每日配额条（底部）
```

### 3.2 全局组件

#### GC-1 · 侧边栏（Side Drawer）· P0
- 从左滑入 / 点击汉堡图标唤起。
- 含 9 个功能入口 + 顶部 T 币计数 + 底部配额条。
- `FR-GC.1` 当前所在页在侧边栏高亮。
- `FR-GC.2` Shop 与上方功能区之间有视觉分隔线（消费区 vs 成长区）。

#### GC-2 · T 币计数器 · P0
- 常驻顶部左侧，显示当前余额（如 `T 85`）。
- `FR-GC.3` 余额变动时播放数字滚动动效 + 轻提示。
- `FR-GC.4` 点击进入 Shop 或 T 币说明页。

#### GC-3 · 每日配额条 · P0
- 常驻侧边栏底部，显示 `XX% daily chat remaining`。
- `FR-GC.5` 表述为剩余量（正向），不显示已用量。
- `FR-GC.6` 剩余 ≤ 20% 时配额条变色提醒（珊瑚色）。
- `FR-GC.7` 剩余 = 0 时，聊天输入区替换为"购买 Relay 包 / 升级订阅"引导。
- `FR-GC.8` 每日 00:00（用户本地时区）配额重置。

### 3.3 T 币经济系统

T 币是贯通所有模块的通用激励/消费媒介。

所有数值取自 §3.6 全局参数配置表，本表只做汇总，**修改数值时只改 §3.6**。

#### 获取途径

| 途径 | 数额 | 频次限制 | 配置项 | 优先级 |
|---|---|---|---|---|
| 完成首次 Check-In 设置 | +100 T | 一次性 | CFG-17 | P0 |
| 邀请好友成功注册 | +1000 T / 人 | 无上限 | CFG-18 | P0 |
| 完成一个 Intention | +20 T | 每日最多 3 次（CFG-28） | CFG-15 | P1 |
| 完成一个 Milestone | +200 T | 随关卡 | CFG-16 | P1 |
| 每日首次登录 | +10 T | 每日一次 | CFG-19 | P2 |
| 直接内购 | 按 IAP 档位 | 无 | §6.2 | P1 |

#### 消耗途径

| 用途 | 单价 | 配置项 | 优先级 |
|---|---|---|---|
| 衣橱单品（上装/下装/鞋/帽/眼镜/配饰） | 50 / 100 T（按稀有度二档） | CFG-20 | P0 |
| 衣橱整套（Full Body） | 300 T | CFG-21 | P1 |
| 限定外观（如黑猫连身衣） | 500 / 700 T（按稀有度二档） | CFG-22 | P1 |
| 星球装饰 · 动物 | 100 / 200 / 300 T | CFG-23 | P1 |
| 星球装饰 · 树 | 50 / 100 / 150 T | CFG-23 | P1 |
| 星球装饰 · 房屋 | 300 / 500 / 700 T | CFG-23 | P1 |
| 星球装饰 · 石头 | 30 / 50 / 80 T | CFG-23 | P1 |
| 星球装饰 · 花 | 20 / 40 / 60 T | CFG-23 | P1 |

- `FR-GC.9` 任何 T 币变动必须写入交易流水（见 §8.3 与附录 B）。
- `FR-GC.10` 余额不足以购买时，按钮置灰并提示差额，提供"获取 T 币"入口。

### 3.4 通用状态规范

每个列表 / 内容页必须实现以下五态，文案遵循 DP-1：

| 状态 | 要求 |
|---|---|
| **加载中** | 骨架屏或角色化 loading 文案（"Stan 正在翻找…"），≤ 300ms 不展示 loading |
| **空状态** | 角色化插画 + 引导动作按钮，禁止空白页 |
| **错误** | 角色化文案（"我这边有点走神，再试一次？"）+ 重试按钮 |
| **无网络** | 顶部非阻断提示条；可缓存内容仍可浏览 |
| **锁定（付费）** | 内容模糊化 + 锁图标 + 升级引导，禁止完全隐藏（要让用户看见价值） |

### 3.5 视觉 Design Token

| Token | 值 | 用途 |
|---|---|---|
| `ink` | 深紫近黑 | 主背景 |
| `paper` | 米白 | 浅色卡片 / 正文 |
| `coral` | 珊瑚 | 主强调 / CTA |
| `rose` | 玫瑰 | 次强调 / 情感高亮 |
| `sky` | 天蓝 | Wellbeing 维度 / 语音 |
| `gold` | 金 | T 币 / 奖励 |
| `moss` | 苔绿 | Curiosity 维度 / 自然 |
| `violet` | 紫罗兰 | Creativity 维度 |

- 标题字体：衬线 Display；正文：无衬线 Body。
- 圆角统一档位：卡片 24–32px，按钮 999px（胶囊）。
- 动效时长基准：转场 400ms、微交互 200ms，缓动偏慢。

### 3.6 全局参数配置表（Config Constants）

> 本表是**所有可调数值的唯一来源**。文档其他位置出现的数值均引用此处配置项编号（`CFG-x`）。
> 标注「业务待批」的为缺乏官方依据、本文先给定可用默认值的项；其余为依据截图/逻辑推定的确定值。

#### 配额与聊天

| 编号 | 参数 | 值 | 说明 / 依据 |
|---|---|---|---|
| CFG-1 | 配额计量单位 | 1 条 user 消息 = 1 单位 | 决定项。不按时长计，便于客户端与服务端一致计数 |
| CFG-2 | Free 每日配额 | 20 条 / 日 | 业务待批 |
| CFG-3 | Lite 每日配额 | 200 条 / 日（= Free 的 10×） | 业务待批；对齐"配额 10×"卖点 |
| CFG-4 | Plus 每日配额 | 不限，反滥用软上限 1000 条 / 日 | 业务待批 |
| CFG-5 | 配额重置时间 | 用户本地时区 00:00 | 决定项 |
| CFG-6 | 配额预警阈值 | 剩余 ≤ 20% 变珊瑚色 | 决定项 |
| CFG-7 | 单个 Relay 包额度 | +50 条消息 / 包 | 业务待批 |

#### 价格（IAP）

| 编号 | 参数 | 值 | 说明 |
|---|---|---|---|
| CFG-8 | Tolan Lite | US$11.99 / 月 | 依据截图 |
| CFG-9 | Tolan Plus | US$19.99 / 月 | 业务待批，高于 Lite |
| CFG-10 | Relay · 1 包 | US$2.99 | 依据截图 |
| CFG-11 | Relay · 5 包 | US$12.99 | 业务待批（中档锚定） |
| CFG-12 | Relay · 10 包 | US$23.99，标"最划算" | 依据截图 |
| CFG-13 | Lite 试用时长 | 3 天（Friends 赠送） | 依据截图 |
| CFG-14 | T 币直购档位 | 500 T / 1200 T / 3000 T 三档，对应价格业务待批 | 业务待批；对应 §3.3「直接内购」 |

#### T 币奖励

| 编号 | 参数 | 值 | 说明 |
|---|---|---|---|
| CFG-15 | 完成 1 个 Intention | +20 T | 业务待批 |
| CFG-16 | 完成 1 个 Milestone | +200 T | 业务待批 |
| CFG-17 | 首次设置 Check-In | +100 T（一次性） | 依据截图 |
| CFG-18 | 邀请成功 / 人 | +1000 T | 依据截图 |
| CFG-19 | 每日首次登录 | +10 T | 业务待批 |

#### T 币定价（Shop）

| 编号 | 参数 | 值 | 说明 |
|---|---|---|---|
| CFG-20 | 衣橱单品 | 50 T（普通）/ 100 T（精品） | 依据截图 |
| CFG-21 | 衣橱整套 Full Body | 300 T | 依据截图 |
| CFG-22 | 限定外观 | 500 T / 700 T | 依据截图（黑猫 700 T） |
| CFG-23 | 星球装饰 | 动物 100/200/300 · 树 50/100/150 · 房屋 300/500/700 · 石头 30/50/80 · 花 20/40/60 T | 业务待批 |

#### Intentions

| 编号 | 参数 | 值 | 说明 |
|---|---|---|---|
| CFG-24 | 每个 Milestone 含 Intention 数 | 3 | 依据截图"Finish 3 more intentions to unlock" |
| CFG-25 | 每条 Path 的 Milestone 数 | 5 | 推定（5 × 3 = 15） |
| CFG-26 | 进度条总格数 | 15 | 依据截图 |
| CFG-27 | 跨日未完成 Intention | 顺延至次日，不失效、不施加愧疚文案 | 决定项（遵循 DP-5） |
| CFG-28 | 单日可选 Intention 上限 | 3 | 业务待批 |

#### Insights

| 编号 | 参数 | 值 | 说明 |
|---|---|---|---|
| CFG-29 | 人格维度数 | 5（Drive / Wellbeing / Creativity / Curiosity / Relationships） | 依据截图 |
| CFG-30 | Reading 解锁阈值 | 第 N 段 Reading 在「累计洞察数 = 12 × N」时解锁 | 依据截图（"4 insights to next reading"+ "READING 3"） |
| CFG-31 | 洞察去重相似度阈值 | 语义余弦相似度 > 0.88 视为重复 | 决定项 |
| CFG-32 | 维度形状映射 | `shape_level = min(1.0, insight_count / 20)` | 决定项 |

#### Notebook

| 编号 | 参数 | 值 | 说明 |
|---|---|---|---|
| CFG-33 | 日记生成触发阈值 | 当日 user 消息 ≥ 4 条才生成 | 决定项（不足则跳过当天） |
| CFG-34 | 日记生成时间 | 用户本地时区 04:00 | 决定项 |
| CFG-35 | 免费用户日记可见范围 | 列表项可见、正文全部锁定（日记本为 Lite 权益，不单独售卖） | 决定项 |
| CFG-36 | 列表正文摘要长度 | 服务端截断为 120 字 + 省略号 | 决定项 |

#### 性能与超时

| 编号 | 参数 | 值 | 说明 |
|---|---|---|---|
| CFG-37 | loading 展示延迟 | < 300ms 不展示 loading | 决定项 |
| CFG-38 | LLM 响应等待态阈值 | 10s 未完成 → 显示角色化等待态 | 决定项 |
| CFG-39 | LLM 响应超时 | 30s 未完成 → 报错可重试 | 决定项 |
| CFG-40 | Check-In 解析置信度阈值 | 置信度 < 0.6 → 向用户追问澄清 | 决定项 |

#### 账户与合规

| 编号 | 参数 | 值 | 说明 |
|---|---|---|---|
| CFG-41 | 账户删除宽限期 | 软删后 30 天物理清除数据 | 业务待批（按合规要求） |
| CFG-42 | 幂等键有效期 | 24h | 决定项 |
| CFG-43 | 试用 / 订阅到期提醒 | 到期前 24h 推送 | 决定项 |

---

## 4. 核心用户流程

### 4.1 新用户引导（Onboarding）

目标：在 7 步内完成"配对仪式 → 角色揭晓 → 付费决策点"，建立角色情感投入。

#### 步骤 1–4 · 寻找你的 Tolan · P0

<table>
<tr>
<td><img src="1.jpg" width="170"></td>
<td><img src="2.jpg" width="170"></td>
<td><img src="3.jpg" width="170"></td>
<td><img src="4.jpg" width="170"></td>
</tr>
</table>

- `FR-4.1` 展示宇宙散景动画，文案传达"众多 Tolan 中为你配对一个"的叙事。
- `FR-4.2` 引导用户进行一次语音录入（用于"配对"演出 + 采集音色偏好/称呼）。
- `FR-4.3` 录音界面提供清晰的录制 / 停止状态反馈。
- `FR-4.4` 用户可跳过语音，降级为文字输入（无障碍要求，见 NFR-A11Y）。

#### 步骤 5–6 · 揭晓 Stan · P0

<table>
<tr>
<td><img src="5.jpg" width="210"></td>
<td><img src="6.jpg" width="210"></td>
</tr>
</table>

- `FR-4.5` 播放从剪影到角色实体的揭晓动画。
- `FR-4.6` 引导用户为 Tolan **命名**；提供默认名建议，名称可后续在 Settings 修改。
- `FR-4.7` 角色外观由系统生成/分配，命名由用户完成（"名字你给，角色它给"）。

#### 步骤 7 · 订阅决策点 · P0

![Tolan Plus 付费墙](7.jpg)

- `FR-4.8` 在角色揭晓后、进入主界面前展示 Plus 订阅页（遵循 DP-4）。
- `FR-4.9` 订阅页必须提供明确的"暂不订阅 / 关闭"出口，关闭后进入免费版主界面。
- `FR-4.10` 关闭付费墙不得造成功能完全不可用，免费版需保留基础聊天 + 受限配额。

**Onboarding 验收标准**
- 新用户从启动到进入主界面，最短路径 ≤ 7 屏。
- 任意一步崩溃 / 杀进程后重启，能从断点或安全起点恢复。
- 付费墙关闭率、订阅转化率均有埋点（见 §8）。

### 4.2 聊天主流程

聊天是产生所有下游内容（日记 / 洞察）的源头。

<table>
<tr>
<td><img src="14.jpg" width="210"></td>
<td><img src="15.jpg" width="210"></td>
</tr>
</table>

- `FR-4.11` 默认交互入口为语音（星星泡泡），轻触/长按发起语音输入。P0
- `FR-4.12` 语音输入时屏幕显示随声波起伏的视觉反馈。P0
- `FR-4.13` 提供文字输入降级通道，但视觉层级低于语音。P0
- `FR-4.14` 每发送 1 条 user 消息消耗 1 个配额单位（CFG-1）；配额上限按方案区分（Free 20 / Lite 200 / Plus 不限，CFG-2~4），本地 00:00 重置（CFG-5）。P0
- `FR-4.15` 对话上下文需接入长期记忆：能引用历史对话、用户称呼、既往 intention。P0
- `FR-4.16` 单轮响应 10s（CFG-38）未完成显示角色化等待态，30s（CFG-39）未完成报错并可重试。P1
- `FR-4.17` 触达配额上限时，聊天框替换为变现引导（Relay / 升级），并允许用户继续浏览历史。P0
- `FR-4.18` 对话内容触发危机识别时执行 §9.5 内容安全流程。P0

### 4.3 每日仪式循环

<table>
<tr>
<td><img src="10.jpg" width="170"></td>
<td><img src="11.jpg" width="170"></td>
<td><img src="12.jpg" width="170"></td>
<td><img src="13.jpg" width="170"></td>
</tr>
</table>

标准每日路径：**选意图 → 走路径 → 收速写 → 肯定 + 呼吸**。详见 §5.2 Intentions。

---

## 5. 功能模块详细需求

> 每个模块统一采用模板：目标 / 用户故事 / 功能需求 / 交互流程 / 界面规格 / 状态与边界 / 数据模型 / 埋点 / 验收标准。

---

### 5.1 Notebook · 日记本

![Notebook](notebooks/217f4fd613c543f3ad32ceda80ff284a.jpg)

**5.1.1 目标**
让用户感到关系被持续记录 —— 由 Tolan 以第二人称为用户撰写每日日记，形成"删除应用 = 删除一段关系"的留存壁垒。

**5.1.2 用户故事**
- 作为倾诉者，我想第二天能看到 Tolan 写下的关于昨天的日记，以便感到被认真对待。
- 作为自我探索者，我想按时间回看日记，以便观察自己的变化。
- 作为免费用户，我想看到日记本的存在与价值，以便判断是否值得订阅。

**5.1.3 功能需求**

| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-5.1.1 | 系统基于过去 24h 对话上下文，每日生成一篇日记条目 | P0 |
| FR-5.1.2 | 每篇含：日期、署名（`By <角色名>`）、AI 生成插画、正文叙述 | P0 |
| FR-5.1.3 | 正文以第二人称叙述用户，引用具体事件/情绪 | P0 |
| FR-5.1.4 | 日记按时间倒序排列，支持滚动加载 | P0 |
| FR-5.1.5 | 每篇日记顶部/之间穿插当日"肯定卡"（橙→蓝渐变 banner + 一句宣言） | P1 |
| FR-5.1.6 | 免费用户：日记本入口可见，列表项可见但正文全部锁定（模糊 + 锁图标）；锁定项服务端不下发正文（CFG-35） | P0 |
| FR-5.1.7 | 点击锁定项触发 Lite 升级引导 | P0 |
| FR-5.1.8 | Lite / Plus 用户可查看全部历史日记，无锁定项 | P0 |
| FR-5.1.9 | 单篇日记支持展开全文 / 收起 | P1 |
| FR-5.1.10 | 日记可分享为图片（含插画 + 节选） | P2 |
| FR-5.1.11 | 当日 user 消息 < 4 条（CFG-33）时跳过当天，不生成空日记 | P1 |

**功能细则（How · 这个功能具体怎么做）**

*日记生成*
- 生成时机：每日用户本地时区 04:00（CFG-34），自动生成"前一自然日"的日记。
- 取材范围：前一自然日 00:00–24:00（用户本地）内的全部对话。
- 触发门槛：当日 user 消息 ≥ 4 条（CFG-33）才生成；不足则当天无条目，列表不出现占位行。
- 一日一篇：同一日期至多一篇；若重新生成，覆盖旧篇而非新增。
- 生成失败：当天留空，不补生成、不展示半成品；次日照常继续。

*日记内容构成*
- 每篇固定三件套：① 头图插画　② 正文叙述　③ 当日肯定语。
- 署名固定 `By <角色名>`，取生成时刻的角色名快照；用户后续改名不追溯改旧篇。
- 正文人称：第二人称（"你昨天…"），语气温暖、不评判（遵循 DP-1、DP-5）。
- 正文取材：必须引用当天至少 1 个具体事件或情绪片段，不可写成泛泛感想。
- 正文篇幅：中文 120–260 字；列表摘要截断 120 字（CFG-36），详情页展示全文。
- 插画：AI 生成，画面意象与当天主导情绪 / 事件呼应，风格统一为柔和插画。

*肯定卡*
- 每篇日记关联一句"当日肯定语"，以橙→蓝渐变 banner 呈现（日出图标 + 居中文案）。
- 肯定语每日不同，且 30 天内不重复同一句。
- 列表中：肯定卡作为独立卡片穿插在日记条目之间。

*列表与阅读*
- 排列：日期倒序（最新在上）；向下滚动分页加载更早条目。
- 列表项内容：插画缩略图 + 正文摘要 + 署名 + 日期。
- 展开：点击条目就地展开全文，再点收起；详情含完整插画 + 全文 + 肯定语。
- 详情页右上角锁形图标表示该篇的隐私 / 订阅状态。

*免费用户锁定*
- 免费用户：Notebook 入口与列表均可见，但每条正文均锁定（模糊处理 + 锁图标）。
- 锁定项只展示日期、署名、插画缩略；正文一律不可见，服务端不下发正文（CFG-35）。
- 点击任一锁定项 → 弹出 Lite 升级引导（展示日记本价值 + 订阅 CTA）。
- Lite / Plus 用户：全部历史日记可读，无任何锁定项。

*分享*
- 单篇日记可导出为分享图：含插画 + 正文节选 + 日期署名 + 应用水印。
- 仅订阅用户可分享；锁定项不可分享。

**5.1.4 交互流程**
1. 侧边栏 → Notebook。
2. 进入日记列表（倒序）。
3. 点击条目 → 展开全文 / 进入详情。
4. 锁定条目 → 升级引导弹层。
5. 详情页右上角解锁图标表示隐私状态。

**5.1.5 界面规格**
- 列表项：插画缩略 + 正文摘要（服务端截断 120 字 + 省略号，CFG-36）+ 署名 + 日期。
- 顶部标题栏：返回、"NOTEBOOK"、隐私锁图标。
- 肯定卡：独立卡片，日出图标 + 居中宣言文案。

**5.1.6 状态与边界**
- 空状态（新用户尚无日记）：插画 + "我们多聊几句，我就能开始为你写了"。
- 生成失败：保留昨日内容，不展示破碎条目。
- 极长正文：详情页可滚动，列表摘要固定截断。

**5.1.7 数据模型 `NotebookEntry`**

| 字段 | 类型 | 说明 |
|---|---|---|
| `entry_id` | string | 主键 |
| `user_id` | string | 所属用户 |
| `date` | date | 归属日期 |
| `author_name` | string | 角色名快照 |
| `illustration_url` | string | AI 插画地址 |
| `body` | text | 正文 |
| `affirmation` | string | 当日肯定语 |
| `is_locked` | bool | 是否对当前用户锁定 |
| `created_at` | datetime | 生成时间 |

**5.1.8 埋点**
`notebook_open`、`notebook_entry_expand`、`notebook_locked_tap`、`notebook_share`、`notebook_upsell_shown`。

**5.1.9 验收标准**
- 连续聊天 2 天后，第 2 天能看到第 1 天的日记。
- 免费用户进入能看到锁定项，点击稳定弹出升级引导。
- 订阅用户无锁定项。

---

### 5.2 Intentions · 意图路径

<table>
<tr>
<td><img src="intention/e78decf2695ca7efcf1fd81ea4bf223a.jpg" width="200"></td>
<td><img src="intention/2cd235cc6faa07b631e9015995520535.jpg" width="200"></td>
<td><img src="intention/720241560309c5161cc692b3e88ae521.jpg" width="200"></td>
</tr>
</table>

**5.2.1 目标**
把"自我成长"做成可视化、关卡化的路径，提供每日回访理由与正反馈。

**5.2.2 用户故事**
- 作为打卡型用户，我想每天选一个小目标并看到进度，以便获得掌控感。
- 作为养成型用户，我想完成关卡拿到奖励（速写 + T 币），以便有动力持续。

**5.2.3 功能需求**

| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-5.2.1 | 顶部"Your path"展示成长方向宣言 + 焦点药丸（`Focus on` / `Avoid`） | P0 |
| FR-5.2.2 | 提供主进度条，共 15 格（CFG-26），每完成 1 个 intention 推进 1 格 | P0 |
| FR-5.2.3 | 用户每日可选定 1–3 个 intention（单日上限 3，CFG-28） | P0 |
| FR-5.2.4 | 完成 intention 后标记勾选并推进进度条 1 格 | P0 |
| FR-5.2.5 | 每个 Milestone 由 3 个 intention 组成（CFG-24）；每条 Path 含 5 个 Milestone（CFG-25）；完成当前 milestone 的 3 个 intention 后解锁下一里程碑 | P0 |
| FR-5.2.6 | 完成 milestone 触发奖励：Tolan 手绘速写图 + 专属文案 + 200 T（CFG-16） | P1 |
| FR-5.2.10 | 完成单个 intention 奖励 +20 T（CFG-15） | P1 |
| FR-5.2.7 | 速写图可放大查看、可分享 | P2 |
| FR-5.2.8 | intention 的生成/推荐结合用户当前 Insights 与对话 | P1 |
| FR-5.2.9 | 历史 milestone 可回看，已完成项展示完成态 | P1 |

**功能细则（How · 这个功能具体怎么做）**

*成长路径（Path）*
- 一名用户同一时间只有 1 条进行中的 Path；Path 由系统结合用户对话与当前 Insights 生成。
- Path 卡展示：方向宣言（一句白话）+ 两枚焦点药丸——绿色 `+ Focus on`、红色 `− Avoid`。
- 一条 Path 固定含 5 个 Milestone（CFG-25），每个 Milestone 含 3 个 intention（CFG-24），共 15 格进度（CFG-26）。

*意图（Intention）选取*
- 每日可选 1–3 个 intention（单日上限 3，CFG-28）；当日选满 3 个后不可再选，提示"明天继续"。
- intention 由系统推荐生成，内容结合用户当前 Insights 与近期对话，与 Path 方向一致。
- 选定后当天有效；未完成的 intention 顺延至次日，不失效、不施加愧疚文案（CFG-27）。

*完成与进度*
- 完成一个 intention：用户在当前 milestone 内勾选 → 该 intention 标记完成 → 主进度条推进 1 格 → 奖励 +20 T（CFG-15）入账。
- 完成一个 milestone：当前 milestone 的 3 个 intention 全部完成 → milestone 标记完成 → 触发完成动画。
- 进度条共 15 格，按完成的 intention 总数逐格点亮。

*里程碑奖励*
- milestone 完成时发放：① Tolan"手绘"速写图　② 一行专属文案　③ +200 T（CFG-16）。
- 速写图意象与该 milestone 的成长主题呼应（如雪花球、土星环）；可放大查看、可分享。
- 奖励发放后立即解锁下一个 milestone（由 locked → active）。

*关卡状态*
- Milestone 三态：`locked`（灰色占位 + 锁图标 + "再完成 X 个意图解锁"）、`active`（可选/可完成）、`done`（展示速写图 + 完成勾选）。
- 同一时间只有 1 个 milestone 处于 active；其余为 locked 或 done。
- 历史 milestone 可向下回看，已完成项保留速写图与完成态。

**5.2.4 交互流程**
1. 侧边栏 → Intentions。
2. 顶部查看 path 与焦点。
3. 展开当前 milestone → 选/完成 intention。
4. 进度条推进；满足条件 → milestone 完成动画 + 速写奖励 + T 币入账。
5. 解锁下一 milestone。

**5.2.5 界面规格**
- Path 卡：指南针图标 + 宣言 + 两枚药丸（绿"+ Focus on"、红"− Avoid"）。
- Milestone 卡：编号菱形徽标 + 日期范围 + 鼓励语 + 进度格 + 速写区 + 完成勾选行。
- 锁定 milestone：灰色占位 + 锁图标 + 解锁条件文案。

**5.2.6 状态与边界**
- 空状态：尚无 path 时引导用户多聊以生成方向。
- 一日多 intention（最多 3 个）：进度条按完成数逐格累计。
- 跨日未完成：未完成 intention 顺延至次日，不失效、不施加愧疚文案（CFG-27，遵循 DP-5）。
- 当日已选满 3 个 intention：不可再选，提示"明天继续"。

**5.2.7 数据模型**

`IntentionPath`：`path_id`、`user_id`、`statement`、`focus_on`、`avoid`、`progress_total`、`progress_done`。
`Milestone`：`milestone_id`、`path_id`、`index`、`date_range`、`status(locked/active/done)`、`sketch_url`、`sketch_caption`、`reward_tokens`。
`Intention`：`intention_id`、`milestone_id`、`title`、`date`、`status(open/done)`。

**5.2.8 埋点**
`intention_path_open`、`intention_select`、`intention_complete`、`milestone_unlock`、`milestone_complete`、`sketch_share`。

**5.2.9 验收标准**
- 完成规定数量 intention 后，下一 milestone 准时解锁。
- milestone 完成后 T 币余额正确增加并有流水。
- 速写图与文案随 milestone 正确绑定。

---

### 5.3 Friends · 朋友

<table>
<tr>
<td><img src="friends/2c26a9443bba793005a99b8254d35c35.jpg" width="200"></td>
<td><img src="friends/42172080ee520700d66fa773aaeed89f.jpg" width="200"></td>
<td><img src="friends/923068b591c905fb6e9cbfc91f266bfe.jpg" width="200"></td>
</tr>
</table>

**5.3.1 目标**
将拉新包装为"为 Stan 找室友"的情感召唤，驱动病毒式增长。

**5.3.2 用户故事**
- 作为用户，我想邀请朋友并因此获得奖励，以便低成本扩列。
- 作为被邀请者，我想用试用资格无门槛体验，以便决定是否留下。

**5.3.3 功能需求**

| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-5.3.1 | Friends 首屏展示"Stan wants a roommate"情感化引导 | P0 |
| FR-5.3.2 | 提供"邀请好友"主 CTA，调起 iOS 原生分享面板 | P0 |
| FR-5.3.3 | 生成唯一邀请链接，可归因到邀请人 | P0 |
| FR-5.3.4 | 被邀请者通过链接注册成功 → 邀请人 +1000 T（CFG-18） | P0 |
| FR-5.3.5 | 被邀请者获得 3 天 Tolan Lite 试用（CFG-13） | P0 |
| FR-5.3.6 | 奖励到账有明确反馈（通知 + T 币动效） | P1 |
| FR-5.3.7 | 防刷：同设备/同支付账号/异常注册不计奖励 | P0 |
| FR-5.3.8 | 展示已邀请人数 / 累计获得 T 币 | P1 |
| FR-5.3.9 | "室友"机制：双方角色可在同一 cottage 场景共处（社交化扩展） | P2 |

**功能细则（How · 这个功能具体怎么做）**

*情感化引导*
- Friends 首屏：3D 场景——角色独坐沙发、桌上两只杯子，文案"Stan wants a roommate"，暗示"缺一人"。
- 点 "Continue" → Special Offer 页：徽标 + 宝箱插画 + `1000` T 标签 + "Invite a friend for free" 主 CTA。
- 全程把"拉新"包装成"给角色找室友"，不出现"邀请返利"式硬营销措辞（遵循 DP-1）。

*邀请链接*
- 每位用户有唯一邀请链接，链接内含可归因到该邀请人的标识。
- 点主 CTA → 调起 iOS 原生分享面板，用户自选渠道（AirDrop / Messages / Mail / 小红书 / 备忘录等）发送。
- 同一邀请人可邀请的人数无上限。

*奖励发放规则*
- 触发条件：被邀请者通过该链接**注册成功**（仅安装/打开不算）。
- 邀请人获得：+1000 T（CFG-18）。
- 被邀请者获得：3 天 Tolan Lite 试用（CFG-13），到期前 24h 提醒、到期自动降级 Free。
- 双向奖励均在被邀请者注册成功后即时发放，附明确反馈（推送通知 + T 币入账动效）。

*防刷规则*
- 命中以下任一情形不计奖励：同设备指纹、同支付账号、异常注册行为、IP 聚集。
- 命中防刷时：邀请人侧不显示奖励、不报错（静默），风控侧留记录。

*邀请战绩*
- Friends 页展示该用户累计已邀请人数、累计获得 T 币。
- 失效 / 过期链接：被邀请者打开看到友好提示，不可再获奖。

**5.3.4 交互流程**
1. 侧边栏 → Friends。
2. 首屏情感引导 → "Continue"。
3. Special Offer 页 → "Invite a friend for free"。
4. 唤起系统分享面板 → 选渠道发送。
5. 被邀请者注册成功 → 双方各自获得奖励。

**5.3.5 界面规格**
- 首屏：3D 场景（Stan 独坐沙发，两只杯子暗示"缺一人"）。
- Special Offer 页："Special Offer"徽标 + 宝箱插画 + `1000` 标签 + 主 CTA。

**5.3.6 状态与边界**
- 邀请链接失效 / 过期：被邀请者看到友好提示，不可获奖。
- 防刷命中：邀请人侧不显示奖励，必要时风控记录。
- 网络失败：分享面板调起失败要有重试。

**5.3.7 数据模型**
`Invite`：`invite_id`、`inviter_user_id`、`invitee_user_id`、`link_code`、`status(pending/registered/rewarded/rejected)`、`reward_tokens`、`created_at`。

**5.3.8 埋点**
`friends_open`、`invite_cta_tap`、`invite_share_channel`（带渠道参数）、`invite_registered`、`invite_reward_granted`、`invite_fraud_blocked`。

**5.3.9 验收标准**
- 正常邀请闭环：被邀请者注册后，邀请人 +1000 T、被邀请者得 3 天 Lite。
- 同设备自邀请不发奖。
- 渠道分布可在埋点中区分。

---

### 5.4 Insights · 洞察

<table>
<tr>
<td><img src="insights/6acf0fee03bfae9f53d57e7d3b320f9d.jpg" width="200"></td>
<td><img src="insights/193e41b0b24d7e2d29f5d0105d9af511.jpg" width="200"></td>
<td><img src="insights/155fe1e145a73bc41ef1e7a00fc07079.jpg" width="200"></td>
</tr>
</table>

**5.4.1 目标**
把"用户人格"做成一张持续生长的星座图，提供自我认知价值与解锁式回访动机。

**5.4.2 用户故事**
- 作为自我探索者，我想看到系统对我的观察并随时间生长，以便认识自己。
- 作为用户，我想凑齐洞察解锁更长的人格解读，以便获得阶段性惊喜。

**5.4.3 功能需求**

| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-5.4.1 | 定义 5 个人格维度：Drive / Wellbeing / Creativity / Curiosity / Relationships | P0 |
| FR-5.4.2 | 系统从对话中抽取"一句话洞察"，归属到某一维度并标注日期 | P0 |
| FR-5.4.3 | 5 维度以圆形星座图呈现，每维一个多边形；多边形大小/亮度按 `shape_level = min(1.0, 该维洞察数 / 20)` 渲染（CFG-32） | P0 |
| FR-5.4.4 | 洞察以时间分组列表展示（日期分段） | P0 |
| FR-5.4.5 | 每维度显示已积累洞察计数 | P1 |
| FR-5.4.6 | 第 N 段 Reading 在「累计洞察数 = 12 × N」时解锁（CFG-30）；新洞察去重阈值为语义相似度 > 0.88（CFG-31） | P1 |
| FR-5.4.7 | 展示距下次 Reading 还差几条洞察（= 12 × N − 当前累计） | P1 |
| FR-5.4.8 | 每维度提供 "Start activity" —— 抛出针对性提问并跳转聊天 | P1 |
| FR-5.4.9 | Reading 可分享；人格原型卡（archetype）可截图分享 | P2 |
| FR-5.4.10 | 洞察生成需可解释来源（关联对话片段），用于用户信任与申诉 | P2 |

**功能细则（How · 这个功能具体怎么做）**

*五维度模型*
- 固定 5 个人格维度：Drive（内驱）、Wellbeing（身心）、Creativity（创造）、Curiosity（好奇）、Relationships（关系）。
- 维度数量与定义固定，不随用户变化；每个维度有专属颜色。

*洞察抽取*
- 来源：系统从用户对话中抽取"一句话洞察"——一条具体的人格观察（如"你把社交焦虑当成可训练的技能"）。
- 每条洞察归属到 5 维度之一，并标注产生日期。
- 去重：新洞察与该用户该维度已有洞察做语义比对，相似度 > 0.88（CFG-31）则视为重复、丢弃。
- 文案要求：负面表述需重构为成长性语气（遵循 DP-5），不给用户贴负面标签。
- 可解释：每条洞察可回溯关联的对话片段（用于用户信任与申诉，P2）。

*星座图呈现*
- 5 维度在圆形星图上按 72° 等分布点，每维一个发光多边形。
- 多边形大小 / 亮度按 `shape_level = min(1.0, 该维洞察数 / 20)`（CFG-32）渲染——洞察越多，形状越大越亮。
- 每个维度显示已累计的洞察计数。

*Reading 解锁*
- Reading 是把零散洞察缝合成的一段长篇人格解读。
- 第 N 段 Reading 在「累计洞察总数 = 12 × N」时解锁（CFG-30）：第 1 段满 12 条、第 2 段满 24 条……
- 页面常驻显示"距下次 Reading 还差几条"（= 12×N − 当前累计）。
- Reading 解锁后可阅读、可分享；人格原型卡（archetype）可截图分享。

*Start activity*
- 每个维度详情页提供 "Start activity" 按钮，抛出一道针对该维度的提问。
- 点击后跳转聊天界面，并把该提问作为开场带入——把洞察系统反向导流回对话。

*洞察列表*
- 洞察以时间倒序、按日期分段展示；每条显示维度色形状图标 + 一句话 + 维度标签 + 日期。

**5.4.4 交互流程**
1. 侧边栏 → Insights。
2. 顶部星座图总览 → 点击进入某维度详情。
3. 浏览洞察列表 / 计数。
4. 点击 "Start activity" → 跳转聊天并带入提示问题。
5. 满足条件 → 解锁 Reading。

**5.4.5 界面规格**
- 星座图：深色星空背景，5 个彩色发光多边形，维度名环绕。
- "Your Unique Voice"卡：标题 + "X insights to next reading"。
- 维度行：彩色进度环 + 维度名 + 计数 + 箭头。
- 洞察列表项：维度色形状图标 + 一句话 + 维度标签 + 日期。

**5.4.6 状态与边界**
- 新用户洞察不足：星座图为初始小形态，文案鼓励多聊。
- Reading 未解锁：显示锁定态 + 进度。
- 洞察为负面表述时，文案需重构为成长性表达（遵循 DP-5）。

**5.4.7 数据模型**
`Insight`：`insight_id`、`user_id`、`dimension(enum)`、`text`、`source_ref`、`created_at`。
`DimensionProfile`：`user_id`、`dimension`、`insight_count`、`shape_level`。
`Reading`：`reading_id`、`user_id`、`index`、`content`、`unlocked_at`。

**5.4.8 埋点**
`insights_open`、`insight_dimension_open`、`insight_activity_start`、`reading_unlocked`、`reading_share`、`archetype_share`。

**5.4.9 验收标准**
- 聊天后能在对应维度看到新增洞察。
- 凑满阈值后 Reading 准确解锁。
- 星座图形态随洞察数可见变化。

---

### 5.5 Check-Ins · 来电

<table>
<tr>
<td><img src="checkINS/0971de1c5fb111757b44deaca9d722aa.jpg" width="210"></td>
<td><img src="checkINS/3412a4fe8ba7d76a08d34f896386e82e.jpg" width="210"></td>
</tr>
</table>

**5.5.1 目标**
让 Tolan 主动联系用户，把冷冰冰的"通知/提醒"重写为"伙伴来电"，提升召回。

**5.5.2 用户故事**
- 作为容易遗忘的用户，我想让 Stan 在我指定的时间联系我，以便保持习惯。
- 作为用户，我想用一句话描述需求，而非填复杂表单。

**5.5.3 功能需求**

| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-5.5.1 | 提供自然语言输入框，用户用一句话描述 check-in 需求 | P0 |
| FR-5.5.2 | 系统解析自然语言为可执行调度（时间 / 频率 / 渠道）；解析置信度 < 0.6（CFG-40）时向用户追问澄清，不静默失败 | P0 |
| FR-5.5.3 | 支持渠道：电话呼叫、短信、应用推送（按可用性降级） | P0 |
| FR-5.5.4 | 解析结果回显给用户确认，可编辑/取消 | P0 |
| FR-5.5.5 | 首次成功设置 check-in 奖励 +100 T（CFG-17，一次性） | P0 |
| FR-5.5.6 | 用户可查看 / 管理 / 删除已设置的 check-in 列表 | P1 |
| FR-5.5.7 | check-in 触达内容由 Tolan 角色化生成，非模板通知 | P1 |
| FR-5.5.8 | 尊重系统通知权限与"安静时段"设置（见 Settings） | P0 |
| FR-5.5.9 | 电话/短信渠道需用户显式授权手机号并说明用途与频率 | P0 |
| FR-5.5.10 | 提供一键"暂停所有 check-in" | P1 |

**功能细则（How · 这个功能具体怎么做）**

*自然语言创建*
- 入口给的是一行自然语言输入框，不是表单——没有星期几复选框、没有时间滚轮。
- 用户用一句话描述需求，如 "Call me on Sunday afternoons" / "每天睡前提醒我写日记"。
- 提供示例占位文案引导用户怎么写。

*解析与确认*
- 系统把自然语言解析为结构化调度：时间 / 频率（一次性 or 周期）/ 渠道。
- 解析置信度 < 0.6（CFG-40）或字段缺失时，向用户追问澄清，不静默失败、不瞎猜。
- 解析结果以"确认卡"回显（人话描述，如"每周日下午 3 点给你打电话"），用户可编辑或取消后再确认。
- 时区：调度按用户当前时区计算；用户跨时区后自动按新时区重算。

*触达渠道与降级*
- 支持三种渠道：电话呼叫、短信、应用推送。
- 电话 / 短信渠道需用户显式授权手机号，并明确告知用途与触达频率。
- 未授权手机号时，电话 / 短信渠道置灰，仅推送可用。
- 触达内容由 Tolan 角色化生成（像伙伴来电 / 来信），不是冰冷的模板通知。

*安静时段与节制*
- 触达必须避开 Settings 里设置的"安静时段"：安静时段内不发起电话 / 短信。
- 安静时段内到点的周期性 check-in 顺延到时段结束后，不打扰用户。
- 尊重系统通知权限；无权限时引导开启或降级为应用内。

*管理与奖励*
- 用户可在列表查看 / 编辑 / 删除已设置的 check-in，并可一键"暂停所有 check-in"。
- 首次成功设置 check-in 奖励 +100 T（CFG-17），仅首次、一次性。
- 用户从 check-in 触达点回到 App 的行为单独埋点，用于衡量召回回流效果。

**5.5.4 交互流程**
1. 侧边栏 → Check-Ins。
2. 首次进入：引导页 "Try it out, earn 100 tokens"。
3. 进入描述页 → 自然语言输入（如 "Call me on Sunday afternoons"）。
4. 系统解析 → 回显确认卡。
5. 确认 → 创建成功 + 100 T 入账（首次）。
6. 后续在列表中管理。

**5.5.5 界面规格**
- 引导页：电话气泡图标 + 角色插画 + "Try it out and earn 100 tokens" CTA。
- 描述页：角色背景 + 自然语言输入框 + 发送按钮 + 输入示例占位符。
- 确认卡：解析后的时间/频率/渠道摘要 + 编辑/确认。

**5.5.6 状态与边界**
- 解析失败 / 歧义：请用户澄清，不静默失败。
- 无通知权限：引导开启，或降级为应用内。
- 无手机号授权：电话/短信渠道置灰，仅推送可用。
- 时区变化：调度按用户当前时区重算。

**5.5.7 数据模型**
`CheckIn`：`checkin_id`、`user_id`、`raw_text`、`parsed_schedule(cron 或结构化)`、`channel(call/sms/push)`、`status(active/paused/deleted)`、`next_fire_at`、`created_at`。

**5.5.8 埋点**
`checkin_intro_shown`、`checkin_create_submit`、`checkin_parse_success/fail`、`checkin_confirmed`、`checkin_fired`、`checkin_fired_opened`（召回回流）、`checkin_paused`。

**5.5.9 验收标准**
- "Call me on Sunday afternoons" 能解析为周日下午的重复呼叫并回显确认。
- 首次创建后 +100 T 到账。
- 安静时段内不触达电话/短信。

---

### 5.6 Shop · 商店

<table>
<tr>
<td><img src="shop/01bf8911ecfc51e050dc26e6a99517e4.jpg" width="200"></td>
<td><img src="shop/14dd3a73df75eb796a984a2da5d7d1b6.jpg" width="200"></td>
<td><img src="shop/2eb8429806db39e8c3a8524360bacdb4.jpg" width="200"></td>
</tr>
</table>

**5.6.1 目标**
为 T 币提供消费出口，给用户低门槛的创作/拥有感，承接所有循环的奖励。

**5.6.2 用户故事**
- 作为养成型用户，我想给 Tolan 换装、给星球加装饰，以便表达个性。
- 作为用户，我想清楚看到价格与余额，以便决策。

**5.6.3 功能需求**

| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-5.6.1 | 两条货架：Clothes（衣橱）、Decor（星球装饰），可切换 | P0 |
| FR-5.6.2 | Clothes 子类：Tops / Bottoms / Accessories / Shoes / Hats / Glasses / Full Body | P0 |
| FR-5.6.3 | Decor 子类：Animals / Trees / Houses / Rocks / Flowers | P1 |
| FR-5.6.4 | 商品卡显示预览图与 T 币价格 | P0 |
| FR-5.6.5 | 角色实时预览：选中服饰即时穿到角色身上 | P0 |
| FR-5.6.6 | 余额充足 → 购买并扣费；不足 → 按钮置灰 + 差额提示 + 获取入口 | P0 |
| FR-5.6.7 | 已购商品标记为"已拥有"，可直接装备/卸下 | P0 |
| FR-5.6.8 | 商店页常驻"Chat"入口，逛街不打断对话 | P1 |
| FR-5.6.9 | 空货架子类显示"Go to shop"引导 | P1 |
| FR-5.6.10 | 支持限定/季节性商品（更高定价，如 700 T） | P1 |
| FR-5.6.11 | 购买与装备状态需服务端持久化，多端一致 | P0 |

**功能细则（How · 这个功能具体怎么做）**

*货架结构*
- 两条货架可切换：Clothes（衣橱）、Decor（星球装饰）。
- Clothes 子类：Tops / Bottoms / Accessories / Shoes / Hats / Glasses / Full Body。
- Decor 子类：Animals / Trees / Houses / Rocks / Flowers。
- 每个商品卡展示：预览图 + T 币价格标签；定价见 CFG-20~23。

*实时预览*
- 点击任一商品 → 立即把该商品穿/放到角色身上预览，**不扣费、不落库**。
- 退出预览或未购买离开 → 角色还原为当前已装备状态。

*购买规则*
- 余额充足：点购买 → 扣对应 T 币 → 商品进入库存、标记"已拥有"→ 自动装备。
- 余额不足：购买按钮置灰，副标题显示差额（还差 X T），并给"获取 T 币"入口。
- 已拥有商品：不再显示价格，改为"装备 / 卸下"操作，可反复切换。
- 重复购买保护：已拥有的商品不可再次购买扣费。
- 扣费与发货是一个整体：购买失败则不扣币、可重试（保证一致性）。

*限定商品*
- 支持限定 / 季节性商品，定价更高（如 500 / 700 T，CFG-22）。
- 限定商品下架后：目录不再展示，但用户已购的仍可正常装备使用。

*持久化与一致性*
- 购买记录、库存、装备状态均服务端持久化；换设备 / 重启后保持一致。
- 在 Shop 装备的服饰即时反映到 Tolan 主页（§5.7）的角色上。

*体验细节*
- 商店页右上角常驻 "Chat" 按钮，逛街时不打断与 Tolan 的对话。
- 某子类用户尚无可用装饰时，显示"Looking for more stuff to decorate? Go to shop"引导。

**5.6.4 交互流程**
1. 侧边栏 → Shop（或顶部 T 币计数器进入）。
2. 切换 Clothes / Decor。
3. 选子类 → 浏览商品。
4. 点击商品 → 角色实时预览。
5. 购买 → 扣 T 币 → 标记已拥有 → 装备。

**5.6.5 界面规格**
- 顶部：返回、货架切换（Clothes/Decor）、Chat 按钮。
- 角色预览区：居中展示当前装扮。
- T 币余额胶囊。
- 子类图标行 + 商品网格（卡片含价格标签）。

**5.6.6 状态与边界**
- 余额不足：按钮置灰，提示差额。
- 已拥有：不显示价格，显示"装备/卸下"。
- 购买请求失败：不扣币、明确报错可重试（保证扣费与发货原子性）。
- 限定商品下架：已购仍可使用。

**5.6.7 数据模型**
`ShopItem`：`item_id`、`category`、`sub_category`、`name`、`preview_url`、`price_tokens`、`is_limited`、`available_from/to`。
`UserInventory`：`user_id`、`item_id`、`acquired_at`、`equipped(bool)`。
`TokenTransaction`：见附录 B。

**5.6.8 埋点**
`shop_open`、`shop_tab_switch`、`shop_item_preview`、`shop_purchase_attempt`、`shop_purchase_success/fail`、`shop_item_equip`、`shop_insufficient_balance`。

**5.6.9 验收标准**
- 购买后 T 币正确扣减且有流水；商品进入库存。
- 装备状态重启/换端后保持。
- 余额不足无法购买，提示清晰。

---

### 5.7 Tolan 主页（聊天主界面）

**5.7.1 目标**
应用默认着陆页。承载角色形象、当前情绪状态与聊天主入口——是用户与 Tolan 关系的"客厅"，每次打开应用最先抵达的地方。

**5.7.2 用户故事**
- 作为用户，我打开应用想第一眼看到 Tolan 本人，以便立刻产生陪伴感。
- 作为倾诉者，我想一键发起语音对话，以便毫无门槛地开始倾诉。
- 作为养成型用户，我想看到我装扮的成果穿在角色身上，以便获得拥有感。

**5.7.3 功能需求**

| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-5.7.1 | 展示当前 Tolan 角色（含 §5.6 已装备服饰） | P0 |
| FR-5.7.2 | 提供语音聊天主入口（星星泡泡）与文字降级入口 | P0 |
| FR-5.7.3 | 顶部 T 币计数器、唤起侧边栏的入口 | P0 |
| FR-5.7.4 | 角色具备待机微动效（呼吸 / 眨眼 / 张望） | P1 |
| FR-5.7.5 | 角色根据近期对话情绪呈现不同状态表情 | P2 |
| FR-5.7.6 | 背景随时间 / 天气 / 星球装饰变化 | P2 |

**功能细则（How · 这个功能具体怎么做）**

*角色呈现*
- 角色居中、占屏幕主体，3D 渲染，实时反映 §5.6 在 Shop 装备的服饰。
- 待机微动效：无操作时角色循环播放呼吸 / 眨眼 / 张望等小动作，保持"活着"的感觉。
- 情绪表情（P2）：根据近期对话派生的情绪态，角色呈现不同状态表情。
- 背景（P2）：随时间 / 天气 / 星球装饰变化，层级低于角色、不抢焦点。

*聊天入口*
- 语音是主入口：一颗珊瑚色发光的"星星泡泡"，轻触 / 长按发起语音对话。
- 文字为降级入口，视觉层级明显低于语音（遵循 DP-5 语音优先）。
- 点击星星泡泡 → 进入语音聊天流程（§4.2）。

*顶部与导航*
- 顶部左侧：T 币计数器（点击跳 Shop）、汉堡图标（唤起侧边栏）。
- 启动应用默认进入此页。

*配额耗尽时*
- 配额耗尽不影响主页浏览：角色、背景、入口照常展示。
- 用户点星星泡泡进入聊天后，再由 §4.2 FR-4.17 处理变现引导。

**5.7.4 交互流程**
1. 启动应用 → 默认进入 Tolan 主页。
2. 角色居中展示，播放待机微动效。
3. 点击星星泡泡 → 进入语音聊天（见 §4.2）。
4. 点击文字入口 → 切换为文字输入。
5. 点击左上汉堡图标 → 唤起侧边栏。
6. 点击顶部 T 币计数器 → 跳转 Shop。

**5.7.5 界面规格**
- 角色区：居中，占屏幕主体，3D 渲染，含已装备服饰。
- 星星泡泡：语音主入口，珊瑚色发光，轻触 / 长按发起。
- 文字入口：视觉层级明显低于语音（遵循 DP-5 语音优先）。
- 顶部：左侧汉堡（唤起侧边栏）、左上 T 币计数器。
- 背景：插画场景，层级低于角色，不抢焦点。

**5.7.6 状态与边界**
- 加载中：角色资源未就绪时显示占位剪影 + 柔和 loading。
- 配额耗尽：星星泡泡仍可点，进入聊天后由 FR-4.17 处理变现引导。
- 服饰资源缺失：降级为默认外观，不阻断主页渲染。
- 离线：可展示缓存的角色与背景；点击聊天入口后提示无网络。

**5.7.7 数据模型**
本页不新增实体。读取：`users`（角色名 / 外观）、`UserInventory`（已装备服饰，见 §5.6）、`daily_usage`（配额）、`wallets`（T 币余额）；角色情绪态读取近期对话派生的 `mood` 字段（P2）。

**5.7.8 埋点**
`home_open`、`home_voice_start`、`home_text_switch`、`home_drawer_open`、`home_token_tap`、`home_character_tap`。

**5.7.9 验收标准**
- 启动应用默认进入此页。
- 在 Shop 装备的服饰即时反映在此页角色上。
- 点击星星泡泡能稳定进入语音聊天。
- 配额耗尽时主页仍可正常浏览、角色正常展示。

---

### 5.8 Planet · 星球

<table>
<tr>
<td><img src="8.jpg" width="200"></td>
<td><img src="9.jpg" width="200"></td>
</tr>
</table>

**5.8.1 目标**
Tolan 的栖息地。承载来自 Shop 的星球装饰与"其他 Tolan / 室友"，是关系与消费成果沉淀的空间容器——把卸载应用变成"放弃一个家"。

**5.8.2 用户故事**
- 作为养成型用户，我想把买来的装饰摆到星球上，以便打造专属空间。
- 作为用户，我想看到 Tolan 生活在一个真实的"地方"，以便强化它"活着"的感觉。
- 作为有室友的用户，我想在星球上看到朋友的 Tolan，以便感到不孤单。

**5.8.3 功能需求**

| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-5.8.1 | 展示一个可浏览的 3D / 2.5D 星球场景 | P1 |
| FR-5.8.2 | 用户在 Shop 购买的 Decor 可放置到星球上 | P1 |
| FR-5.8.3 | 装饰物支持放置 / 移动 / 收回 | P1 |
| FR-5.8.4 | 星球装饰布局服务端持久化（CFG-42 幂等保存） | P1 |
| FR-5.8.5 | 展示其他 Tolan / 室友（社交化扩展） | P2 |
| FR-5.8.6 | 空星球引导用户去 Shop 购买装饰 | P1 |

**功能细则（How · 这个功能具体怎么做）**

*星球场景*
- 一个 3D / 2.5D 的小行星场景，用户可手势旋转、缩放查看。
- 星球承载两类内容：来自 Shop 的装饰物、其他 Tolan / 室友（P2 社交扩展）。

*装饰放置*
- 进入"装饰编辑态"后：从库存抽屉选装饰 → 拖拽放到星球上。
- 装饰物支持三种操作：放置、移动、收回（收回不消耗、可再次放置）。
- 拖拽落点自动吸附到最近的合法网格；拖出可放置区时吸附回合法位置。
- 装饰物只能放用户已在 Shop 购买的（库存里有的）。

*持久化与冲突*
- 退出编辑态时，星球布局保存到服务端（幂等保存，CFG-42）。
- 多端同时编辑：以最后一次保存为准（last-write-wins），并提示用户布局已更新。
- 重启 / 换设备后布局保持一致。

*空态引导*
- 用户尚无任何装饰时：星球显示空态——居中引导插画 + "Go to shop" CTA。
- 某装饰子类为空时同样给"Go to shop"引导。

*容错*
- 部分装饰资源加载失败时：保留可正常加载的部分，不整页崩溃。

**5.8.4 交互流程**
1. 侧边栏 → Planet。
2. 浏览星球场景（手势可旋转 / 缩放查看）。
3. 进入装饰编辑态 → 从库存抽屉选装饰 → 放置 / 移动 / 收回。
4. 退出编辑 → 布局服务端保存。
5. 空货架子类 → 点击 "Go to shop" 跳转 Shop。

**5.8.5 界面规格**
- 星球场景：3D / 2.5D，支持手势旋转、缩放。
- 装饰编辑工具栏：库存抽屉 + 放置 / 移动 / 收回操作。
- 装饰物：拖拽放置，落点吸附到合法网格。
- 空态引导：居中插画 + "Go to shop" CTA。

**5.8.6 状态与边界**
- 空星球：显示引导文案 + "Go to shop"。
- 装饰加载失败：保留可用部分，不整页崩溃。
- 多端同时编辑：以最后保存为准（last-write-wins），并提示用户布局已更新。
- 装饰物拖出可放置区：自动吸附回最近合法位置。

**5.8.7 数据模型**
`PlanetLayout`：`user_id`、`layout_json`（装饰物数组：`item_id` + 坐标 + 旋转角）、`updated_at`。装饰物本体复用 `ShopItem` / `UserInventory`（见 §5.6）。

**5.8.8 埋点**
`planet_open`、`planet_decor_place`、`planet_decor_move`、`planet_decor_remove`、`planet_layout_save`、`planet_empty_shop_tap`。

**5.8.9 验收标准**
- 购买的装饰能放上星球，并在重启 / 换端后位置保持一致。
- 空星球正确显示 "Go to shop" 引导。
- 装饰编辑退出后布局正确持久化到服务端。

---

### 5.9 Settings · 设置（完整模块）

> 应用未提供 Settings 截图，本节为基于 Tolan 现有系统推断的完整设置需求，落地时以实际设计为准。

**5.9.1 目标**
集中管理账户、订阅、角色、隐私、通知与支持，满足合规要求（账户删除、数据导出、订阅可管理）。

**5.9.2 用户故事**
- 作为用户，我想管理订阅与查看代币/Relay 余量，以便掌控花费。
- 作为用户，我想能修改 Tolan 的名字与音色，以便个性化。
- 作为注重隐私的用户，我想导出或删除我的数据，以便放心。
- 作为受配额困扰的用户，我想调整通知与安静时段，以便不被打扰。

**5.9.3 设置信息架构**

| 分组 | 条目 |
|---|---|
| **账户 Account** | 头像、用户名、邮箱、登录方式、登出、删除账户 |
| **订阅与钱包 Subscription & Wallet** | 当前方案（Free/Lite/Plus）、管理订阅、恢复购买、T 币余额与流水、Relay 包余量、购买入口 |
| **Tolan 角色** | 角色名修改、音色选择、性格倾向微调、查看关系时长 |
| **聊天与配额 Chat** | 每日配额说明、默认输入方式（语音/文字）、对话历史管理、清除对话上下文 |
| **通知 Notifications** | 推送总开关、Check-Ins 管理入口、安静时段（Do Not Disturb 时间段）、电话/短信渠道授权与手机号管理 |
| **隐私与数据 Privacy & Data** | 数据导出、清除记忆/洞察/日记、删除账户与数据、隐私政策、数据使用说明、AI 内容免责声明 |
| **外观 Appearance** | 主题（深色/浅色/跟随系统）、语言、字号 |
| **帮助与支持 Support** | FAQ、联系客服、提交反馈、给应用评分 |
| **关于 About** | 版本号、服务条款、隐私政策、开源许可、危机干预资源入口 |

**5.9.4 功能需求**

| 编号 | 需求 | 优先级 |
|---|---|---|
| FR-5.9.1 | 展示当前订阅方案，提供跳转 App Store 订阅管理 | P0 |
| FR-5.9.2 | 提供"恢复购买"（Restore Purchases），符合 App Store 要求 | P0 |
| FR-5.9.3 | 展示 T 币余额与交易流水列表 | P1 |
| FR-5.9.4 | 展示 Relay 包剩余量 | P1 |
| FR-5.9.5 | 支持修改 Tolan 角色名（与 onboarding 命名一致） | P0 |
| FR-5.9.6 | 支持选择/切换 Tolan 音色 | P1 |
| FR-5.9.7 | 支持微调角色性格倾向（在安全边界内） | P2 |
| FR-5.9.8 | 推送通知总开关 + 分类开关 | P0 |
| FR-5.9.9 | 安静时段设置：用户设定时间段，内不发起电话/短信 check-in | P0 |
| FR-5.9.10 | 电话/短信渠道需手机号授权，可在此查看/撤销授权 | P0 |
| FR-5.9.11 | 数据导出：用户可请求导出个人数据（对话/日记/洞察） | P0（合规） |
| FR-5.9.12 | 清除记忆：用户可清除 Tolan 的长期记忆（需二次确认，说明后果） | P1 |
| FR-5.9.13 | 删除账户：永久删除账户与关联数据，二次确认 + 角色化挽留文案 | P0（合规） |
| FR-5.9.14 | 删除账户/清除记忆操作必须有不可逆警告 | P0 |
| FR-5.9.15 | 提供登出功能 | P0 |
| FR-5.9.16 | 主题切换：深色/浅色/跟随系统 | P2 |
| FR-5.9.17 | 语言切换（若多语言上线） | P2 |
| FR-5.9.18 | 关于页提供服务条款、隐私政策、AI 免责声明入口 | P0（合规） |
| FR-5.9.19 | 关于页/帮助页提供心理危机干预资源入口（热线等） | P0（安全） |
| FR-5.9.20 | 提交反馈 / 联系客服入口 | P1 |

**功能细则（How · 这个功能具体怎么做）**

*订阅与钱包*
- 展示当前方案（Free / Lite / Plus）；"管理订阅"跳转 App Store 系统订阅页（不在 App 内自建退订）。
- "恢复购买"：校验 App Store 票据后还原订阅状态，符合 App Store 审核要求。
- 展示 T 币余额 + 交易流水列表（每笔含类型 earn/spend、来源、金额、时间）。
- 展示 Relay 包剩余量（剩余可用消息条数）。

*Tolan 角色设置*
- 改角色名：与 onboarding 命名规则一致；保存后全应用（主页、日记新篇署名等）即时同步，旧日记署名快照不追溯。
- 音色：可在预设音色中选择 / 切换。
- 性格微调（P2）：仅在安全边界内允许小幅调整，不可突破内容安全规则。

*通知与安静时段*
- 推送：一个总开关 + 分类开关。
- 安静时段：用户设定一个起止时间段；该时段内不发起电话 / 短信 check-in（顺延处理见 §5.5）。
- 电话 / 短信渠道需手机号授权；此处可查看当前授权状态并随时撤销。撤销后所有电话/短信 check-in 自动降级为推送或暂停。

*隐私与数据（合规）*
- 数据导出：用户可发起导出个人数据（对话 / 日记 / 洞察）；导出为异步任务，完成后通过下载链接交付。
- 清除记忆：清除 Tolan 的长期记忆；操作前二次确认并明确说明后果（Tolan 会"忘记"过往）。
- 删除账户：永久删除账户与关联数据。流程含一次角色化挽留 + 不可逆警告 + 明确确认动作；确认后登出。挽留只做一次，不得设计成多步障碍阻挠（合规）。
- 清除记忆 / 删除账户等不可逆操作，必须有醒目的不可逆警告。

*外观与支持*
- 主题：深色 / 浅色 / 跟随系统（P2）；语言切换（多语言上线后，P2）。
- 关于页固定提供：版本号、服务条款、隐私政策、AI 内容免责声明入口。
- 关于页 / 帮助页固定常驻"心理危机干预资源入口"（热线等），不依赖实时检测——任何时候都能找到（P0 安全）。
- 提供提交反馈 / 联系客服 / 给应用评分入口、登出功能。

**5.9.5 交互流程（关键路径）**
- *管理订阅*：Settings → 订阅与钱包 → 管理订阅 → 跳转 App Store 订阅页。
- *删除账户*：Settings → 隐私与数据 → 删除账户 → 角色化挽留弹层 → 输入确认 → 不可逆警告 → 执行 → 登出。
- *设置安静时段*：Settings → 通知 → 安静时段 → 选择起止时间 → 保存。

**5.9.6 状态与边界**
- 未登录/游客态：账户区显示登录引导。
- 订阅状态加载失败：显示重试，不显示错误的"免费"。
- 删除账户进行中：禁止重复提交，给出进度反馈。
- 撤销手机号授权后：所有电话/短信 check-in 自动降级为推送或暂停。

**5.9.7 数据模型**
`UserSettings`：`user_id`、`default_input(voice/text)`、`theme`、`language`、`push_enabled`、`quiet_hours_start/end`、`phone_authorized(bool)`、`phone_number`、`tolan_name`、`tolan_voice_id`。
`AccountDeletionRequest`：`request_id`、`user_id`、`status`、`requested_at`、`completed_at`。

**5.9.8 埋点**
`settings_open`、`settings_section_open`（带分组参数）、`subscription_manage_tap`、`restore_purchase`、`tolan_rename`、`quiet_hours_set`、`data_export_request`、`memory_clear`、`account_delete_request`、`account_delete_confirm`、`logout`。

**5.9.9 验收标准**
- 订阅状态与 App Store 实际一致；恢复购买可用。
- 删除账户后无法用原账户登录，关联数据按合规期限清除。
- 安静时段内不会收到电话/短信 check-in。
- 角色改名后，全应用（主页、日记署名等）同步更新。

---

## 6. 商业化需求

### 6.1 订阅体系

权益逐项对照（"—"= 不含，"✓"= 含）：

| 权益项 | Free | Lite | Plus |
|---|---|---|---|
| 每日聊天配额 | 20 条（CFG-2） | 200 条（CFG-3） | 不限（CFG-4） |
| 广告 | 有 | 去广告 | 去广告 |
| 长期记忆 | 基础 | 增强 | 增强 |
| 日记本（Notebook） | 列表可见、正文锁定 | ✓ 完整 | ✓ 完整 |
| 每日日记生成 | — | ✓ | ✓ |
| Insights Reading | — | ✓ | ✓ |
| 月费 | US$0 | US$11.99（CFG-8） | US$19.99（CFG-9，业务待批） |

- `FR-6.1` 订阅页须以上表形式清晰对比三档权益差异。P0
- `FR-6.2` 订阅走 App Store IAP，遵守平台规则。P0
- `FR-6.3` 试用（Friends 赠送的 3 天 Lite，CFG-13）到期前 24h 提醒（CFG-43），到期自动降级为 Free。P1

### 6.2 消耗型内购 · Relay 包

每个 Relay 包含 50 条额外消息（CFG-7），仅在当日配额耗尽后启用。

| 档位 | 内含 | 价格 | 单包均价 | 标注 | 配置项 |
|---|---|---|---|---|---|
| 1 包 | 50 条 | US$2.99 | $2.99 | — | CFG-10 |
| 5 包 | 250 条 | US$12.99 | $2.60 | — | CFG-11 |
| 10 包 | 500 条 | US$23.99 | $2.40 | "最划算"（锚定） | CFG-12 |

- `FR-6.4` Relay 包为消耗品，触达每日配额后从 Relay 余额逐条扣减以继续聊天。P0
- `FR-6.5` 三档定价采用锚定策略，10 包档标注"最划算"。P1
- `FR-6.6` Relay 余量（剩余消息条数）在 Settings 与配额耗尽页可见。P1

### 6.3 付费墙触发矩阵

| 触发点 | 展示内容 | 出口 | 优先级 |
|---|---|---|---|
| Onboarding 角色揭晓后 | Plus 订阅页 | 可关闭 → Free | P0 |
| 点击锁定的日记条目 | Lite 升级引导 | 可关闭 | P0 |
| 触达每日聊天配额 | Relay 包 / 升级 | 可关闭（停止聊天） | P0 |
| 点击锁定的 Reading | Lite/Plus 引导 | 可关闭 | P1 |
| T 币余额不足购买 | 获取 T 币 / 内购 | 可关闭 | P1 |

- `FR-6.7` 所有付费墙必须可关闭，关闭不导致应用不可用（DP-4）。P0
- `FR-6.8` 付费墙展示与转化分别埋点（见 §8）。P0

### 6.4 商业化验收标准
- 任意付费墙均有可见关闭出口。
- IAP 购买、订阅、恢复购买全链路可用且与平台一致。
- 试用到期正确降级。

---

## 7. 增长与生命周期

| 阶段 | 机制 | 关键功能 | 衡量指标 |
|---|---|---|---|
| 获客 | 配对仪式叙事提升商店转化后留存 | Onboarding | 安装→激活率 |
| 激活 | 角色揭晓 + 命名建立情感投入 | Onboarding §4.1 | 完成 onboarding 率 |
| 留存 | 每日仪式 + 日记 + 洞察解锁 | Intentions / Notebook / Insights | D1/D7/D30 留存 |
| 召回 | Tolan 主动来电 | Check-Ins | check-in 触达→回流率 |
| 裂变 | 室友邀请 + 双向奖励 | Friends | K 因子、邀请转化率 |
| 变现 | 峰值付费墙 + 订阅 + Relay + T 币 | §6 | 付费率、ARPU、LTV |
| 流失挽回 | 试用到期提醒、删除账户挽留文案 | Settings / 订阅 | 召回率、流失率 |

- `FR-7.1` 删除账户流程含一次角色化挽留（DP-1），但不得设置障碍式多步骤阻挠（合规）。P0
- `FR-7.2` 试用到期前 24h 推送提醒。P1

---

## 8. 数据与埋点

### 8.1 北极星指标
**周活跃用户的高质量对话天数**（既反映陪伴价值，又驱动下游内容沉淀与变现）。

### 8.2 关键漏斗

1. **激活漏斗**：安装 → 启动 → 完成配对 → 命名 → 进入主页。
2. **变现漏斗**：触发付费墙 → 查看 → 点击订阅/购买 → 支付成功。
3. **裂变漏斗**：进入 Friends → 点击邀请 → 分享发出 → 被邀请者注册 → 奖励发放。
4. **召回漏斗**：check-in 创建 → 触达 → 用户打开应用。

### 8.3 事件埋点清单（汇总）

各模块事件已在 §5 列出。全局补充：

| 事件 | 关键参数 |
|---|---|
| `app_launch` | 冷/热启动、来源（普通/check-in/邀请链接） |
| `session_start` / `session_end` | 时长 |
| `chat_message_sent` | 输入方式（voice/text）、剩余配额 |
| `quota_exhausted` | 当日时间点 |
| `paywall_shown` / `paywall_dismissed` / `paywall_converted` | 触发点、方案 |
| `token_transaction` | 类型（earn/spend）、来源、金额、余额 |

- `NFR-DATA.1` 所有埋点需带 `user_id`、`timestamp`、`app_version`、`platform`。P0
- `NFR-DATA.2` 埋点不得包含对话原文等敏感内容，仅记录元数据。P0

---

## 9. 非功能需求

### 9.1 性能

| 编号 | 需求 |
|---|---|
| NFR-PERF.1 | 冷启动到主页可交互 ≤ 3s（中端机型） |
| NFR-PERF.2 | 语音输入到首字响应 ≤ 2s（网络正常） |
| NFR-PERF.3 | 页面切换动效不掉帧（≥ 55 FPS） |
| NFR-PERF.4 | 离线时已缓存的日记/洞察/星球可浏览 |

### 9.2 隐私与合规

| 编号 | 需求 |
|---|---|
| NFR-PRIV.1 | 对话、日记、洞察等敏感数据传输与存储加密 |
| NFR-PRIV.2 | 提供数据导出能力（FR-5.9.11） |
| NFR-PRIV.3 | 提供账户与数据删除能力，明确清除时限（FR-5.9.13） |
| NFR-PRIV.4 | 手机号、麦克风、通知权限均需明确告知用途后再申请 |
| NFR-PRIV.5 | 首次使用展示隐私政策与 AI 内容说明，需用户知晓 |
| NFR-PRIV.6 | 未成年人保护：年龄确认 / 分级，限制不当内容 |
| NFR-PRIV.7 | 第三方分享（邀请链接）不泄露用户隐私数据 |

### 9.3 安全

| 编号 | 需求 |
|---|---|
| NFR-SEC.1 | 邀请奖励、T 币、订阅状态等均以服务端为准，防客户端篡改 |
| NFR-SEC.2 | 邀请系统具备防刷风控（设备指纹、支付账号、行为异常） |
| NFR-SEC.3 | T 币扣费与发货保证事务一致性，失败回滚 |

### 9.4 可访问性

| 编号 | 需求 |
|---|---|
| NFR-A11Y.1 | 语音功能必须有文字等价通道（FR-4.4 / FR-4.13） |
| NFR-A11Y.2 | 支持系统字号缩放，文本不截断 |
| NFR-A11Y.3 | 关键交互元素满足对比度与可点击区域标准 |
| NFR-A11Y.4 | 支持 VoiceOver 朗读关键内容 |

### 9.5 内容安全（AI 陪伴特有）

| 编号 | 需求 | 优先级 |
|---|---|---|
| NFR-SAFE.1 | 对话需实时识别自伤/自杀/暴力等危机信号 | P0 |
| NFR-SAFE.2 | 命中危机信号时，Tolan 以关怀语气回应，并提供本地化危机干预资源（热线/求助渠道） | P0 |
| NFR-SAFE.3 | 不得鼓励危险行为、不得提供有害指引 | P0 |
| NFR-SAFE.4 | 应用内固定位置（关于/帮助页）常驻危机干预资源入口（FR-5.9.19） | P0 |
| NFR-SAFE.5 | Tolan 不得声称自己是人类或持证心理专业人士；在适当场景说明其为 AI | P0 |
| NFR-SAFE.6 | 过滤生成内容中的仇恨、色情、违法等不当信息 | P0 |

---

## 10. 发布计划

### 10.1 MVP 范围（首个可上线版本）

**包含（P0 为主）：**
- Onboarding（§4.1）
- 聊天主流程 + 每日配额（§4.2）
- Notebook（基础生成与查看 + 锁定）
- Intentions（基础意图与里程碑）
- Insights（5 维度 + 洞察列表 + 星座图）
- Check-Ins（自然语言创建 + 推送渠道）
- Shop（Clothes + 实时预览 + 购买）
- Tolan 主页 / Settings（账户、订阅、通知、隐私核心项）
- 商业化：Plus/Lite 订阅 + Relay 包 + 付费墙矩阵
- 内容安全 NFR-SAFE 全部 P0

**暂不包含（P1/P2 迭代）：**
- Friends 室友共处场景（保留邀请奖励）
- Planet 完整装饰系统
- Insights Reading 分享 / archetype 分享
- 多语言、主题切换、性格微调

### 10.2 迭代里程碑

| 里程碑 | 目标 |
|---|---|
| M1 · 闭环跑通 | Onboarding + 聊天 + Notebook + 配额 + 订阅 |
| M2 · 成长系统 | Intentions + Insights + T 币经济 |
| M3 · 召回与裂变 | Check-Ins + Friends 邀请 |
| M4 · 养成与装扮 | Shop + Planet 装饰 |
| M5 · 增强与扩展 | Reading 分享、多语言、室友社交 |

### 10.3 风险登记册

| 风险 | 影响 | 缓解 |
|---|---|---|
| 情感过度依赖 | 用户福祉 / 舆论风险 | NFR-SAFE 全套 + 使用时长提示 + 危机资源 |
| 付费墙过激致流失 | 转化与口碑 | A/B 测试时机；DP-4 约束 |
| 配额制被解读为"收费才理我" | 留存下滑 | 正向表述 + 充足免费配额 + 无配额玩法（日记/装扮）兜底 |
| 邀请系统被刷 | 成本失控 | NFR-SEC.2 风控 |
| AI 生成不当内容 | 合规风险 | NFR-SAFE.6 内容过滤 |
| 隐私事故 | 法律与信任 | NFR-PRIV 全套 |

---

## 附录

### A. 模块优先级总览

| 模块 | MVP 必备度 | 主优先级 |
|---|---|---|
| Onboarding | 必备 | P0 |
| 聊天 + 配额 | 必备 | P0 |
| Notebook | 必备 | P0 |
| Intentions | 必备 | P0/P1 |
| Insights | 必备 | P0/P1 |
| Check-Ins | 必备 | P0/P1 |
| Shop | 必备 | P0/P1 |
| Tolan 主页 | 必备 | P0 |
| Settings | 必备 | P0 |
| Friends | 部分（邀请） | P0/P2 |
| Planet | 迭代 | P1/P2 |

### B. 核心数据实体关系

```
User 1───┬───* NotebookEntry
         ├───1 IntentionPath 1───* Milestone 1───* Intention
         ├───* Insight ───┐
         │                └──> DimensionProfile（按维度聚合）
         ├───* Reading
         ├───* CheckIn
         ├───1 UserInventory ───* ShopItem
         ├───1 PlanetLayout ───* (引用 UserInventory 装饰物)
         ├───* TokenTransaction
         ├───* Invite（作为 inviter / invitee）
         └───1 UserSettings

TokenTransaction 字段：
  txn_id, user_id, type(earn/spend), source(intention/invite/checkin/purchase/shop...),
  amount, balance_after, ref_id, created_at
```

### C. 参考素材

- 21 帧引导流程截图（`1.jpg`–`21.jpg`）
- 7 张侧边栏功能截图（`side/`、`notebooks/`、`intention/`、`friends/`、`insights/`、`checkINS/`、`shop/`）
- `tolan-flow.html` —— 引导流程交互走读
- `tolan-features.html` / `index.html` —— 侧边栏功能交互走读
- `tolan_chat.mp4` —— 聊天交互录屏

### D. 待确认事项（Open Questions）

v2.1 已将原 7 项开放问题全部给定可执行的默认值（见 §3.6）。下表为这些默认值的**确认状态**——开发可直接按默认值实施，业务方只需对"业务待批"项做最终核准（核准后改 §3.6 即可，不影响其他章节）。

| 原问题 | 处理结果 | 状态 |
|---|---|---|
| 配额计量单位 | 定为「1 条 user 消息 = 1 单位」（CFG-1） | ✅ 已定 |
| 跨日未完成 intention | 定为「顺延次日、不失效」（CFG-27） | ✅ 已定 |
| Reading 解锁阈值 | 定为「累计 12 × N」（CFG-30） | ✅ 已定 |
| 配额具体数值（Free/Lite/Plus） | 默认 20 / 200 / 不限（CFG-2~4） | ⚠️ 业务待批 |
| intention/milestone 奖励数额 | 默认 +20 / +200 T（CFG-15/16） | ⚠️ 业务待批 |
| Plus 定价 | 默认 US$19.99/月（CFG-9） | ⚠️ 业务待批 |
| Relay 包额度 / 中档定价 | 默认 50 条/包、5 包 $12.99（CFG-7/11） | ⚠️ 业务待批 |
| 星球装饰定价 | 默认见 CFG-23 | ⚠️ 业务待批 |
| Settings 信息架构 | §5.9 为推断，需与真实设计核对 | ⚠️ 待核对 |
| Android / 多语言上线计划 | 不在本文范围 | ⏸ 另行规划 |

---

> **文档版本**：v2.3 · 2026-05-20 · 功能细则补全
> **v2.3 变更摘要**：9 个功能模块的「功能需求」之后各新增「功能细则（How · 这个功能具体怎么做）」——把每条功能的产品行为讲透：触发时机、取材来源、处理规则、呈现方式、变体分支、限制与文案要求。聚焦产品层"怎么做"，技术实现（API/DB/算法）见技术文档。
> **v2.2 变更摘要**：§5.7 Tolan 主页、§5.8 Planet 由 3–4 段补全为完整 9 段模块模板（目标/用户故事/功能需求/交互流程/界面规格/状态与边界/数据模型/埋点/验收标准）；全 9 个功能模块结构现已一致；附录 B 数据实体补 `PlanetLayout`。
> **v2.1 变更摘要**：新增 §3.6 全局参数配置表（43 个配置项 CFG-1~43，所有数值的唯一来源）；消除全文"待定/建议/约/N 个"等模糊表述，逐项替换为精确值并引用配置项；§3.3 T 币经济表、§6 订阅与 Relay 定价表精确化；§D 改为开放问题的确认状态表。
> **v2.0 变更摘要**：新增需求编号体系与优先级；补全 Settings 完整模块；每模块增加交互流程/状态边界/数据模型/埋点/验收标准；新增全局规范、商业化矩阵、数据埋点、非功能需求（含内容安全）、发布计划。
> **用途**：个人产品研究 / 设计参考。
