AI 聊天对话
这篇解决什么
会话和消息落哪两张表、流式发送走哪条接口。读完能对上 POST /ai/chat/message/send-stream,不要和写作助手当成同一张记录表。
默认端口 48080。先开模块并配对话模型,见 AI 功能设计。
示意图:用户页走 SSE。管理员另有会话、消息管理页。
从哪改
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 会话 | @RequestMapping("/ai/chat/conversation") | ruoyi-office/yudao-module-ai/.../controller/admin/chat/AiChatConversationController.java |
| 消息 | /ai/chat/message | AiChatMessageController |
| 流式 | POST /send-stream | TEXT_EVENT_STREAM |
| 非流式 | POST /send | 备用 |
| 会话表 | ai_chat_conversation | AiChatConversationDO |
| 消息表 | ai_chat_message | AiChatMessageDO |
| 用户页 | 对话 | ruoyi-office-vben/apps/web-antd/src/views/ai/chat/index/ |
| 管理页 | 会话列表 | views/ai/chat/manager/ |
官方菜单:AI 对话 2759(ai/chat/index/index.vue),mobile_path 是 /pages-ai/chat/index。聊天管理 2778。权限 ai:chat-conversation:query、ai:chat-message:query。
前端用 fetchEventSource 接 SSE。乱码先看应用 YAML 里 WebFlux 的 UTF-8 配置。
字段
角色可绑知识库和工具。检索到的段落 id 写进消息 segmentIds。
| 名称 | 说明 | 仓库路径 |
|---|---|---|
roleId / modelId | 角色、模型 | AiChatConversationDO |
systemMessage / temperature | 覆盖角色默认 | 同上 |
maxContexts | 带入上下文条数 | 同上 |
type | Spring AI MessageType | AiChatMessageDO |
reasoningContent | 推理过程 | 同上 |
useContext / webSearchPages | 上下文、联网页 | 同上 |
attachmentUrls | 附件 | 同上 |
发送 VO:conversationId、content、useContext、useSearch、attachmentUrls。用户接口带 -my;管理端 page / delete-by-admin。
角色先配模型
ai_chat_role.modelId 空时,实现会退到第一条启用的对话模型。知识库召回见 AI 知识库。
不是写作记录
写作落 ai_write,走 /ai/write/generate-stream。两边都是 SSE,表和菜单不同。
按本仓库 DO 生成的 ER。
配置与操作
走 AI 对话(2759,ai/chat/index/index.vue)。会话先选 roleId / modelId,可覆盖 systemMessage、temperature、maxContexts。发送走 POST /ai/chat/message/send-stream,带 conversationId、content、useContext、useSearch、attachmentUrls。
保存后消息落 ai_chat_message,检索到的段落 id 写进 segmentIds。ai_chat_role.modelId 空时退到第一条启用的对话模型。管理页聊天管理 2778 只查会话和消息。写作走另一张 ai_write,不要混。
