Files
TrueGrowth/specs/003-chat-drawer/spec.md

136 lines
8.2 KiB
Markdown
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.
# Feature Specification: 对话抽屉 (Chat Drawer)
**Feature Branch**: `001-chat-drawer`
**Created**: 2025-12-03
**Status**: Draft
**Input**: User description: "希望把UI改成上图所示,增加一个可展开收起的对话抽屉,支持使用对话模型实现连续对话。并能记录对话记录"
## User Scenarios & Testing *(mandatory)*
### User Story 1 - 基本对话交互 (Priority: P1)
用户希望在画板右侧看到一个可展开/收起的对话抽屉,能够与AI进行连续对话,获取创作帮助和建议。
**Why this priority**: 这是核心功能,提供了最基本的对话能力,是实现所有其他功能的基础。用户可以立即开始使用AI对话功能。
**Independent Test**: 可以通过点击抽屉开关按钮,输入消息并接收AI回复来完全测试。能独立提供AI对话辅助的价值,无需依赖其他功能。
**Acceptance Scenarios**:
1. **Given** 用户在画板界面,**When** 用户点击右侧的抽屉展开按钮,**Then** 对话抽屉从右侧滑出显示
2. **Given** 对话抽屉已展开,**When** 用户点击收起按钮,**Then** 抽屉滑回收起状态
3. **Given** 对话抽屉已展开,**When** 用户在输入框输入消息并发送,**Then** 消息显示在对话区域,AI开始处理并返回回复
4. **Given** AI正在处理消息,**When** 用户等待,**Then** 显示"正在理解需求并梳理您提供的材料"的加载状态
5. **Given** 对话进行中,**When** 用户继续发送新消息,**Then** 保持上下文连续性,AI基于历史对话回复
---
### User Story 2 - 对话历史持久化 (Priority: P2)
用户希望对话记录能够保存,刷新页面或关闭应用后重新打开仍能看到之前的对话历史。
**Why this priority**: 提升用户体验,避免重复沟通,让用户可以回顾之前的对话内容和AI建议。这是P1功能的重要增强。
**Independent Test**: 可以通过创建对话、刷新页面、验证对话历史是否保留来独立测试。提供数据持久化价值。
**Acceptance Scenarios**:
1. **Given** 用户已进行多轮对话,**When** 用户刷新页面,**Then** 打开抽屉后能看到完整的历史对话记录
2. **Given** 用户关闭浏览器,**When** 用户重新打开应用,**Then** 对话历史仍然保留
3. **Given** 对话历史很长,**When** 用户滚动查看,**Then** 能流畅浏览所有历史消息
---
### User Story 3 - 多会话管理 (Priority: P3)
用户希望能够创建多个独立的对话会话,在不同话题或项目之间切换,每个会话独立保存对话历史。
**Why this priority**: 让用户能够组织不同的对话主题,避免不同话题的对话混杂在一起。这是高级功能,P1和P2已经能提供基本价值。
**Independent Test**: 可以通过创建新会话、切换会话、验证各会话独立性来测试。提供对话组织管理价值。
**Acceptance Scenarios**:
1. **Given** 用户在当前会话中,**When** 用户点击"新建会话",**Then** 创建一个空白会话,之前的会话保留
2. **Given** 存在多个会话,**When** 用户切换到不同会话,**Then** 显示对应会话的历史记录
3. **Given** 用户在会话列表,**When** 用户查看会话,**Then** 能看到会话的标题/预览和创建时间
4. **Given** 用户选中某个会话,**When** 用户删除会话,**Then** 该会话及其历史记录被移除
---
### User Story 4 - 消息操作功能 (Priority: P4)
用户希望能够对AI的回复进行操作,如复制内容、重新生成回复等。
**Why this priority**: 提升使用便利性,让用户能够更好地利用AI生成的内容。这是锦上添花的功能。
**Independent Test**: 可以通过对消息执行复制、重新生成等操作来测试。提供内容操作便利性价值。
**Acceptance Scenarios**:
1. **Given** AI已回复消息,**When** 用户点击复制按钮,**Then** 消息内容复制到剪贴板
2. **Given** AI已回复消息,**When** 用户点击重新生成,**Then** AI基于同样的用户输入生成新的回复
3. **Given** 用户对某条回复不满意,**When** 用户点击"停止生成",**Then** AI停止当前回复的生成
---
### Edge Cases
- 当网络断开时,用户发送消息会发生什么?(应显示错误提示,消息保留在输入框)
- 当对话历史非常长如100+条消息)时,性能如何?(应实现虚拟滚动或分页加载)
- 当用户快速连续发送多条消息时,如何处理?(应排队处理,显示加载状态)
- 当抽屉展开时占用大量屏幕空间,画板区域过小怎么办?→ 抽屉宽度自适应视口30%,最小320px,最大500px
- 当localStorage存储空间不足时,历史记录如何处理?(应限制历史记录数量,或提供清理选项)
- 移动设备上抽屉如何显示?→ 全屏覆盖模式,抽屉打开时覆盖整个屏幕
## Requirements *(mandatory)*
### Functional Requirements
- **FR-001**: 系统必须在界面右侧提供一个可展开/收起的抽屉组件
- **FR-002**: 系统必须在抽屉中显示对话消息列表,区分用户消息和AI消息
- **FR-003**: 系统必须提供消息输入框,支持文本输入和发送
- **FR-004**: 系统必须支持连续对话,保持对话上下文
- **FR-005**: 系统必须支持流式响应,AI回复以逐字符/逐词方式实时显示,并在开始前显示加载状态(如"正在理解需求并梳理您提供的材料"
- **FR-006**: 系统必须将对话历史持久化存储在浏览器本地
- **FR-007**: 系统必须在应用重新加载后恢复对话历史
- **FR-008**: 系统必须支持创建多个独立的对话会话
- **FR-009**: 系统必须提供会话列表,显示会话标题(从首条用户消息自动截取生成)和时间
- **FR-010**: 系统必须支持切换和删除会话
- **FR-011**: 系统必须集成对话模型API使用现有的AI服务配置
- **FR-012**: 抽屉展开/收起动画必须流畅自然
- **FR-013**: 消息列表必须自动滚动到最新消息
- **FR-014**: 系统必须在消息发送失败时显示错误提示
- **FR-015**: 系统必须提供附件上传功能(回形针图标),支持上传图片、文档和文件,附件将发送给AI进行分析
- **FR-016**: 系统必须提供暂停生成按钮(如图中的暂停图标)
- **FR-017**: 系统必须在移动设备上以全屏覆盖模式显示对话抽屉
- **FR-018**: 桌面端抽屉宽度必须自适应视口宽度的30%,最小320px,最大500px
### Key Entities
- **ChatSession对话会话**: 代表一个独立的对话,包含会话ID、标题从首条用户消息自动生成,截取前30字符、创建时间、最后更新时间
- **ChatMessage对话消息**: 代表单条消息,包含消息ID、所属会话ID、角色用户/AI、内容、时间戳、状态发送中/成功/失败)、附件列表(可选,包含文件名、类型、大小、数据)
- **DrawerState抽屉状态**: 代表抽屉的UI状态,包含是否展开、宽度默认为视口宽度的30%,最小320px,最大500px、当前活跃会话ID
## Clarifications
### Session 2025-12-03
- Q: Should AI responses stream incrementally or appear all at once? → A: Stream responses token-by-token as AI generates them (progressive display)
- Q: How should session titles be generated? → A: Auto-generate title from first user message content (truncate if long)
- Q: What is the scope of attachment functionality? → A: Full attachment support - images, documents, and files sent to AI for analysis
- Q: How should the drawer behave on mobile devices? → A: Full-screen overlay - drawer covers entire screen when opened on mobile
- Q: What should be the default drawer width on desktop? → A: Adaptive - 30% of viewport width (min 320px, max 500px)
## Success Criteria *(mandatory)*
### Measurable Outcomes
- **SC-001**: 用户能够在1秒内展开/收起对话抽屉
- **SC-002**: 用户发送消息后,AI回复的首字节响应时间不超过3秒
- **SC-003**: 对话历史能够存储至少50个会话,每个会话至少100条消息
- **SC-004**: 抽屉展开/收起动画流畅,帧率保持在60fps
- **SC-005**: 90%的用户能够在首次使用时成功完成一次对话交互
- **SC-006**: 页面刷新后,对话历史恢复时间不超过500毫秒
- **SC-007**: 支持移动端和桌面端响应式布局,在不同屏幕尺寸下正常使用