长期记忆服务 / Memory Service
让 agent 跨会话记住事实、偏好、知识和经验,不必每次从零开始。
看 add/search/update/delete 是否形成完整链路,以及是否有作用域、来源和冲突治理。
LLM fact extraction + embedding + vector / graph / SQL + metadata filtering。
有长期存储不等于好记忆;写入门控和污染治理才决定长期效果。
筛选标准限定为已经实现 agent memory 能力的开源项目:至少具备记忆写入、持久化存储、召回检索与上下文注入中的关键链路;仅具备会话压缩、任务状态保存或通用 agent 编排能力的项目不纳入主列表。
核心样本包括 memory-first 项目与明确提供 agent memory 模块的框架实现。mem0、Letta、Cognee、MemOS、EverOS、LangMem、A-MEM 和 Graphiti 属于主线样本;CrewAI、AutoGen、LlamaIndex、Agno 属于框架内 memory 实现样本;LangGraph 仅作为 long-term store 与 checkpoint 边界参考。opencode、Pi agent、Codex 类工具、Harness-1、AutoGPT、CAMEL 不作为 agent memory 项目主例,原因是其主要能力分别落在 coding session、search harness 或 agent platform,而非完整 memory 系统。
很多项目看起来都在做 memory,但其实落点不同。更稳的读法是先把它们归到几条路线里: 哪些解决长期事实,哪些解决工作流状态,哪些解决 coding agent 上下文续航,哪些在做经验和 skill 演化。
让 agent 跨会话记住事实、偏好、知识和经验,不必每次从零开始。
看 add/search/update/delete 是否形成完整链路,以及是否有作用域、来源和冲突治理。
LLM fact extraction + embedding + vector / graph / SQL + metadata filtering。
有长期存储不等于好记忆;写入门控和污染治理才决定长期效果。
把 memory 做成本地可读、可审计、可索引的长期运行时,而不是只提供远端 API 或单一向量库。
重点看 memorize/search/cascade/prompt slots 如何衔接,以及 Markdown、SQLite、LanceDB 三层如何保持一致。
Markdown-first memory cells + SQLite metadata/state + LanceDB hybrid retrieval + cascade worker。
本地优先路线的价值在可控和可迁移;代价是需要管理索引同步、文件变更和运行时维护。
把 core memory、archival memory、recall、summary、context budget 拆成不同层。
看哪些内容常驻 prompt,哪些内容外部检索,哪些内容由 LLM 决策写入或更新。
Core blocks + archival passages + recall flow + context window calculator。
层次越清楚越可控,但 source of truth 和跨层同步会变复杂。
在 agent framework 中提供可插拔 memory 接口、记忆块或长期记忆管理器。
重点核查接口是否覆盖写入、召回、上下文注入,以及是否支持长期记忆更新。
Memory interface + chat store + vector/fact blocks + adapter backend。
框架项目本体不等于 memory 项目;只有明确 memory 模块才纳入实现案例。
把人、事件、项目、关系和时间变化存成图,而不是只存相似文本块。
看实体抽取、关系抽取、去重消歧、图遍历和时间过滤如何配合检索。
Entity extraction + graph DB + vector/BM25 hybrid search + rerank。
适合关系密集场景;如果业务只是普通问答,图谱可能太重。
从任务轨迹、反思和反馈中提炼可复用经验,使记忆不只保存事实,还能支持能力演化。
核查经验什么时候写入、如何组织、如何召回、是否存在验证和修正机制。
Reflection + skill library + episodic memory + validation / retrieval。
研究原型中的经验记忆需要谨慎区分:有 memory 系统实现才纳入主列表。
先别急着记术语。可以把不同 memory 路线理解成几种不同的“记事方式”:有的像通讯录, 有的像档案馆,有的像案件证据板,有的像游戏存档,有的像程序员的工作台。
把重要事实从对话里抽出来,变成以后能搜索、能更新、能删除的长期记录。
通常先用 LLM 抽取事实,再做 embedding,存进向量库/图谱/数据库;下次根据问题把相关记忆找回来。
不是所有聊天记录都该写进去。临时情绪、一次性指令、错误工具输出如果乱写,就会变成记忆污染。
让 agent 记忆既能被机器检索,也能被人直接查看、备份和迁移。
记忆先被抽取成事实、用户画像、经验或技能,再落到 Markdown/文件结构里,同时用 SQLite 和 LanceDB 建索引;后台 cascade 负责持续整理。
本地优先不代表自动可靠。文件、索引和抽取策略如果不同步,记忆仍然会乱。
把记忆按使用频率和重要程度分层:核心记忆常驻,历史资料按需检索,旧对话必要时摘要。
core memory 直接进 prompt;archival memory 或 passages 通过检索进入;上下文太长时由 summary 接住旧内容。
分层不是越多越好。层多之后最怕同一条信息在多个地方版本不一致。
框架先规定 memory 怎么接入 agent,再让你替换列表、向量库、Redis、Mem0 等不同后端。
agent 推理前调用 memory.update_context 或类似接口,把检索结果塞进当前上下文。
有接口不代表有完整 memory 系统。写入策略、去重、排序、遗忘通常还得自己设计。
当记忆重点是实体、关系和变化过程时,用图比单纯文本块更容易表达。
从文本/事件里抽取实体和关系,写成节点和边;查询时结合图遍历、关键词、向量和重排。
不是所有应用都需要图谱。如果只是普通文档问答,强行建图可能更重、更难维护。
从成功/失败轨迹中提炼可复用经验、策略、代码片段或 skill,让 agent 下次做得更好。
系统保存任务轨迹和反馈,做 reflection 或 consolidation,再把经验放进 skill library 或经验库里检索复用。
最难的是验证。坏经验如果被正式沉淀,agent 会越来越自信地重复错误。
项目 Project | 实现路线 / 源码入口 Route / Source | 写入 / 召回 Write / Read | 存储 / 场景 / 风险 Storage / Fit / Risk |
|---|---|---|---|
Memory service | 实现路线 专门的,围绕 做、向量写入和召回。 源码入口 mem0/memory/main.pymem0/memory/storage.pymem0/vector_stores/* | 写入路径 输入消息后由 LLM 抽取候选事实,embedding 后写入 ,并用 SQLite/历史记录追踪变化。 召回路径 查询时做 ,结合 、实体信号或 rerank,把相关事实返回给 agent。 | 存储后端 + history DB,可接 Qdrant、Chroma、Pinecone、pgvector 等。 适用场景 长期用户事实、偏好记忆、跨会话个性化。 主要风险 容易把临时话语写成长期事实, 和必须认真做。 |
Layered memory | 实现路线 : 常驻上下文, 外部检索,message/recall 负责历史回看。 源码入口 letta/schemas/memory.pyletta/schemas/block.pyletta/services/passage_manager.pyletta/agents/letta_agent.py | 写入路径 通过 block、passage、agent service 管理核心记忆和档案记忆,上下文超限时配合摘要与窗口计算。 召回路径 核心 block 直接进 prompt, 按需检索,消息历史按窗口和摘要策略进入上下文。 | 存储后端 SQL / passage store / ,按层分工。 适用场景 长期对话、项目协作、需要清晰 memory 层次的 agent。 主要风险 层间同步和冲突较难,核心记忆写错会持续影响 agent。 |
Temporal graph | 实现路线 :把 抽成节点、边和时间事实,再做混合检索。 源码入口 graphiti_core/graphiti.pygraphiti_core/nodes.pygraphiti_core/edges.pygraphiti_core/search/search.py | 写入路径 add_ 抽取实体和关系,做 dedupe/resolution 后写入 graph。 召回路径 搜索结合 、vector、、cross-encoder rerank 等信号。 | 存储后端 Neo4j / FalkorDB / Kuzu / Neptune 等 graph 后端。 适用场景 关系密集、事件持续变化、需要时间感的长期记忆。 主要风险 实体消歧和脏关系治理难度高,维护成本比向量库更重。 |
Local-first memory OS | 实现路线 、 的 agent memory runtime,用文件化记忆承接人类可读性,用 承接状态与检索。 源码入口 src/everos/service/memorize.pysrc/everos/service/search.pysrc/everos/memory/cascade/*src/everos/infra/persistence/{sqlite,lancedb}/* | 写入路径 memorize 入口把会话或事件分段后进入抽取管线,生成 user profile、atomic fact、、agent skill、foresight 等 memory cell。 召回路径 search 入口结合 recall、hierarchy、filters、shaper 与 agentic search,把相关记忆整理成可进入上下文的结果。 | 存储后端 memory + SQLite metadata/state + LanceDB vector/FTS tables。 适用场景 助手、小团队知识沉淀、需要人机共同审计和维护的长期记忆。 主要风险 文件、索引和后台 需要保持一致;部署更可控,但维护面比单一 memory API 更宽。 |
项目 Project | 实现路线 / 源码入口 Route / Source | 写入 / 召回 Write / Read | 存储 / 场景 / 风险 Storage / Fit / Risk |
|---|---|---|---|
Unified memory | 实现路线 路线:用 管写入,用 管浅召回/深召回。当前本地 sparse checkout 需补齐源码目录。 源码入口 lib/crewai/src/crewai/memory/unified_memory.pyencoding_flow.pyrecall_flow.pystorage/lancedb_storage.py | 写入路径 remember/remember_many 进入编码流程:embedding、批量、相似记忆查找、 insert/update/delete/noop。 召回路径 recall 可走 shallow/deep:分析查询、生成子查询、选择 、并行搜索,再按相关性、时间、重要性排序。 | 存储后端 默认 LanceDB,另有 Qdrant Edge 等后端路线。 适用场景 crew/agent 协作场景中的用户事实、任务上下文和可复用记忆。 主要风险 LLM 驱动写入很灵活,但也更依赖提示、评估和质量。 |
Composable memory | 实现路线 短期 + 的组合路线,支持 buffer、summary、vector block 等多种记忆块。 源码入口 llama_index/core/memory/memory.pymemory_blocks/vector.pychat_memory_buffer.pychat_summary_memory_buffer.py | 写入路径 消息先进入 ,超出预算后可 flush 到 ,或由 vector/fact/static block 承接长期信息。 召回路径 当前消息、短期历史和 memory block 检索结果一起组装进上下文。 | 存储后端 SQL/simple + vector memory block + 可组合存储。 适用场景 RAG agent、文档助手、需要快速拼装不同 memory block 的应用。 主要风险 组件很多,真正效果取决于 block 选择、flush 策略和上下文预算。 |
Memory interface | 实现路线 定义可插拔 ,具体实现可以是列表、Chroma、Redis、Mem0 或实验性任务中心记忆。 源码入口 autogen_core/memory/_base_memory.py_list_memory.pyautogen_ext/memory/* | 写入路径 具体 Memory 实现负责 add/clear/close 等操作,框架层不强行规定统一写入策略。 召回路径 agent 调用 ,把 memory 检索结果注入 model context。 | 存储后端 List memory、ChromaDB、Redis、Mem0 adapter 等。 适用场景 多 agent 框架、需要替换 memory 后端的实验系统。 主要风险 接口灵活但默认治理弱,容易把 memory 责任留给使用者。 |
User memory | 实现路线 偏 的 ,提供 add/update/delete/clear 等工具化写入能力。 源码入口 libs/agno/agno/memory/manager.pymemory/strategies/summarize.pymemory/strategies/base.py | 写入路径 LLM 可调用 memory 工具新增、更新、删除用户记忆,也可用 summarize strategy 生成记忆。 召回路径 支持 last_n、first_n、agentic 等读取方式,把用户相关记忆带回当前会话。 | 存储后端 依赖框架配置的 memory DB / storage。 适用场景 个人助手、用户画像、轻量长期偏好管理。 主要风险 偏 profile 路线,复杂任务状态和图关系需要额外设计。 |
以 mem0 为代表,把记忆抽取、向量化、检索、更新、历史记录做成独立服务或 SDK。agent 调用它来 add/search,而不是自己维护所有细节。
边界清楚,容易跨应用复用,也方便单独优化写入、检索和去重。
如果写入策略或作用域治理没做好,错误事实会被服务化地稳定传播。
用户偏好、长期事实、跨会话个性化、需要独立 memory layer 的产品。
以 Letta 为代表,把 core memory、archival memory、recall/messages、context window 管理分开,每一层负责不同距离和不同优先级的信息。
以 Graphiti 为代表,把事件抽成实体、关系和时间边,再用图搜索、语义搜索和重排一起找回相关记忆。
以 EverOS 为代表,把 Markdown-first 记忆、SQLite/LanceDB 索引、memorize/search/cascade/prompt slots 放在同一套本地优先运行时里。
以 AutoGen、LlamaIndex、Agno 等框架路线为代表,先定义 memory 接口和上下文注入方式,再接不同后端或策略。
mem0 的核心不是把聊天记录简单拼进 prompt,而是把 add/search/history 做成一套服务化流程。写入时抽取事实并做向量化,读取时再按语义和元数据找回。
Letta 把 core memory、archival passages、message recall 和 context window 计算分开。它不是只问“用不用向量库”,而是问哪些内容应该常驻,哪些内容应该按需查。
Cognee 更接近面向 agent 的长期记忆平台,强调数据摄取、知识图谱、向量检索与跨会话记忆;Graphiti 更聚焦实时 temporal context graph,用实体、关系和时间变化承接动态记忆。
LangMem 提供长期记忆抽取、管理工具和 LangGraph store 集成;A-MEM 则研究 agentic memory 如何动态组织和利用历史经验。它们比普通 agent framework 更直接围绕 memory 问题展开。
EverOS 把 memorize、search、cascade、prompt slots 和本地持久化放在同一套运行时里。它不是只把向量检索包装成 API,而是让记忆以 Markdown-first 形态沉淀,同时用 SQLite 与 LanceDB 支撑状态、索引和召回。
这一部分补充的是更偏源码阅读的判断方法:不只看项目有没有 memory 字样,而是看它到底把写入、读取、存储、上下文注入和治理放在了哪一层。
符合主列表条件的项目可以合并为长期记忆服务、分层 runtime、framework memory interface、graph memory、experience / skill evolution 等路线。该分组排除了仅提供 session compaction、checkpoint、search evidence state 或通用 agent 编排的项目。
部分项目具备 memory-like 机制,但不满足主列表的 agent memory 项目标准。opencode、Pi agent、Codex 类工具更偏 coding session 与 workspace continuity;Harness-1 更偏搜索证据状态管理;AutoGPT、CAMEL 更偏 agent 平台或多 agent 框架。
源码比较应优先追踪信息写入时机。mem0、CrewAI、LangMem、A-MEM 等项目会围绕事实、偏好、经验或记忆对象设计写入流程;AutoGen、LlamaIndex、Agno 则通过框架接口或 memory block 暴露写入能力。
记忆不是存进去就结束了,关键是怎么回到 prompt。向量服务通常返回 top-k 事实;分层系统会把核心记忆常驻、档案记忆按需检索;checkpoint 会恢复状态;compaction 会用摘要替代旧历史。
同样叫长期记忆,底层可能是向量库、SQL、graph DB、KV store、JSONL,也可能是混合结构。真正要比较的是存储后端和记忆对象是否匹配:事实相似度适合向量,关系变化适合图,执行恢复适合 checkpoint,结构化 profile 适合关系或文档存储。
memory 一旦长期运行,真正麻烦的不是存不进去,而是存进去的东西会不会错、旧、重复、串范围。mem0、CrewAI、Graphiti 这类会处理相似记忆、去重或实体解析;但任何项目接入后都仍要按你的业务补 scope、删除、审计和冲突策略。
最实用的选型方法是先问:你要解决的是跨会话事实、长期关系、任务恢复、上下文续航,还是框架扩展?如果目标不同,最值得参考的项目也不同。
看不同 agent 为什么会长出不同 memory 组合
看开源 memory 库怎么接入真实 agent