跳到主要内容

多层记忆架构与 3D 向量检索

群聊机器人的常见痛点是大模型容易“遗忘”或者“Token 爆炸”。如果把全部历史记录都塞入 Prompt,不仅极其昂贵而且会撞到上下文窗口上限;如果简单丢弃历史,机器人就会显得没有记忆。

Yunzai-LLM-Plugin 采用分层记忆架构,兼顾低成本与长周期回忆。


四层记忆模型​

▲ [第 4 层: 长期事实库 (User Facts)] 永久保留喜好、称呼、约定、雷区
▲▲▲ [第 3 层: 每日概要 (Daily Briefs)] 每日一篇,保留 365 天
▲▲▲▲▲ [第 2 层: 滚动片段档案 (Chat Archives)] 结构化对话块,保留 30 天
▲▲▲▲▲▲▲ [第 1 层: 近期滑动窗口 (Context Window)] 最近若干轮原始消息
  1. 第 1 层:滑动对话窗口

    • 保留最近数轮真实对话上下文(由 chat.historyMaxTurns 与 chat.historyMaxTokens 控制)。
    • 包含提问者信息、群内名片与临时上下文,保证当前话轮衔接自然。
  2. 第 2 层:滚动片段摘要 (Rolling Summaries) 与聊天档案

    • 当历史超出滑动窗口时,被截掉的对话不会直接丢弃,而是后台异步整理为一段简短而富有信息的事件片段摘要。
    • 详细档案保留 30 天。
    • 开启 memory.groupChatArchive(默认开启)时,群里没有 @ 机器人的普通聊天也会整理成摘要存档。
    • 支持跨对话回忆(memory.crossChatRecall,默认关闭),用户私聊时也能检索对方所在群的档案;群聊永远不会检索到私聊内容。
  3. 第 3 层:每日概要 (Daily Digest)

    • 每天的聊天档案会聚合成一条「当日概要」,默认保留 365 天(memory.dailyDays)。
    • 当用户询问“上周六我们聊了什么?”或“10月20日发生了什么?”时,大模型按日期索引直接调取。
  4. 第 4 层:长期事实 (Long-term Facts)

    • 大模型在对话中察觉到关键信息时,用 memory 工具记录关于某人或本群的事实(称呼、喜好、约定、被纠正的偏好等)。
    • 条目数与字数有上限,接近上限时自动用便宜模型整理合并。用户可发送 #llm记忆 查看、#llm忘记我 清空。

向量 + 关键词混合检索 (Hybrid Retrieval)​

在 embeddingModels 中配置向量模型,并在 memory.embedding.model 中选择(默认 Voyage AI 的 voyage-context-4,也可以使用 OpenAI 兼容 /embeddings 接口的向量模型):

  • 新生成的档案和每日概要在后台自动向量化并存入向量索引。
  • 每轮对话会自动回忆少量相关片段;当对方提及“上次说的那个…”时,大模型也可以主动调用 recall 工具。
  • 系统结合关键词匹配与余弦向量相似度(memory.embedding.minScore)找出关联度最高的历史片段注入当前上下文。
  • 若向量提供商未配置 Key 或接口失败,系统自动回退至关键词检索。

WebUI 3D 向量空间探索​

在 Web 管理面板中打开 「对话与记忆 → 向量空间」:

  • 系统利用主成分分析(PCA)算法,将多维稠密向量降维至三维笛卡尔坐标系。
  • 您可以用鼠标旋转、缩放该 3D 点云,每个点代表一段记忆片段,可按主题、会话或日期着色。
  • 在搜索框中输入任意一句话(需要向量 Key),可以看到它在语义空间中的位置,以及距离它最近的几个记忆片段。