WARNING本文内容不含 AI 润色,所以有很多的口语化表达,不保证内容的准确性,并且具有一定主观性
近日因工作原因,调研了一些现有的 AGENT Memory 项目,我觉得可能写出来能够帮助一些工程上的朋友,在部署服务时可以对市面上的一些 memory 产品进行判断,从而自己评估是否符合需求,废话不多说了,开始介绍。
hy-memory
Intro
最初是为 OpenClaw 设计的,但是我觉得有一些设计还是挺有意思的,这里就单拎出来分享一下,首先设计了七/八层记忆(取决于你是否算上 L0)。

本身也是分级设计,根据用户需求分层设计,三个等级:lite,pro,ultra,只有 ultra 时才启用图数据库,每一种模式启用的记忆层级也各不相同。
上四层是 vector-db 存储的向量,在记忆读取的时候做召回(当然实际在搜索的时候有 tag 的对比,没错,每一条记忆也会打 tag),下三层用的是图数据库(比如 Neo4j 这种)主要存储的是 entity 之间的关系,然后有一个 evidence boost 的算法设计,实体之间的关系从 L2 FACT 处获取,FACT 的数据可以理解为图数据之间的 evidence,如果 evidence 数量越多,召回越优先。
reconciler
有一个比较有意思的设计是 reconciler,看上去很像一个链表,双向链表:

supersedes 指针 -> 建立链(writer 判断)-> 然后 reconciler 解决冲突
-> if “删除” 修复链(解决链表CRUD问题) -> ID映射、持久化等主要解决的问题是,记忆的更新和迭代性,官网有一个例子,我这里举一个简单的,比如一个用户以前喜欢喝咖啡,现在喜欢喝茶,那么 LLM 判定这是否是一个更新的状态还是链式的变化,这里有一个超长的 prompt,用 AI 总结了一下主要的依据是如下:

Reader
WARNING代码中有一些瑕疵,并没有把 L4 层的记忆写进 profile 分组,最终会回落到 normal 分组。

检索和召回方式主要有 hybrid,hybrid_tag,hybrid_v2 这写,其中前两者用的是 bm25+vec 的双路 RRF1,k 是固定值,rank 越高分母越小,整个数就越大,越容易召回。bm25 是他们自己手搓实现的,感兴趣可以自己看代码。v2 bm25 处使用的是 Qdrant 的 text_search,ultra 的话还会有图召回。
Graph
读取 VDB 中的 FACTS,归纳生成 graph memory 如 L6_SCHEMA / L7_INTENTIONFACTS 作为 evidence,保留一个引用, 作为一种 bridge 来链接这两类数据形式在召回的时候,Graph 可以作为独立通道参与语义召回,有 evidence boost 相关的算法进行排序,贴一张 AI 的流程图,感觉是个常规流程,不赘述。

SDK output
最后会输出三块内容,可以根据你的产品需求自行选用。
profile -> 放到 system/developer prompt,作为长期用户背景 normal -> 放到当前 query 的相关上下文 proactive -> 放到提醒/建议/待办触发逻辑,不一定直接塞进回答Conclusion
总体来说像 mem0 + graphiti,还是十分可用的,有些设计思想我认为是很有意思的,但是并没有专门的代码仓库那样方便获取和维护(但是可以下载下来解包获取,注意遵守协议)。
TencentDB-Agent-memory
这是一个开源项目,个人感觉设计更适合生产级(有对 TCVDB 的支持,虽然我不用),虽然也有 OpenClaw 和 hermes 的支持,但是从最新更新处可得,后期有独立服务的开发打算,也适合接入到个人 Agent 服务或者手搓的 agent。

mermaid
这里是我认为比较有意思的点,agent 的压缩也一直是业界的一个难点,这里用 mermaid 来表示 tools 调用,可以让 LLM 更直观的理解过程的工具调用,同时压缩了 tokens 对于上下文的占用。很有巧思的设计。
其他
记忆也采取了一个分层的设计,见仓库 README 插图,其中下两层的数据格式是 Json 字段,上两层为 markdown 文档,底层记忆向上层提供素材,很标准的金字塔结构。

不使用图数据库,使用支持向量的数据库就够了。官方使用的是 sqlite-vec 作为本地记忆存储。markdown 对于公司的多用户 agent 产品不太友好(虽然可以上 COS 解决,后续决定存储为文本到数据库,由于数据库用的是 PostgreSQL,后续也 vibe 了一些代码适配 PG,还在调试中。
TIP其实确定了你的数据库设计表字段等,vibe 很简单,本身项目的 server 是支持 http 的,如果你需要别的调用方式自己添加。
结构整体不难,L0 记忆是 raw log,只记录 user 和 assistant 的 content。L1 的提取有个定时任务,L0 6 轮对话后也会触发一次,由模型自主判断是否抽取记忆。L2 再从 L1 进行场景提取,L3 再提取人格。最后拼到 Agent prompt,拼接这里理论上 L1 以上都进行拼接,在我本地的实际应用层面上只调取了 L3 内容。
感受
我的配置chat model: kimi-k2.6
memory model: gemini-3.5-flash
这个项目的 agent memory 设计的很克制,可配置项很多,总体感觉也很轻量,没有上图数据库,memory 作为 agent 的补充体验本身就应该是无感的设计,claude code 的 memory 设计也很克制。虽然现在是 pre-release 版本,还是有很多 server 上的设计不善完全,但是掌握一点 vibe coding 后应该能改成你需要的样子。
总结
学术界还有一些类人脑的记忆就不谈了,感兴趣的朋友可以阅读相关论文。关于记忆这里主流的设计和 RAG 类似,大多也是 embedding 成向量后然后算余弦相似度召回。然后再添加一些人工的设计或者范式,填入到 prompt 里给 AI 用户的背景 or 喜好等。这两个项目既看到了 supersede 的链表设计来表达记忆的更新迭代,也看到了 mermaid 对上下文工具压缩的设计,在我看来都是很有意思的设计。
mem0 和 graphiti 没有用过,不过多评价了。
Footnotes
-
RRF: ↩