☰
Mnemosyne 记忆召回原理揭秘:向量+全文+重要性混合检索打分公式深度拆解
2026/9/28 20:57:32 网站建设 项目流程

Mnemosyne 记忆召回原理揭秘:向量+全文+重要性混合检索打分公式深度拆解

【免费下载链接】mnemosyneZero-cloud AI memory that works everywhere. SQLite-backed. One pure-Python dependency.项目地址: https://gitcode.com/gh_mirrors/mnemosyne5/mnemosyne

Mnemosyne是一个零云端、纯 SQLite 支撑的 AI 记忆系统:一条pip install,一个数据库文件,即可为任意 Agent 提供长期记忆。本文带你深入它的召回引擎,拆解 Mnemosyne 混合检索如何把向量相似度、全文检索(FTS5)和重要性分数融合成一个最终得分,让最相关的记忆浮出水面。不需要任何机器学习背景,跟着公式走一遍即可 💡。

一、先搞清楚:Mnemosyne 的记忆存在哪里?

在拆解打分公式前,先建立整体画面。Mnemosyne 把记忆分成两个"舱室":

舱室表名定位
工作记忆working_memory当前会话的热点记忆,类似"桌面便签"
情景记忆episodic_memory经"睡眠"巩固后的长期记忆,类似"日记本"

当调用recall("用户偏好")时,入口是 mnemosyne/core/memory.py 中的recall()方法,它会把请求转发给底层引擎。真正的打分逻辑全部集中在 mnemosyne/core/beam.py 的recall()函数里——这就是本文的主角。

二、混合检索的三大信号源:为什么一个都不少?

Mnemosyne 的打分不是单一相似度,而是三路信号加权融合:

  • 🔢向量相似度(vec):用嵌入模型把查询和记忆都变成向量,算余弦相似度。擅长"意思相近但用词不同",比如查"深色模式"能召回 "prefers dark interface"。
  • 🔤全文检索(FTS5):SQLite 原生的倒排索引关键词匹配。擅长精确词命中,比如查 "SQLite" 就一定找得到。
  • ⭐重要性(importance):记忆写入时自带的 0~1 重要性分数。高重要性记忆天然更容易胜出。

三者默认权重是(0.5, 0.3, 0.2),定义在 beam.py 第 2378 行:

_DEFAULT_RECALL_WEIGHTS = (0.5, 0.3, 0.2) # vec, fts, importance

为什么不全押向量?纯向量检索对专有名词、代码标识符这类"必须一字不差"的查询容易翻车;纯关键词又抓不住语义。三路融合是召回精度和泛化能力的平衡点。

三、情景记忆的打分公式逐项拆解

情景记忆是混合检索的主战场。对每条候选记忆,Mnemosyne 依次执行以下步骤(源码见 beam.py 第 9277-9376 行):

1. 三权重基础分(核心公式)

base_score = sim × vec_weight + fts × fts_weight + importance × importance_weight

三个权重会自动归一化到总和为 1.0(见 beam.py 第 2434-2449 行),所以你调任意一个,系统都会保证三者占比合理。

2. 准入门槛:防止"沾边"内容混入

if 词法相关性 < 最低阈值 且 sim < 0.62: 跳过该候选

FTS 命中只能证明"沾过一个词",Mnemosyne 要求要么词法覆盖足够、要么向量相似度突破 0.62 准入门槛(EM_VEC_ADMIT,见 beam.py 第 897 行)才有资格进入结果集。这是精度的一道守门员。

3. 新鲜度衰减:记忆也会"过期"

score = max(base_score, lexical × 0.8) × (0.7 + 0.3 × decay)

其中decay是指数衰减函数(见 beam.py 第 2610-2622 行):

decay = e^(-年龄小时数 / 半衰期)

默认半衰期168 小时(一周):新记忆 decay≈1.0,一周后≈0.5,一个月后≈0.1。注意公式用的是0.7 + 0.3 × decay而不是纯乘法——再老的基础相关性也保底 70%,老而重要的记忆不会被彻底埋没。

4. 图谱与事实加成:结构化信号锦上添花

  • 图谱加成graph_bonus:记忆关联的知识图谱边越多越相关,min(边数 × 0.02, 0.08),上限 0.08;
  • 事实加成fact_bonus:记忆抽取出的三元组事实与查询词命中越多越好,min(命中数 × 0.04, 0.1),上限 0.1;
  • 二进制向量加成binary_bonus:轻量级二值向量再校验一次语义方向。

5. 时序加权(可选)

查询"上周的事"时,可对靠近目标时间点的记忆做软加成:

score ×= (1 + temporal_weight × e^(-|时间差| / 24h))

目标时刻的记忆加成最大(boost=1.0),每过一个 24 小时半衰期加成衰减到 36.8%(见 beam.py 第 2679-2688 行)。

6. 可靠性折价:不是所有记忆都值得同样信任

排序前还会乘以两个修正系数:

  • 降级层级权重:巩固层级越深(Tier 1/2/3)记忆质量越高,权重从TIER1_WEIGHT递减(见 beam.py 第 393 行);
  • 真实性乘数:stated(用户亲述)>tool>inferred(推断)>unknown,推断类记忆自动降权。

最后所有候选按得分降序排列,跨舱室摘要去重后返回 Top-K。

四、工作记忆的打分公式:关键词主导,向量辅助

工作记忆(本会话热点)走另一套配方(见 beam.py 第 8803-8822 行):

base = 相关性 × (1-重要性权重) × 0.6 + 重要性 × 重要性权重 + 相关性² × 0.08 若 向量相似度 > 0: base = base × 0.80 + 向量相似度 × 0.20 score = base × (新鲜度份额 + (1-新鲜度份额) × 新鲜度衰减)

对比情景记忆可以读出设计意图:工作记忆关键词占 60%、新鲜度占 40%,向量相似度只占 20% 的"辅助票"——刚说过的事要快、准;情景记忆则向量权重拉满到 0.5,更看重语义泛化。

五、权重从哪来?三级覆盖 + 意图自适应

Mnemosyne 的权重解析优先级是(见 beam.py 第 2412-2431 行):

  1. 调用参数:recall(query, vec_weight=..., fts_weight=...)显式传参,最高优先;
  2. config.yaml 配置 / 环境变量:MNEMOSYNE_VEC_WEIGHT、MNEMOSYNE_FTS_WEIGHT、MNEMOSYNE_IMPORTANCE_WEIGHT;
  3. 默认值:0.5 / 0.3 / 0.2。

更巧妙的是查询意图自适应(MNEMOSYNE_QUERY_INTENT=1开启):系统先分类查询意图,比如"最近状态类"查询自动加大新鲜度和精确词权重,"偏好事实类"查询则更依赖向量相似度——同一个公式,不同的题目用不同的系数。

六、进阶:多声部召回(Polyphonic Recall)

如果开启MNEMOSYNE_POLYPHONIC_RECALL=1,Mnemosyne 会切换到 mnemosyne/core/polyphonic_recall.py 中的四声部引擎:向量、图谱、事实、时序四路并行检索,用RRF(k=60)排名融合后再做多样性重排。可以理解为"四个评委各投一票,取综合名次",每条结果都附带voice_scores字段,让你看清每个信号各贡献了多少分。

七、想亲眼看看打分过程?

Mnemosyne 内置可观测性设计,两个实用入口:

  • explain 模式:recall(query, explain=True)会返回完整打分轨迹,包括每个阶段(wm_primary / em_primary / em_fallback)的候选数与保留数;
  • 召回诊断:mnemosyne/core/recall_diagnostics.py 持续记录各"档位"命中统计与降级率,帮你在自己的数据上判断哪路信号在发力。

八、一句话总结

Mnemosyne 的召回精髓浓缩成一句话:三权重基础分(向量 0.5 + 全文 0.3 + 重要性 0.2)→ 新鲜度指数衰减保底 70% → 图谱/事实结构化加成 → 可靠性折价 → 全局排序。每一层公式都有明确的防御目标——防语义幻觉、防关键词误伤、防老旧噪音、防低质推断。所有权重都可通过配置微调,这套打分体系也支撑着它在 BEAM(ICLR 2026)基准上的表现,详见 docs/beam-benchmark.md 与 docs/architecture.md。

📌 想动手验证?装好pip install "mnemosyne-memory[all]"后,打开 explain 模式跑一次召回,对着本文的公式逐项核对voice_scores,你会发现每条记忆的分数都"有迹可循"。

【免费下载链接】mnemosyneZero-cloud AI memory that works everywhere. SQLite-backed. One pure-Python dependency.项目地址: https://gitcode.com/gh_mirrors/mnemosyne5/mnemosyne

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询