【Harness Engineering】Memory 记忆
一点思考,共勉
好久没写 blog 了…
翻了一下上篇文章,大概过去了半年时间;因为这半年对于"要不要继续手搓blog"这件事,产生了深深的动摇…
26年真的可以算做Agent元年了,从虾到CC,至少从我个人角度看,每天的AI日报、论文解析、看源码、代码生成…
已经完全离不开这些"数字分身"了…
并且这半年我几乎都在搞Agent,确切说是 Harness Engineering,所以对于Agent领域迭代的速度和发展更深有体会;
我想过让虾把每周喂给它的思考整理成一篇文章,甚至考虑过搞个数字人发到TT或B站;
但意义呢?这还算我的输出、我的沉淀吗?
完全基于概率的序列输出,你发我发大家发,发出去很多篇blog和论文,信息越来越同质化、低质化;
再过几年,预训练连像样的语料库都快没了…
直到最近面了一个实习生,被问到"关老师,生产力都外包给AI了,你们平时还干什么?"
我愣了一下,不单是因为问题本身,而是身在其中深知大模型的发展,同时也联想到公司持续的明里暗里的蒸馏你,竟一时语塞…
想了一下,已经习惯了让模型去干活,让它总结一下这个、结构化一下那个,好像有一段时间没有深度思考过了,不觉得后脊发凉…
我们的知识获取,也就是input入口,已经充斥着碎片化的低质信息了,如果连知识输出,output出口,也让模型替代了,那不就真成工具人了么?
所以重新思考了一下手搓的意义;
不在于"打了哪些字";而在于强迫自己把脑子里零散的东西组织成别人能理解的内容,让思考闭环!
这个过程本身就是在检验你对raw input的消化程度,而让模型来写blog,跳过的恰恰就是这个过程;
所以本质不是"要不要写",而是"检验有没有值得梳理和结构化的真实思考";
有的话就写;没有的话,还是别浪费水电去NTP了…
Harness Engineering : memory 记忆
后续的 blog 原本打算按草稿箱里拟好的顺序,继续写模型推理那条线;
但这半年都在做 Agent Harness,还是先写点贴近实际工作的东西吧;
今天先从"记忆"聊起,不会让CC画 fancy 的图了、也不会让模型总结润色了,想到什么就写什么;
首先按马斯克的第一性原理进行拆解(最近他随川子来北京,先用这套方法论),记忆数据无非就是:怎么来 → 怎么存 → 怎么找 → 怎么维护
对应四个阶段:
- 记忆捕获
- 记忆存储
- 记忆召回
- 记忆管理
记忆捕获
实践中完全可以靠 Hook 来实现;
现在的Agent,不论是成熟的开源(xxClaw)还是自研的,都会内置几十种 Hook,这些 Hook 天然就是记忆的接入点;
比如:
- PostToolUse:工具执行完毕后,捕获执行结果(专业点叫Observation)
- SessionEnd:session 结束后,沉淀本次对话内容
- …
所以用好 Hook,记忆数据的接入并不难
记忆存储
但在真正持久化之前,还有不少前置工作要做:数据脱敏、去重、过滤,不能无脑什么都存(比较共识的东西就pass了)
在决策要做持久化之后,可以按现在比较主流的四层模型来组织:
- Working Memory:当前工具执行上下文
- Session Memory:跨轮次的对话状态
- Semantic Memory:语义层面的沉淀
- Procedural Memory:流程化的经验与习惯,甚至可以搞成tool、skill
这套四层结构现在基本已经是标准了,不过可以在此基础上进一步抽象,抽象出更高维度的记忆;
在存储介质这边,一份数据至多差不多要存四份:
| 形式 | 用途 |
|---|---|
| raw input | 保留上下文完整性 |
| 关键词倒排索引 | 支持后续 BM25 检索 |
| Dense 向量 | 支持后续语义召回 |
| Graph图 | 支持多跳推理 |
记忆召回
其中,BM25 + 向量 的双路召回大家都在用,但Graph图索引,用好还是挺难的,用着用着就腐化了,属于典型的高门槛高收益高难度(有机会再单开一篇讲讲);
所以理想化的是三路召回 + RRF,如果有时间、资源的话,还可以考虑再加个Cross-Encoder做精排;
记忆管理
这是最难的部分,也是最容易出问题的地方,是区别于给老板看的demo与真正线上产品的分水岭;
写入侧:
- 向量索引入库前,需要先判断和存量记忆的关系;是否可以归入某个已有记忆簇,还是新开一簇
- 知识图谱,提取 entity 和 relationship 之后,要做去重合并,如果出现冲突的 relationship,怎么解决该留谁
- 是否保留多版本,版本链该如何管理
- …
运维侧:Agent 也需要类似人脑的两个机制:
- 整合机制(也就是"做梦"):每天凌晨跑的,把 Working Memory 和 Session Memory 里沉淀下来的内容提炼升格,写入 Procedural Memory,也就是碎片化、结构化整理,哪些该强化、哪些该弱化
- 遗忘机制:旧版本记忆、以及访问频率低的记忆,可以按记忆强度进行衰减(简单实现可以是:7 天未访问,强度 × 0.9;30 天未访问,强度 × 0.9²…)以此类推,让冷记忆自然退出检索视野
小结
以上就是我对 Agent 系统中「记忆」模块的一些工程化思考(时间也精力有限,没有深入每个细节)
记忆可以算是 Agent Harness 中持续学习能力和个性化表现的核心了,但其复杂度也决定了区分「玩具 Demo」与「可用产品」;
但如何落地实践还是要做权衡,毕竟,思考的闭环,最终还是需要落到人来把控。
