Skip to content

记忆图

记忆图(Memory Graph)是 Luker 最核心的独有功能之一,专门解决角色扮演中最常见的痛点——角色失忆

LLM 的上下文窗口是有限的,当对话超过几百轮后,早期的重要信息(角色关系、关键事件、世界设定)会被截断丢失,导致角色「忘记」之前发生过的事情。记忆图通过将对话中的关键信息自动提取为结构化的知识节点,并在需要时智能召回注入到提示词中,让角色能够跨越数百轮对话持续记住重要的人物关系、事件经过和世界设定。

与简单的关键词搜索或向量检索不同,记忆图通过图结构和多层算法,确保召回的记忆既语义相关又覆盖全面,避免只想起「最像」的内容而遗漏其他重要信息。

工作原理

记忆图的工作流程可以概括为三个阶段:自动提取 → 智能召回 → 层级压缩

自动提取

每当 AI 生成回复后,记忆图会自动分析最新的对话内容,从中提取值得记忆的信息。提取过程由 LLM 完成,输出结构化的知识节点。

提取的信息分为两大层级和四种默认类型:

语义层节点(持久化的结构化知识,会被合并更新):

类型说明示例
角色状态角色的名字、身份、目标、关系、当前状态「艾琳是一名治愈师,目前受伤」
地点状态地点的名称、控制者、危险程度、资源「黑暗森林由精灵族控制,危险等级高」
规则约束世界观中的规则和限制「魔法在圣域中无法使用」

事件层节点(剧情记录,每次提取都创建新节点,不会合并):

类型说明示例
事件摘要剧情中发生的重要事件「主角在森林中遭遇了伏击」

事件节点的特殊性

事件节点与其他类型有本质区别:

  • 每次提取都创建新节点:标题自动递增,不会像角色状态那样合并到已有节点,因为事件是时间线上的独立记录
  • 始终注入最高层时间线:事件节点被视为核心故事线上下文,最高层级的时间线摘要会始终注入到提示词中,确保 AI 对整体剧情走向有感知
  • 压缩后的底层事件被隐藏:当事件积累过多时,旧事件会被压缩为更高层级的摘要。被压缩的底层事件节点不再常驻注入,但仍然保留在图中,可以通过召回机制在需要时被重新发现

简单来说:AI 始终能看到「大事记」(最高层摘要),但具体的细节事件只有在对话涉及到时才会被召回补充。

你可以通过「提取间隔」设置项控制提取频率——例如设为 2 表示每隔 2 轮 AI 回复才触发一次提取,减少 LLM 调用开销。

智能召回

当你发送新消息触发 AI 生成时,记忆图会根据当前对话上下文,从已积累的记忆中召回最相关的内容,并注入到提示词中供 AI 参考。

记忆图支持多种召回方式:

召回方式说明
LLM 召回让 LLM 直接从记忆库中选择相关节点,支持多轮深挖
混合召回结合向量检索、图扩散、词汇匹配等多种信号综合评分
混合 + 重排序在混合召回基础上使用重排序模型进一步优化结果
混合 + LLM在混合召回基础上让 LLM 对候选节点进行二次筛选

默认使用 LLM 召回方式,你可以在记忆图设置面板中切换召回方式。

层级压缩

随着对话推进,事件记忆会不断积累。记忆图会自动将旧的事件节点进行层级压缩——将多个相关事件合并为一个更高层级的摘要节点,保留核心信息的同时控制记忆总量。

压缩是递归进行的:当某一层级的摘要节点数量也超过阈值时,它们会被进一步压缩为更高层级的摘要,如此向上递归,直到节点数量降到阈值以下。例如,多个战斗事件先被压缩为「森林战役」,多个战役又可能被压缩为「北方远征」。压缩后的摘要节点仍然可以展开查看原始的子事件。

开启与配置

基本开启

  1. 在 Luker 扩展设置中找到「记忆图」
  2. 打开「启用记忆图」开关
  3. 开始对话,记忆图会自动工作

配置 LLM 预设

记忆图的提取和召回需要调用 LLM,但可以使用与主对话不同的模型和预设。这意味着你可以:

  • 主对话使用高质量模型(如 Claude Opus),记忆图使用更经济的模型(如 Claude Haiku)
  • 为提取和召回分别指定不同的 API 连接和 Chat Completion 预设

相关配置项:

设置项说明
提取 API 预设提取使用的 API 连接预设(空 = 使用主连接)
提取预设提取使用的 Chat Completion 预设
召回 API 预设召回使用的 API 连接预设
召回预设召回使用的 Chat Completion 预设

调整召回行为

设置项默认值说明
启用召回true是否启用召回
召回方式llm召回方式:llm / hybrid / hybrid_rerank / hybrid_llm
LLM 召回最大迭代轮次3LLM 召回的最大迭代轮数
召回查询消息数2召回时参考的最近消息数
混合召回最大结果数15混合召回返回的最大结果数

提取配置

设置项默认值说明
提取间隔1每隔多少轮 AI 回复触发一次提取
每批提取轮数1每批提取处理的回复轮数
提取上下文轮数2提取时包含的上下文轮数
排除最近轮数0排除最近 N 轮不参与提取

注入方式

记忆图支持两种注入方式,你可以根据需要选择:

常驻注入

你可以将某些类型的记忆设为常驻注入,使其始终出现在提示词中,不依赖召回触发。例如,「规则约束」类型的节点默认常驻注入,确保世界观规则永远不会被遗忘。

常驻注入通过将节点写入世界书条目实现,随世界书系统一起生效。

召回注入

其他类型的记忆(如角色状态、事件摘要等)默认通过召回机制动态注入——只有与当前对话相关的记忆才会被注入,避免占用过多上下文空间。

INFO

常驻和召回并不互斥。同一种节点类型可以同时开启常驻注入和召回注入——常驻确保基础信息始终可用,召回则补充与当前上下文相关的更多细节。

召回注入的位置和角色可以配置:

设置项默认值说明
召回注入位置atDepth注入位置
召回注入深度9999注入深度
召回注入角色SYSTEM注入角色(system / user / assistant)

配置注入方式

你可以在记忆图设置面板中,为每种节点类型分别配置是否常驻注入、是否启用召回。两者可以同时开启——常驻确保基础信息始终可用,召回则补充与当前上下文相关的细节。

如何选择

  • 规则约束等不随对话变化的信息适合常驻注入(默认已启用)
  • 角色状态、事件摘要等动态信息适合召回注入(默认行为)
  • 如果你发现某些重要信息经常被遗漏,可以在记忆图设置面板中将对应节点类型设为常驻注入

结果复用

当你对同一轮对话进行 swipe(滑动切换)或重新生成时,记忆图会自动复用上一次的召回结果,不会重复执行召回流程。这既节省了 LLM 调用成本,也保证了同一轮对话中记忆上下文的一致性。

查看记忆

你可以通过记忆图的 UI 面板查看当前的记忆状态:

  • 图可视化:以图形方式查看所有记忆节点和它们之间的关系
  • 表格视图:按类型查看所有节点的结构化字段
  • 搜索功能:按关键词搜索记忆节点,支持按类型过滤
  • 查看最近注入:查看最近一次注入到提示词中的记忆内容

自定义记忆结构

角色卡可以自定义记忆图的节点类型定义,为特定角色定制记忆结构。在记忆图设置面板中,你可以添加、编辑或删除节点类型,覆盖默认的类型定义。例如,奇幻世界的角色卡可以定义「魔法」「阵营」等专属节点类型,让记忆图更贴合角色的世界观。自定义的节点类型会随角色卡一起保存和导出。

世界书投影

记忆图可以将记忆节点投影为世界书条目,通过世界书的关键词匹配和扫描深度机制参与提示词构建。投影分为两种:

  • 持久化投影:将常驻注入的节点写入持久化世界书条目
  • 运行时投影:将召回结果写入临时世界书条目,生成结束后自动清理

导入导出

记忆图数据支持导入导出为 JSON 文件。导出数据包含所有节点、边和元数据。

导入时提供三种绑定模式:

模式说明
恢复保留导出时的楼层编号,用于同一聊天的数据恢复
绑定到最新楼层将所有导入节点绑定到当前最新的 AI 回复楼层
绑定到指定楼层手动输入目标楼层编号

变更回滚

记忆图内置了完整的变更回滚机制。当你编辑、删除消息或进行 swipe 时,记忆图会自动回滚到受影响消息之前的状态,确保记忆与对话历史保持一致。

完整配置参考

点击展开完整配置项列表

基础配置

设置项默认值说明
启用记忆图false插件总开关
提取间隔1每隔多少轮 AI 回复触发一次提取
最大处理轮数900最大处理轮数上限

向量与扩散配置

设置项默认值说明
嵌入向量来源transformers来自 Vector Storage 扩展设置(vectors.source
嵌入模型(空)来自 Vector Storage 扩展设置(按来源使用对应模型字段)
向量检索 Top-K20向量检索返回的 Top-K 数量
图扩散步数2图扩散步数
图扩散衰减系数0.6图扩散衰减系数
图扩散 Top-K100图扩散 Top-K
图扩散传送概率0.0图扩散传送概率

重排序配置

设置项默认值说明
启用重排序false是否启用重排序
重排序服务来源cohere重排序服务来源
重排序模型(空)重排序模型名称

其他配置

设置项默认值说明
每分钟请求限制0每分钟请求限制(0 = 不限制)
LLM 可见最近消息数5LLM 生成时可见的最近消息数
使用预设时包含世界书true使用预设时是否包含世界书
覆盖世界书名称(空)覆盖世界书名称
世界书条目排序基数9800世界书条目排序基数
工具调用最大重试次数2工具调用失败最大重试次数
排除最近轮数的节点2召回时排除最近 N 轮的节点

技术深入

点击展开技术细节

多阶段混合召回管线

混合召回模式下,记忆图执行一个包含 8 个阶段的召回管线:

  1. 向量预过滤:从向量数据库中检索语义最相似的 Top-K 节点
  2. 实体锚点:从查询文本中匹配已知实体名称和别名
  3. 构建种子:合并向量命中和实体锚点作为扩散起点
  4. 构建邻接表:构建图的双层邻接表
  5. PEDSA 图扩散:从种子节点出发,通过图结构传播能量,发现间接相关的记忆
  6. 混合评分:合并向量分数、扩散能量、词汇匹配、锚点分数、时效性加成等多维信号
  7. 认知管线(NMF / FISTA / DPP):三个算法确保召回结果覆盖全面且多样
  8. 可选重排序:使用外部重排序模型进一步优化结果

认知层算法

  • NMF 话题再平衡:使用非负矩阵分解识别被低估的话题方向,提升其代表节点的分数
  • FISTA 残差发现:通过快速迭代收缩阈值算法发现查询中未被候选集覆盖的语义方向,并进行补充搜索
  • DPP 多样性采样:使用行列式点过程从候选集中选出质量高且彼此多样的子集,避免召回结果过于集中

PEDSA 图扩散

PEDSA(Personalized Efficient Diffusion with Sparse Approximation)算法使记忆图能够发现与查询没有直接语义关联、但通过图结构间接相关的重要记忆。它从种子节点出发,沿图的边关系多轮传播能量,支持传送概率(类 PageRank)和稀疏近似控制。

向量索引

记忆图使用增量更新策略管理向量嵌入——通过哈希比对检测节点内容变化,只有内容实际改变时才重新生成嵌入向量。 在混合召回中,嵌入来源和模型读取自 Vector Storage 扩展设置,因此可用来源跟随 Vector Storage 的能力(包括 Jina)。 当 Vector Storage 设置不可用时,记忆图会回退到自身的旧版本地来源/模型字段。

如需了解更多技术实现细节,请参阅源代码。

相关页面

Built upon SillyTavern