415 lines
6.0 KiB
Markdown
415 lines
6.0 KiB
Markdown
|
|
# 《往事拾遗》MVP – User Stories(V1)
|
|||
|
|
|
|||
|
|
> **视角说明**
|
|||
|
|
>
|
|||
|
|
> * 用户:普通用户(偏中老年,但 MVP 不特化)
|
|||
|
|
> * AI:回忆录助手
|
|||
|
|
> * 客户端:iOS / Android(React Native / Flutter / 原生均适用)
|
|||
|
|
> * 后端:API + AI 服务
|
|||
|
|
> * 数据库:关系型 or 文档型均可(这里用逻辑结构描述)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## EPIC 0:基础应用框架
|
|||
|
|
|
|||
|
|
### US-0.1 应用启动与默认入口
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望打开 App 后直接看到「对话列表」
|
|||
|
|
> 这样我不用学习就知道从哪里开始
|
|||
|
|
|
|||
|
|
**前端(iOS / Android)**
|
|||
|
|
|
|||
|
|
* App 启动后默认进入 `chat-list`
|
|||
|
|
* 显示 App 名称 + 副标题
|
|||
|
|
* 底部导航栏可见
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 可无登录状态返回「默认对话列表」(MVP 允许匿名)
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `conversation`(至少一条系统内置对话)
|
|||
|
|
|
|||
|
|
* id
|
|||
|
|
* type = `system`
|
|||
|
|
* title = `回忆录助手`
|
|||
|
|
* last_message
|
|||
|
|
* updated_at
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## EPIC 1:对话列表(chat-list)
|
|||
|
|
|
|||
|
|
### US-1.1 查看对话列表
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望看到一个类似微信的联系人列表
|
|||
|
|
> 能快速进入和 AI 的聊天
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 列表样式(头像 + 名称 + 最近消息 + 时间)
|
|||
|
|
* 默认只有一个联系人:`回忆录助手`
|
|||
|
|
* 点击进入聊天详情
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 返回用户的 conversation 列表
|
|||
|
|
* 按 `updated_at` 排序
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `conversation`
|
|||
|
|
|
|||
|
|
* id
|
|||
|
|
* user_id(可为空,MVP)
|
|||
|
|
* title
|
|||
|
|
* avatar_type(AI / 用户)
|
|||
|
|
* last_message
|
|||
|
|
* updated_at
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### US-1.2 查看新消息预览
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望在对话列表中看到最近一条消息
|
|||
|
|
> 让我知道“书有没有在变厚”
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 单行消息预览(省略)
|
|||
|
|
* 时间戳显示(今天 / 昨天 / 日期)
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 返回 conversation 的 last_message
|
|||
|
|
* 在新消息生成后更新
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `conversation.last_message`
|
|||
|
|
* `conversation.updated_at`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## EPIC 2:聊天详情(chat)
|
|||
|
|
|
|||
|
|
### US-2.1 进入全屏聊天
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望进入一个沉浸式聊天界面
|
|||
|
|
> 就像在微信里和一个人聊天一样
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 顶部栏:返回 + 回忆录助手 + 在线状态
|
|||
|
|
* 无底部导航
|
|||
|
|
* 消息列表支持滚动
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 返回该 conversation 的消息列表(分页)
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `message`
|
|||
|
|
|
|||
|
|
* id
|
|||
|
|
* conversation_id
|
|||
|
|
* sender_type(user / ai)
|
|||
|
|
* content_type(text / image / audio)
|
|||
|
|
* content
|
|||
|
|
* created_at
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### US-2.2 发送文字消息
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望能输入文字并发送
|
|||
|
|
> 来讲述我的回忆
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 文本输入框
|
|||
|
|
* 有文字时显示发送按钮
|
|||
|
|
* 发送后立即显示在聊天区(optimistic)
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 接收用户消息
|
|||
|
|
* 保存消息
|
|||
|
|
* 触发 AI 回复流程
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `message`
|
|||
|
|
|
|||
|
|
* sender_type = `user`
|
|||
|
|
* content_type = `text`
|
|||
|
|
* content = 原始文本
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### US-2.3 AI 自动回复并引导
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望 AI 能主动提问和追问
|
|||
|
|
> 帮我把记忆说完整
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 显示“正在输入…”
|
|||
|
|
* AI 回复显示为左侧气泡
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 将上下文消息发送给 AI
|
|||
|
|
* 返回 AI 回复
|
|||
|
|
* 回复内容偏引导式
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `message`
|
|||
|
|
|
|||
|
|
* sender_type = `ai`
|
|||
|
|
* content_type = `text`
|
|||
|
|
* metadata(可选:tag = 引导 / 追问)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### US-2.4 发送语音消息(占位)
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望能按住说话
|
|||
|
|
> 像微信一样讲故事
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 按住说话 / 上滑取消
|
|||
|
|
* 本地生成音频文件
|
|||
|
|
* 显示语音气泡(时长)
|
|||
|
|
|
|||
|
|
**后端(MVP 可弱化)**
|
|||
|
|
|
|||
|
|
* 接收音频文件
|
|||
|
|
* 返回占位文本(或不转写)
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `message`
|
|||
|
|
|
|||
|
|
* content_type = `audio`
|
|||
|
|
* content = 音频文件 URL
|
|||
|
|
* duration
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### US-2.5 发送图片
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望能发老照片
|
|||
|
|
> 帮助 AI 更好理解我的故事
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 从相册选择 / 拍照
|
|||
|
|
* 图片气泡展示
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 接收图片
|
|||
|
|
* 存储并返回 URL
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `message`
|
|||
|
|
|
|||
|
|
* content_type = `image`
|
|||
|
|
* content = 图片 URL
|
|||
|
|
* metadata(width / height)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## EPIC 3:回忆录生成与阅读
|
|||
|
|
|
|||
|
|
### US-3.1 自动生成回忆录结构
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望聊天内容能自动变成“书”
|
|||
|
|
> 而不是只是一堆对话
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 回忆录 Tab 显示目录页
|
|||
|
|
* 即使内容不多,也能看到章节雏形
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 定期 / 实时整理对话
|
|||
|
|
* 生成章节结构
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `memoir`
|
|||
|
|
|
|||
|
|
* id
|
|||
|
|
* user_id
|
|||
|
|
* title
|
|||
|
|
* subtitle
|
|||
|
|
* updated_at
|
|||
|
|
|
|||
|
|
* `memoir_chapter`
|
|||
|
|
|
|||
|
|
* id
|
|||
|
|
* memoir_id
|
|||
|
|
* title
|
|||
|
|
* order
|
|||
|
|
* content
|
|||
|
|
* progress
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### US-3.2 阅读章节内容
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望能像读电子书一样
|
|||
|
|
> 阅读已经整理好的回忆
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 章节标题 + 正文
|
|||
|
|
* 舒适排版
|
|||
|
|
* 插图内嵌展示
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 返回章节内容(HTML / Markdown)
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `memoir_chapter.content`
|
|||
|
|
* `memoir_asset`(插图)
|
|||
|
|
|
|||
|
|
* id
|
|||
|
|
* chapter_id
|
|||
|
|
* type
|
|||
|
|
* url
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### US-3.3 显示“最近更新”
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望知道最近哪一章有新增内容
|
|||
|
|
> 感觉“书在变厚”
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 目录页显示「最近更新」
|
|||
|
|
* 章节进度条
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 计算章节更新时间
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `memoir_chapter.updated_at`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## EPIC 4:我的(个人页)
|
|||
|
|
|
|||
|
|
### US-4.1 查看账户状态
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望在一个地方看到我的账户和套餐
|
|||
|
|
> 不影响聊天体验
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 头像 + 昵称
|
|||
|
|
* 当前套餐(免费)
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 返回用户信息
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* `user`
|
|||
|
|
|
|||
|
|
* id
|
|||
|
|
* nickname
|
|||
|
|
* avatar
|
|||
|
|
* plan_type
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### US-4.2 数据导出入口(占位)
|
|||
|
|
|
|||
|
|
**User Story**
|
|||
|
|
|
|||
|
|
> 作为用户
|
|||
|
|
> 我希望知道我的数据是可以导出的
|
|||
|
|
> 哪怕现在还不能用
|
|||
|
|
|
|||
|
|
**前端**
|
|||
|
|
|
|||
|
|
* 导出按钮(灰态)
|
|||
|
|
* 提示说明
|
|||
|
|
|
|||
|
|
**后端**
|
|||
|
|
|
|||
|
|
* 返回状态:未开放
|
|||
|
|
|
|||
|
|
**数据库**
|
|||
|
|
|
|||
|
|
* 无新增(MVP)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## MVP User Stories 总览(Checklist)
|
|||
|
|
|
|||
|
|
**核心路径**
|
|||
|
|
|
|||
|
|
* ☑ 对话列表
|
|||
|
|
* ☑ 聊天(文字 + AI 引导)
|
|||
|
|
* ☑ 回忆录自动生成
|
|||
|
|
* ☑ 电子书阅读体验
|
|||
|
|
|
|||
|
|
**增强体验**
|
|||
|
|
|
|||
|
|
* ☑ 图片
|
|||
|
|
* ⏳ 语音
|
|||
|
|
* ⏳ PDF 导出
|
|||
|
|
* ⏳ 登录 / 套餐
|