Skip to content

记忆系统 ​

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_COUNT100每次请求携带的最大消息数
CONTEXT_MAX_TEXT_CHARS700单条用户消息的最大字符数
BOT_CONTEXT_MAX_CHARS1400单条 Bot 回复的最大字符数
CONTEXT_PERSIST_EVERY5非 Bot 消息每 N 条落盘
RECENT_CONTEXT_MESSAGES25LLM 实际可见的最近消息数

L2:用户画像记忆(Persona Memory) ​

什么是用户画像? ​

用户画像是 Openmim 最独特的功能之一。系统会在每次对话后,用 LLM 自动分析用户的说话内容,提炼并更新对该用户的画像记忆。

画像内容示例:

用户_1234:
- 职业/身份: 软件工程师
- 兴趣: Python, 游戏, 咖啡
- 说话风格: 简洁直接, 喜欢用技术术语
- 关注领域: AI, 开源项目
- 最近提到: 在写一个 Rust 项目

这些画像会在下次对话时注入 prompt,让机器人能自然地提及"你之前说的那个 Rust 项目怎么样了?"之类的对话。

匿名化保护 ​

默认情况下,画像中的用户显示名会被替换为 用户_XXXX(取 user_id 末4位),不会暴露真实 Telegram 昵称给 LLM,保护用户隐私。

可通过群设置中的用户名脱敏开关控制:

  • 开启(默认):LLM 上下文中用户显示为 用户_1234
  • 关闭:直接显示 Telegram 昵称

更新机制 ​

画像更新是异步的,不阻塞正常聊天流程:

  1. 每次对话结束后,后台任务分析最近 N 条消息
  2. LLM 提取新的画像信息,与已有画像合并
  3. 只有置信度 ≥ PERSONA_MEMORY_UPDATE_MIN_CONFIDENCE(默认 0.65)的信息才会被写入
  4. 同一群同一用户每 PERSONA_MEMORY_UPDATE_INTERVAL_SECONDS(默认 30 秒)至多更新一次

相关配置 ​

配置项默认值说明
PERSONA_MEMORY_ENABLEDtrue是否启用用户画像记忆
PERSONA_MEMORY_UPDATE_ENABLEDtrue是否启用自动画像更新
PERSONA_MEMORY_MAX_USERS_PER_TURN8每轮最多更新几个用户的画像
PERSONA_MEMORY_PROMPT_MAX_CHARS1800画像注入 prompt 的最大字符数
PERSONA_MEMORY_TOTAL_MAX_CHARS700单个用户画像的总字符上限
PERSONA_MEMORY_UPDATE_MIN_CONFIDENCE0.65画像更新的最低置信度
PERSONA_MEMORY_UPDATE_INTERVAL_SECONDS30同用户画像更新最小间隔

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 — 搜索记忆

基于 python-telegram-bot 构建