📰 来源: 博客园
第一篇:PowerMem 记忆系统的遗忘设计,从神经元到代码工程
上一篇 PowerMem 记忆系统的遗忘设计,从神经元到代码工程 从认知科学的角度聊了遗忘机制,包括突触可塑性、艾宾浩斯遗忘曲线、间隔重复和理想的困难。都是一些很有意思的认知学理论。
这一篇换个视角。不聊理论了,以一条消息的流转路径为线索,跟踪它在 PowerMem 中从写入到淘汰的完整生命周期。看看一路上,遗忘这个设计是怎么工作的。
一、重要性评估:这条信息值得记住吗?
假设发了这么一条消息:
下周五下午三点和产品团队在 3 号会议室评审 Q2 需求文档。
这条消息进入记忆系统后,第一个问题不是「怎么记住」,而是「值不值得记住」。
简单说,如果所有信息都以相同的权重被存储和检索,随着数据量增长,系统会面临两个问题:检索信噪比持续下降,存储成本不可控。
香农信息论解释了这件事。高概率事件的信息量趋近于零,不值得长期存储。低概率但关键事件的信息量极大,必须持久化保留。
重要性评估就是干这件事的信息过滤器。 它为每条信息打一个分数,这个分数决定后续的衰减速度、复习频率和淘汰优先级。
1.1 六维度评估模型
PowerMem 评估一条信息的重要性,比想象中复杂。它使用了一个六维评估模型,从六个维度进行综合评估、加权汇总:
拿前面举例的会议消息来说。它与「Q2 的工作」高度相关(relevance ≈ 0.8),包含明确的时间地点(factual ≈ 0.8),用户必须参加不能错过(actionable ≈ 0.9),但情感上中性(emotional_impact ≈ 0.2)。加权计算出的重要性分数大致如下:
0.3×0.8 + 0.2×0.5 + 0.15×0.2 + 0.15×0.9 + 0.1×0.8 + 0.1×0.6 ≈ 0.72
1.2 双路径评估:LLM 与规则引擎
基于这个评估模型 PowerMem 设计了两条评估执行路径。核心目的只有一个:确保系统在任何情况下都能给出评分。
路径一:LLM 深度评估(优先)
当 LLM 可用时,系统要求 LLM 根据六维度评估模型从六个维度分别分析,返回结构化 JSON。比如:
{
"importance_score": 0.72,
"reasoning": "会议安排对用户具有明确的时间约束和行动要求",
"criteria_scores": {
"relevance": 0.8,
"novelty": 0.5,
"emotional_impact": 0.2,
"actionable": 0.9,
"factual": 0.8,
"personal": 0.6
}
}
PowerMem 从 LLM 回复的结构化 JSON 中提取 importance_score 字段拿到分数。这里用了一个三级回退的方式来确保即使 LLM 返回格式不规范,系统也不会崩。首先尝试 JSON 解析,解析失败了就用正则表达式匹配数字,再失败则返回保底的默认值 0.5。
值得注意的是,LLM 返回的结构化 JSON 中的六维数据实际上并未直接参与最后权重的计算。它只是通过 Chain-of-Thought / 结构化分解来辅助 LLM 推理,让最终答案更可靠稳定。
路径二:规则引擎(兜底)
当 LLM 不可用时,规则引擎接管重要性分数的计算。精度会有所下降,但能保证系统不挂。它基于一组可量化的信号累加分数:
? 或 !:各 +0.05规则引擎精度不如 LLM,但确保了系统在 LLM 不可用时仍能正常运行。这种优雅降级(graceful degradation)设计是生产级系统的重要特征。说白了,不会因为一个外部服务的故障,就导致整个记忆系统停摆。
重要性分数确定了,下一步是分类。分类决定信息属于哪一层的记忆。
上一篇聊过大脑的记忆分层机制,即信息先进入容量有限的海马体(短期存储),经过记忆巩固后转移至新皮层(长期存储)。只有那些被反复激活的、与已有知识建立了丰富关联的、或伴随强烈情绪体验的信息,才能获得优先转移权。
PowerMem 把这个过程翻译为三层模型:
分类逻辑以重要性分数为依据。≥ 0.8 进入 long_term,≥ 0.6 进入 short_term,其余归入 working。不同层级的衰减速率不同,层级越高衰减越慢,信息活得越久。
if score >= self._algo.long_term_threshold: # 0.8
return "long_term"
if score >= self._algo.short_term_threshold: # 0.6
return "short_term"
return "working"
前面算出来的会议信息 importance = 0.72,命中了 ≥ 0.6 但不到 0.8。所以落入 short_term(短期记忆)。
2.2 遗忘参数初始化
分类只回答了「这条信息该待在哪一层」。更具体的问题是:初始强度是多少?忘得有多快?什么时候该再复习一遍?
PowerMem 在分类完成后,会为每条记忆生成一整套可随生命周期演进的数值档案。除了正文内容之外,系统还会为这条记忆建立一份元数据卡片,用来记录强度、衰减参数、复习计划和管理状态等。
下面逐一说明每个参数的设计意图和计算方式。还是以会议信息为例(importance = 0.72,short_term)。
2.2.1 初始保留率
同样一句「下周开会」,随口一提和被标记为必须参加的关键日程,在形成瞬间的牢固程度完全不同。信息进入记忆时被加工得越深(有没有理解、有没有跟已有知识关联、有没有行动意图),形成的记忆就越牢固。
所以在 PowerMem 中很自然地,越重要的信息在写入时就被赋予越高的初始保留率。同样以会议消息为例,初始保留率为:
initial_retention = self.initial_retention * importance_score
# 会议示例:1.0 × 0.72 = 0.72
importance_score 是前面算出来的重要性参数,self.initial_retention 是全局配置参数,默认 1.0。
实际上会写入两个字段:
initial_retention 字段,用于记录创建时的快照(当初记得有多牢)current_retention 字段,用于跟踪当前的有效保留水平创建时两者数值相同,之后 current
🔗 原文链接: 点击阅读原文
文章评论