工程记录 · 约 8 分钟阅读 · 资料核对:2026-10-05
周一的消息说:周四两点,在二楼开评审。周三又来了更新:改到三楼青竹会议室,时间不变。到了周四,你要回复‘评审在哪儿’,助理该用哪句话?
只存一条‘二楼评审’的摘要,下一次很可能又把旧安排带回来。HaroCue 的设计是留下原文,把可复用的记忆与原文连接起来,再判断这条记忆现在是否适用。下面用这个合成会议案例走一遍,它不是用户的真实记录或实验输出。
我们也做过一次小实验:向真实 MiMo 云模型发送三次合成证据请求,两次抽取被接纳,一次归并被拒绝。它只验证了这几次提案的接纳结果,还不足以说明长期记忆质量。为什么一份模型输出可能被拒绝,要从写入过程说起。
先留下那句更新
我们把原文称为证据(Evidence),从原文中提取、以后可以再用的陈述称为记忆条目(claim)。原会议通知写的是‘周四两点,二楼评审’,地点变更消息写的是‘改到三楼青竹,时间不变’。记忆要保留这两段原文,让旧地点和更新后的地点各自有来源可查。下文的‘记忆服务’指运行在 HaroCue 中、负责检查与存取这些记录的代码,模型只向它提交提案。
原文和记忆条目都保存在本机 SQLite 中。原文保留来源、观察时间和引用范围;记忆条目引用原文,还记录适用时间与条目之间的关系。词法和图索引用来查找这些记录。这样,重新整理记忆时,仍有原文可以回去核对。
原文、条目和索引放在哪里?
保留依据
- 授权输入应用观察 / 本人输入
- 原文证据文本、来源、引用范围
- 本机 SQLite原文、条目、时间与关系
核验写入
- 模型 · 云端边界授权片段 → 提案
- 记忆服务 · 写入检查提案,再提交条目
复核召回
- 查找索引词法 / 受范围限制的图
- 记忆服务 · 读取取回当前适用的条目
- 当前工作Cue / 助理 / 来源查看
虚线:可选向量通道,默认关闭;共享接线尚未发布。
简化概念图:复核时须查询 SQLite 权威记录;索引只发现候选。
阅读图的文字说明
授权输入形成原文证据,保存在SQLite。有限原文交给配置的模型提案;记忆服务检查后写入条目。词法和图索引从SQLite发现记录,记忆服务读取当前适用条目,供Cue与助理使用。虚线是尚未发布的共享本地embedding接线。
目前接通的输入是经许可的应用观察和本人手工输入。使用云模型抽取时,授权范围内的原文会交给所配置的模型;本机存储并不意味着抽取过程也离线。
一条提案,什么时候允许写入?
看到地点变更消息,模型可以提出一条新记忆:‘评审改到三楼青竹’,并引用消息中的对应片段。记忆服务先核对这段引用是否来自本次授权的原文。如果提案引用了范围之外的文本,就拒绝写入。工作区和记录身份由服务确定,来源中的文字也只作为数据读取。
还有一种拒绝发生在版本上:模型生成提案期间,如果所依据的原文或预期状态已经改变,旧快照不能直接写成最新记忆。写入要在预期版本仍匹配时提交。这些检查让记录能追到合法来源;陈述有没有理解对,仍需要核对内容。
一次提案会得到什么结果?
写入一次变更
- 1 · 读取地点变更消息拟记:评审改到三楼青竹
- 2 · 检查引用与版本越界 / 旧快照 → 拒绝
- 3 · 匹配后才提交新地点引用变更消息
- 4 · 记录写入结果接纳提案;内容仍需核对
找回当前地点
- 1 · 问:评审在哪里?周四的当前回复
- 2 · 查找、融合排序找到原安排和地点变更
- 3 · 查当前记录旧地点 / 无来源 / 冲突 → 排除
- 4 · 若新地点仍适用三楼青竹 + 地点变更消息
示意路径,不是这组会议材料已完成的自动更新实测。
阅读图的文字说明
写入演练:模型阅读获准的地点变更消息,提出‘评审改到三楼青竹’。记忆服务检查引用与版本,非法提案被拒绝。版本匹配后才提交,并记录接纳结果。读取演练:周四询问评审地点,词法与图检索查找会议安排。确认变更后,旧的二楼安排、无来源或未解决冲突的记忆被排除。如果新地点仍适用,则返回三楼青竹和地点变更消息,供用户核对。
图中路径以提案被接纳、变更关系已确认且来源仍可用为前提。写入回执记录服务接纳了什么,不是对会议安排真假的认证。
周四问起时,先排除二楼
词法检索可以匹配‘评审’和‘青竹’这样的具体词,图检索补充相关实体的线索。两路结果融合排序后,还要查回当前记录:确认地点已经变更后,‘二楼评审’就是旧安排,即使仍被检索到,也不能用于当下回复。‘三楼青竹’则要有可用的地点变更消息支持,才能连同来源一起交给 Cue。
时间会改变这一步的结果。周三看到更新,不等于会议在周三生效;观察时间、写入时间和适用时间分别记录。适用时间未知就保留未知。若两份更新指向不同房间、冲突尚未解决,Cue 的当下回复不能把得分更高的一条当成确定答案。
当前默认使用词法和受范围限制的图候选。可选向量通道需要显式配置本地 embedding 服务,默认关闭;共享到产品界面、助理和 Cue 的新接线仍属开发候选。尚未用真实本地 embedding 测过召回质量与延迟。
改房间、读错、要忘记:三种不同的处理
如果原文写的是三楼,却被记成二楼,就要纠正这条记忆;如果周一确实是二楼、周三才改到青竹,记录的是现实变化。前者用纠正关系,后者保留状态转换和先后时间。用户可以展开来源,查看原文片段、应用和时间,再决定如何修正。
遗忘处理的是另一件事:撤回原文或条目后,依赖它的记忆也要停止使用。当前安装版的单条遗忘可能连带清理重叠条目。开发候选准备保留同一原文仍独立支持的其他条目,并抑制被遗忘内容重新抽取;这部分尚未对外发布。
同一条记忆,怎样退出当下使用?
- 读错原文原文三楼,记忆却写二楼
- 更正错误地点保留更正关系
- 后来换房间变更消息:改到三楼青竹
- 当前用三楼青竹二楼安排保留在历史中
- 撤回新地点记忆遗忘新地点 / 删除变更消息
- 10.7 单条遗忘重叠条目可能连带清理
实线:10.7 已核路径。虚线:精确单条遗忘候选,尚未发布。
阅读图的文字说明
同一次评审可以包含纠正、现实变化或撤回。原文写三楼却被记成二楼时,更正这条错误记忆;后来换房间时,当前使用三楼青竹,保留二楼安排的历史。遗忘新地点记忆或删除地点变更消息时,处理依赖它的记忆。10.7单条遗忘可能连带清理重叠条目。候选精确遗忘准备保留仍有独立来源支持的会议时间,并抑制已遗忘的地点记忆重新抽取;候选尚未发布。
历史查看同样要遵守来源删除与遗忘状态。这里的停止使用和清理记录,不承诺立即擦净内存旧副本、数据库历史页或外部备份。
两次接纳,一次拒绝,分别说明什么
试了什么
这次小实验用了合成证据,向真实 MiMo 云模型发出三次请求:两次抽取,一次归并。它检查模型提案能否通过记忆服务的接纳流程,没有测试长期用户使用。
观察到什么
两次抽取被接纳,归并被拒绝。原被拒绝响应的正文没有保存,无法确定具体出错字段。保存的抽取输出随后用于离线重放,验证了中英混排 UTF-8 词法修复;这一步没有用 embedding。
还缺什么
更新后的抽取与归并提示词尚未做新的真实模型复测。接下来需要把已过期、冲突和已遗忘的材料纳入测试,检查该返回的条目和该排除的条目;本地 embedding 的质量与延迟也要另测。10.8 候选已构建并通过隔离升级启动检查,这类检查验证的是应用能否构建和启动,不能替代记忆质量评测。
实验附注:三次请求共 10,898 tokens。不同厂商的基准和测试协议不用于本文速度或质量排名。
换一种记忆对象,会得到什么取舍?
同样是让下一次任务读回已有信息,系统可以选择不同的存储对象。下面选 Mem0、Graphiti 和 Letta 三条有公开实现的代表路线,比较组织方式;配置、迁移和部署细节放在文末资料注记。
Mem0:让应用接入可复用事实
Mem0 把消息提取成独立事实。2026 年的新自动抽取只新增记录,让变化前后的事实并存,再通过检索找到需要的内容;显式更新和删除仍可用。应用可以在之后的请求里读取这些事实。HaroCue 还要保存逐条记忆引用的原文范围,让写回复的人可以回去核对。
Graphiti:把变化放进关系图
Graphiti 从 episode 建立实体与事实边,用双时间区分事实何时成立、系统何时知道它。涉及人、项目和关系的连续变化时,这种对象组织很自然;部署者同时要维护图数据库和模型管道。它保留来源脉络,重点也包括历史和事实失效。
Letta:由 Agent 维护记忆文件
Letta MemFS 用 Git 支撑的 Markdown 文件,核心笔记常驻上下文,其余目录按需读取。Agent 可以直接读写文件,修改过程也便于检查。文件历史记录了怎么改;若应用还需要逐条核对原始依据,就要另外设计这层支持。HaroCue 选择把引用和状态关系直接放进记忆记录。
同类系统把记忆组织成什么对象?
- HaroCue
- 原文证据记忆条目与引用时间与条目关系
- Mem0
- 独立事实记录变化前后的事实实体链接
- Graphiti
- Episodes · 来源脉络实体双时间事实边
- Letta · MemFS
- Git Markdown 文件常驻核心笔记按需读取的目录
阅读图的文字说明
HaroCue组织原文证据、记忆条目和关系;Mem0组织独立事实与实体链接;Graphiti组织episodes、实体与双时间事实边;Letta MemFS组织Git Markdown文件、常驻核心笔记与按需目录。图中并列的是对象,不是写入流程或质量排名。
下一轮先补齐哪些记录
先保留模型完整输出,重跑新版抽取与归并提示词,记录提案为何接纳或拒绝。再用同一套合成材料测试变更、冲突、过期和遗忘后的召回,确认三楼青竹能在适用时返回、旧二楼不会混进当下回复。可选 embedding 的质量与耗时单独记录;新后端的公开发布也仍要经过安装与升级验收。
资料与版本注记
版本和输入范围
当前用户实装为 0.2.18 / 2026.10.7,仍使用旧记忆后端,已有原文与条目分离、时间、词法和图检索、来源查看与纠正。0.2.19 / 2026.10.8 是未正式发布的候选,已构建并通过隔离升级启动检查;这不表示用户已经安装或模型质量已经验收。公开版本以下载页为准。
新归因、精确单条遗忘、共享可选语义通道和 UTF-8 修复属于开发候选。新归因区分作者、草稿、已发送文本、引用与本人明确提交;缺少可靠身份时保留未知。新单条遗忘准备保留共享原文仍独立支持的其他条目,并抑制被遗忘内容重新抽取。向量通道需显式配置本地 embedding,默认关闭。
已核输入链只有经许可的应用观察与本人手工输入,观察范围由服务限定。数据模型中的文档或对话类型不代表所有第三方导入器都已接通。使用云模型抽取时会发送授权证据范围;遗忘的传播与备份维护仍有各自边界。
查看公开下载与安装要求同类系统:配置、迁移与部署资料
Mem0 的 2026 年 4 月算法改为单次 ADD-only 自动抽取;旧两阶段 ADD/UPDATE/DELETE 归并属于先前版本。显式 update/delete 仍存在。语义、关键词和实体信号受配置及版本影响;当前 OSS 的关键词/实体增强作用于语义候选,不能直接套用 Platform 的全部检索能力。OSS v3 已移除图存储集成,Graph Memory 属于托管 Platform。Platform History API 提供输入、旧值、新值和事件记录。
Graphiti 的检索融合语义、全文和图路径,可按中心节点距离重排。它是开源框架,与 Zep 托管上下文服务分开评价。Letta 当前入口是 Letta Code,旧 V1 API server 已退役;MemFS 默认没有语义或向量索引,可选搜索 mod。三条路线都能按不同方式本地运行或自托管,运维和用户控制要按具体部署评估。资料核对日期为 2026-10-05。
工程参考阅读
相关工程讨论包括精确词与上下文的检索、有限上下文的材料选择、Agent 的正反测试,以及跨会话工作记录。这里引用设计讨论,不移用厂商评测成绩。
