做 Agent 项目越久,我越确定一件事:拉开差距的不是模型有多聪明,而是它记不记得住、记得对不对。

1.0 的记忆很薄:会话状态、一份画像文件、一些短期任务。够用,但它们是混在一起长出来的。后来我想让 Agent 做得更多——记得更久、主动提醒、在关键时候和我争论——这层记忆先撑不住了。

所以到 2.x 我换了一个思路:不再给 Agent「补记忆」,而是把记忆当成框架的中心来设计。这篇文章讲的就是这套记忆原生认知框架:让 Agent 基于长期事实、证据、假设、短期事项和反馈进行开放推理,同时保持执行受控。先说明进度:框架里的三层记忆和画像版本化纠正已经在 2.0 落地并迭代到 2.1;主动提醒、条件性异议和周期复盘还在设计中,没有全部上线。

记忆不是聊天记录

很多 Agent 项目里的「记忆」,就是聊天历史再加一层向量检索。聊天历史能回答「我们说过什么」,但它回答不了另外三个问题:实际发生了什么?这个人是怎样做判断的?接下来要做什么?

这四类东西的生命周期、可信级别和写入权限完全不同:事实不能被模型改动,画像应该缓慢积累,短期事项几天就过期,聊天记录只是过程。把它们塞进同一个存储,后面所有的混乱都从这里开始。

所以 2.x 的第一条原则是:不能因为都叫 memory,就混成一个存储或一份 Markdown。

三层记忆

事实数据层回答「实际发生了什么」。它是结构化的权威事实源,以只读为主;模型输出、画像结论、复盘报告都不能反向修改它。这是整个系统的 R0 硬边界。

画像层回答「这个人是怎样做判断的」。它分成两半:证据和假设。证据来自复盘、对话、提醒反馈和用户纠正,记录「在哪类场景下出现过什么行为」;假设是 Agent 的可逆工作模型,带置信度、支持证据、反证、衰减和版本。

短期事项层回答「接下来要做什么」:当前计划、待补问题、提醒和跟进事项,每一项都有明确生命周期——已读、忽略、静音、过期、撤销。

事实数据层    -> 结构化事实源(权威,只读为主,R0)
画像层        -> 证据(低权重积累)+ 假设(可逆、有版本)
短期事项层    -> 计划、提醒、跟进(有生命周期)
-----------------------------------------------
会话上下文 / checkpoint -> 运行态,不算记忆本体

至于 checkpoint 和会话上下文,我把它们归到运行态:它们负责让任务能暂停和恢复,不负责让 Agent 变得更了解你。

证据和假设:从「逐条确认」到「可逆自治」

1.0 的做法是画像更新必须人工确认。安全,但代价是画像几乎不长——每次确认都要打断一次使用,最后大家都不愿意维护它。

2.x 改成了另一套逻辑:画像维护独立成节点,支持条目级纠正与停用,用户纠正时生成反证或替代事件——纠正本身也是新证据。

这里有一个我想清楚的重要区分:「一次行为不能定义一个人」,意思是不能把单次证据写成永久标签,而不是每次写入都要人工批准。

自治的边界不由「逐条确认」划定,而由「每次写入都可逆、可追溯」划定:稳定 ID、版本、来源、可纠正、可撤销。低风险的记忆写入放开,高风险的正式事实仍然必须过人——这就是我说的可逆自治(R1)。

开放推理,受控执行

整个框架可以用一句话概括:高认知自主权,低执行权。

Agent 可以自主地发现、理解、组织、记忆、提醒、质疑和修正自己的判断;但正式事实不能被它覆盖,高风险操作始终要经过人。记忆原生不等于把权限交给模型。

落到 LangGraph 上,主图是主控有界 ReAct 加业务节点 Send 派发的受控循环:

主控理解任务 -> 派发业务节点执行 -> 检查结果
  -> 通过 / 补查 / 重跑 / 追问
  -> 涉及写入则挂起等人工确认
  -> 受控收尾

主控的轮次和工具预算都是硬约束;节点边界由图的 State 定义,计划只描述要做什么,不保存运行状态。模型可以开放地理解和规划,但只能调用已登记、已授权、受预算约束的能力。

反馈闭环:提醒、异议、复盘

主动提醒。2.x 的「主动」要求任务不依赖当轮用户输入,能被系统按时或按事件唤醒。用户的已读、忽略、静音、采纳、反驳全部回流成证据。忽略一次不等于不喜欢,多次明确静音才形成偏好证据。

条件性异议。日常交互以合作为默认,不通过频繁反驳来表演自主性;只有明显风险、画像冲突或关键证据不足时才争论。分歧先分三种:事实分歧优先补资料,风险判断分歧允许双方更新立场,偏好分歧可以各自保留。Agent 不因用户坚持而伪造认同,也必须在新证据足够时承认自己被说服。

周期复盘。评价一次行为时,结果和过程分开看:好结果不自动证明当时的决策正确,坏结果也不自动证明执行错误。复盘产出的是画像证据和短期提醒,而不是一句「当时对了还是错了」。

远期:从项目到框架

当前这个项目,在我看来是记忆原生 Agent 的第一块高约束试验场:场景真实、有写入、有长任务、有硬边界,正好能压测这套框架的每一处接缝。

远期我想抽出来的,是一套领域无关的认知基础设施:枚举有限的认知原语、工具能力和安全边界,让模型根据当前目标、长期记忆和实时证据动态组合行为。

用户目标或系统事件
  -> 生成有界的记忆与资料检索计划
  -> 区分事实、观察、证据、假设和短期意图
  -> 同时检查支持证据、反证、来源时间和数据缺口
  -> 从受控动作目录提出回答 / 追问 / 补查 / 候选 / 有限异议
  -> 确定性策略校验权限、预算和风险边界
  -> 用户反馈与后续行为成为新证据
  -> 纠正、增强、减弱、衰减或撤销既有记忆

它和 LangGraph 不冲突:LangGraph 继续负责图编排、状态、暂停恢复和 checkpoint;这个框架的差异化在记忆语义、认知循环、受控动作组合和验证方法。

检验标准也简单:换一个领域如果需要重写核心,说明得到的只是改了名的业务代码,不是框架。更长期的候选方向是行为镜像型的「数字分身」——目标是尽可能真实地映射一个人的偏好和弱点,而不是把人改造成理想化的标准答案。

这套框架不是纸面设计:三层记忆和画像版本化纠正已经在 2.0 落地并迭代到 2.1,事实数据层、画像层与短期事项层在现行架构里分得清清楚楚;主动提醒、条件性异议和周期复盘是设计中的下一阶段,还没有全部上线。进展我会继续写在这个博客里。

开放性来自目标、记忆组合和模型推理;可靠性来自确定性边界、受控工具、校验和用户纠正。

记忆原生的意思不是 Agent 记得更多,而是它记住的每一条都知道来历、分得清事实和猜想,并且随时可以被纠正。