

我的三个智能体框架,干不同的活。一个跑执行hermes,平时整理东西、跑流程;一个管写作openclaw,公众号的稿子多半它定稿;还有一个写代码,是我手搓的codeagent。它们共用一套记忆,记在一个叫OptMem 的库里。这套东西用得挺久,一直还行,存得下也找得回。直到东西越记越多,毛病才一个接一个露出来。而且都不是模型的问题,全在"怎么记"这套机制上。
智能体自己脑子里那块记忆是常驻的,每次都要带着,容量小得可怜,两千来个字符到头了。满了怎么办?新东西进来,把旧的挤走。我纠正过好几回的事,回头去翻,常常已经被后面排进来的挤掉了。不是它不肯记,是那块地方本来就那么大,装不下那么多,还想都记下。
后来我又建了独立的共享OptMem,一个挂在硬盘上的大库,绕开这个容量限制。库里头的记录按时间往末尾一条条追加,存在一个叫 LOG 的文件里,攒多了再往上层收拢,压缩成摘要树。它检索不靠满库翻,是带着词去搜。我原指望它能按意思来,用久了才看清,那套按意思去搜,一直不顶事,真正出结果的是死抠字面。

PART 01

暴露的问题

只进不出,不会修改旧记录
记录多了,头一个麻烦是这个库只进不出、只会往末尾加,不会回头改。有一回我把后端端口从8080搬到9090,新的记在了末尾,可写8080那条旧的还躺在库里。再问端口,它把新旧的都捞上来,旧的还往往排前头,因为它写得齐整。它照旧记录告诉你8080,你还挑不出理,因为它记的就是这样。
检索不区分时间新旧
说完只进不出,后面吐槽一下它的检索不管新旧。同一个事,昨天记的跟半年前记的堆在一起,谁字面像谁排前,时间在排序里根本不算数。你问最近进展,它把半年前的老黄历也端上来。这个我去翻了翻资料才搞清,是结构上压根没给时间留位置,也跟检索是什么模型毫无关联。
跨会话无法自动接续记忆
最大的问题在智能体的跨会话。这个会话聊得再热,一开新会话它又像头回见你。因为新会话只自动带上脑子那块小记忆,OptMem 这种大库要它主动去查才看得到,它不查,那库就跟没有一样。上一个会话定的方案、卡住的点,全丢在旧会话里,它自然也就想不起来。
其实我分层的架子搭得非常好了,热的热、冷的冷,每个项目还单配了记忆块,切过去能整包找回它的上下文。可架子是死的,中间缺了接水管。会话里聊的,没有一条通道自己落进库,关了就没了;新会话也不会主动去把那块项目记忆拖出来,全指望它自己想起来。框架摆在那,没人推,等于没接上。
要收拾,就是把这几条断的水管一条条接上。每条都不难,难在要知道断在哪。

PART 02

调整方案

处理旧记录:更正标记+查询层降权
先说只追加、不能改这条。库里头的记录一落地,就没法回头改了,只能往后加。所以一旦记错了,或者事情变了,就再追一条新的,让它把旧的那条盖过去。旧的不删,是留着当历史,往后还能查当初为什么这么记。可它不能再算数了,得让它退下来,别在回答问题的时候顶在最前头,冒充现在的事实。
怎么让旧条退下来,得说清楚。每条新记录的开头标一个〔更正〕,正文里点出它纠正的是哪一条旧的。查询返回之前,先把这些新旧配成对,认出来的旧条,就给它降权、做个标记,再排顺序。这么一来,它还在库里,但不代表当下的答案了。这套配对和降权都在查询这一层做,底层那个 LOG 文件我并没有动。
解决时序问题:增加时间衰减权重
时序的毛病,办法是给检索加个时间衰减,同一个话题,越靠近现在权重越高,自然顶到前面,半年前的自然沉下去。
区分不同来源:按前缀做域过滤
三个智能体记的东西,得分开,不能糊成一锅。它们的记录本来各带前缀,跑执行的[hermes],写代码的[code],管写作的[openclaw]。我把前缀接到检索上,能按域过滤,问代码的坑只查代码,不会把写作的规矩也翻出来。默认全查,要分开时才指定。
优先级区分:按可信度分级,锁定红线记忆
有些记录得排在别人前头。我按可信度给记录分了档,带证据的、是更正的、尤其标了红线的,档高,检索打平的时候让它们先上,普通闲聊的不抢位。
这里头最要紧的一档,叫红线记忆,我给上了锁。标了红线的纪律,哪怕后面来条更晚的更正,也不能随便把它当旧账盖掉,除非来的是条更新的红线。它也不跟着时间衰减慢慢沉底,得一直顶在上面。因为这些是不能忘的,忘了就重蹈覆辙。
解决跨会话问题:会话收尾生成交接单
跨会话那头,我给会话加了收尾。要结束时,把这一段做了什么、卡在哪、下一步怎么走,收成一张交接单,存进这个项目的记忆块。下回再开这项目,先把单子念出来,就知道从哪接着干。人换班得交接,换会话是同一个道理。这招最省事也最见效,以前我隔两天回来,得从头交代背景,现在它自己先把上次卡在哪儿说出来。

PART 03

上线与迭代原则

改完别急着收工,还得防自己改砸。社区更多的研究都在提醒,很多"加了记忆就变强"的说法站不住,更可能是评测顺序碰巧。我加了个评测门,拿一组固定的查询考,动完记忆前后各跑一遍,确实见好才留,没见好就退回。省得我改得热闹,其实是在帮倒忙。
这段时间,网上现成的记忆项目我没少翻,Mem0、HippoRAG、Zep,还有个叫 ai-memory 的。它让我搞明白的一件事是,记忆的底子该是一堆能打开看的文件,能手改能搜,别锁在谁也读不懂的黑盒里。对于它们,我从不全搬,只取那个理。能缝进我自己系统的就缝,缝不进的也不硬塞。
这一整套,是分着一步步落的,每次只改查询那层的一点,改完先编译,错了就回退。真正的活库从头到尾没动过,都是先整份拷到临时目录,在副本上造几条旧事实配一条更正,跑一遍看新的是不是顶到最前、旧的有没有被盖上已更正的戳,验过了才把改好的放回去,副本验完删掉。
改完这一轮,三体共用的这套记忆算真通了。它会撕旧账、会按时间排、会分家、会记得哪条碰不得,换会话也知道自己上次干到哪。这一轮没换脑子,改的是记事的规矩。以前只会写,写满贴新的;现在会管了,管住了,才谈得上越用越懂你。