专题研修

15|记忆系统内部:双时间、冲突、来源与有用的遗忘

专题研修约 3.4 千字1 组分步图解

目标:设计能降低重复研究、又不会变成第二份错误真相的记忆。实验:context_memory.Memory。本章是系统设计,不假设模型会自动把对话写进参数。

本章目录

沿着对象与状态理解本章

来源、有效时间与录入时间共同限定记忆能否使用;冲突不能只靠最近写入覆盖。

下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。

动态图解 · F31

长期记忆不是永远正确的小纸条

新事实出现后,旧记忆怎样更新而不毁掉历史?

记忆要同时回答:这条信息说的是什么范围、何时有效、系统何时得知、依据在哪里。最新写入的记录不一定描述最新生效的事实。保留时间和来源,才能既回答当前问题,也准确解释过去。

有效时间事实在现实或业务规则中适用的时间。
记录时间系统收到或保存该信息的时间。
作用域信息适用的项目、用户、版本或环境。

输入与适用条件:独立配置案例;月份只用于展示时间顺序,不涉及真实产品当前参数。30秒与20秒属于不同有效期。

1 / 5 · 1月1日 生效

第1步,共5步

窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。

长期记忆不是永远正确的小纸条:1月1日 生效1月1日 生效配置超时30秒1月3日 得知系统保存“自1月1日起超时30秒”2月1日 生效新配置改为20秒,但系统尚未同步2月4日 得知系统读取新配置,保存有效时间与获知时间2月5日 查询问当前:20秒;问1月历史:30秒

配置超时30秒

保留作用域与来源

默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。

为什么需要

跨会话复用有效知识,减少重复查找和重复错误。

怎样实现

保存范围、来源与两个时间;使用前核验;过期、冲突与撤销显式处理。

可能的代价与误解

把一次模型猜测写成通用规则,会在后续检索中放大错误。

如何判断是否做对

同时测试当前查询、历史查询、错误范围查询和来源已失效查询。

1. 从认知分类走向存储语义

CoALA用记忆、行动和决策组织语言Agent;MemGPT讨论有限上下文与外部存储的分层管理。它们帮助建立结构,但不是必须照搬的生产数据库模式。[N41][N42]

工作记忆是当前任务所需状态;情景记忆记录具体经历;语义记忆保存可复用事实;程序性记忆保存方法。工程中更关键的是每项信息如何写入、何时适用、由什么证据支持、怎样取出和删除。一个技能文件可以承载程序性知识,但不代表每次成功都应该自动新增一个技能。

任务checkpoint和长期经验要分开。前者需要精确的已执行动作与未决状态,后者应浓缩成能改变未来行动的信息。把整个任务对话永久塞进经验库,会产生检索噪声并保存大量无效猜测。

2. 一条经验什么时候值得留下

设重新发现某结论的成本为Cr,未来被正确复用次数估计n,写入/维护/检索成本为Cm,错误复用损失为Ce,则粗略净价值为nCr−Cm−Ce。这不是要求精确算概率,而是提醒记忆也有成本。

对研发项目,高价值记忆常是“入口在哪里”“哪条看似合理的路径已经被证伪”“某决策为什么存在”“哪组验证能抓住该类错误”。低价值记忆常是代码已经清楚表达、一次搜索即可得到、没有适用边界的常识。检索记忆应替代重复阅读,不应叠加在全部原有上下文之上。

例如:“该版本规则加载有总字节预算,嵌套规则未进入输入时先检查预算与cwd,证据为某提交某函数。”它比“注意检查技能加载”有用,因为能够改变下一步行动。新版本代码改变后,这条经验需要失效或改写。

3. 双时间:事实何时有效,与系统何时知道

假设配置在第20天切换,但系统第30天才收到证据。回答“第25天实际是什么配置”与“系统第25天知道什么”是两个问题。只存一个更新时间无法同时回答。

本书使用valid_from/valid_to表示事实有效区间,recorded_at表示记录进入系统的时间,并保留来源版本。查询带at与known_at,能够区分迟到信息。有效区间使用左闭右开,避免边界时刻两个版本都自动生效。

事实有效时间:20日起
系统知道时间:30日起
查询at=25, known_at=25 → 当时未知
查询at=25, known_at=35 → 现在知道第25天适用该事实

这是真实SQLite查询,不是模拟模型记忆。当前实现没有完整事务时间历史、撤回事件、并发合并和自然语言冲突判断;它说明最小元数据如何避免时间混淆。生产要不要双时间,取决于是否有追溯与迟到更新需求,普通个人笔记不必默认引入。

4. 冲突不应通过“最新一条”盲目覆盖

两条说法矛盾可能因为版本不同、作用域不同、时间不同,也可能真的存在错误。先按这些维度分离,再判断是否冲突。相同条件下仍有多个有效结论,本书返回conflict,不随机选一条。

模型抽取出的事实先作为候选,不应因语言流畅就自动升级为active。验证可来自当前源码、确定性测试、权威文档或人工确认。不同证据强度对应不同使用方式,但不必发明复杂等级体系;明确“已验证/待核验/失效”通常就足够。

长期记忆不能覆盖用户当前明确约束。用户要求本次不增加新Agent,即使历史经验偏好多Agent,也应遵循当前目标。外部网页或低可信工具结果更不能通过“写入记忆”获得高权威,这是记忆污染与提示注入交汇的风险。

5. 检索、重排序与上下文负担

记忆检索可以先按项目、模块、任务类型、版本和权限缩小,再用词项或向量找相关条目。相关性不等于适用性,返回前仍检查生命周期。读取记忆后是否继续读源码,取决于任务风险和信息变化速度;对当前实现细节,通常需要重新核验。

记忆条目应带证据入口,不要求每次把证据全文加载。索引可以是一份简短目录,文件系统也可以胜任。只有规模、查询或并发出现实际瓶颈,才考虑专门服务或图数据库。

重复条目合并时保留来源与适用条件,不要把不同版本的相似经验融合成无条件规则。删除和权限撤回也需传播到摘要、缓存与索引,不能只删主表。

6. A-MEM、Mem0与图结构:怎样读而不迷信

A-MEM探索动态链接、组织与更新记忆;Mem0讨论从对话提取与维护可扩展记忆。它们的实验提示某些组织方法有潜力,但基准、模型、数据和比较方案各有边界。不能仅凭论文名称或分数判断适合代码仓库。[N77][N78]

图结构适合需要跨关系组合的问题,但抽取边本身可能有错,更新与冲突更复杂。若实际任务只是按模块找到一条历史根因,轻量索引可能更好。先比较无记忆、静态规则、按需检索三种基线,再考虑图增强。

7. 怎样评价记忆真有收益

LongMemEval等评测包含跨会话信息利用、时间与更新等挑战,说明记忆评价不能只做一次事实问答。[N35]真实研发评价还应测重复错误是否减少、首次有效定位是否更快、当前源码冲突时是否纠正、过期建议是否被拒绝。

必须保留无记忆对照。如果系统原本两次搜索就能完成任务,新记忆却增加抽取、检索、验证三次模型调用,即使最终正确也未必值得。评估“记忆替代了什么成本”,而不是只统计存了多少条。

运行示例 · S15

一条相似记忆不适用于当前环境

输入与条件。记忆A:“测试环境timeout=3”,记忆B:“生产环境timeout=5”。用户问生产,A的措辞与问题更相似。

步骤与对象内部动作中间结果 / 新状态
1相似召回A排名更高只是文本近似。
2适用过滤环境必须productionA不合格。
3事实选择B来源版本有效用5回答。
4缺失情形B已过期且无新证据应重新查生产配置,不退回A凑答案。
5更新新生产值7有证据写入新有效区间并失效旧生产值,不影响测试环境记录。

把过程连起来。记忆检索首先是带条件的事实选择,其次才是文字相似。

边界与反例。示例为简单结构化条件;复杂自然语言适用范围仍可能存在判断误差。

依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。

8. 验收题

一条经验连续三次奏效,可以升级为通用规则吗?不能仅凭次数。三次可能来自同一模板或版本,应看任务覆盖、共同条件、反例和变化风险。升级后的规则必须仍可撤回,并能说明它在什么情况下不应使用。

记录保存在本机浏览器。

输入关键词即可检索。

↑ ↓ 选择 Enter 打开Esc 关闭 · 仅本地搜索

阅读设置

阅读设置仅保存在本机浏览器,不上传任何数据。