02 / memory model

记忆是索引,
不是抄本

一条记忆只回答「结论是什么、关于谁、什么时候、出处在哪」。 原文不进记忆,留在原始对话表里;按编号用 recollect_turn 取回那一轮,前后各可带 10 轮。这样模型可以随时换、提示词可以随时改, 而原始会话一个字节都不会丢。

两半记忆 实体锚定 25 张正式记忆表 41 个工具
01

两半记忆:自己的,和世界的

记忆不是一件事。一半是 agent 自己的加密小本,只有它自己看得见、写得了; 另一半是它和你一起经历的世界,可查、可追溯,也能被同一个人名下的其他 agent 读到。 世界记忆放在多台设备、多个 agent 之间共用:大家一起抽、一起查;core 只认单一 agent 的钥匙。

self · 加密小本

core

每个 agent 一份,加密存放。人格、对主人的理解、情绪、没做完的事、随手的笔记—— 都是它自己的立场,由它自己写,不经过自动抽取,也不共享给别人。

人格 对主人的理解 情绪 没做完的事 交接条 小本本
它属于 agent,是它的底座;只认这一个 agent 的钥匙。
world · 世界记忆

memory.db + transcript

你们一起经历的事:谁在什么时候说了什么、做了什么决定、结果如何。 每条都带出处和指针,能按指针取回原话,也能被撤销、被替换、被同一主人名下的其他 agent 读到。

事实 事件 决定 关系 状态 原话
它属于这段关系,是一本可核对的账;同一主人名下的 agent 共用。
同一条记忆,三种进模型的方式

这不是三个库,也不是三层存储——是同一份东西在不同场合被拿出来的三种粒度。

02

记忆挂在锚点上

记忆不是一段段自由文本,而是分开的条目:这条是称呼,那条是状态,另一条是事件, 各自挂在一个固定身份上——这个身份就叫锚。点一下或悬停任意节点,看它连着什么。下面的图为示意,仅作示范。

别名 提及 提及 属性 状态 关系 事件 阿岚 称呼「若若」 「她」 「岚姐」 偏好:深夜写代码 状态:疲惫 · 10-25 关系:同事 · 阿K 事件:10-24 部署讨论
anchor
阿岚(示例主体)
一个实体锚。所有关于她的称呼、属性、状态与事件都挂在这里,换一处措辞不会变成另一个人。
03

两种 agent,各取所需

工具是同一套,重点不一样:陪伴型多看常驻简报、情绪与画像; 工程型多看事件线、交接与原话。两边都会用对方的:陪伴型也会翻世界记忆,工程型也有自己的 core。

陪伴型4 个动作 · core 为主,也会翻世界记忆
认

「我是谁?我们到哪了?」

常驻简报:身份、关系、没做完的事,一次给全。

core_brief
感

「他现在心情怎么样?」

情绪与状态,带时间和有效期,不写死成永久属性。

core_affect_get
像

「我该怎么称呼他?」

用户画像与人格设定,只有这个 agent 自己看得见。

core_subject_getcore_persona_get
记

「先记一笔,别丢了。」

写进小本本,只增不改;摘要会自动进常驻简报。

core_notebook_append
工程型7 个动作 · 事件线 + 交接 + 原话
问

「上次那个部署脚本放哪了?」

一句话简报 + 编号句柄;想看细节再按编号展开。

recollect_recall
查

「原话到底怎么说的?」

直接搜原话,命中里带 turn_uid 和会话号;要原文再用「取」。

recollect_search
取

「这句原话前后还说了什么?」

凭 turn_uid 取目标轮,带同会话前后各 10 轮;跨机也能取。

recollect_turn
追

「这事我在哪个会话里说的?」

列出会话,再按会话取上下文。

recollect_sessionsrecollect_session
接

「我上次停在哪?」

读上一段会话留的交接条,接着往下做。

core_handoff_list
评

「这条帮上忙了吗?」

用后回一句:帮上了 / 没用 / 部分 / 条件不符 / 已失效。

recollect_reuse
纠

「这条记错了。」

打报告,走人工判定;不直接改库,也不让模型自己改。

recollect_report

13 个共享记忆工具 + 28 个私有工具(读写 agent 自己的小本);其余是给运维和调试的,日常用不到。

04

到底记了些什么

不是把聊天记录存一份,是拆成六种能直接用的东西;每一种都能追到原话。

01 / fact
事实

谁在哪、是什么、多少。能被反复引用,也能被推翻。

部署脚本是 scripts/build-release.sh

02 / event
事件

什么时候、发生了什么、结果怎么样。带时间,能排成线。

10 月 24 日改过一次发布流程

03 / decision
决定

定了什么、为什么、后来改没改。旧的那条标成「被取代」,不删。

先切分支再合,别直接推 main

04 / state
状态与情绪

当时的感受和处境,带有效期;过期自然淡出,不贴永久标签。

这周想歇两天(截至周五)

05 / relation
关系

谁和谁、什么关系、从什么时候开始。关系变了是加一条,不是改旧的。

阿岚是同事,10 月 12 日起

06 / anchor
实体锚

人、项目、机器、账号。所有记忆都挂在锚上,换个说法不会变成另一个人。

「recollect 这个项目」

另外一类是 agent 自己写的:人格、用户画像、小本本、交接条。它们放在 core, 只有这个 agent 自己看得见;上面这六种则在共享的记忆层里,可按权限被同主人的其他 agent 读到。

05

一次召回的四种读法

召回先用本地关键词索引捞出候选——词级精确匹配,不调用嵌入模型;再把同一批候选拼成不同的读法: 给模型看的是一句带编号的简报,行首的 [1] 就是句柄,拿着它能换回那条记忆;记忆里的 turn 指针再用 recollect_turn 取回原话; 给程序看的是 JSON,给核对的人看的是能一路展开到原话的证据链。切换标签看同一份记忆的不同切面。

默认视图 · brief

召回先把候选拼成一句自然语言,行首带 [n] 句柄;整句有上下文,比一堆碎片和字段更不容易读偏。读的时候不调用模型,模型也不用先解析表结构。

recollect_recall
query 上次部署脚本放哪了?
你们在 10-22 讨论过部署脚本的位置,结论是统一的 release 入口。
结论:scripts/build-release.sh 是 release 与两个平台的统一入口,产物落在 dist/<target>/,各自带 SHA256SUMS。
原话 · 2026-10-22 · 说话人:你 · 第 t-7f3a 轮 · 第 128–214 字
「release 与双 target(Windows x86_64 与 aarch64-unknown-linux-gnu)的统一入口是 scripts/build-release.sh;产物落在 dist/<target>/,各自带 SHA256SUMS。」
当时记过:aarch64 产物已在树莓派(Debian 13 / glibc 2.41)实机跑过,冷启动与空机器两条路都有读数。
原话 · 2026-10-22 · 说话人:你 · 第 t-7f3b 轮 · 第 40–96 字
「aarch64 产物已在树莓派(Debian 13 / glibc 2.41)实机跑过,冷启动与空机器两条路的读数见 docs/2026-10-22-cold-start-and-binaries.md。」
相关:冷启动读数在 docs/2026-10-22-cold-start-and-binaries.md,属于原始资料,不在记忆正文里。
出处 · 文档: 2026-10-22-cold-start-and-binaries.md · text_sha256 已登记
记忆只保留「有这份读数」这个结论与文档位置;展开时才取正文。

演示中的原文展开按 recollect_turn / recollect_session 的机制绘制; 按钮里的数字仅作示范,字段与流程来自真实实现。

06

25 张正式表,五个方向

记忆层不是一张大表。身份与来源、抽取与审核、实体本身、使用与引用、运维,各自成组;审计与来源从建表那天就带着。

表名不用记,看五个分组就行:每组各管一件事,缺哪组一眼能看出来。

身份与来源identity
  • sessions
  • turns
  • session_principal_claim
  • device
  • import_log
抽取与审核pipeline
  • extraction_run
  • extraction_batch
  • extraction_issue
  • review_item
  • review_decision
实体ontology
  • anchor / alias
  • mention
  • attribute
  • relation
  • fact / state_assertion
  • episode / episode_fact
使用与引用surface
  • card
  • memory_mention
  • fact_link
  • provenance
  • attestation
运维ops
  • usage_counter
  • job_watermark
  • audit_log
  • attention
  • memory_stats

以上是主要分组,不是全表清单:25 张正式核心表,另有 7 张归属、审查、事件、归档、复用侧表,共 32 张;版本以 MEMORY_VERSION = 6 为准。