AI 工程实践 · Agent 架构

Agent 记忆原理与实现:
从「金鱼脑」到「越用越聪明」

上下文窗口是 RAM,长期记忆是硬盘

把同一个问题问两遍,如果第一轮对话没有带上,LLM 的回答可能完全不同——因为它没有记忆。

2026 年,业内有一句话流传甚广:上下文窗口是 RAM,长期记忆是硬盘;两者互相不能替代。

本文讲清 Agent 记忆的原理与工程实现:短期记忆、长期记忆、分层架构、写入-检索-更新-遗忘的完整生命周期,以及 Claude Code、Codex、OpenClaw 与 mem0 / Letta / Zep / LangMem 等主流方案的实践与选型。

问题

一、先看问题:模型天生「金鱼脑」

上下文窗口是 RAM,长期记忆是硬盘;两者互相不能替代。

一组公开实验数据(Chroma 复现的 Context Rot 实验)非常直观:同样一份长文档,只是改变 prompt 里信息的组织方式,准确率可以从 98% 掉到 64%。 塞进去 ≠ 想起来。「塞进上下文」和「从上下文检索出正确答案」是两件事,中间需要一层筛选——这层筛选,就是记忆系统。

而要理解 Agent 记忆怎么做,业界普遍从认知科学里找答案。

原理

二、原理基础:记忆的分层来自「人类怎么记」

现代 Agent 记忆架构几乎都能追溯到 Atkinson 与 Shiffrin(1960 年代)提出的多重存储模型。人脑的记忆不是一块硬盘,而是分层的:

人类记忆对应 Agent 实现存储位置
感知记忆工具/API 的原始返回值临时变量,用完即弃
短期记忆(工作记忆)LLM 上下文窗口模型的 context window
情景记忆历史对话记录、交互日志向量数据库 / 文件系统
语义记忆知识图谱、事实库外部知识库
程序记忆工作流定义、操作规范配置文件 / 指令文件

一句话:Agent 记忆的本质,是在有限的上下文窗口内,模拟人类记忆的分层结构和动态管理能力。

工程上的主流分层是三块:

短期

三、短期记忆:把上下文窗口「管理」起来

短期记忆最简单也最脆弱——直接依赖 LLM 的上下文窗口。最朴素的做法(LangChain 的 ConversationBufferMemory):把每一次对话的原文全部塞进上下文。缺点是 token 消耗线性增长,对话一长必爆。围绕这个问题,工程上有四种经典变体:

变体机制效果
ConversationBufferMemory原文全量入上下文实现最简单,token 线性增长
ConversationSummaryMemory用 LLM 逐步总结对话token 从线性变亚线性
ConversationBufferWindowMemory只保留最近 k 轮(滑动窗口)控制窗口大小
ConversationSummaryBufferMemory远处用总结、近期留原文信息完整性与 token 预算的权衡

到具体实现层面,就是「设定上限 + 超限压缩」:

class WorkingMemory:
    def __init__(self, max_tokens=128000):
        self.messages = []
        self.max_tokens = max_tokens
        self.token_count = 0

    def add_message(self, role, content):
        tokens = count_tokens(content)
        if self.token_count + tokens > self.max_tokens:
            self.compact()          # 超限触发压缩
        self.messages.append({"role": role, "content": content})
        self.token_count += tokens

    def compact(self):
        """把较早的消息交给 LLM 做摘要"""
        old = self.messages[:len(self.messages) // 2]
        summary = llm.summarize(old)
        self.messages = [{"role": "system",
            "content": f"Earlier summary: {summary}"}] \
            + self.messages[len(self.messages) // 2:]
        self.token_count = count_tokens(summary)

核心要点就两条:设定 token 上限(如 128K),接近上限触发压缩;压缩即摘要——让 LLM 总结较早的消息,替换原文,保留最近的细节。

短期记忆的根本局限:只能看到「当下」,回顾不了三天前、更早的决策。这就是长期记忆存在的理由。

长期

四、长期记忆:向量库 + 检索

长期记忆用于跨会话持久化,技术栈是「向量数据库 + 元数据库 + 时间索引」。

写入流程:文本 → embedding → 存入向量库(附带 user_id、timestamp、metadata);检索流程:query → embedding → 相似度 top-k 召回 → 注入上下文。

class LongTermMemory:
    def store(self, content, metadata):
        embedding = embedding_model.encode(content)
        self.vector_db.upsert(collection="long_term_memory", points=[{
            "id": generate_id(), "vector": embedding,
            "payload": {"content": content, "user_id": self.user_id,
                        "timestamp": datetime.now(), "metadata": metadata}}])

    def retrieve(self, query, top_k=10):
        q = embedding_model.encode(query)
        return self.vector_db.search(collection="long_term_memory",
            query_vector=q, filter={"user_id": self.user_id}, limit=top_k)

但「全量向量检索」只是入门。2023 年斯坦福的 Generative Agents 提出了更有名的记忆流(Memory Stream)架构:所有观察按时间顺序存储,决策时用检索函数挑最相关的 Top-K 条注入上下文。检索得分由三个因子相乘得到:

因子含义实现方式
新近性(Recency)越近的记忆权重越高指数衰减函数
重要性(Importance)事件有多重要LLM 打分 0-10
相关性(Relevance)与当前查询的语义相似度embedding 计算

再往后,工程界逐步收敛出两条被反复验证的结论:

  1. RAG 即「可更新的长期记忆」:把知识库变成记忆,知识随时更新、无需重新训练模型。但它擅长事实(语义记忆),不擅长「经历和方法」,需要与其他机制配合;
  2. 记忆需要结构化:mem0 在 LOCOMO 数据集上的公开数据很能说明问题——把全量聊天历史塞进 128K 上下文 vs 用记忆系统抽取结构化事实:
指标全量塞入 128K结构化事实抽取提升
单跳 F127.138.72+42%
多跳 F118.328.64+56%
平均 token26k1.5k-94%
P99 延迟17s1.4s-91%
分层

五、记忆不止「存与取」:分层记忆全景

1. 语义记忆(Semantic Memory)——事实性知识

Agent 对世界的理解:概念、关系、属性。典型实现是知识图谱(如 Neo4j),以三元组 (主语, 谓语, 宾语) 存储,支持 SPARQL 查询与路径推理。

2. 情节记忆(Episodic Memory)——具体事件

「我过去做过的具体事件」:时间、动作、结果。核心价值是从经验中学习。实现要点是给每条事件做重要性评分,并用 LLM 生成反思(Reflection)。Generative Agents 中的反思机制强调「综合抽象」:把「今天去了图书馆」「昨天也去了」「前天在咖啡店读论文」这类观察,归纳成「Klaus 是一个勤奋的学者,经常在安静环境中工作」这样的高层规律,再反馈回记忆流参与检索。

3. 程序性记忆(Procedural Memory)——技能与 SOP

「我如何做某件事」:技能、工作流、操作规范。实现为技能库:LLM 先对任务分类,再返回对应技能定义,并统计成功/失败率,失败率高时触发技能优化。

4. 遗忘机制(Forgetting)——不是所有记忆都值得留

5. 记忆的完整生命周期:写 → 取 → 更 → 忘

生产级分层记忆的每次对话,其实是完整闭环:

1. 检索阶段:长期记忆检索(向量)+ 实体抽取(语义图谱)
   + 相似情节(情节库) + 技能匹配(程序库)
2. 拼装上下文,调用 LLM 生成响应
3. 写入阶段:短期追加消息 → 长期存储(异步) → 记录情节与反思
4. 定期:压缩短期、整合反思、执行遗忘策略

写哪些进长期记忆,是关键决策。社区里常见的重要性评分规则:个人偏好/事实 +0.3、用户明确要求记住 +0.5、与历史记忆冲突 +0.4、关联长期目标 +0.2;只有评分超过阈值(如 0.5)的消息才写入长期记忆。

工程全景

六、工程实现全景:三大编程助手与主流框架

1. 三大 AI 编程助手的记忆实践

维度Claude CodeCodexOpenClaw
记忆来源用户编写 + AI 自动积累自动生成 + 屏幕感知用户编写 bootstrap 文件
持久化方式Markdown 文件Markdown 文件Markdown + JSONL session
作用域模型4 级层级全局 + 按线程控制Agent 隔离 + 可选共享
自动化程度高高低

Claude Code:双重记忆 + 分层作用域。CLAUDE.md 类似「入职手册」,四级作用域(组织策略 → 项目指令 → 用户偏好 → 本地指令),支持路径特定规则按需加载;Auto Memory 让 AI 在工作过程中自动判断什么值得记住,写入 memory 目录,索引文件每会话加载、详细笔记按需读取。哲学很清晰:规则由人控制,经验由 AI 积累。

Codex:记忆即 Markdown + 屏幕感知。Memories 系统后台自动提炼偏好、工作流、技术栈、陷阱,写入 Markdown;Chronicle(屏幕感知记忆) 定期截屏 → OCR → 生成记忆摘要。风险也明显:屏幕内容可能含恶意指令(提示注入攻击),截图目录敏感数据可能被其他程序访问。

OpenClaw:bootstrap 文件(AGENTS.md 操作指令 + SOUL.md 人格边界 + USER.md 用户画像 + TOOLS.md 工具约定)新会话注入;每个 agent 有完全隔离的 session store,通过 QMD 跨 agent 检索实现可配置共享——隔离与共享成了连续谱而不是二选一。

2. 2026 年两大信号:官方把「记忆」做成了一等公民

3. 开源框架怎么选:mem0 / Letta / Zep / LangMem

长期记忆的工程实现,业界大致走过三代架构:RAG(纯向量)→ 结构化事实(Fact + 双时态)→ 记忆图谱(Memory Graph,实体 + 边 + 情节)。三代不是互相取代,而是层层包住——图谱层仍会走向量召回兜底。

框架核心架构定位/优势
mem0LLM 抽取 (subj, pred, obj, valid_from) 结构化事实,冲突消解后检索快速替代 RAG;token -94%、延迟 -91%(论文公开数据);2026-05 宣布 Series A 2400 万美元
Letta(前身 MemGPT)分层记忆:Core(最热)/ Archival(结构化)/ Recall(原始素材),LLM 主动换入换出最接近「记忆操作系统」,OS 虚拟内存隐喻
Zep / Graphiti双时态知识图谱(bi-temporal knowledge graph)多跳关系推理、时间旅行、可解释;DMR benchmark 94.8%
LangMemSemantic / Episodic / Procedural 三分法,LangGraph 生态集成重度使用 LangChain 生态的团队接入成本最低

选型口诀(社区共识):初创快速验证选 mem0,研究探索选 Letta,企业级多跳推理选 Zep,LangChain 生态选 LangMem,要官方记忆能力选 Anthropic Memory Tool。

落地

七、给团队的落地建议

  1. 从两层起步:不要一上来就上五层,先做「短期 + 长期」,跑通再补情节与程序性记忆;
  2. 重要性评分是关键:不是所有信息都值得记,写多错多、噪声反而干扰推理;
  3. 可解释性是底线:让用户能看到、修改、删除 AI 的记忆;
  4. 遗忘机制不可少:保留期限 + 用户删除权,合规是硬要求;
  5. 用指标评估记忆:召回准确性、遗忘合理性、跨会话一致性、token 效率——业界目前仍缺专门 benchmark,这四个维度是最常被讨论的评估面。
接入

八、别忘了:记忆的每一次读写,都发生在模型调用链路上

讲实现时容易只盯着「向量库」和「检索算法」,但别忘了记忆系统里最重的一环是 LLM 调用——摘要要 LLM、反思要 LLM、重要性打分要 LLM、事实抽取要 LLM。一次对话里,记忆层可能比主回答多调用好几轮模型,链路越频繁,越吃模型接口的稳定性与成本。

对国内团队而言,把记忆系统的模型调用接到性价比更高的后端,是一条被验证过的路径:经向量云(火山方舟官方授权 Token 服务商)获取官方 API Key,走 Anthropic / OpenAI 双协议兼容接入火山方舟模型——记忆的摘要、反思、抽取、检索重排全部照常工作,Token 成本与接口稳定性同时得到保障。

获取 API Key:https://ark.tokenrize.cn/ · 注册即享专属 Token 折扣

一句话总结:短期记忆决定「当下多聪明」,长期记忆决定「越用越聪明」,而模型接入决定记忆系统「跑得多省、多稳」。

写在最后

写在最后

回看记忆系统的演进,核心转变是:从「把一切塞进上下文」到「在合适的时候想起合适的事情」。

长上下文不会杀死记忆系统,恰恰相反——上下文越长,越需要记忆系统来筛选、分层和调度。2026 年,模型厂商把记忆做成一等公民(Anthropic Memory Tool)、开源框架把记忆做成生产组件(mem0 / Letta / Zep / LangMem)、编程助手把记忆做成默认能力(Claude Code / Codex),方向惊人地一致:

Agent 记忆的最终目标,不是「记住一切」,而是在正确的时间,想起正确的事。

关于向量云
向量云(南京)科技有限公司

面向大模型应用落地的技术服务型企业,依托字节跳动火山方舟能力,为合作方提供低折扣模型 Token、可独立部署的运营支撑平台及全链路运营支持。

火山方舟官方授权 官方 API Key Anthropic / OpenAI 双协议兼容 独享接入点 即用即扣 · 不设账期

常见问题(FAQ)

火山方舟官方 API 与官方 Key 直连 · 向量云 · 按量计费享 Token 折扣

Q1. Agent 的短期记忆和长期记忆分别是什么?

A. 短期记忆(工作记忆)是当前会话的上下文窗口,承载即时推理,通常用「消息列表 + 滑动窗口 + LLM 摘要压缩」实现;长期记忆是跨会话的持久化知识、偏好与经验,通常存向量数据库,通过 embedding 相似度检索注入上下文。

Q2. 长上下文窗口能替代记忆系统吗?

A. 不能。长上下文是 RAM,长期记忆是硬盘。Chroma 复现的 Context Rot 实验显示,同样内容只是改变组织方式,准确率就能从 98% 掉到 64%;mem0 公开数据也显示,结构化记忆比全量塞入 128K 上下文,准确率提升 42%~56%、token 降低 94%。

Q3. 记忆系统常见的分层有哪些?

A. 短期记忆(上下文窗口)、长期记忆(向量库)、外部记忆(RAG/知识图谱),细拆还有语义记忆(事实知识)、情节记忆(具体事件+反思)、程序性记忆(技能与 SOP),以及配套的遗忘机制与重要性评分。

Q4. 主流开源记忆框架怎么选?

A. 初创快速验证选 mem0(结构化事实抽取,省 token 降延迟);研究探索选 Letta(分层记忆,OS 隐喻);企业级多跳推理选 Zep/Graphiti(双时态知识图谱);LangChain 生态选 LangMem;要官方能力选 Anthropic Memory Tool。

Q5. 国内团队如何低成本落地 Agent 记忆系统?

A. 记忆的摘要、反思、重要性打分、事实抽取都依赖高频 LLM 调用,建议经向量云获取火山方舟官方 API Key,走 Anthropic / OpenAI 双协议兼容接入,在保持记忆能力的同时降低 Token 成本、提升接口稳定性。