聊天记录
聊天记录功能让你能够查看和管理 Ruri 中所有的 AI 对话。无论是群聊还是私聊,每一条消息都被自动保存,方便你随时回顾和检索。
什么是聊天记录?
Ruri 会自动将每个机器人与聊天对象的对话保存到数据库中。每个对话包含完整的消息历史,包括用户消息、AI 回复、系统消息和工具调用结果。通过 Web UI 的聊天记录页面,你可以:
- 📋 浏览对话列表 — 查看所有机器人参与过的对话
- 🔍 筛选对话 — 按机器人名称、聊天类型、关键词快速定位
- 👁️ 查看详情 — 点开任意对话查看完整消息历史,支持 Markdown 渲染
- 🗑️ 删除对话 — 清理不再需要的对话记录
查看对话列表
在 Web UI 中进入 聊天记录 页面,即可看到所有对话的卡片列表。每个对话卡片显示:
- 对话标题 — 对话的标题或聊天 ID
- 机器人名称 — 参与对话的机器人
- 聊天类型 — 群聊或私聊
- 消息数量 — 该对话的总消息条数
- 最近消息预览 — 展示最近 3 条非系统消息的摘要
- 更新时间 — 对话最后活动时间
预览消息会按角色区分显示样式,帮你快速了解对话上下文。
筛选对话
聊天记录页面提供三种筛选条件,帮助你从大量对话中快速找到目标:
| 筛选条件 | 说明 |
|---|---|
| 机器人 | 按机器人名称筛选,输入名称进行模糊匹配 |
| 聊天类型 | 选择"群聊"或"私聊"查看特定类型的对话 |
| 关键词 | 搜索对话标题和聊天 ID,输入关键词进行匹配 |
点击 搜索 按钮应用筛选条件,点击 重置 按钮清除所有筛选。
详情面板
点击对话卡片上的 👁️ 图标或卡片底部的"查看全部消息"链接,即可打开详情面板查看完整对话。
详情面板功能:
- 📜 完整消息历史 — 显示对话中的所有消息,按时间顺序排列
- 🎨 Markdown 渲染 — AI 回复中的 Markdown 内容会被实时渲染,支持代码块、列表、表格等
- 🏷️ 角色标识 — 每条消息标注角色(用户 / 助手 / 系统 / 工具),不同角色有不同的显示样式
- ⏱️ 时间戳 — 每条消息显示精确的发送时间
- 📱 响应式布局 — 在不同屏幕尺寸上都能良好显示
LocalStorage 消息缓存
为了加速对话详情的加载,Web UI 使用 LocalStorage 缓存已加载的消息:
- 缓存 TTL(有效期) 为 5 分钟
- 在 TTL 内再次查看同一对话时,直接从缓存加载,无需请求服务器
- 超过 TTL 后,缓存自动失效,下次访问时重新从服务器获取最新消息
预览消息也会被缓存,加载时采用批量并发请求(5 个并发),确保列表页面快速渲染。
删除对话
点击对话卡片上的 🗑️ 图标可以删除对话。删除前会弹出确认对话框,防止误操作。
警告
删除对话会级联删除该对话下的所有消息,此操作不可撤销。请确认不再需要该对话记录后再删除。
数据存储
数据库
聊天记录存储在 Ruri 的 SQLite 数据库(ruri.db)中,与 Ruri 的其他数据共享同一数据库文件。
数据模型
每个对话(Conversation)包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
id | String | 对话唯一标识(UUID) |
bot_name | String | 机器人名称(对应配置文件名) |
chat_type | Enum | 聊天类型:group(群聊)或 private(私聊) |
chat_id | String | 群 ID 或聊天对象 ID |
title | String | 对话标题(可选) |
created_at | Time | 创建时间 |
updated_at | Time | 最后更新时间 |
每条消息(Message)包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
id | String | 消息唯一标识(UUID) |
conversation_id | String | 所属对话 ID |
role | String | 消息角色:user(用户)、assistant(助手)、system(系统)、tool(工具) |
content | String | 消息内容 |
created_at | Time | 创建时间 |
自动创建对话
Ruri 使用 get_or_create_conversation 机制,当机器人收到新消息时会自动查找或创建对话:
- 如果给定的
bot_name+chat_type+chat_id组合已有对话,则自动复用 - 如果没有匹配的对话,则自动创建新对话
- 这确保了每个机器人和聊天对象的对话是唯一的
API 端点
聊天记录功能通过以下 REST API 端点提供访问:
对话管理
| 方法 | 端点 | 说明 |
|---|---|---|
GET | /api/conversations | 列出对话(可选筛选) |
POST | /api/conversations | 创建新对话 |
GET | /api/conversations/:id | 获取特定对话 |
DELETE | /api/conversations/:id | 删除对话及其消息 |
消息管理
| 方法 | 端点 | 说明 |
|---|---|---|
POST | /api/conversations/:id/messages | 向对话添加消息 |
GET | /api/conversations/:id/messages | 获取对话的所有消息 |
筛选参数
GET /api/conversations 支持以下查询参数进行筛选:
| 参数 | 类型 | 说明 |
|---|---|---|
bot_name | String | 按机器人名称精确筛选 |
chat_type | String | 按聊天类型筛选:group 或 private |
keyword | String | 搜索对话标题和聊天 ID 中包含的关键词 |