记忆系统
Openmim 拥有独特的三层记忆体系,让机器人能够真正"认识"每个群成员,并随着时间不断进化自身认知。
架构概览
┌─────────────────────────────────────────┐
│ 三层记忆体系 │
├─────────────────────────────────────────┤
│ L1 群聊上下文记忆(Context Memory) │
│ - 最近 N 条消息的滚动窗口 │
│ - 持久化到 SQLite,重启不丢失 │
│ - 启动时自动压缩超长条目 │
├─────────────────────────────────────────┤
│ L2 用户画像记忆(Persona Memory) │
│ - 按 user_id 跨群持久存储 │
│ - LLM 自动从对话中提炼画像信息 │
│ - 兴趣爱好、说话风格、关注领域等 │
├─────────────────────────────────────────┤
│ L3 机器人人格记忆(Bot Self Memory) │
│ - 机器人的自我认知和个性积累 │
│ - 通过管理面板手动维护 │
│ - 注入到每次对话的 system prompt │
└─────────────────────────────────────────┘L1:群聊上下文记忆
工作原理
每条群聊消息都会被实时追加到 SQLite 数据库。LLM 请求时,从数据库取出最近 CONTEXT_MESSAGE_COUNT(默认 100)条消息拼入上下文。
消息压缩
为节省 Token,机器人对上下文中的长消息进行自动压缩:
- 用户消息:超过
CONTEXT_MAX_TEXT_CHARS(默认 700 字符)的部分被截断 - Bot 回复:超过
BOT_CONTEXT_MAX_CHARS(默认 1400 字符)的部分被截断
启动时会自动对全部历史记录运行一次压缩。
相关配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
CONTEXT_MESSAGE_COUNT | 100 | 每次请求携带的最大消息数 |
CONTEXT_MAX_TEXT_CHARS | 700 | 单条用户消息的最大字符数 |
BOT_CONTEXT_MAX_CHARS | 1400 | 单条 Bot 回复的最大字符数 |
CONTEXT_PERSIST_EVERY | 5 | 非 Bot 消息每 N 条落盘 |
RECENT_CONTEXT_MESSAGES | 25 | LLM 实际可见的最近消息数 |
L2:用户画像记忆(Persona Memory)
什么是用户画像?
用户画像是 Openmim 最独特的功能之一。系统会在每次对话后,用 LLM 自动分析用户的说话内容,提炼并更新对该用户的画像记忆。
画像内容示例:
用户_1234:
- 职业/身份: 软件工程师
- 兴趣: Python, 游戏, 咖啡
- 说话风格: 简洁直接, 喜欢用技术术语
- 关注领域: AI, 开源项目
- 最近提到: 在写一个 Rust 项目这些画像会在下次对话时注入 prompt,让机器人能自然地提及"你之前说的那个 Rust 项目怎么样了?"之类的对话。
匿名化保护
默认情况下,画像中的用户显示名会被替换为 用户_XXXX(取 user_id 末4位),不会暴露真实 Telegram 昵称给 LLM,保护用户隐私。
可通过群设置中的用户名脱敏开关控制:
- 开启(默认):LLM 上下文中用户显示为
用户_1234 - 关闭:直接显示 Telegram 昵称
更新机制
画像更新是异步的,不阻塞正常聊天流程:
- 每次对话结束后,后台任务分析最近 N 条消息
- LLM 提取新的画像信息,与已有画像合并
- 只有置信度 ≥
PERSONA_MEMORY_UPDATE_MIN_CONFIDENCE(默认 0.65)的信息才会被写入 - 同一群同一用户每
PERSONA_MEMORY_UPDATE_INTERVAL_SECONDS(默认 30 秒)至多更新一次
相关配置
| 配置项 | 默认值 | 说明 |
|---|---|---|
PERSONA_MEMORY_ENABLED | true | 是否启用用户画像记忆 |
PERSONA_MEMORY_UPDATE_ENABLED | true | 是否启用自动画像更新 |
PERSONA_MEMORY_MAX_USERS_PER_TURN | 8 | 每轮最多更新几个用户的画像 |
PERSONA_MEMORY_PROMPT_MAX_CHARS | 1800 | 画像注入 prompt 的最大字符数 |
PERSONA_MEMORY_TOTAL_MAX_CHARS | 700 | 单个用户画像的总字符上限 |
PERSONA_MEMORY_UPDATE_MIN_CONFIDENCE | 0.65 | 画像更新的最低置信度 |
PERSONA_MEMORY_UPDATE_INTERVAL_SECONDS | 30 | 同用户画像更新最小间隔 |
L3:机器人人格记忆(Bot Self Memory)
什么是人格记忆?
人格记忆是机器人关于自己的记忆——它的个性、偏好、经历、对特定用户/话题的态度等。
这些记忆通过管理面板手动维护,注入到每次对话的 system prompt 开头,塑造机器人一致的人格。
管理方式
通过 Telegram 管理面板(/admin → 记忆管理)或 Web Panel:
- 添加记忆:如"我喜欢猫咪"、"我讨厌那个整天刷屏的某用户"
- 查看记忆:列出所有已记录的人格条目
- 删除记忆:移除不再需要的记忆条目
群聊记忆笔记
除了机器人自身的人格记忆,系统还支持群聊笔记功能,让机器人记住群组层面的重要信息(如"这个群专注于 Python 开发")。
全局记忆工具
当启用 Agentic 功能时,机器人可以通过 LLM 工具调用主动创建记忆,记录它认为重要的信息:
用户:咪姆,记住我喜欢喝龙井茶
机器人:好的,我记住了!(调用 add_memory 工具)LLM 可用的记忆工具:
add_memory— 添加一条记忆list_memories— 查看已有记忆delete_memory— 删除指定记忆update_memory— 更新记忆内容find_memory— 搜索记忆
