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

8.2 KiB
Raw Blame History

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: 支持移动端和桌面端响应式布局,在不同屏幕尺寸下正常使用