# Chat-box ## 一、产品概述 ### 1.1 项目背景 随着人工智能技术的发展,AI 对话系统在客服、教学、咨询等场景中越来越常见。本项目旨在开发一个**简易 AI 对话助手系统**,用于实现基础的自然语言交互、历史对话记忆、外部工具调用、以及结构化输出对话报告功能,为后续扩展和深度使用打下基础。 ### 1.2 产品目标 本系统旨在提供以下核心功能: - 实现用户与 AI 的自然语言对话 - 支持对话记忆,保持上下文连续性 - 支持调用外部工具(如计算器、天气查询等) - 将对话内容结构化输出为报告(如 JSON、Markdown 或 PDF) ### 1.3 应用场景 - 教育应用中与 AI 的问答互动 - 快速查询工具调用支持 - 生成对话记录报告用于审计或分析 --- ## 二、功能需求 ### 2.1 核心功能 | 功能模块 | 描述 | |----------|------| | 用户登录 | 支持用户注册与登录,保存对话记录 | | AI对话 | 用户与 AI 之间的自然语言交互 | | 对话记忆 | 保存用户与 AI 之间的历史对话内容,用于上下文理解 | | 工具调用 | 调用外部工具(如天气、计算器)帮助用户完成任务 | | 对话报告生成 | 将对话记录以结构化格式(如 JSON、Markdown)输出 | ### 2.2 详细功能说明 #### 2.2.1 用户登录(可选模块,支持权限管理) - 用户注册:邮箱注册,密码加密存储 - 用户登录:验证用户身份,记录登录状态 - 持久化用户信息:包括用户名、ID、对话历史等 #### 2.2.2 AI 对话功能 - 用户输入文本后,AI 回复相应内容 - 支持多轮对话,记忆对话上下文 - AI 回复内容可包含自然语言、结构化数据、甚至代码片段(可选) #### 2.2.3 对话记忆(Context Memory) - 保存用户与 AI 的对话历史,格式如 `[{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}, ...]` - 在每次用户提问时,将先前对话历史一并传给 AI 模型,用于上下文理解 - 可设置最大对话长度(如 10 轮) #### 2.2.4 工具调用(Tool Invocation) - 支持预定义工具如天气查询、计算、时间查询等 - 在 AI 对话中识别用户意图,主动调用工具 - 工具调用结果可被 AI 使用,生成最终回答 - 例如:用户输入“10+20”,AI 识别为计算器调用请求,返回“30” #### 2.2.5 对话报告结构化输出(Report Generation) - 用户可导出当前对话内容为结构化格式(JSON、Markdown) - 报告内容包括用户和 AI 的所有对话记录 - 可支持时间戳、对话 ID 等元信息 - 可拓展为 PDF 报告格式(可选) --- ## 三、非功能需求 | 类别 | 描述 | |------|------| | 可靠性 | 系统应具备自动重试机制、错误日志打印 | | 用户体验 | 对话界面清晰友好,支持流式输出和自动滚动 | | 兼容性 | 支持主流浏览器和移动端访问 | --- ## 四、用户界面设计(前端部分) ### 4.1 页面布局 ```plaintext +------------------------------+ | Chat Box | +------------------------------+ | 用户登录 / 注册 | | 对话历史列表 | +------------------------------+ | [用户] 你好! | | [AI] 你好! | | [用户] 今天天气如何? | | [AI] 今天天气晴朗,气温20℃ | +------------------------------+ | 输入框: | [发送] [导出报告] | | | <工具调用按钮> | +------------------------------+ ``` ### 4.2 交互逻辑 - 用户输入文字,点击“发送”或按 Enter,触发 AI 回复 - AI 回复内容展示在对话框中 - 点击“导出报告”,总结对话内容,可选择保存为 JSON 或 Markdown ### 4.3 可选功能 - 支持快速切换聊天对话(支持多个会话) --- ## 五、技术实现说明 ### 5.1 后端(Spring Boot + Spring AI) #### 技术栈: - Spring Boot 3.x - Spring AI - Spring Security(用户认证) - MyBatisPlus(对话记录存储) - Spring Web(REST API) - JSON(数据转换) - Lombok(简化代码) - Logging(日志记录) #### 模块结构: 1. **User Module** - 注册、登录、用户信息管理 - 使用 JWT 实现权限控制 2. **Chat Module** - WebSocket 或 REST API 接收用户输入 - 生成 AI 回复,使用 Spring AI 中的 `AiService` 接口 3. **History Module** - 保存对话记录(历史上下文) - 使用数据库存储,支持会话 ID 分组管理 4. **Tool Module** - 支持调用外部工具(如 `WeatherTool`, `CalculatorTool`) - 使用 `ToolLauncher` 或 `FunctionCalling` 机制 5. **Report Module** - 收集对话内容,生成 JSON 或 Markdown 格式报告 - 支持导出为文件(HTTP Response 返回文件) #### 示例代码片段(Spring AI): ```java import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.message.Message; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.prompt.Prompt; import org.springframework.stereotype.Service; @Service public class AiService { private final ChatClient chatClient; public AiService(ChatClient chatClient) { this.chatClient = chatClient; } public String sendMessage(String content, List history) { Prompt prompt = new Prompt(content, history); ChatResponse response = chatClient.call(prompt); return response.getResult().getOutput().getContent(); } } ``` --- ### 5.2 前端(Vue 3 + Element Plus) #### 技术栈: - Vue 3 + Vue Router + Vuex / Pinia(状态管理) - Element Plus(UI 组件) - Axios(HTTP 请求) - WebSocket 或 REST API 与后端通信 - Markdown 解析器(如 `marked`)处理结构化输出 - 文件导出库(如 `file-saver`)用于导出 JSON/Markdown #### 功能实现: - 对话框组件:展示历史消息 - 输入框组件:支持文字输入或语音输入 - 工具调用按钮:点击弹出工具选项,调用后显示结果 - 导出按钮:触发前端导出逻辑,生成并下载报告 #### 示例代码片段(Vue 组件): ```vue ``` --- ## 六、数据结构设计 ### 6.1 对话记录数据模型(后端实体) ```java @Entity public class ChatMessage { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String userId; private String role; // user / assistant private String content; private LocalDateTime timestamp; private String conversationId; // getters and setters } ``` ### 6.2 对话报告格式(结构化输出) ```json { "conversationId": "123456", "userId": "user_123", "generateTime": "time", "summary": { "title": "title", "content": "content" } } ``` --- ## 七、测试需求(可选) - **单元测试**:对于 AI 服务、工具调用模块、用户管理模块进行测试 - **集成测试**:测试与 AI 模型的对接、工具调用逻辑、会话处理 --- --- ## 九、附录 ### 9.1 推荐的 AI 模型 ### 9.2 工具示例(可扩展) - 天气查询接口 - 时间查询