主题
AI 对话 PRD
文档信息
| 项目 | 内容 |
|---|---|
| 产品名称 | PMForge - AI 对话 |
| 文档版本 | v2.0 |
| 创建日期 | 2026-09-22 |
| 最后更新 | 2026-09-24 |
| 文档状态 | 评审中 |
| 优先级 | P0 |
一、功能概述
1.1 功能定位
AI 对话是 PMForge 平台的"智能客服中心"——就像给每个用户配了一位 24 小时在线的全能顾问,随时可以请教问题、获取建议。本模块基于 Spring AI 框架集成 16+ 主流 AI 服务商(OpenAI、Azure OpenAI、文心一言、智谱AI、通义千问、豆包、混元、讯飞星火、百川、DeepSeek、Gemini、Claude、Minimax、Moonshot、SiliconFlow、Ollama),为用户提供多模型、多角色、流式输出的智能对话能力。模块涵盖后台管理端的模型配置 → 会话管理 → 角色预设 → 配额管控 → 统计分析,以及用户前台的对话界面 → 角色广场 → 历史管理 → 分享导出完整交互链路。
通俗理解:把 AI 对话想象成一家"智能咨询公司"。后台管理员是"公司运营方"——负责聘请哪些"顾问"(接入 AI 模型)、设定服务规则(配额管控)、培训"顾问人设"(角色预设)。前台用户是"来访客户"——选择一位顾问(选模型+选角色),坐下来面对面交流(流式对话),聊完还能保存聊天记录(历史管理)或分享给同事(分享导出)。
本模块是平台的核心智能交互入口,也是 AI 写作、AI 绘画、AI 音乐、知识库等 AI 子模块的基础能力提供方——它们共享同一套模型配置和调用链路。
1.2 目标用户
| 用户类型 | 核心诉求 | 使用频率 |
|---|---|---|
| 超级管理员 | 统一管理 AI 服务商配置,监控全局 Token 消耗与费用 | 初期高频,日常中频 |
| 租户管理员 | 为租户配置可用模型,设置使用配额,控制成本 | 每周中频 |
| 运营人员 | 维护角色广场内容,分析用户对话偏好,优化体验 | 每日中频 |
| 普通用户 | 与 AI 高效对话,快速获得答案,管理对话历史 | 每日高频 |
| 开发者 | 测试模型连通性,调试提示词,评估模型效果 | 初期高频,日常中频 |
1.3 业务价值
| 价值维度 | 具体收益 | 衡量指标 |
|---|---|---|
| 降低 AI 接入成本 | 统一抽象层,新增服务商无需改代码 | 新服务商接入 < 30 分钟 |
| 提升交互体验 | 流式输出 + 多角色,类 ChatGPT 体验 | 首字延迟 < 3 秒 |
| 满足垂直场景 | 角色预设覆盖项目管理、编程、写作等 | 角色使用率 > 60% |
| 成本可控 | 配额管理 + Token 统计,防止费用失控 | 月费用偏差 < 10% |
| 数据安全 | 支持 Ollama 本地部署,数据不出域 | 敏感场景 100% 覆盖 |
| 运营决策 | 全量对话数据 + 统计分析 | 数据报表 T+1 可用 |
1.4 功能范围
| 功能分类 | 后台管理端 | 前台用户端 |
|---|---|---|
| AI 模型管理(CRUD) | ✅ | ❌ |
| 模型连通性测试 | ✅ | ❌ |
| 对话会话管理 | ✅ | ❌ |
| 对话消息管理 | ✅ | ❌ |
| AI 全局配置 | ✅ | ❌ |
| 角色预设管理 | ✅ | ❌ |
| 对话配额管理 | ✅ | ❌ |
| AI 统计分析 | ✅ | ❌ |
| AI 对话界面(流式) | ❌ | ✅ |
| 历史对话管理 | ❌ | ✅ |
| 对话搜索 | ❌ | ✅ |
| 消息交互(复制/重新生成/编辑) | ❌ | ✅ |
| 角色广场 | ❌ | ✅ |
| 自定义角色 | ❌ | ✅ |
| 对话分享/导出 | ❌ | ✅ |
二、用户场景
2.1 用户角色
| 角色 | 描述 | 核心诉求 |
|---|---|---|
| 系统管理员(老周) | 负责 AI 模型接入与全局配置 | 快速接入新模型、验证连通性、一键启停 |
| 租户管理员(老张) | 负责租户内 AI 使用管控 | 控制用量和费用、查看租户统计 |
| 运营人员(小陈) | 负责角色广场内容运营 | 快速创建和上线新角色、分析用户偏好 |
| 产品经理(小刘) | 日常使用 AI 对话解决工作问题 | 获得专业准确的回答、保存和复用对话 |
| 开发者(小李) | 技术调试和模型评估 | 测试模型效果、调试本地 Ollama 模型 |
2.2 使用场景
场景1:管理员老周接入新的 AI 模型
- 用户:系统管理员老周
- 前置条件:公司已采购 DeepSeek API 服务,获得 API Key
- 操作流程:
- 老周登录后台 → 进入"AI 管理 → 模型管理"页面
- 点击"新增模型" → 选择服务商"DeepSeek"
- 系统自动填充 Base URL(https://api.deepseek.com)
- 填写模型名称"DeepSeek-V3"、模型标识"deepseek-chat"、API Key
- 设置温度 0.7、最大 Token 数 4096
- 点击"测试"按钮 → 系统发送"你好" → 3 秒内收到 AI 回复
- 测试通过 → 点击"保存" → 手动启用该模型
- 用户端模型下拉列表即时出现"DeepSeek-V3"
- 期望结果:配置流程 < 3 分钟完成,测试即时验证配置正确性
- 验收标准:
- AC1:选择服务商后 Base URL 自动填充,人工可修改
- AC2:测试响应时间 ≤ 30 秒,展示回复内容、耗时、Token 消耗
- AC3:API Key 加密存储,列表页脱敏显示(仅显示前4后4位)
- AC4:新增模型默认"禁用"状态,需手动启用
- AC5:启用后用户端 < 5 秒可见新模型
场景2:产品经理小刘与 AI 进行专业对话
- 用户:产品经理小刘
- 前置条件:至少有一个 AI 模型处于启用状态
- 操作流程:
- 小刘进入前台"AI 对话"页面
- 点击"角色广场" → 选择"项目管理顾问"角色
- 系统自动创建新对话 → 加载角色的系统提示词和推荐模型
- 输入"如何制定项目风险管理计划?" → 按 Enter 发送
- AI 以"项目管理顾问"身份流式输出回答(打字机效果)
- 小刘追问"能给出风险登记册的模板吗?" → AI 继续回答
- 对话结束 → 小刘点击"复制"按钮复制回答内容
- 系统自动提取首次回复前 20 字作为对话标题
- 期望结果:角色专业度高,流式输出流畅,内容可直接复用
- 验收标准:
- AC1:流式输出首字延迟 ≤ 3 秒
- AC2:流式字符间隔 ≤ 100ms,无卡顿感
- AC3:回复内容支持 Markdown 渲染(代码高亮、表格、列表)
- AC4:角色的系统提示词正确注入,回答风格与角色匹配
- AC5:上下文自动携带最近 N 条消息,多轮对话连贯
场景3:运营小陈创建角色并发布到角色广场
- 用户:运营人员小陈
- 前置条件:小陈拥有角色管理权限
- 操作流程:
- 小陈发现用户频繁询问研学相关问题
- 进入后台"AI 管理 → 角色管理" → 点击"新增角色"
- 填写角色名称"研学导师"、描述"专注研学课程设计与教学指导"
- 编写系统提示词"你是一位资深研学导师,擅长..."
- 上传角色头像 → 设置推荐模型和温度参数
- 保存并启用 → 用户在前台"角色广场"即可看到新角色
- 角色卡片展示:头像、名称、描述、使用人数
- 期望结果:角色创建简单高效,上线后用户立即可用
- 验收标准:
- AC1:系统提示词长度上限 4000 字符
- AC2:角色头像支持 jpg/png/webp,≤ 2MB
- AC3:启用后用户端角色广场 < 5 秒可见
- AC4:使用人数实时更新
- AC5:禁用角色不影响已创建的对话会话
场景4:租户管理员老张控制 AI 使用成本
- 用户:租户管理员老张
- 前置条件:租户内用户已开始使用 AI 对话
- 操作流程:
- 老张发现本月 AI 费用超出预算
- 进入后台"AI 管理 → 配额管理"
- 设置全局默认配额:每用户每日 50 次对话、100,000 Token
- 为 VIP 用户张三设置自定义配额:每日 200 次、500,000 Token
- 查看配额使用报表:谁用了多少、还剩多少
- 用户李四今日已用完 50 次 → 发送消息时收到提示"今日对话次数已用完,请明日再试或升级配额"
- 期望结果:成本可控、配额灵活、用户提示友好
- 验收标准:
- AC1:配额扣减实时生效,不超发
- AC2:每日配额凌晨 00:00 自动重置
- AC3:自定义配额优先级高于全局默认
- AC4:超额提示友好,引导用户升级或等待
- AC5:Token 消耗 = 输入 Token + 输出 Token,精确计算
场景5:开发者小李调试本地 Ollama 模型
- 用户:开发者小李
- 前置条件:小李在本地服务器部署了 Ollama + Qwen2 模型
- 操作流程:
- 小李进入后台"模型管理" → 点击"新增模型"
- 选择服务商"Ollama" → 系统自动填充 Base URL(http://localhost:11434)
- 修改为实际服务器地址 http://192.168.1.100:11434
- 填写模型标识"qwen2" → 点击"测试"
- 测试通过 → 保存并启用 → 内部用户可使用本地模型对话
- 对话数据全程不出企业内网
- 期望结果:本地模型顺利接入,满足数据私有化需求
- 验收标准:
- AC1:支持 Ollama 本地模型接入
- AC2:连通性测试能正确识别本地模型可用性
- AC3:同一服务商下模型标识不可重复
- AC4:禁用本地模型不影响已有会话的历史消息查看
- AC5:新增一个服务商配置全流程 < 30 分钟
三、功能需求
3.1 后台管理端
3.1.1 AI 模型管理
页面描述:

服务商预设配置:
| 服务商 | 标识 | 默认 Base URL | 可用模型示例 |
|---|---|---|---|
| OpenAI | openai | https://api.openai.com | gpt-4o, gpt-4o-mini |
| Azure OpenAI | azure | https://{resource}.openai.azure.com | gpt-4o, gpt-35-turbo |
| 文心一言 | baidu | https://aip.baidubce.com | ernie-bot-4, ernie-bot-3.5 |
| 智谱AI | zhipu | https://open.bigmodel.cn | glm-4, glm-4-flash |
| 通义千问 | aliyun | https://dashscope.aliyuncs.com | qwen-turbo, qwen-plus |
| 豆包 | doubao | https://ark.cn-beijing.volces.com | doubao-pro |
| 混元 | hunyuan | https://api.hunyuan.cloud.tencent.com | hunyuan-pro |
| 讯飞星火 | xinghuo | https://spark-api-open.xf-yun.com | spark-pro |
| 百川 | baichuan | https://api.baichuan-ai.com | baichuan-4 |
| DeepSeek | deepseek | https://api.deepseek.com | deepseek-chat |
| Gemini | gemini | https://generativelanguage.googleapis.com | gemini-pro |
| Claude | claude | https://api.anthropic.com | claude-3-opus |
| Minimax | minimax | https://api.minimax.chat | abab6.5-chat |
| Moonshot | moonshot | https://api.moonshot.cn | moonshot-v1-8k |
| SiliconFlow | siliconflow | https://api.siliconflow.cn | Qwen/Qwen2-72B |
| Ollama | ollama | http://localhost:11434 | llama3, qwen2 |
模型新增/编辑表单:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 模型名称 | 输入框 | ✅ | 自定义展示名称,如"GPT-4o 官方" |
| 服务商 | 下拉选择 | ✅ | 从 16 个预定义服务商中选择(编辑时不可改) |
| 模型标识 | 输入框 | ✅ | 服务商模型ID,如 gpt-4o、deepseek-chat |
| API Key | 密码框 | ✅ | 服务商 API 密钥(编辑时留空=不修改) |
| Base URL | 输入框 | ❌ | API 地址(选择服务商后自动填充,可修改用于代理) |
| 温度 | 滑块 | ❌ | 0-2,默认 0.7,越高越随机 |
| 最大 Token 数 | 数字输入 | ❌ | 默认 2048,范围 1-128000 |
| 排序 | 数字输入 | ❌ | 展示排序值 |
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 默认按排序值升序、创建时间倒序排列 | 运营可控制展示顺序 |
| R-02 | 支持按名称模糊搜索、按服务商/状态筛选 | 模型多时快速定位 |
| R-03 | 同一服务商可配置多个模型版本 | 如同一服务商同时配 gpt-4o 和 gpt-4o-mini |
| R-04 | 至少保留一个启用状态的模型 | 避免用户端无模型可用 |
| R-05 | API Key 加密存储(AES-256),列表脱敏显示 | 防止密钥泄露 |
| R-06 | 新增模型默认"禁用",需手动启用 | 防止未测试的模型直接上线 |
| R-07 | 启用前校验 API Key 和 Base URL 非空 | 确保配置完整可用 |
| R-08 | 删除模型不影响已有消息记录(消息保存模型标识快照) | 历史数据完整性 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取模型分页 | GET | /admin-api/ai/model/page | 支持名称/服务商/状态筛选 |
| 获取模型详情 | GET | /admin-api/ai/model/get | 获取完整配置 |
| 获取模型精简列表 | GET | /admin-api/ai/model/simple-list | 启用状态模型,用于下拉选择 |
| 获取服务商列表 | GET | /admin-api/ai/model/providers | 16 个服务商 |
| 创建模型 | POST | /admin-api/ai/model/create | 新增模型配置 |
| 更新模型 | PUT | /admin-api/ai/model/update | 修改模型配置 |
| 删除模型 | DELETE | /admin-api/ai/model/delete | 逻辑删除 |
| 启用/禁用模型 | PUT | /admin-api/ai/model/update-status | 切换状态 |
| 测试模型 | POST | /admin-api/ai/model/test | 发送测试消息验证连通性 |
3.1.2 对话会话与消息管理
页面描述:
管理员可查看、搜索、删除所有用户的对话会话和消息记录。

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 默认按创建时间倒序排列 | 最新对话优先查看 |
| R-02 | 支持按用户、模型、时间范围、标题筛选 | 多维度定位目标对话 |
| R-03 | 删除会话同时删除关联消息(逻辑删除) | 数据一致性 |
| R-04 | 会话详情可查看关联的所有消息 | 完整还原对话场景 |
| R-05 | 消息内容列表截断展示(100 字符),详情展示完整内容 | 列表页简洁、详情页完整 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取会话分页 | GET | /admin-api/ai/chat/conversation/page | 支持多维度筛选 |
| 获取会话详情 | GET | /admin-api/ai/chat/conversation/get | 含消息列表 |
| 删除会话 | DELETE | /admin-api/ai/chat/conversation/delete | 级联删除消息 |
| 获取消息分页 | GET | /admin-api/ai/chat/message/page | 按会话/角色/模型筛选 |
| 获取消息详情 | GET | /admin-api/ai/chat/message/get | 完整消息内容 |
| 删除消息 | DELETE | /admin-api/ai/chat/message/delete | 逻辑删除 |
3.1.3 AI 全局配置
页面描述:
Tab 页签形式,分为"基础配置"、"角色预设"、"配额管理"三个子页。
基础配置字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| 默认模型 | 下拉选择 | 从启用模型中选择 |
| 系统提示词 | 文本域 | 全局默认系统提示词,支持 {username}、{datetime} 变量 |
| 最大上下文长度 | 数字输入 | 单次对话最大上下文消息数,默认 10 |
| 单次回复最大 Token | 数字输入 | 单次 AI 回复最大 Token 数 |
| SSE 超时时间 | 数字输入 | 连接超时秒数,默认 60 |
| 内容审核开关 | 开关 | 是否对用户输入进行安全审核 |
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 修改后即时生效 | 运营灵活调整 |
| R-02 | 默认模型必须在启用模型中选择 | 防止配置无效模型 |
| R-03 | 系统提示词支持 {username}、{datetime} 变量替换 | 个性化体验 |
3.1.4 角色预设管理
页面描述:

角色表单字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 角色名称 | 输入框 | ✅ | 如"项目管理顾问"、"编程助手" |
| 角色头像 | 图片上传 | ❌ | jpg/png/webp,≤ 2MB |
| 角色描述 | 文本域 | ❌ | 简短介绍,≤ 200 字符 |
| 系统提示词 | 文本域 | ✅ | 角色的 system prompt,≤ 4000 字符 |
| 默认模型 | 下拉选择 | ❌ | 推荐使用的模型 |
| 温度 | 滑块 | ❌ | 默认温度参数 |
| 最大 Token | 数字输入 | ❌ | 默认最大输出 Token |
| 排序 | 数字输入 | ❌ | 展示排序值 |
| 状态 | 开关 | ❌ | 启用/禁用 |
预置角色示例:
| 角色名称 | 系统提示词摘要 |
|---|---|
| AI 助手 | 你是一个智能助手,可以回答各种问题... |
| 项目管理顾问 | 你是一个资深项目管理专家,擅长项目规划、风险管理... |
| 编程助手 | 你是一个编程专家,可以帮助用户编写和调试代码... |
| 文案写手 | 你是一个专业文案,擅长撰写各类营销文案、公告... |
| 翻译官 | 你是一个专业翻译,可以中英互译并保证信达雅... |
| 数据分析师 | 你是一个数据分析专家,擅长数据处理、统计分析... |
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 系统预置角色不可删除,可禁用 | 保证基础角色始终可用 |
| R-02 | 禁用角色不影响已创建的对话 | 历史对话完整性 |
| R-03 | 角色删除为逻辑删除 | 数据可恢复 |
| R-04 | 角色头像支持 jpg/png/webp,≤ 2MB | 统一头像规范 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取角色分页 | GET | /admin-api/ai/chat/role/page | 支持名称/状态筛选 |
| 获取角色详情 | GET | /admin-api/ai/chat/role/get | 完整角色信息 |
| 创建角色 | POST | /admin-api/ai/chat/role/create | 新增角色 |
| 更新角色 | PUT | /admin-api/ai/chat/role/update | 修改角色 |
| 删除角色 | DELETE | /admin-api/ai/chat/role/delete | 逻辑删除 |
| 启用/禁用角色 | PUT | /admin-api/ai/chat/role/update-status | 切换状态 |
3.1.5 对话配额管理
页面描述:
管理员可设置全局默认配额和按用户自定义配额,控制 AI 使用成本。
配额字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| 每用户每日最大对话次数 | Integer | 0 = 不限 |
| 每用户每日最大 Token 数 | Long | 0 = 不限 |
| 每用户每月最大 Token 数 | Long | 0 = 不限 |
| 单次对话最大消息轮次 | Integer | 0 = 不限 |
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 用户自定义配额优先级 > 全局默认 | 支持差异化服务 |
| R-02 | 每日配额凌晨 00:00 重置,每月配额月初 00:00 重置 | 自然周期重置 |
| R-03 | 超额时返回友好提示,引导升级或等待重置 | 用户体验 |
| R-04 | Token 消耗 = 输入 Token + 输出 Token | 精确计量成本 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取配额配置 | GET | /admin-api/ai/quota/get | 全局配额配置 |
| 更新配额配置 | PUT | /admin-api/ai/quota/update | 修改配额 |
| 获取用户配额使用情况 | GET | /admin-api/ai/quota/usage | 指定用户的配额消耗 |
3.1.6 AI 统计分析
页面描述:

统计指标:
| 指标 | 说明 |
|---|---|
| 对话次数 | 用户发送消息的总次数 |
| Token 消耗 | 输入 Token + 输出 Token 总量 |
| 活跃用户数 | 发起过对话的去重用户数 |
| 服务商调用分布 | 各服务商的调用次数占比 |
| 模型使用排行 | 各模型的使用次数排行 |
| 预估费用 | 根据各服务商单价计算(需配置单价) |
| 平均响应时间 | AI 回复的平均耗时 |
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 统计数据准实时(延迟 ≤ 5 分钟) | 运营决策及时性 |
| R-02 | 费用计算依赖模型单价配置,未配置则显示"未配置" | 费用透明化 |
| R-03 | 支持按租户维度数据隔离 | 多租户独立统计 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取对话统计 | GET | /admin-api/ai/statistics/chat | 对话次数统计 |
| 获取 Token 统计 | GET | /admin-api/ai/statistics/token | Token 消耗统计 |
| 获取服务商统计 | GET | /admin-api/ai/statistics/provider | 服务商调用占比 |
| 获取模型排行 | GET | /admin-api/ai/statistics/model-rank | 模型使用排行 |
| 获取费用统计 | GET | /admin-api/ai/statistics/cost | 费用估算 |
| 获取趋势数据 | GET | /admin-api/ai/statistics/trend | 趋势图表数据 |
3.2 前台用户端
3.2.1 AI 对话界面
页面描述:

操作流程:
- 用户点击"新建对话"或选择已有对话
- 选择模型(默认使用全局配置模型)
- 选择角色(可选,默认"AI 助手")
- 在输入框中输入问题 → Enter 发送(Shift+Enter 换行)
- AI 流式输出回复(SSE 逐字推送,打字机效果)
- 可继续追问,形成多轮对话
- 对话过程中可:复制回复、重新生成、编辑消息、停止生成
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 新建对话默认标题"新对话",首次 AI 回复后自动提取前 20 字为标题 | 自动命名减少操作 |
| R-02 | 流式输出使用 SSE(Server-Sent Events)协议 | 实时体验 |
| R-03 | 消息发送中按钮 loading,不允许重复发送 | 防止重复提交 |
| R-04 | 支持 Markdown 渲染(代码高亮、表格、列表) | 内容丰富度 |
| R-05 | 支持 LaTeX 数学公式渲染 | 学术/技术场景 |
| R-06 | 单条消息最大输入 8000 字符 | 防止超长输入 |
| R-07 | 断网/超时展示重试按钮 | 异常可恢复 |
| R-08 | 每次发送自动携带上下文(最近 N 条消息) | 多轮对话连贯性 |
| R-09 | 发送前校验配额,超额拦截并提示 | 成本管控 |
| R-10 | 对话中切换模型不影响上下文 | 灵活切换 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 发送消息(流式) | POST | /app-api/ai/chat/send | SSE 流式接收 |
| 发送消息(非流式) | POST | /app-api/ai/chat/send-block | 一次性返回 |
| 停止生成 | POST | /app-api/ai/chat/stop | 中断当前生成 |
流式返回示例(SSE):
event: message
data: {"content": "你", "finish": false}
event: message
data: {"content": "好", "finish": false}
event: done
data: {"conversationId": 1001, "messageId": 2001, "promptTokens": 15, "completionTokens": 8, "totalTokens": 23}3.2.2 历史对话管理
页面描述:
左侧列表展示所有历史对话,按时间分组(今天/昨天/近7天/更早),对话标题可编辑,右键菜单支持删除和重命名。
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 默认按最后更新时间倒序 | 最近对话优先 |
| R-02 | 标题为空时显示首条消息摘要 | 列表可辨识 |
| R-03 | 删除需二次确认,同时删除所有消息 | 防误操作 |
| R-04 | 用户只能查看自己的对话 | 数据隔离 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取对话列表 | GET | /app-api/ai/chat/conversation/list | 支持标题搜索 |
| 获取对话详情 | GET | /app-api/ai/chat/conversation/get | 含消息列表 |
| 更新对话标题 | PUT | /app-api/ai/chat/conversation/update-title | 重命名 |
| 删除对话 | DELETE | /app-api/ai/chat/conversation/delete | 级联删除消息 |
3.2.3 消息交互功能
| 功能 | 说明 | 触发方式 |
|---|---|---|
| 复制 | 复制 AI 回复文本到剪贴板,Toast 提示 | 消息右上角"复制"按钮 |
| 重新生成 | 重新发送上一条用户消息,新回复替换旧回复(可查历史版本) | AI 回复下方"重新生成"按钮 |
| 编辑重发 | 编辑已发送的用户消息,重新发送,后续消息清空 | 用户消息"编辑"按钮 |
| 查看历史版本 | 查看某条 AI 回复的历史版本列表 | 重新生成后的"历史"链接 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 重新生成回复 | POST | /app-api/ai/chat/message/regenerate | 重新生成 |
| 编辑并重新发送 | POST | /app-api/ai/chat/message/edit | 编辑重发 |
| 获取回复历史版本 | GET | /app-api/ai/chat/message/versions | 历史版本 |
3.2.4 对话分享与导出
分享功能:
- 生成分享链接(有效期 7 天)
- 分享链接为只读页面,展示对话内容
- 支持选择分享范围(整个对话/选中部分消息)
导出功能:
- 支持导出为 Markdown 格式
- 支持导出为 TXT 纯文本格式
- 支持导出为 PDF 格式(P2)
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 生成分享链接 | POST | /app-api/ai/chat/share/create | 7 天有效期 |
| 查看分享内容 | GET | /app-api/ai/chat/share/get | 无需登录 |
| 导出对话 | GET | /app-api/ai/chat/conversation/export | markdown/txt/pdf |
3.2.5 上下文管理
功能说明:
- 显示当前上下文消息数
- 支持手动清除上下文(AI 将"忘记"之前的对话)
- 支持调整上下文长度(滑动条,范围 0-20)
- 上下文长度为 0 = 每次独立对话(无记忆)
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 清除上下文后 AI 不记得之前内容 | 用户主动控制记忆 |
| R-02 | 上下文长度不超过全局配置最大值 | 防止 Token 超限 |
| R-03 | 上下文 Token 超模型限制时自动截断早期消息 | 防止请求失败 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 清除上下文 | POST | /app-api/ai/chat/conversation/clear-context | 清除记忆 |
| 更新上下文设置 | PUT | /app-api/ai/chat/conversation/update-settings | 调整长度 |
3.2.6 角色广场
页面描述:
卡片网格布局展示所有可用角色,每张卡片包含角色头像、名称、描述、使用人数。顶部有分类标签筛选(全部/效率/编程/写作/学习/娱乐等)和搜索框。点击角色卡片直接开始使用该角色对话。
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 只展示启用状态的角色 | 运营可控上线节奏 |
| R-02 | 默认按排序值升序排列 | 运营控制展示顺序 |
| R-03 | 使用次数实时更新 | 帮助用户选择热门角色 |
| R-04 | 点击角色后自动创建新对话并关联该角色 | 减少操作步骤 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取角色广场列表 | GET | /app-api/ai/chat/role/square | 含分类和搜索 |
| 获取角色详情 | GET | /app-api/ai/chat/role/get | 角色完整信息 |
3.2.7 自定义角色创建
功能说明:
用户可创建个性化角色,填写角色名称、描述、系统提示词,选择或上传头像。保存后可在"我的角色"中使用。
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 自定义角色仅创建者本人可用 | 个人专属 |
| R-02 | 系统提示词 ≤ 2000 字符 | 防止滥用 |
| R-03 | 每用户最多 20 个自定义角色 | 防止资源浪费 |
| R-04 | 自定义角色默认启用 | 创建即可用 |
接口列表:
| 接口名称 | 方式 | 接口路径 | 说明 |
|---|---|---|---|
| 创建自定义角色 | POST | /app-api/ai/chat/role/create-custom | 新增 |
| 获取我的自定义角色 | GET | /app-api/ai/chat/role/my-list | 列表 |
| 更新自定义角色 | PUT | /app-api/ai/chat/role/update-custom | 修改 |
| 删除自定义角色 | DELETE | /app-api/ai/chat/role/delete-custom | 删除 |
四、非功能需求
4.1 性能需求
| 指标 | 要求 | 实现策略 |
|---|---|---|
| 流式输出首字延迟 | ≤ 3 秒 | SSE 长连接 + 连接池复用 |
| 流式字符间隔 | ≤ 100ms | 流式推送,逐字/逐句输出 |
| 历史对话列表查询 | ≤ 500ms | Redis 缓存最近列表 |
| 消息记录分页查询 | ≤ 300ms | 数据库索引(conversation_id + create_time) |
| 统计分析查询 | ≤ 2 秒 | 预计算 + 缓存 |
| SSE 并发连接 | 单节点 ≥ 1000 | Netty/NIO 异步模型 |
| 模型配置变更生效 | ≤ 5 秒 | Redis Pub/Sub 实时推送 |
4.2 安全需求
| 安全项 | 要求 | 实现方式 |
|---|---|---|
| API Key 加密 | AES-256 加密存储 | 接口返回脱敏(前4后4位) |
| 输入内容审核 | 支持敏感内容过滤 | 关键词匹配 + AI 审核(可配置开关) |
| 数据隔离 | 租户间完全隔离 | MyBatis Plus 租户插件自动注入 tenant_id |
| 频率限制 | 单用户每秒 ≤ 5 条消息 | Redis + Lua 滑动窗口 |
| 分享链接安全 | UUID + 7 天有效期 | 不含敏感信息,支持手动失效 |
| 操作审计 | 模型配置/角色管理记录日志 | 操作日志自动记录 |
4.3 可用性需求
| 指标 | 要求 |
|---|---|
| 系统可用率 | ≥ 99.9%(年停机 ≤ 8.76 小时) |
| SSE 连接稳定性 | 心跳保活(30 秒/次)+ 断线重连 |
| 服务商故障降级 | 不可用时提示用户切换其他模型 |
| 对话数据持久化 | 实时保存,网络中断不丢失已发送消息 |
| 配置备份 | 关键配置 Redis 备份,服务重启快速恢复 |
| 多服务商冗余 | 至少支持 3 个服务商同时配置 |
4.4 错误码定义
| 错误码 | 说明 | 用户提示 |
|---|---|---|
| AI_MODEL_001 | 模型不存在 | "该模型已下线,请选择其他模型" |
| AI_MODEL_002 | 模型已禁用 | "该模型已停用,请联系管理员" |
| AI_MODEL_003 | API Key 无效 | "模型配置异常,请联系管理员" |
| AI_MODEL_004 | 模型连接超时 | "AI 响应超时,请稍后重试" |
| AI_CHAT_001 | 会话不存在 | "对话不存在或已删除" |
| AI_CHAT_002 | 消息内容为空 | "请输入消息内容" |
| AI_CHAT_003 | 消息过长 | "消息过长,请控制在 8000 字符以内" |
| AI_QUOTA_001 | 每日对话次数超限 | "今日对话次数已用完,请明日再试或升级配额" |
| AI_QUOTA_002 | 每日 Token 超限 | "今日 Token 已用完,请明日再试或升级配额" |
| AI_QUOTA_003 | 每月 Token 超限 | "本月 Token 已用完,请升级配额" |
| AI_ROLE_001 | 角色不存在 | "该角色已下线" |
| AI_ROLE_002 | 角色已禁用 | "该角色已停用,请选择其他角色" |
| AI_ROLE_003 | 自定义角色数超限 | "自定义角色已达上限(20个),请删除后再创建" |
| AI_CONTENT_001 | 内容审核未通过 | "输入内容包含敏感信息,请修改后重试" |
五、数据设计
5.1 数据表概览
| 表名 | 说明 | 预估数据量 |
|---|---|---|
| ai_model | AI 模型配置表 | 50-100 条 |
| ai_model_config | 模型全局配置表 | 10-20 条 |
| ai_chat_conversation | 对话会话表 | 百万级 |
| ai_chat_message | 对话消息表 | 千万级 |
| ai_chat_role | 对话角色表 | 50-200 条 |
| ai_chat_share | 对话分享表 | 万级 |
| ai_quota | 对话配额表 | 千级 |
| ai_quota_usage | 配额使用记录表 | 十万级 |
5.2 核心表关系

5.3 缓存策略
| 缓存 Key | 数据 | 过期策略 | 更新方式 |
|---|---|---|---|
| ai:model:list | 启用模型列表 | 主动失效 | 模型增删改时清除 |
| ai:config:global | 全局配置 | 不过期 | 配置变更时更新 |
| ai:role:square | 角色广场列表 | 5 分钟 | 角色变更时清除 |
| ai:quota:{userId}: | 用户当日配额使用 | 次日凌晨过期 | 每次对话后原子递增 |
| ai:share: | 分享记录 | 7 天 | 创建时写入 |
配额扣减实现: 使用 Redis Hash 结构 ai:quota:{userId}:{date},字段包含 chat_count 和 token_count。每次对话后通过 HINCRBY 原子递增,避免并发超发。
六、跨模块联动
6.1 联动关系总览
| 联动模块 | 联动方向 | 联动场景 |
|---|---|---|
| 会员积分 | AI对话 → 会员积分 | Token 消耗扣减积分/余额 |
| 钱包管理 | AI对话 → 钱包 | Token 消耗生成钱包流水 |
| 消息通知 | AI对话 → 消息通知 | 对话完成/配额不足通知 |
| 内容安全 | 内容安全 → AI对话 | 输入/输出内容安全审核 |
| 系统管理 | 系统管理 → AI对话 | 操作日志、角色权限 |
| 统计分析 | AI对话 → 统计 | 对话数据供统计模块聚合 |
6.2 详细联动设计
AI对话 ↔ 会员积分
| 联动场景 | 触发条件 | 联动行为 | 数据流向 |
|---|---|---|---|
| Token 消耗扣积分 | 每次对话完成 | 按 Token 消耗扣减积分,生成积分变更记录 | 对话模块 → 积分模块 |
| 积分不足拦截 | 积分余额 < 本次预估消耗 | 拦截对话请求,提示"积分不足,请充值" | 积分模块 → 对话模块 |
| 积分页面展示 | 用户查看"我的积分" | 展示 AI 对话积分消耗明细 | 积分模块读取对话消耗记录 |
AI对话 ↔ 钱包管理
| 联动场景 | 触发条件 | 联动行为 | 数据流向 |
|---|---|---|---|
| Token 消耗扣余额 | 每次对话完成 | 按 Token 消耗扣减钱包余额,生成流水 | 对话模块 → 钱包模块 |
| 余额不足拦截 | 钱包余额 < 本次预估消耗 | 拦截对话请求,提示"余额不足,请充值" | 钱包模块 → 对话模块 |
| 钱包账单展示 | 用户查看"钱包账单" | 展示 AI 对话消费记录 | 钱包模块读取对话消费流水 |
AI对话 ↔ 消息通知
| 联动场景 | 触发条件 | 联动行为 | 数据流向 |
|---|---|---|---|
| 对话完成通知 | 长对话生成完成 | 生成站内消息通知用户 | 对话模块 → 通知模块 |
| 配额不足提醒 | 剩余配额 < 20% | 推送提醒:配额即将用尽 | 对话模块 → 通知模块 |
AI对话 ↔ 内容安全
| 联动场景 | 触发条件 | 联动行为 | 数据流向 |
|---|---|---|---|
| 输入审核 | 用户发送消息(审核开关开启时) | 调用内容安全接口过滤敏感词 | 对话模块 → 内容安全模块 |
| 输出审核 | AI 返回回复 | 对回复内容进行安全审核 | 对话模块 → 内容安全模块 |
AI对话 ↔ 系统管理
| 联动场景 | 触发条件 | 联动行为 | 数据流向 |
|---|---|---|---|
| 操作日志 | 模型配置/角色管理/配额调整 | 记录操作日志 | 对话模块 → 日志审计模块 |
| 权限校验 | 用户访问功能 | 校验角色权限 | 系统管理 → 对话模块 |
AI对话 → 统计分析
| 联动场景 | 触发条件 | 联动行为 | 数据流向 |
|---|---|---|---|
| 对话数据聚合 | T+1 离线计算 | 统计模块读取对话/消息表,聚合对话趋势、模型分布、费用统计 | 统计模块 ← 对话模块 |
七、附录
7.1 名词解释
| 术语 | 通俗理解 | 在本模块中的应用 |
|---|---|---|
| Token | AI 的"计价单位",就像打车按公里计费,AI 按 Token 计费。一个中文字约 1-2 个 Token | 衡量每次对话的消耗,用于配额管控和费用计算 |
| Spring AI | 一个"翻译官"框架,把不同 AI 厂商的"方言"翻译成统一"普通话" | 平台通过 Spring AI 统一对接 16+ 服务商,新增服务商无需改代码 |
| SSE(流式输出) | 像"直播"一样实时推送内容,而不是等全部写完再给你看 | AI 回复逐字显示,用户不用干等,体验更流畅 |
| 温度(Temperature) | 控制 AI "创造力"的旋钮——低温=严谨保守,高温=天马行空 | 编程助手建议低温(0.3),创意写作建议高温(1.2) |
| 系统提示词(System Prompt) | 给 AI 的"岗前培训手册",告诉它扮演什么角色、怎么回答 | 角色预设的核心,决定 AI 的回答风格和专业方向 |
| 上下文窗口(Context Window) | AI 的"短期记忆"容量——能记住最近多少对话内容 | 设置上下文长度 = 控制 AI 能"记住"多少轮对话 |
| 服务商(Provider) | AI 模型的"供应商",如 OpenAI、百度、阿里等 | 后台可为每个服务商配置独立的 API Key 和参数 |
| 模型标识(Model) | 服务商给的"产品编号",如 gpt-4o、deepseek-chat | 后台配置时填写,决定调用哪个具体模型 |
| 角色(Role) | AI 的"人设"——不同角色有不同的专业背景和回答风格 | 用户选择角色 = 选择一位"专属顾问" |
| 配额(Quota) | AI 使用的"额度"——像手机话费套餐,限制用量防止超支 | 管理员设置每日/每月配额,超额后自动拦截 |
| Ollama | 在"自己电脑"上运行 AI 的工具——数据不出门,安全可控 | 适合对数据安全要求高的企业场景 |
7.2 权限标识汇总
| 权限标识 | 说明 | 所属功能 |
|---|---|---|
| ai:model:list | 查看模型列表 | AI 模型管理 |
| ai:model:query | 查询模型详情 | AI 模型管理 |
| ai:model:create | 创建模型 | AI 模型管理 |
| ai:model:update | 修改模型 | AI 模型管理 |
| ai:model:delete | 删除模型 | AI 模型管理 |
| ai:model:test | 测试模型 | AI 模型管理 |
| ai:model:status | 修改模型状态 | AI 模型管理 |
| ai:chat:conversation:list | 查看会话列表 | 对话管理 |
| ai:chat:conversation:query | 查询会话详情 | 对话管理 |
| ai:chat:conversation:delete | 删除会话 | 对话管理 |
| ai:chat:message:list | 查看消息列表 | 消息管理 |
| ai:chat:message:query | 查询消息详情 | 消息管理 |
| ai:chat:message:delete | 删除消息 | 消息管理 |
| ai:config:get | 查看全局配置 | AI 配置管理 |
| ai:config:update | 修改全局配置 | AI 配置管理 |
| ai:role:list | 查看角色列表 | 角色管理 |
| ai:role:query | 查询角色详情 | 角色管理 |
| ai:role:create | 创建角色 | 角色管理 |
| ai:role:update | 修改角色 | 角色管理 |
| ai:role:delete | 删除角色 | 角色管理 |
| ai:role:status | 修改角色状态 | 角色管理 |
| ai:quota:get | 查看配额配置 | 配额管理 |
| ai:quota:update | 修改配额配置 | 配额管理 |
| ai:quota:usage | 查看配额使用情况 | 配额管理 |
| ai:statistics:chat | 查看对话统计 | 统计分析 |
| ai:statistics:token | 查看 Token 统计 | 统计分析 |
| ai:statistics:cost | 查看费用统计 | 统计分析 |
| ai:chat:send | 发送对话消息 | 前台用户端 |
| ai:chat:conversation:manage | 管理我的对话 | 前台用户端 |
| ai:chat:role:square | 浏览角色广场 | 前台用户端 |
| ai:chat:role:custom | 管理自定义角色 | 前台用户端 |
| ai:chat:message:interact | 消息交互(复制/重新生成/编辑) | 前台用户端 |
| ai:chat:share | 分享/导出对话 | 前台用户端 |
本文档为 AI 对话模块 PRD v2.0,如有问题请联系产品负责人。