记忆系统
前置知识: 阅读本文前建议先了解 核心概念 中的记忆系统部分。
Monstrum 为每个 Bot 提供分区记忆系统,让 Bot 能够在多次对话间保留重要信息。记忆可以手动添加,也可以由 LLM 自动提取。
概述
Bot 记忆解决的问题:LLM 本身没有跨会话的持久记忆。每次新会话开始时,Bot 的上下文是空的。记忆系统让 Bot 能够记住用户偏好、学到的规则、重要事件和知识。
记忆以条目形式存储在数据库中(不是文件)。每条记忆有分类、内容、重要度和作用域。Bot 在会话或任务开始时,平台自动将相关记忆注入到系统提示词中。
记忆条目
每条记忆包含以下信息:
| 字段 | 说明 |
|---|---|
| 分类 | 用户偏好 / 学到的规则 / 重要事件 / 知识库 |
| 内容 | 记忆的具体内容 |
| 重要度 | 1-10 分,影响记忆的注入优先级 |
| 来源 | 手动添加 / 自动提取 / 系统生成 |
| 作用域 | 记忆的可见范围(见下文) |
记忆分类
| 分类 | 用途 | 示例 |
|---|---|---|
| 用户偏好 | 用户的习惯和喜好 | ”用户偏好简洁的回复风格” |
| 学到的规则 | 从交互中总结的规则 | ”部署前必须先跑测试” |
| 重要事件 | 发生过的关键事件 | ”2024-01-15 生产环境发生过一次数据库迁移故障” |
| 知识库 | 领域知识 | ”项目使用 PostgreSQL 15,部署在 GCP 上” |
记忆作用域
记忆按作用域分区管理,决定记忆在什么场景下对 Bot 可见:
| 作用域 | 可见范围 | 典型场景 |
|---|---|---|
| 全局 | Bot 的所有对话和任务 | 通用偏好、项目知识 |
| 频道 | 特定 IM 频道的对话 | 某个 Slack 频道的上下文信息 |
| 任务 | 特定任务执行期间 | 任务相关的临时信息 |
| 资源 | 绑定了特定资源的场景 | 某台服务器的运维知识 |
| 调度 | 特定定时任务触发时 | 定时报告的格式偏好 |
| 工作流 | 特定工作流执行时 | 工作流步骤的注意事项 |
全局记忆始终注入。其他作用域的记忆只在对应场景中注入。
手动管理记忆
查看记忆
进入 Bot 详情页 → 记忆 Tab,可以查看 Bot 的所有记忆条目。
支持:
- 按关键词搜索
- 按分类筛选
- 查看记忆的来源(手动 / 自动)
添加记忆
- 在记忆 Tab 中点击 添加条目
- 选择分类
- 填写内容
- 设置重要度(1-10)
- 保存
手动添加的记忆标记为 source=user,不会被自动提取覆盖。
编辑记忆
点击记忆条目的编辑按钮,修改内容、分类或重要度。
删除记忆
点击记忆条目的删除按钮。删除操作不可恢复。
清空记忆
点击 清空 按钮可以清空 Bot 的所有记忆。此操作不可恢复。
自动记忆提取
当 Bot 的运行时配置中开启了 自动记忆提取(在 Bot 设置 Tab 中),平台会在以下时机自动提取记忆:
- 任务完成时:分析任务的对话内容,提取重要信息
- 会话过期时:分析整个会话的对话内容,提取重要信息
提取过程
- 平台将对话历史和当前记忆发送给 LLM
- LLM 分析对话内容,输出结构化的记忆条目(分类 + 内容 + 重要度)
- 平台原子替换该作用域下所有
source=auto的记忆条目
注意:自动提取只替换
source=auto的条目。手动添加的记忆(source=user)不会被覆盖。
提取质量
自动提取的质量取决于:
- LLM 的理解能力
- 对话内容的信息密度
- 提取提示词的配置(可在 提示词模板 中自定义)
记忆注入
Bot 在会话或任务开始时,平台自动将相关记忆注入到系统提示词的 ## Bot Memories 部分。
注入顺序
记忆按以下优先级注入:
- 重要度高的记忆优先
- 同等重要度下,最近更新的记忆优先
Token 预算
如果记忆总量超过 Token 预算,低优先级的记忆会被淘汰。平台使用 recency decay(时间衰减)评分来决定淘汰顺序——越久没更新的记忆,评分越低。
三层缓存
在会话模式下,记忆通过三层缓存管理:
| 层 | 内容 | 加载时机 |
|---|---|---|
| 基础层 | 全局记忆 + 当前作用域记忆 | 会话创建时 |
| 资源层 | 绑定的 Resource 相关记忆 | 工具解析完成后 |
| 注入层 | Bot 运行时动态装入的跨作用域记忆 | Bot 调用记忆装载工具时 |
Bot 在对话中可以使用记忆装载/卸载工具来动态加载其他作用域的记忆(只读),无需重启会话。
Bot 记忆工具
当自动记忆功能开启时,Bot 在对话中可以使用以下自有能力工具(不需要资源绑定):
| 工具 | 说明 |
|---|---|
memory_write | 写入新记忆或更新现有记忆 |
memory_delete | 删除记忆条目 |
memory_load_context | 动态加载其他作用域的记忆(只读) |
memory_unload_context | 卸载之前加载的作用域记忆 |
这些工具不走权限校验(属于 Bot 自有能力工具,数据归 Bot 自己所有)。
常见用法
让 Bot 记住用户偏好
在对话中告诉 Bot 你的偏好(如”以后回复用中文”),Bot 如果开启了自动记忆,会在会话过期时自动提取这个偏好。也可以手动在记忆 Tab 中添加。
为 Bot 预置知识
在部署 Bot 前,手动添加项目相关的知识条目:
- 项目架构信息
- 常用命令和操作流程
- 团队约定和规范
分频道记忆
同一个 Bot 接入多个 IM 频道时,每个频道可以积累独立的记忆。例如,#ops 频道的运维知识不会污染 #dev 频道的开发知识。
常见问题
记忆太多导致提示词过长
记忆系统有 Token 预算限制,会自动淘汰低优先级的记忆。你也可以手动删除不再需要的记忆条目。
自动提取的记忆质量不高
- 检查记忆提取的提示词配置(在 提示词模板 中自定义)
- 对于重要信息,建议手动添加而非依赖自动提取
手动添加的记忆被覆盖了
不会。自动提取只替换 source=auto 的条目,手动添加的记忆(source=user)始终保留。