# Online.AI.Talk **Repository Path**: se2023/online.ai.talk ## Basic Information - **Project Name**: Online.AI.Talk - **Description**: 多人在线AI协同讨论聊天室 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-24 - **Last Updated**: 2026-06-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 多人在线 AI 协同讨论聊天室 ## 项目介绍 本项目设计并实现一款嵌入 AI 的多人协同讨论平台,面向团队头脑风暴、方案评审、技术讨论等多人协作场景。系统将大语言模型作为"参与成员"直接融入群组聊天:多位用户在同一房间内共享对话上下文,通过 `@AI` 或自定义 `@角色名` 触发 AI 回答,从根本上免去"每人私聊 AI、再人工同步答案给队友"的低效流程。 ## 功能特性 ### 实时聊天 - 多人房间,WebSocket 长连接实时同步 - 房间在线状态实时广播 - 消息引用回复 - 房间内消息全文搜索 ### AI 协同 - `@AI` 触发默认 AI 助手 - 房间可配置多个自定义 AI 角色(例如「架构师」「产品经理」),用 `@角色名` 切换 - **多 AI 角色并行**:一句话同时 `@角色 A @角色 B`,多个角色独立流式回答 - **AI 一键总结**:把整段对话整理为会议纪要风格的 Markdown,可一键导出文档 - 简化版 RAG:用 PostgreSQL 全文检索从历史消息中召回相关条目拼入上下文 ### 协作体验 - 房间私有 + 邀请制(被邀请方需主动接受才入房) - 房主可编辑房间名、主题 Prompt、AI 角色、删除房间 - 成员可主动退出房间 - 表情反应(6 种快捷 emoji,悬浮工具条点击切换) - 未读分隔线(进入房间显示"以下为新消息") - 侧栏房间小红点(其他房间有新消息时提示) - 房间统计:消息总数 / AI 回答数 / 最活跃成员 ### 用户体验 - 深浅色主题切换,偏好持久化 - 个人资料编辑(昵称 / 改密码,改密需校验旧密码) - Notion 风格 UI:折叠式更多菜单、点击触发的消息工具条、克制的视觉细节 ### 安全与工程 - Spring Security 接入:Bearer Token 过滤链、无状态会话 - BCrypt 哈希存密码 - JUnit 5 + Mockito 单元测试(Service 层 15 条用例,全部通过) ## 技术栈 | 层 | 技术 | |---|---| | 后端基础 | Spring Boot 3.3 / Java 17 | | Web 与 REST | Spring MVC(包含在 Spring Boot Web 中) | | 安全 | Spring Security + BCrypt | | ORM | Spring Data JPA(Hibernate) | | 实时通信 | Spring WebSocket(裸 WS + 自定义信封) | | AI 集成 | Spring AI 1.0(接 DeepSeek,OpenAI 兼容) | | 数据库 | PostgreSQL 16(Docker) | | 构建 | Maven | | 测试 | JUnit 5 + Mockito | | 前端 | React 18 + TypeScript + Vite | | 渲染 | react-markdown + remark-gfm + rehype-highlight | | 路由 | react-router-dom | | 网络 | axios(请求拦截器自动带 Token,401 自动跳登录) | ## 项目结构 ``` online-ai-talk/ ├── src/main/java/com/se2023/onlineaitalk/ # 后端 Java 源码 │ ├── config/ # Spring Security、AI、CORS、WebSocket 配置 │ ├── controller/ # REST 接口 │ ├── dto/ # 请求/响应 DTO │ ├── entity/ # JPA 实体 │ ├── repository/ # Spring Data JPA Repository │ ├── service/ # 业务服务 │ ├── security/ # TokenAuthFilter 自研鉴权过滤器 │ └── websocket/ # 房间 WebSocket Handler ├── src/main/resources/ # 配置文件 application.yml ├── src/test/java/.../service/ # JUnit 单元测试 ├── docs/ # 设计文档、SQL、演示指引 │ ├── schema.sql # 数据库表结构 │ ├── seed.sql # 演示数据(可重复导入恢复初始状态) │ └── design.md # 项目设计文档(架构 / ER / 协议 / 接口表) ├── web/ # 前端 React 工程 │ ├── public/ # 静态资源(favicon 等) │ └── src/ # React 源码 ├── docker-compose.yml # PostgreSQL 本地环境 ├── run-backend.sh # 后端启动脚本(加载 .env 后启动) └── pom.xml ``` ## 本地运行 ### 1. 启动 PostgreSQL ```bash docker-compose up -d ``` 容器把 PostgreSQL 端口映射为宿主机的 **5433**(避开本机可能已有的 5432)。 ### 2. 初始化数据库 ```bash PGPASSWORD=talk psql -h localhost -p 5433 -U talk -d online_ai_talk -f docs/schema.sql ``` ### 3. 配置 DeepSeek API Key 在项目根目录创建 `.env` 文件,写入你的 DeepSeek API Key: ```bash DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx ``` > 没有 Key 时所有 `@AI` 请求都会失败,但其他功能(注册登录、房间管理、消息收发等)仍可正常使用。 ### 4. 启动后端 ```bash ./run-backend.sh ``` `run-backend.sh` 会自动加载 `.env` 后执行 `mvn spring-boot:run`,监听 **8080**。 ### 5. 启动前端 ```bash cd web npm install npm run dev ``` 前端监听 **5173**,浏览器打开 [http://localhost:5173](http://localhost:5173) 即可。 ### 6. (可选)导入演示数据 如需立刻试用,可导入演示数据: ```bash PGPASSWORD=talk psql -h localhost -p 5433 -U talk -d online_ai_talk -f docs/seed.sql ``` 这会清空全部业务表并写入 3 个演示账号 + 3 个演示房间(含历史消息和反应)。 ## 演示账号 执行 `docs/seed.sql` 后可用以下账号登录(密码统一为 `demo1234`): | 用户名 | 昵称 | 所属演示房间 | |---|---|---| | `zhanglei` | 张磊 | 支付系统重构 · 技术方案评审(房主) | | `wangsiyu` | 王思雨 | 产品周会 · 团队协作面板(房主) | | `lvyi` | 吕一 | 《三体》读书讨论(房主) | ## 运行测试 ```bash mvn test ``` 覆盖 Service 层 3 个核心服务共 15 条用例,包括 TokenService、UserService、AiService 的主要路径与边界条件。 ## 端口与服务一览 | 服务 | 端口 | |---|---| | 前端开发服务器 | 5173 | | 后端 HTTP / WebSocket | 8080 | | PostgreSQL(Docker 映射) | 5433 | ## 文档清单 | 文档 | 用途 | |---|---| | `README.md` | 项目说明与运行指南 | | `docs/design.md` | 项目设计文档(架构 / ER / 协议 / 接口表) | | `docs/schema.sql` | 数据库建表脚本 | | `docs/seed.sql` | 演示数据导入脚本(可重复执行恢复初始状态) | ## 已知限制 - Token 存内存(`ConcurrentHashMap`),后端重启需重新登录 - 简化版 RAG 用 `simple` 全文检索配置,对中文分词不友好;后续可换 pgvector + embedding - 消息历史未做分页,超长房间首屏可能慢 - WebSocket 未做断线自动重连 - 未做移动端响应式适配 ## 团队分工 | 成员 | 主要模块 | |---|---| | 王兆彬 | 项目骨架、用户认证、数据库、Spring Security、部署相关 | | 陈鑫 | 房间与消息、WebSocket 实时通信、多 AI 并行、AI 会议纪要、emoji 反应、未读体系、整体 UI 框架 | | 叶旭航 | AI 集成(Spring AI + DeepSeek)、Prompt 工程、流式响应、简化版 RAG | | 吴代宇 | 前端 React 工程、流式渲染、UI 打磨、JUnit 单元测试、项目设计文档 |