开源 Agent 项目记忆设计决策对比
引言
在 AI Agent 系统中,"记忆"是决定 Agent 能否从经验中学习、跨会话保持上下文、以及随时间变聪明的核心能力。本文档对比分析了七个主流开源 Agent 项目的记忆架构设计决策:LangGraph、CrewAI、Dify、Hermes Agent、OpenClaw、OpenHands 和 DeerFlow,梳理它们各自的技术选型、架构思路与取舍。
一、LangGraph:检查点驱动的状态持久化
设计哲学
LangGraph 的记忆设计围绕"状态即记忆"的理念展开。它将 Agent 的每一步执行状态(State)自动快照保存,通过 Checkpoint 机制实现会话的断点续跑、时间旅行和人机协同。
记忆架构:双存储体系
LangGraph 将记忆存储划分为两套独立体系:
| 存储层 | 核心角色 | 核心用途 | 数据隔离维度 | 写入时机 | 生命周期 |
|---|---|---|---|---|---|
| Checkpointer(检查点) | 会话短期记忆 | 保存 Graph 运行 state、消息历史、节点执行断点,支持中断后恢复执行 | 以 thread_id 为核心隔离,不同会话数据完全隔离 | 自动写入:graph.invoke() 执行过程自动保存 | 跟随会话 thread,可配置过期清理 |
| Store(通用外部存储) | 跨线程长期记忆 | 存储用户画像、用户偏好、事实记忆、业务知识库,多个会话可共享读取 | 以 namespace + key 隔离,同一用户下全部 thread 可共享记忆 | 手动操作:业务代码主动调用 put/get/search/delete | 用户级长期记忆,独立于会话 |
存储后端选型
| 后端 | 适用场景 | 特点 |
|---|---|---|
| InMemorySaver | 开发调试 | 内存存储,进程重启丢失 |
| SqliteSaver | 单机部署 | 文件持久化,轻量级 |
| PostgresSaver | 生产环境 | 支持多实例并发与高可用 |
| RedisSaver | 高并发场景 | 低延迟 |
设计取舍
- 优势:状态快照天然支持"时间旅行"调试;Checkpointer 与 Store 职责分离清晰,短期会话状态与长期用户记忆不混淆。
- 局限:Checkpointer 本质是"全量快照",高频执行场景下存储开销较大;Store 需要业务代码手动管理,没有自动的记忆提取与压缩机制。
二、CrewAI:三层记忆系统
设计哲学
CrewAI 的记忆设计面向"多 Agent 协作"场景,强调让 Agent 从历史经验中学习,并维护对实体(人物、组织、概念)的一致认知。
三层记忆架构
| 记忆层 | 技术实现 | 作用 | 更新频率 |
|---|---|---|---|
| 短期记忆(Short-term Memory) | 基于 RAG 的向量检索 | 存储当前 Crew 执行过程中的最近 N 条交互记录,使 Agent 能在当前任务上下文中回忆相关信息 | 每次任务执行 |
| 长期记忆(Long-term Memory) | 向量数据库 + SQLite | 保留从过去执行中获得的见解和学习,将"成功路径"提取出来写入本地,下次遇到同类问题直接复用经验 | 跨 Crew 执行持久化 |
| 实体记忆(Entity Memory) | 向量数据库 + 知识图谱 | 捕获并维护关于核心实体(人物、地点、概念)的关键信息,构建实体关系图谱,保证多轮协作中所有 Agent 对同一概念的认知对齐 | 任务执行中持续抽取 |
上下文记忆(Context Memory)
CrewAI 还提供了一个 Context Memory 概念,将短期记忆、长期记忆、外部记忆和实体记忆统一组装后注入 Agent 的上下文窗口,实现"全维度记忆检索"。
设计取舍
- 优势:三层记忆覆盖从瞬态到持久的完整记忆光谱;实体记忆支持知识图谱构建,适合复杂协作场景。
- 局限:每个 Agent 都是独立的 LLM 调用,记忆检索增加 Token 消耗;串行模式下总延迟叠加明显。
三、Dify:RAG 驱动的知识库记忆
设计哲学
Dify 的记忆设计本质上是"企业级 RAG 系统"------将知识库作为 Agent 的长期记忆源,通过文档摄取、文本分割、向量化、检索增强生成的完整管线,让 Agent 拥有"外接大脑"。
记忆架构
Dify 的记忆能力主要通过其 RAG 知识系统实现:
文档加载 → 文本提取 → 文档分割 → 向量化(Embedding) → 存储(Indexing) → 检索(Retrieval) → 重排(Reranking) → 上下文注入
关键技术选型
| 组件 | 选型 | 说明 |
|---|---|---|
| 向量数据库 | Weaviate / Qdrant / Pinecone(可选) | 存储语义化向量及轻量化关联信息 |
| 元数据库 | PostgreSQL | 存储结构化业务元数据 |
| Embedding | Sentence-Transformers | 文本向量化 |
| 重排 | Cross-Encoder | 检索结果重排序 |
检索优化策略
- 混合检索:结合向量检索(语义)和全文检索(关键词),取长补短
- 父子分段:解决"召回粒度"与"上下文完整性"的矛盾
- 上下文压缩/重排:在送入 LLM 前对检索结果进行筛选和排序,节省 Token 并提升质量
- 动态 RAG:根据查询复杂度动态调整检索块大小(128~2048 tokens),多路召回策略加权排序
设计取舍
- 优势:企业级 RAG 管线成熟,支持多种向量数据库后端可替换;低代码界面降低使用门槛;混合检索策略成熟。
- 局限:记忆能力主要依赖外部知识库文档,缺乏 Agent 自主学习和经验沉淀机制;对话上下文管理相对简单,不像 LangGraph 那样有完整的状态持久化体系。
四、Hermes Agent:自进化的三层记忆架构
设计哲学
Hermes Agent 的核心定位是"自我进化的 AI Agent 框架",遵循"Agent 优先、进化第一"的理念。它的记忆设计目标是让 Agent"越用越聪明"------技能不是人写的,是 Agent 从经验中长出来的;记忆不是手动维护的,是 Agent 自己管理的。
三层记忆架构
| 记忆层 | 实现方式 | 特点 | 容量限制 |
|---|---|---|---|
| 第一层:内置记忆 | MEMORY.md + USER.md(Markdown 文件) | Agent 个人笔记与用户画像,会话开始时自动注入 System Prompt | MEMORY.md 上限 2200 字符,USER.md 上限 1375 字符 |
| 第二层:外部记忆提供者 | 可插拔 Provider 接口(Honcho / Holographic / Mem0) | 支持大规模语义搜索、知识图谱及结构化查询,遵循单 Provider 激活原则 | 取决于外部后端 |
| 第三层:会话搜索 | SQLite + FTS5 全文索引 | 精确检索历史会话中的工具调用与对话内容,结合 LLM 摘要技术提取关键信息 | 取决于 SQLite 数据库大小 |
自进化闭环:GEPA 引擎
Hermes 独有的"遗传-帕累托提示进化"(GEPA)引擎,实现"执行→评估→优化→学习"的自动迭代:
- 反思性变异:基于 LLM 反思生成提示词的变异版本
- 帕累托前沿选择:在多目标(准确率、效率、稳定性)中选择最优解
- 自然语言反馈作为变异信号:用户反馈直接驱动提示词进化
技能自进化系统
- 自主创建:完成涉及 5 次以上工具调用的复杂任务、错误恢复或用户纠正时,自动生成可复用技能文件(SKILL.md)
- 持续改进:记录技能调用反馈,通过 skill_manage 工具进行增量式补丁更新,支持版本控制与回滚
- 技能组合:规划器理解技能依赖关系,将原子操作编排为复合技能工作流
- 周期性自省(Periodic Nudge):默认每 10 个 turn 自动触发,评估信息保存价值、新技能创建需求及现有技能优化点
用户建模
集成 Honcho 框架实现深层用户建模,包含 12 个身份维度,通过辩证推理追踪用户任务偏好、决策习惯与工作模式变化。
设计取舍
- 优势:记忆完全由 Agent 自主管理,无需人工维护;技能自进化系统独特,真正实现"越用越聪明";字符数限制而非 Token 限制更直观。
- 局限:GEPA 进化引擎计算开销大;Markdown 文件作为记忆源在大规模数据下检索效率有限;外部记忆 Provider 生态尚不成熟。
五、OpenClaw:本地优先的混合存储
设计哲学
OpenClaw 采用"本地优先(Local-First)"的设计哲学,一切记忆以纯 Markdown 文件为单一源真理(Source of Truth),模型仅读取磁盘上显式写入的内容。核心架构为中心辐射式分层:Gateway 网关 → Agent 运行时 → Channel 渠道适配层 → Skills 技能与工具层 → Memory 记忆与状态管理层。
记忆架构:混合存储
| 存储层 | 技术实现 | 存储内容 | 特点 |
|---|---|---|---|
| Markdown 文件 | SOUL.md / AGENTS.md 等 | 长期记忆与配置 | 纯文本可读、可版本控制、人类可编辑 |
| 向量数据库 | ChromaDB / LanceDB | 语义检索 | 本地嵌入,隐私友好 |
| SQLite | 本地数据库 | 会话日志与结构化数据 | 轻量、零配置 |
会话生命周期
OpenClaw 的会话设计仿照操作系统进程模型:
- 会话隔离 :每个会话有唯一 Session ID(格式:
agent:<agentId>:<type>或group:discord:...) - 上下文重置 :
/new或/reset命令触发短期内存清零,重新加载 workspace 根目录核心文件 - 持久化 :所有对话以 append-only JSONL 形式落盘于
~/.openclaw/agents/<agentId>/sessions/ - Gateway 路由:Gateway 负责 Session Resolution 与消息路由,是系统的唯一调度中枢
模型编排与故障转移
- 支持 Anthropic、OpenAI、Gemini、Ollama 等多模型接入
- Auth Profile 轮换(按 lastUsed 排序、冷却跳过)
- 故障转移(Fallback 链)机制
设计取舍
- 优势:Markdown 文件作为记忆源完全透明、可版本控制、人类可读可编辑;本地优先设计隐私保护好;插件化扩展能力强。
- 局限:纯文本记忆在大规模数据下检索能力弱于向量数据库;缺少自动化的记忆提取与压缩机制;依赖外部向量数据库提供语义检索能力。
六、OpenHands:事件驱动的记忆管理
设计哲学
OpenHands 是一个自主编程 Agent 框架,其记忆设计围绕"事件驱动"和"沙盒化执行"展开。V1 版本引入了四项核心设计原则:沙盒化可选、默认无状态(单一真值来源)、严格的相关项分离、可组合且可安全扩展。
记忆架构
OpenHands 的记忆由 Memory 类管理,包含以下组件:
| 记忆组件 | 内容 | 作用 |
|---|---|---|
| repository_info | 代码仓库名称和路径 | Agent 服务的代码仓库上下文 |
| runtime_info | 可用主机、额外 Agent 指令 | 运行时环境信息 |
| repo_microagents | 代码仓库级微代理指令 | 仓库特定的 Agent 行为规范 |
| knowledge_microagents | 通用知识微代理 | 跨仓库的通用知识指令 |
事件流架构
OpenHands 采用基于 EventStream 的发布-订阅机制:
用户消息 → EventStream → AgentController → Runtime → 工具执行 → ObservationEvent → EventStream → 客户端
事件类型分层:
| 事件层 | 事件类型 | 说明 |
|---|---|---|
| 对话与推理输入层 | MessageEvent、SystemPromptEvent、CondensationSummaryEvent | 直接参与 LLM 上下文 |
| 工具调用层 | ActionEvent | Agent 发起的动作 |
| 工具反馈层 | ObservationEvent、UserRejectObservation、AgentErrorEvent | 环境返回的结果 |
| 会话控制与记忆管理层 | ConversationStateUpdateEvent、PauseEvent、CondensationRequest、Condensation | 不一定直接是对话内容 |
Condensation(上下文压缩)
OpenHands 内置上下文压缩机制,当对话历史过长时自动摘要压缩,保留关键信息同时控制上下文窗口大小。
设计取舍
- 优势:事件驱动架构模块解耦清晰、易于拓展和可观测;沙盒化执行保证安全;V1 的"单一真值来源"设计实现确定性重放和强一致性。
- 局限:记忆能力主要面向编程场景,缺乏面向通用对话的长期记忆和语义检索能力;microagent 机制偏向指令配置而非自主记忆学习。
七、DeerFlow:三级记忆架构与置信度机制
设计哲学
DeerFlow 定位为"Super Agent Harness",其记忆系统设计目标是支撑 Super Agent 完成长周期复杂任务,定位为"认知基础设施"而非独立存储层。记忆系统与上下文工程深度耦合,嵌入 14 层中间件管道。
三级记忆架构
| 层级 | 类型 | 更新频率 | 生命周期 | 核心作用 |
|---|---|---|---|---|
| User Context(用户上下文) | 短期/活跃记忆 | 每次对话 | 小时/天 | 实时反映当下状态,支撑即时响应 |
| History(历史分层) | 中期/长期记忆 | 按月/季度 | 月/年 | 沉淀过往行为轨迹,提炼行为规律 |
| Facts(事实列表) | 结构化长期记忆 | 低频 | 永久/半永久 | 固化离散知识点,供快速检索调用 |
记忆流转机制
DeerFlow 设计了一个精妙的记忆流转管道:
user层的旧快照不会凭空消失,而是作为"历史行为轨迹"的一部分进入history层,形成从短期到长期的平滑过渡- 旧状态自动沉淀到 History 的
recentMonths字段 - 提炼为行为规律进入
longTermBackground - 离散知识固化进入 Facts 列表
每条记忆分配 0.0~1.0 置信度评分,低置信度的 fact 在注入时会被后置或过滤。
异步更新管道
MemoryMiddleware(事件入口)→ 消息预处理层(清洗+信号检测)→ MemoryUpdateQueue(防抖队列)→ MemoryUpdater(LLM结构化生成)→ storage.py(持久化存储)→ Prompt注入层(Token预算感知)
关键设计:
- 防抖异步更新:不阻塞主流程,批量聚合后统一更新
- 置信度机制:LLM 提取记忆时附带置信度评分,支持按阈值过滤低质量记忆
- Token 预算感知注入:按置信度排序 facts,优先保留高置信度、高相关性的内容;在 Token 预算内为 LLM 提供最有价值的记忆信息
多级记忆隔离
- 支持全局用户记忆(跨 Agent 共享)与专属 Agent 记忆(独立空间)两级隔离
- 主 Agent 与子 Agent 上下文完全独立,防止信息污染
上下文压缩策略
采用两阶段压缩管道:先对工具返回内容进行截断压缩,再按"保留前缀+最新消息"策略丢弃中间旧消息,确保长时任务信息连续性。
设计取舍
- 优势:三级记忆分类清晰,覆盖从瞬态到持久的完整光谱;置信度机制保证记忆质量;异步更新不阻塞主流程;多级隔离防止信息污染。
- 局限:记忆更新依赖 LLM 提取,Token 消耗较大;结构化 JSON 存储在跨平台共享场景下不如 Markdown 文件灵活。
八、横向对比总结
记忆存储方案对比
| 项目 | 主要存储方式 | 是否支持语义检索 | 是否支持跨会话 | 自动化程度 |
|---|---|---|---|---|
| LangGraph | Checkpointer + Store(PostgreSQL/SQLite/Redis) | Store 层支持 | 是(Store 层) | 中等(需手动管理 Store) |
| CrewAI | 向量数据库 + SQLite | 是 | 是 | 高(内置三层记忆自动管理) |
| Dify | 向量数据库(Weaviate/Qdrant)+ PostgreSQL | 是(混合检索) | 是(知识库) | 高(RAG 管线全自动) |
| Hermes Agent | Markdown 文件 + SQLite FTS5 + 外部 Provider | 是(FTS5 + 外部 Provider) | 是 | 极高(Agent 自主管理 + 自进化) |
| OpenClaw | Markdown 文件 + ChromaDB/LanceDB + SQLite | 是(向量数据库) | 是 | 中等(文件手动管理 + 向量检索) |
| OpenHands | 事件流 + Memory 类 + microagents | 有限 | 有限 | 中等(上下文压缩自动化) |
| DeerFlow | 结构化 JSON(memory.json) | 是(按 Agent 检索) | 是 | 高(异步 LLM 提取 + 置信度过滤) |
设计哲学对比
| 项目 | 核心定位 | 记忆设计关键词 |
|---|---|---|
| LangGraph | 底层编排引擎 | 状态快照、检查点、双存储分离 |
| CrewAI | 多 Agent 角色协作 | 三层记忆、实体图谱、经验复用 |
| Dify | 低代码 AI 应用平台 | RAG 管线、知识库、混合检索 |
| Hermes Agent | 自进化个人 Agent | 自主管理、技能进化、字符限制 |
| OpenClaw | 本地优先 Agent 网关 | Markdown 源真理、本地优先、插件化 |
| OpenHands | 自主编程 Agent | 事件驱动、沙盒化、单一真值来源 |
| DeerFlow | Super Agent 运行时 | 三级记忆、置信度、异步管道 |
选型建议
| 场景 | 推荐项目 | 理由 |
|---|---|---|
| 需要精细的状态控制和调试能力 | LangGraph | Checkpoint 机制支持时间旅行和断点恢复 |
| 多 Agent 协作且需要经验积累 | CrewAI | 三层记忆 + 实体记忆覆盖协作场景 |
| 企业知识库问答 / RAG 应用 | Dify | 成熟的 RAG 管线 + 低代码界面 |
| 个人长期助手,追求"越用越聪明" | Hermes Agent | 自进化闭环 + 技能自生成 + 跨会话记忆 |
| 本地部署、隐私优先的个人 Agent | OpenClaw | Markdown 源真理 + 本地向量检索 + 多渠道接入 |
| 编程自动化 / 代码仓库 Agent | OpenHands | 事件驱动 + 沙盒执行 + 仓库级记忆 |
| 复杂长任务编排 + 企业级 Agent 运行时 | DeerFlow | 三级记忆 + 置信度机制 + 多级隔离 |
结语
这七个项目在记忆设计上展现了截然不同的设计哲学:
- LangGraph 选择"状态即记忆",用检查点机制保证可控性和可调试性;
- CrewAI 选择"三层记忆分层",用 RAG + 向量数据库实现经验复用;
- Dify 选择"知识库即记忆",用成熟的 RAG 管线解决企业知识管理;
- Hermes Agent 选择"Agent 自主管理记忆",用自进化闭环实现真正的持续学习;
- OpenClaw 选择"Markdown 即真理",用纯文本文件保证透明性和可编辑性;
- OpenHands 选择"事件即记忆",用事件流和单一真值来源保证一致性;
- DeerFlow 选择"结构化记忆 + 置信度过滤",用异步管道保证生产级稳定性。
如果你的目标是搭建一个个人 Agent 系统,可以参考这些项目的优秀设计,取长补短:用 LangGraph 的状态管理做编排底座,用 CrewAI 的三层记忆思路组织经验,用 Hermes 的自进化理念设计技能沉淀闭环,用 OpenClaw 的本地优先理念保证隐私可控,用 DeerFlow 的置信度机制保证记忆质量。