Files
Neo-ZQYY/docs/h5_ui/interactions/chat.md

82 lines
4.1 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.
# 页面名chatAI 对话)
> PRD 参考P9 `docs/prd/specs/P9-miniapp-fe-details.md``apps/miniprogram/doc/prd.md` 第十节
> 已实现:否
## 页面说明
与 AI 助手进行对话。支持文本输入和语音输入AI 回复流式展示SSE。从其他页面进入时携带上下文引用。
> 原型 HTML 为纯静态展示(对话内容硬编码),仅有顶部返回 `history.back()` 一个交互事件。以下交互逻辑基于 PRD 设计。
## 状态变量
| 变量名 | 类型 | 初始值 | 说明 |
|--------|------|--------|------|
| messages | array | [] | 对话消息列表 |
| inputText | string | "" | 输入框内容 |
| isRecording | boolean | false | 录音状态 |
| referenceContent | object | null | 引用内容(来源页面 title + 基本信息) |
| sessionId | string | "" | 会话 ID |
| isStreaming | boolean | false | AI 正在流式回复 |
| loading | boolean | false | 加载历史消息中 |
## 用户操作 → 响应
| 操作 | 触发条件 | 响应行为 | 目标状态 |
|------|----------|----------|----------|
| 页面加载(新对话) | 从其他页面进入 | 创建新会话,第一条消息为页面上下文 | sessionId 设置 |
| 页面加载(继续对话) | 从 chat-history 进入 | 加载历史消息 | messages 填充 |
| 输入文本 + 点击发送 | inputText 非空 | POST /api/chat/conversations/:id/messagesSSE | isStreaming=true |
| 按住说话 | 无 | 开始录音 | isRecording=true |
| 松开说话 | isRecording=true | 语音转文字 → 填充输入框 | isRecording=false |
| AI 回复完成 | SSE 流结束 | 消息列表更新 | isStreaming=false |
| 上拉加载 | 有更早记录 | 加载更早消息 | loading=true→false |
| 距最后消息 >1 小时 | 时间判断 | 显示"新对话主题"和"继续对话"按钮 | — |
| 点击"新对话主题" | 提示条显示 | 创建新会话 | sessionId 更新 |
| 点击"继续对话" | 提示条显示 | 在当前会话继续 | — |
| 点击返回 | 顶部导航栏 | navigateBack / history.back() | — |
## 消息展示规则
- IM 风格:左侧 AI 气泡,右侧用户气泡
- AI 回复支持流式展示(逐字输出)
- 引用内容:灰底卡片,含来源类型、标题、摘要
- 发送后自动滚动到底部
## AI 对话来源展示规则PRD 补充)
从不同入口进入 chat 页面时,引用卡片的来源 title 定义:
| 入口页面 | 来源 title | 携带上下文 |
|----------|-----------|-----------|
| task-list 长按菜单"问问AI助手" | 任务:{客户昵称} | 任务类型 + 客户基本信息 |
| task-detail "问问助手" | 任务详情:{客户昵称} | 任务详情 + 客户信息 + AI 分析 |
| customer-detail "问问助手" | 客户:{客户昵称} | 客户信息 + 消费记录 + 指数 |
| AI 悬浮按钮(任意页面) | 当前页面名称 | 当前页面上下文 |
| chat-history 继续对话 | 历史对话 | 历史消息 |
## 会话管理规则PRD 补充)
- 距最后一条消息超过 1 小时:页面顶部显示提示条,含两个按钮:
- 「新对话主题」→ 创建新 sessionId清空消息区
- 「继续对话」→ 保持当前 sessionId在原会话追加
- 每个会话有独立 sessionId用于后端关联上下文
## 页面状态枚举
| 状态名 | 视觉表现 | 触发条件 |
|--------|----------|----------|
| 空对话 | 引用卡片 + 空消息区 | 新对话,未发送 |
| 对话中 | 消息列表 + 输入区 | 有消息 |
| AI 回复中 | 最后一条消息逐字输出 | isStreaming=true |
| 录音中 | 输入区显示录音动画 | isRecording=true |
## 后端 API 依赖
| API | 方法 | 说明 |
|-----|------|------|
| `POST /api/chat/conversations` | POST | 创建对话 |
| `POST /api/chat/conversations/:id/messages` | POST | 发送消息SSE 流式返回) |
| `GET /api/chat/conversations/:id/messages` | GET | 对话消息列表 |
## 页面导航
- 来源任意业务页面AI 悬浮按钮 / "问问助手"按钮)/ chat-history
- 去向:无(末端页面)
## 全局组件
- 自定义顶部导航栏(返回按钮 + "智能助手"
- 无底部 TabBar
- 无 AI 悬浮按钮(本页即为 AI 对话)