基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
  • 知识卡片碎片时间过考点
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
    • AI 热点每日 AI 资讯与动向
AI 工作台
旧版
AIHT
内容
精选全部 AI 动态热点榜AI 日报收藏
分类
模型行业编程产品技术观点开源
更多
Agent 接入
返回首页开发者导航
AIHT
精选 / 资讯详情
8.0
热点
AI SCORE
技术实践2026-08-04 12:56

Agent记忆系统如何生长与遗忘

dev.to · AI#Agent#记忆系统#ResceneAgent
Editor brief · 编辑速览

文章将Agent记忆视为会连接、衰减和修剪的网络,重点讨论记忆筛选、检索及淘汰三类工程问题。相关实践来自开源项目ResceneAgent,并延伸到四种记忆引擎的设计思路。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

「构建你自己的 AI 智能体」系列特别篇 · 所有工程实践均来自开源项目 ResceneAgent

让我先用一句话告诉你答案:

AI 智能体的记忆并不是一个不断堆积东西的仓库,而是一张会生长、遗忘和修剪的网。

每当你告诉它一件事,它就会在线上打一个结。当两件事存在关联时,又会有一根线将这两个结连接起来。随着时间推移,这张网会变得越来越密——它会更懂你,但也可能变得更慢。

因为真正困难的从来都不是“把东西存进去”,而是以下三件事:

什么应该被记住?

需要时,如何找到它?

当它过时时,如何将它放下?

博尔赫斯笔下的富内斯记得一切,而这反而让他更难思考。当每一片叶子、每一种云朵的形状都同样清晰时,你就无法从细节中提取模式。AI 智能体也是如此——永不遗忘的记忆并不等于智慧,它更像是一次硬盘故障。

图灵在 1950 年的论文《计算机器与智能》中提出了“儿童机器”的设想:与其从零开始构建一个完全成熟的成人大脑,不如从一个更简单的基础出发,让它通过教育不断成长。今天,当我们为 AI 智能体构建记忆系统时,从某种意义上说,我们正在回答这个七十多年前提出的问题:机器经历过的事情,如何转化为它在下一次行动中所携带的经验?

为了把这个故事讲清楚,我们需要稍微绕一点路——从 HTML 开始。然后,我们会看看一种非常特别的电子元件——忆阻器。

而且,这并不只是一篇方案综述。稍后,我会详细讲述一个真实的两个月实验:我构建了一个功能完备的“数字海马体”,它能够传播激活、随时间衰减,甚至能让你逐跳观察记忆被召回的过程。之后,我又进行了一次对照实验,并亲手证明了它不值得继续保留在主线上。

构建一个系统是一种能力。亲手终结自己引以为傲的作品——那才是工程判断力。

一、从 HTML 到 Markdown:让知识彼此牵手

1991 年夏天,Tim Berners-Lee 向更广泛的社区开放了早期的 Web 系统。HTML 最神奇的地方并不是标题、段落或表格,而是链接:

<a href="another-page.html">Go to another page</a>

在纸质世界里,一页内容写完,它也就结束了。而在 Web 上,一份文档可以伸出手,与另一份文档牵在一起。

Berners-Lee 后来回忆说,他对 Web 的梦想是建立一个共享的信息空间:链接可以指向任何事物,无论它属于个人还是公众,也无论它是一份草稿还是已经完成的作品。

这个变化看起来似乎只是多了一个标签,但实际上,它相当于为知识修建了道路。过去,文档是一座座彼此隔绝的孤岛。有了超链接,它们之间第一次架起了桥梁。

但 HTML 是为网页结构和浏览器渲染设计的。如果你只是想记录一句“用户喜欢简短回复”,却不得不写成:

<html>
  <body>
    <p>用户喜欢简短回复</p>
  </body>
</html>

这就像只是想随手写一张购物清单,却先建了一座档案馆。

2004 年,John Gruber 发布了 Markdown。它的核心理念不是“提供更多功能”,而是“使用更少的符号”:即使未经渲染,原始文本也应该自然、清晰且易于阅读。

# Title
- One record
- Another record

[Link to another document](another.md)

一个 # 表示标题,一个 - 表示列表项,一对方括号则可以创建链接。至于知识库软件中常见的 [[wikilinks]]——严格来说,它并不属于最初的 Markdown 规范,而是后来由 Wiki 和笔记工具添加的扩展。不过,它们体现了同样的精神:让知识之间的连接足够轻量,使人类可以不假思索地写下它们,机器也能毫不费力地读取。

这正是 Markdown 适合作为 AI 智能体记忆载体的原因:透明、可编辑、易于进行版本控制,而且人类与模型看到的是同一份内容。

但文件格式只解决了“存在哪里”的问题。更困难的问题是:记忆存进去以后,如何把它找出来?

二、忆阻器:一种能够记住电流曾经流过的电阻

普通电阻就像一扇没有记忆的门:你推过它一百次,下一次它依然和以前一样。

忆阻器则不同。它的名称来自 memory resistor,即“记忆电阻”。流经它的电荷会改变它的内部状态,因此下一次电流通过时,它的电导会受到过去经历的影响。

可以把它想象成一条泥土小路:

没有人行走时,草会慢慢重新长出来,这条路也会越来越难以辨认。

走的人越多,土地就会被踩得越结实,道路也会变得越清晰。

下次来到岔路口时,你自然会选择那条被反复走过的路。

这不正是记忆的运作方式吗?反复被召回的连接会变得更强,长期不用的连接则会逐渐减弱。

1971 年,Leon Chua 根据电路变量之间的对称关系,推导出了忆阻器这一“缺失的电路元件”。2008 年,Strukov 等人发表了《The Missing Memristor Found in Nature》,提出了后来广为人知的物理模型。忆阻器之所以吸引神经形态计算研究人员,恰恰是因为它的电导能够保留历史:单个器件既可以“存储”,又能表现出类似突触权重变化的效果。

为什么我把它放进记忆引擎

Prism 的早期版本拥有一个使用 C++17 编写的向量存储原型:

Vector Storage
  + HNSW Nearest Neighbor Search
  + Memristor State
  + Chaotic Evolution

这个想法很吸引人:不要让向量存储成为一排永不变化的抽屉,而是让每条记忆都像一个电子突触一样运作——拥有电导、磁通和不断演化的状态。一次访问并不只是“找到它”,还会改变它。时间流逝也不只是增加一个时间戳,还会让记忆缓慢漂移。

换句话说,普通的向量存储就像一张地图:道路一旦画好,就会一直留在那里。忆阻器模型则更像一座真实的城市:人流会把小路踩成主干道,而废弃的道路则会被杂草吞没。

最终,我砍掉了这个想法。不是因为它不够酷,也不是因为它无法工作,而是因为它把系统推向了另一种复杂性:C++ 向量层、C API、Go 服务、混沌状态、索引结构以及上层记忆图,都必须协同演化。在试图模拟“像大脑一样运作”的过程中,整个工程本身反而长成了一个难以维护的大脑。

但忆阻器留下了它最重要的遗产:

记忆不应该只是被存储。每一次使用,都应该改变它在下一次被召回的概率。

后来,当我使用 Go 重建 PrismD 时,我放弃了 C++ 原型,但保留了这个思想:节点能量会随时间衰减,而访问会强化它。甚至连接两条记忆的突触,也拥有自己的衰减率。硬件隐喻被移除了,但真正有用的动态机制得以保留。

这也是我第一次真正理解:做减法并不意味着删除一切,而是移除昂贵的形式,保留有效的原则。


三、四种记忆引擎:从翻书到织网

市面上充斥着各种 AI 智能体记忆方案的名称:向量存储、RAG、知识图谱、语义网络、长期记忆、情景记忆……这些术语就像一层烟幕。

剥去这些标签,常见的实现方式大致可以归为四类。

1. 外挂式 RAG:给你的 AI 智能体配一名图书管理员

RAG 是 Retrieval-Augmented Generation,即检索增强生成。

它不会把整座图书馆都塞进模型的大脑,而是派一个检索器去书架上找出最相关的几页,然后把这些页面交给模型,让它回答问题。

User asks: "How did we fix that login function last time?"
        ↓
Retriever searches the document store for relevant fragments
        ↓
The matched fragments are handed to the LLM
        ↓
LLM generates the answer combining the question and retrieved material

2020 年,Lewis 等人将 RAG 描述为参数化记忆与非参数化记忆的结合:模型的参数就像“它已经记住的知识”,而外部索引则像一座可供它随时查阅的参考图书馆。

因此,把 RAG 描述成“每次都从头重读你的整本日记”并不完全准确。更合适的比喻是:在开口回答之前,你先让图书管理员根据关键词、语义或元数据,从档案中取来几页相关内容。

它的优势很明显:资料可以随时更新,知识库也可以很庞大。缺点同样明显:如果检索时找错了书架,那么回答再巧妙也于事无补。与其说 RAG 是对用户的持续理解,不如说它更像是“按需查询”。

2. 图扩散:从一盏路灯,点亮整片街区

第二种方法将记忆建模为图:每条记忆都是一个节点,节点之间通过关系相连。

          [Transformer]
            /       \
           /         \
    [Attention] —— [GPT]
           \         /
            \       /
      [Scaled Dot-Product]

当“Attention”节点被激活时,能量会沿着边扩散,唤醒 Transformer、GPT 和 Scaled Dot-Product 等相关概念。这类似于 Collins 和 Loftus 在 1975 年提出的语义记忆“扩散激活”理论:一个概念一旦被触发,激活就会沿着联想网络传播。

这就像夜晚的城市。你点亮一盏路灯,电流便沿着道路传递,逐渐照亮周围的街道。

它的好处是能够发现间接关系:A 与 C 没有直接连接,但 A 连接 B,B 又连接 C,因此系统依然能够找到通路。

代价则来自网络本身:如何对节点去重、如何设置边的权重、激活应该传播多少跳、如何衰减旧关系、如何修复损坏的图……规模一旦扩大,你维护的就不再是一本笔记,而是一座城市的交通系统。

3. 纯 Markdown:给你的 AI 智能体一盒索引卡片

第三种方法最简单:记忆就是 Markdown 文件。需要时加载,不需要时跳过。

memory/
├── index.md          ← Lightweight directory: links + one-line summaries
├── preferences.md    ← User preferences
└── project-rescene.md← Project knowledge
Task: "Change the login page"
      ↓
Read index.md, hit [[project-rescene]]
      ↓
Read the relevant memories in project-rescene.md
      ↓
Inject into context, agent starts working

如果说 RAG 是图书管理员,那么纯 Markdown 就是一盒索引卡片。你不需要数据库控制台,也不必猜测黑箱里装着什么。打开文件,AI 智能体记住的一切都一目了然。错误可以修正,过期内容可以删除,版本变化也可以通过 Git 跟踪。

它的弱点同样直观:链接通常只能把你带到下一张卡片,并不会自动进行复杂的多跳推理。卡片数量较少时,它轻巧得令人愉悦;当卡片堆满整个房间时,如何找到正确的那一张便成了新的问题。

4. 结构化 Markdown:在每张卡片上盖一个“置信度”印章

结构化 MD 并没有抛弃 Markdown,而是为每张卡片增加了几个字段:来源、类型、置信度、最后更新时间和适用范围。

- Content: User prefers short replies
  Confidence: High
  Source: Confirmed over multiple conversations
  Last updated: 2026-08-02

- Content: Project may use Vue 3
  Confidence: Pending verification
  Source: Single mention by user

纯 Markdown 就像便利贴。结构化 Markdown 则像是把这些便利贴贴到白板上,再用不同颜色标记:“已确认”“待验证”“可能已过期”。

这一点很重要,因为记忆不仅会丢失,也可能会撒谎。并非出于恶意,而是因为它可能把一次性事件误认为某种规律,把昨天的事实当成今天的真相,或者将模型自己的猜测与用户真正说过的话混为一谈。

元数据就是记忆的“营养成分标签”:它会告诉 AI 智能体,这条信息来自哪里、有效期有多长,以及使用它是否安全。

当然,标签划分得越细,维护成本就越高。如果你还要求 LLM 定期合并、去重、降级和淘汰记忆,那就相当于雇了一名档案管理员:房间确实会更整洁,但档案管理员需要领工资,而且也可能把东西归错档。

IV. 把四种方法放到同一张表中

这里并不存在“技术越复杂就越好”。

为了十条偏好构建知识图谱,就像为了跨过一条小溪而修建一座跨海大桥。把数百万份文档塞进 Markdown,则像是用便利贴管理一座国家图书馆。

记忆引擎没有唯一答案,只有与你的规模、任务和维护能力相匹配的答案。


V. 我的关键实验:我如何判处自己的“数字海马体”死刑

如果只看到最终方案,你可能会以为我选择 Markdown,是因为图引擎太难,或者 PrismD 从未真正运行起来。

事实恰恰相反:PrismD 是在完全投入运行后才被判处死刑的。

1. 我真的构建了一个“数字海马体”

PrismD 将记忆建模为加权有向图:

节点:一条记忆,包含文本、情绪、重要性和能量;

突触:记忆之间的关联,分为联想、时间、语义和情节四类;

集群:逻辑区域,包括用户画像、代码工作、工具日志和会话;

域:为不同用户或角色设置的物理隔离空间。

它的记忆生命周期并不是简单的 CRUD,而更像生物的新陈代谢:

ENGRAM write
   ↓
DRIFT decay
   ↓
LOOM recall and strengthen
   ↓
COMPILE compress
   ↓
CONSOLIDATE merge / discard
   ↓
PRUNE active forgetting

甚至连突触也会遗忘:

Effective Weight = Initial Weight × exp(-decay_rate × time_since_last_use)

一条长期未使用的连接,会像废弃的铁路线一样逐渐锈蚀。它每被使用一次,就证明自己依然有价值。

2. 真正困难的并不是“关联”,而是“交叉污染”

图扩散很容易做出惊艳的演示:点亮“初恋”,它便会唤醒“雨天”“火车站”和“那首歌”。但在生产环境中,更危险的问题是:那些本不该产生关联的事物,也会沿着边蔓延。

例如,工具错误不应该污染用户画像,临时会话也不应该污染长期项目知识。

因此,我构建了一个显式的集群间传播矩阵:

ToolLog → UserBase = 0.05
CodeWork → UserBase = 0.8
UserBase → Session  = 1.0

当工具日志向用户画像传播时,其能量会被压缩至原来的 5%。这不是检索后的补丁式过滤器,而是将“记忆边界”直接写入传播动力学。

这个教训至关重要:记忆系统不仅需要召回率,还需要防止污染。记错一件事,往往比彻底忘记它更加危险。

3. 我甚至将记忆行为可视化了

PrismD 的可视化并不只是一份节点列表。你可以右键单击一条记忆,选择“追踪扩散激活”,然后看着源节点亮起,接着是第一跳,再到第二跳——就像电流在黑暗的神经网络中传递。

节点还会实时变暗。前端复现了后端的指数衰减公式,首次让“遗忘”变得肉眼可见。

这让我确认算法并非黑箱:为什么某条记忆会被召回、能量来自哪里、在哪一跳发生了衰减——这一切都可以观察。

但“可解释”并不等于“值得使用”。再漂亮的仪表盘,也无法回答这套架构的投入产出比问题。

4. 最终,我用对照实验推翻了自己

我并不是仅凭感觉就说“图太重了”。我先用零依赖的 Python 对 SpreadActivation 进行了一比一复现,并逐项验证:

能量是否严格按照 0.9 × 0.85^hop 衰减?

ToolLog → UserBase = 0.05 是否真的能够阻止污染?

图扩散是否能够使用更少的 token 覆盖真实基准答案?

经过 DRIFT 后,低能量节点是否能按照阈值被正确剪枝?

四项检查全部通过。换句话说,图扩散是正确的。

随后,我使用同一份真实语料和同一套真实基准答案,让三种方法正面较量:

获胜的并不是最像大脑的 LOOM,而是最简单的 STRUCT_MD。

与全量注入相比,图扩散确实能够唤醒间接关联,也确实节省了 token。但放在完整的工程环境中,它在召回率上的边际优势,不足以抵消图结构、边权重、集群间矩阵、衰减状态、持久化、LLM 驱动的组织整理以及多语言运行时所带来的维护成本。

结构化 MD 足够快、足够透明,易于复现,也易于测试;出现问题时,只需要打开文件检查即可。

因此,投入两个月开发的 PrismD 最终被归档。记忆系统的主线收敛到了一个更简单的方案。

这并不是“项目失败”,而是一次完整的架构实验:

首先证明复杂方案确实有效。然后再证明,即便如此,它依然不值得采用。

许多项目只做了前半部分——让演示跑起来,然后宣布胜利。真正的工程判断力体现在后半部分:它带来的收益,是否大到足以让整个团队永远为其支付维护成本?

这次实验后,我保留下来的演进路径是:

纯 MD
  ↓ 首先:“可见且可编辑”
轻量级索引与反向链接
  ↓ 接下来:“可查找”
来源 / 置信度 / 时间——最小化元数据
  ↓ 最后:“可信且可过期”
只有当真实数据证明有必要时,才引入向量搜索或图关系

这就像种树:先让它活下来,再修剪;先让树干长起来,再决定在哪里嫁接。不要在种下一株幼苗的第一天,就给它装上卫星监控和城市级排水系统。


VI. 我踩过的坑:记忆系统最大的敌人不是遗忘,而是混乱的记录

1. 不要把“机器可解析”误认为“人类可维护”

JSON 非常适合交换结构化数据。但当记忆需要长期阅读、手动编辑和版本对比时,Markdown 往往更加友好。格式应当服务于场景——不要把任何一种文件类型奉为圭臬。

2. 不要让你的 AI 智能体记录一切

每次工作流运行时都自动写入,很快就会让记忆存储变成阁楼:旧快递箱、报纸,还有一台舍不得扔掉的坏风扇。真正需要的东西反而再也找不到了。

自动记忆至少需要设置一道门槛:它是否重复?是否稳定?是否经过用户确认?对未来的任务是否有用?否则,所谓“增长”不过是垃圾堆得更高而已。

3. 不要过早迷上图引擎

图很漂亮,多跳推理也很诱人。但每增加一种关系类型,就会增加一种需要解释、更新和测试的新状态。先用最简单的方法运行起来,让真实需求浮出水面,再决定复杂性应该放在哪里。

4. 不要低估索引

index.md 看起来只是一份目录,实际上却是记忆系统的门厅。如果门厅清晰,AI 智能体就知道该推开哪扇门。如果门厅堆满杂物,那么再豪华的房间也无法抵达。

5. 不要只记录结论——还要记录来源

“用户喜欢蓝色”和“用户在三个不同项目中都主动选择了蓝色”不是同一种记忆。来源决定可信度,时间决定它是否已经过期,作用域决定它能否迁移到下一个项目。

6. 不要因为算法正确,就认为架构也正确

PrismD 的扩散、衰减和集群隔离都通过了单元测试。但完整系统最终仍然输给了结构化 MD。一个齿轮运转得再漂亮,也不代表整台机器值得建造。

7. 不要把沉没成本包装成技术信念

最危险的想法是:“我们已经做了两个月,再坚持一下吧。”仅仅因为作者舍不得放手,代码并不会自动变得值得维护。当实验已经回答了问题时,归档比固执更专业。

VII. 结语:好的记忆会让 AI 智能体随着时间推移越来越像你的伙伴

回到开头:AI 智能体的记忆是一张不断被修剪的网。

RAG 解决的是“去哪里寻找材料”。图扩散解决的是“相关概念如何相互唤醒”。纯 Markdown 解决的是“如何保持记忆透明”。结构化 Markdown 解决的是“这段记忆是否可信”。

它们不是四支相互交战的军队,而更像四种不同的工具:书架太大时,请来图书管理员;关系太深时,铺开一张地图;需要透明性时,使用索引卡;需要可靠性时,加上标签。

PrismD 最终留给我的答案,不是“图扩散毫无用处”,也不是“Markdown 永远最好”。它留给我的是一个更简单的原则:复杂性必须用真实回报换取自己的生存空间。

真正成熟的记忆系统,或许不是记得最多的系统,也不是看起来最像大脑的系统,而是知道自身边界的系统:

重要时写入。需要时命中。该放手时放手。

如果你更想看看这种记忆理念如何落地到一个真实的 AI 智能体中——索引如何解析、上下文如何注入、记忆如何参与下一项任务——欢迎在 GitHub 上查看 ResceneAgent 的完整源代码:

🐙 GitHub:Rescenix/ResceneAgent 如果这个方向引起了你的共鸣,欢迎点个 Star、提交 Issue,或直接浏览代码。你的反馈将成为这个 AI 智能体下一段“记忆”的起点。

参考资料与延伸阅读

Alan M. Turing,《Computing Machinery and Intelligence》,Mind,1950。来源存档:剑桥大学国王学院 The Turing Digital Archive

Tim Berners-Lee,《The World Wide Web: A very short personal history》:W3C

John Gruber,《Markdown: Syntax》:Daring Fireball

Patrick Lewis 等,《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》,NeurIPS 2020:论文页面

Allan M. Collins 与 Elizabeth F. Loftus,《A Spreading-Activation Theory of Semantic Processing》,Psychological Review,1975:DOI: 10.1037/0033-295X.82.6.407

Jorge Luis Borges,《Funes the Memorious》,1942。引用该作品,是因为它从文学角度洞察了“无法遗忘”如何阻碍抽象。

ResceneAgent 项目源代码与文档:GitHub 仓库

Leon O. Chua,《Memristor—The Missing Circuit Element》,IEEE Transactions on Circuit Theory,1971:DOI: 10.1109/TCT.1971.1083337

Dmi

Original source

本文由 AI 翻译整理,来源 dev.to · AI,原文版权归原作者所有。

阅读原文
上一篇
用Dragonfly加速大规模模型分发
下一篇
迁移 AgentCore 前重算成本模型

资讯速览

dev.to · AI · 2026-08-04 12:56

AI 评分 8.0 / 10

相关标签

#Agent#记忆系统#ResceneAgent

继续阅读

  • Zapier Connectors:让AI Agent免费可靠连接外部应用
  • 用Dragonfly加速大规模模型分发
  • 迁移 AgentCore 前重算成本模型
  • 用 Bedrock Nova 驱动 Claude Code
  • YC开源多人协作Agent运行框架QM