非线性的记忆

非线性的记忆

💡 原文中文,约4900字,阅读约需12分钟。
📝

内容提要

本文介绍hypatia记忆系统如何将线性对话转化为非线性知识结构。系统通过语义信号切分会话,采用对数分层摘要压缩信息,用滑动窗口提取知识点,并构建三元组图以发现隐性关联。同时提供自动回忆和显式读写通道,确保知识可检索、可修正,实现有限记忆下对无限知识的有效利用。

🔎

延伸解读

为什么分层摘要优于一次性压缩

文章指出,一次性让模型“读完一万字写出两百字”的信息损失不可控,而分层归档(log₁₆(n))让每一层只面对上一层已梳理的产物,损失发生在每层边缘而非一次性坍塌。这类似B树逻辑:根节点不存所有数据,但保证从根能找到数据。对读者而言,这意味着记忆系统更注重可回溯性而非压缩率,牺牲一点存储换取了可控的信息衰减。

知识点与聊天记录的本质区别

文章强调“用户说要用sqlite换掉duckdb”只是聊天记录,而“存储层评估过sqlite单库方案,因json contains查询不可行而搁置”才是知识点。前者依赖对话语境,后者自含且可随时检索。这提醒读者:有效的知识管理应提炼脱离上下文的结论和理由,而非保存原始对话。同时,纠错链(问题→错误→纠正→教训)被特别珍视,因为其记录了“为什么错”,比一次答对更有长期价值。

图结构:发现隐性关联的关键

三元组图的价值不在于每条边精确,而在于可遍历性。文章举例:从“sqlite”出发沿关系走两步,可能撞见三年前关于PG jsonb的讨论,这种相遇在全文检索中不会发生。这揭示了非线性知识结构的优势:通过关系网络发现跨时间、跨话题的隐性联系,而错误的三元组可被挑战和修正,未结构化的对话则连犯错的资格都没有。

Q&A

hypatia记忆系统如何将线性对话转化为非线性知识结构?

hypatia通过四个步骤实现转化:首先用语义信号(话题切换、任务边界、时间间隔)切分会话;然后对每个会话生成对数分层的摘要(log16 n压缩);接着用滑动窗口在对话收敛时抽取知识点,并拆解为三元组存入知识图;最后提供自动回忆和显式读写通道,确保知识可检索、可修正。

hypatia如何切分对话session?为什么不用框架的物理边界?

hypatia主要依据语义信号切分session:话题切换是最强信号,任务边界次之,时间间隔最弱,物理边界(如进程重启)仅作为提示。因为一次会话可能包含多个不相关话题,而同一任务可能跨多次重启,用物理边界会导致整理对象错误。

hypatia的session summary为什么采用对数分层压缩?有什么好处?

hypatia采用log16(n)的分层压缩,每16份原始对话归档为1份摘要,逐层上升。好处是:每层压缩只面对上一层已梳理的高密度内容,避免一次性压缩导致不可控的信息损失;同时保留底层原文,支持逐层下钻回溯,类似B树结构,既控制体积又保证可检索性。

hypatia如何从对话中提取知识点?有哪些提取原则?

hypatia用滑动窗口跟踪对话,当话题收敛时触发梳理,提取自含的知识点。主要原则包括:记录教训而非流水账;梳理是合成而非转录;对质量保守、对时机激进;纠错链是金子(保留initial attempt、错因、正确做法和lesson);分类决定模板;相对时间改写为绝对时间;宁冗勿漏关系,不存敏感信息。

hypatia中的三元组图有什么作用?如何发现隐性关联?

三元组图将知识点拆解为(主语,谓语,宾语)存入RDF风格图,提供可遍历性。通过图遍历可以从一个节点出发沿关系找到间接相关的知识,例如从'sqlite'出发可能发现三年前关于PG jsonb的讨论,这种关联在全文检索中无法发现。即使三元组有噪声,结构本身仍提供发现路径。

hypatia如何适配不同Agent的回忆机制?

hypatia根据Agent类型提供不同回忆方式:对每轮重建system prompt的Agent,采用确定性注入(任务开始时执行JSE查询并固定放入上下文);对能自主调用工具的Agent,让回忆保持在技能层,由Agent自行检索;对被动响应的Agent,在对话边界(新任务、用户提醒)触发外部注入。hypatia skill统一封装这些差异。

hypatia的显式写入和显式读取通道有什么用途?

显式写入用于将现成材料(如文档、书籍)直接拆解为条目和三元组入库,无需等待滑动窗口;显式读取是用户明确指令检索,如'读一下hypatia',作为自动回忆失灵时的手动复位,成本低但能重新激活整个知识库。

🏷️

标签

➡️

继续阅读