OpenClaw记忆系统

OpenClaw记忆系统实战:跨会话上下文与长期记忆设计

为什么Agent需要记忆? 传统的AI对话是"金鱼模式"——每次对话从零开始,7秒后忘记一切。真正的Agent必须具备记忆能力: 记住用户偏好:不用每次重复说明 跨会话上下文:昨天聊到哪了,今天继续 经验积累:犯过的错误不再重犯 关系建立:长期互动中建立信任 OpenClaw的记忆系统是其在Agent框架中的差异化优势之一。 OpenClaw记忆架构 ┌──────────────────────────────────────────┐ │ 记忆系统全景 │ ├──────────────────────────────────────────┤ │ │ │ ┌─────────────┐ ┌──────────────────┐ │ │ │ 短期记忆 │ │ 长期记忆 │ │ │ │ (上下文窗口) │ │ (MEMORY.md) │ │ │ └──────┬──────┘ └────────┬─────────┘ │ │ │ │ │ │ ┌──────┴──────┐ ┌────────┴─────────┐ │ │ │ 会话日志 │ │ LCM压缩管理 │ │ │ │ (daily notes)│ │ (无损上下文) │ │ │ └─────────────┘ └──────────────────┘ │ │ │ └──────────────────────────────────────────┘ 层级1:短期记忆(上下文窗口) 模型推理时的上下文窗口,通常128K-200K tokens。这是"工作记忆",会话结束后消失。 ...

2026-07-08 · 2 min · 419 words · 硅基 AGI 探索者
Agent记忆架构设计

Agent记忆架构深度设计:从短期上下文到终身学习

引言 人类的记忆是一个复杂的分层系统:感觉记忆、短期记忆、长期记忆,各有不同的容量、持续时间和检索机制。AI Agent的记忆系统也遵循类似的分层设计原则,但具体实现截然不同。 2026年,随着Agent需要在长时间跨度上执行复杂任务,记忆架构已经成为决定Agent能力上限的关键因素。本文将从认知科学和工程实践两个角度,深入探讨Agent记忆架构的设计。 一、记忆的分类体系 1.1 工作记忆(Working Memory) 工作记忆对应Agent的当前上下文窗口。它容量有限(2026年主流模型为128K-2M tokens),但访问速度最快。 工作记忆中存储的信息包括: 当前任务的描述和目标 最近的对话历史 正在处理的中间结果 活跃的工具调用结果 设计要点:工作记忆的管理核心是"什么该保留,什么该遗忘"。实践中,我们采用注意力衰减策略:越早的信息权重越低,当上下文接近满时,优先淘汰低权重信息。 1.2 情节记忆(Episodic Memory) 情节记忆记录Agent经历的具体事件——什么时候、在什么场景下、做了什么、结果如何。 每个情节记忆条目的结构: { "episode_id": "ep-001", "timestamp": "2026-07-01T14:30:00Z", "context": { "task": "数据分析报告", "environment": "production" }, "action": "执行了SQL查询分析用户行为", "result": "发现用户留存率下降15%", "outcome": "positive", "lessons": ["留存下降与新版UI发布时间吻合"] } 1.3 语义记忆(Semantic Memory) 语义记忆存储Agent学到的知识和事实,脱离了具体情境。例如"PostgreSQL在处理JSONB类型时性能优于JSON类型"。 语义记忆通常以知识图谱或向量数据库的形式存储,支持高效的语义检索。 1.4 程序记忆(Procedural Memory) 程序记忆存储Agent的技能和操作流程——如何使用某个工具、如何执行某类任务。这类似于人类的肌肉记忆。 在实现上,程序记忆可以是一组可复用的Prompt模板、工具使用模式或工作流定义。 二、记忆存储架构 2.1 三层存储模型 ┌─────────────────────────────────────┐ │ 工作记忆(LLM上下文) │ ← 快速,容量小 ├─────────────────────────────────────┤ │ 会话记忆(Redis / 内存数据库) │ ← 中速,中等容量 ├─────────────────────────────────────┤ │ 长期记忆(向量DB + 知识图谱 + 关系DB) │ ← 慢速,大容量 └─────────────────────────────────────┘ 2.2 向量数据库选择 2026年主流向量数据库对比: ...

2026-07-02 · 1 min · 176 words · 硅基 AGI 探索者
Agent记忆系统

Agent 记忆系统 2026:从短期上下文到持久记忆的演进

引言 记忆系统是Agent智能的核心支柱之一。一个没有记忆的Agent就像没有长期记忆的人类——每次对话都是第一次见面。2026年,Agent记忆系统从简单的向量检索演进为多层次、多模态的持久记忆架构。 记忆系统的三层架构 第一层:工作记忆(Working Memory) 工作记忆对应Agent的当前上下文窗口,负责处理当前任务所需的即时信息。 技术要点: 上下文窗口扩展:200K+ tokens成为主流 滑动窗口机制:保留最相关的历史片段 注意力蒸馏:从长上下文中提取关键信息 第二层:短期记忆(Short-term Memory) 短期记忆存储最近几天到几周内与当前任务相关的数据。 实现方案: 向量数据库(Milvus、Qdrant、Weaviate) 增量索引与自动清理 基于任务相似度的检索优化 第三层:长期记忆(Long-term Memory) 长期记忆是Agent的"知识库",存储经过整理、抽象后的持久化信息。 关键技术: 知识图谱(Neo4j、NebulaGraph) 结构化摘要生成 记忆融合与冲突解决 2026年记忆系统的前沿进展 1. 神经符号记忆 将神经网络的感知能力与符号推理的逻辑能力结合,实现更可靠的长期记忆。 # 伪代码:神经符号记忆融合 class NeuroSymbolicMemory: def store(self, experience): # 神经网络提取特征 embedding = self.encoder(experience) # 符号系统提取关系 schema = self.knowledge_extractor(experience) # 联合存储 self.vector_db.upsert(embedding) self.graph_db.merge(schema) def recall(self, query): # 双通道检索 vector_hits = self.vector_db.search(query) graph_hits = self.graph_db.traverse(query) # 重排序融合 return self.reranker(vector_hits + graph_hits) 2. 记忆压缩与摘要 面对无限增长的记忆数据,如何高效压缩和摘要成为关键问题。 主流方法: 基于重要性的记忆保留 周期性记忆摘要生成 基于任务的记忆激活 3. 多模态记忆 2026年的Agent记忆不再局限于文本,而是支持图像、音频、视频等多模态数据的存储与检索。 工程实践建议 选型指南 场景 推荐方案 快速原型 Chroma + 本地存储 生产环境 Milvus / Qdrant 集群 复杂关系 Neo4j + 向量混合 多模态 Milvus + CLIP编码 常见陷阱 记忆污染:错误信息被永久存储 检索延迟:大规模向量检索的性能瓶颈 记忆冲突:不同时期信息之间的矛盾 隐私泄露:敏感信息未做脱敏处理 结语 Agent记忆系统是通向真正智能的关键一步。随着技术的持续演进,未来的Agent将拥有越来越接近人类的记忆能力——不仅记得住,还能想得深。 ...

2026-06-30 · 1 min · 118 words · 硅基 AGI 探索者
Agent记忆系统设计:短期、长期与情景记忆的实现

Agent记忆系统设计:短期、长期与情景记忆的实现

Agent记忆系统:让智能体拥有"记住"的能力 人类的记忆系统是一个精妙的分层结构:工作记忆处理当前任务,长期记忆存储知识和经验,情景记忆记录具体事件。2026年的Agent系统也在向这个方向演进——一个没有记忆的Agent就像一个每天失忆的员工,每次对话都从零开始,无法积累经验、无法理解上下文。 记忆系统三层架构 ┌───────────────────────────────────────────────┐ │ 记忆系统架构 │ ├───────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────┐ │ │ │ Layer 1: 短期记忆 (Working Memory) │ │ │ │ - 当前对话上下文 │ │ │ │ - 当前任务状态 │ │ │ │ - 最近的工具调用结果 │ │ │ │ 容量: ~32K tokens | TTL: 会话结束 │ │ │ └─────────────────────────────────────────┘ │ │ ↓ 溢出压缩 │ │ ┌─────────────────────────────────────────┐ │ │ │ Layer 2: 情景记忆 (Episodic Memory) │ │ │ │ - 具体事件记录(时间、地点、人物) │ │ │ │ - 对话历史摘要 │ │ │ │ - 任务执行日志 │ │ │ │ 容量: 无限 | TTL: 90天衰减 │ │ │ └─────────────────────────────────────────┘ │ │ ↓ 知识提取 │ │ ┌─────────────────────────────────────────┐ │ │ │ Layer 3: 长期记忆 (Long-term Memory) │ │ │ │ - 用户偏好和习惯 │ │ │ │ - 学到的知识和规则 │ │ │ │ - 经验教训 │ │ │ │ - 语义关联 │ │ │ │ 容量: 无限 | TTL: 永久 │ │ │ └─────────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────┘ Layer 1: 短期记忆(Working Memory) 短期记忆是Agent在当前会话中保持的上下文信息,主要通过LLM的上下文窗口实现。 ...

2026-06-30 · 6 min · 1188 words · 硅基 AGI 探索者
agent memory system advanced

Agent 记忆系统设计:从短期上下文到长期知识

为什么 Agent 需要记忆 LLM 是无状态的——每次调用都是全新的。但真正的 Agent 需要记住: 5 分钟前用户说了什么(工作记忆) 昨天的对话中用户提到了什么偏好(情景记忆) 用户公司的 API 文档(语义记忆) 上周犯的错误,不要再犯(反思记忆) 记忆类型与人类类比 记忆类型 人类类比 Agent 实现 持续时间 工作记忆 短期记忆 上下文窗口 单次对话 情景记忆 个人经历 对话历史存储 天-月 语义记忆 知识事实 向量知识库 永久 程序记忆 技能习惯 工具使用模式 永久 反思记忆 经验教训 总结+规则 永久 工作记忆管理 上下文窗口策略 class WorkingMemory: def __init__(self, max_tokens=8000): self.max_tokens = max_tokens self.messages = [] def add(self, message): self.messages.append(message) self._compress_if_needed() def _compress_if_needed(self): while self.token_count() > self.max_tokens: if len(self.messages) <= 2: break # 取出最早的几条消息做摘要 old_messages = self.messages[:3] summary = self.summarize(old_messages) self.messages = [ {"role": "system", "content": f"之前的对话摘要:{summary}"} ] + self.messages[3:] 注意力机制 class AttentionManager: """管理上下文中各部分的"重要性"""" def __init__(self): self.attention_scores = {} def update(self, message_id, content, user_query): """计算每条消息对当前问题的相关性""" self.attention_scores[message_id] = { "recency": self.recency_score(message_id), "relevance": self.relevance_score(content, user_query), "importance": self.importance_score(content), } def get_context(self, max_tokens=4000): """按注意力分数排序,选择最重要的上下文""" ranked = sorted( self.attention_scores.items(), key=lambda x: x[1]["recency"] * 0.2 + x[1]["relevance"] * 0.5 + x[1]["importance"] * 0.3, reverse=True ) context = [] token_count = 0 for msg_id, _ in ranked: msg = self.get_message(msg_id) token_count += count_tokens(msg) if token_count > max_tokens: break context.append(msg) return context 情景记忆:对话历史 存储结构 from dataclasses import dataclass from datetime import datetime @dataclass class EpisodicMemory: id: str session_id: str timestamp: datetime user_input: str agent_response: str tools_used: list[str] outcome: str # success / failure / partial embedding: list[float] # 用于检索 metadata: dict # 用户信息、环境等 检索策略 class EpisodicMemoryStore: async def recall(self, query, user_id, limit=5): """回忆与当前情况相关的历史对话""" # 时间衰减权重:越近的记忆权重越高 recency_weight = 0.3 # 语义相似度 query_emb = self.embedder.embed(query) results = await self.db.search( user_id=user_id, embedding=query_emb, limit=limit * 3, # 多取一些做重排 ) # 综合排序 for r in results: days_ago = (datetime.now() - r.timestamp).days r.score = r.similarity * (1 - recency_weight) + \ math.exp(-days_ago / 30) * recency_weight results.sort(key=lambda x: x.score, reverse=True) return results[:limit] 记忆巩固 class MemoryConsolidation: """将情景记忆转化为语义记忆(类似人类睡眠时的记忆巩固)""" async def consolidate(self, user_id): # 1. 提取最近7天的对话 recent = await self.episodic_store.get_recent(user_id, days=7) # 2. 用 LLM 提取可复用的知识 knowledge = await self.llm.extract( f"从以下对话中提取可复用的知识和模式:\n{recent}" ) # 3. 存入语义记忆 for item in knowledge: await self.semantic_store.add( content=item.content, embedding=self.embedder.embed(item.content), source="consolidated", confidence=item.confidence, ) # 4. 标记已巩固的情景记忆 await self.episodic_store.mark_consolidated(recent) 语义记忆:知识库 分层知识存储 class SemanticMemory: """三层知识存储""" def __init__(self): # 第一层:快速事实(Key-Value) self.facts = RedisStore() # "用户公司" → "ABC科技" # 第二层:文档知识(向量检索) self.documents = VectorStore() # API文档、产品手册 # 第三层:深层知识(知识图谱) self.graph = GraphStore() # 实体关系 知识更新 class KnowledgeUpdater: async def learn(self, new_info, source="conversation"): """学习新知识""" # 1. 检查是否与已有知识冲突 conflicts = await self.find_conflicts(new_info) if conflicts: # 2. 冲突解决:用更新的信息覆盖 for conflict in conflicts: if conflict.confidence < new_info.confidence: await self.update(conflict.id, new_info) else: # 不确定,存为"待确认" await self.flag_for_review(new_info, conflict) else: # 3. 新知识,直接存入 await self.semantic_store.add(new_info) 反思记忆:经验学习 class ReflectionSystem: """Agent 从失败中学习""" async def reflect(self, task, attempt, outcome): if outcome.success: return # 成功不需要反思 # 分析失败原因 analysis = await self.llm.analyze( task=task, actions=attempt.actions, error=outcome.error, prompt="分析为什么这次任务失败了,如何避免" ) # 提取规则 rules = self.extract_rules(analysis) # 存入反思记忆 for rule in rules: await self.reflection_store.add({ "situation": rule.situation, "mistake": rule.mistake, "better_action": rule.better_action, "confidence": rule.confidence, }) async def consult(self, task): """执行任务前,查阅反思记忆""" relevant_mistakes = await self.reflection_store.search(task) if relevant_mistakes: return f""" 注意:根据历史经验,类似任务有以下陷阱: {format_mistakes(relevant_mistakes)} 请避免这些错误。 """ return None 记忆架构实战 class AgentMemory: """完整的 Agent 记忆系统""" def __init__(self): self.working = WorkingMemory(max_tokens=8000) self.episodic = EpisodicMemoryStore() self.semantic = SemanticMemory() self.reflection = ReflectionSystem() async def prepare_context(self, query, user_id): """为 LLM 调用准备完整上下文""" context_parts = [] # 1. 工作记忆(当前对话) context_parts.append(self.working.get_recent(n=6)) # 2. 相关情景记忆 episodes = await self.episodic.recall(query, user_id, limit=3) if episodes: context_parts.append(f"历史相关对话:{format_episodes(episodes)}") # 3. 语义知识 knowledge = await self.semantic.search(query, limit=5) if knowledge: context_parts.append(f"相关知识:{format_knowledge(knowledge)}") # 4. 反思提醒 warning = await self.reflection.consult(query) if warning: context_parts.append(warning) return "\n\n".join(context_parts) 记忆数据库选型 记忆类型 推荐数据库 理由 工作记忆 Redis 低延迟,自动过期 情景记忆 PostgreSQL + pgvector 事务+向量检索 语义记忆 Qdrant / Milvus 高性能向量检索 反思记忆 MongoDB 灵活 Schema 知识图谱 Neo4j / NebulaGraph 图查询 记忆隐私 class MemoryPrivacy: """记忆系统中的隐私保护""" PII_PATTERNS = [ (r'\d{11}', 'PHONE'), # 手机号 (r'\d{18}', 'ID_CARD'), # 身份证 (r'[\w.]+@[\w.]+', 'EMAIL'), # 邮箱 ] def sanitize(self, memory): """存储前脱敏""" for pattern, pii_type in self.PII_PATTERNS: memory = re.sub(pattern, f'[{pii_type}]', memory) return memory def user_forget(self, user_id): """用户要求删除所有记忆""" await self.episodic.delete_by_user(user_id) await self.semantic.delete_by_user(user_id) await self.reflection.delete_by_user(user_id) # 生成删除确认报告 return {"deleted": True, "user_id": user_id} 结论 记忆是 Agent 从"工具"变成"伙伴"的关键。没有记忆的 Agent 每次都是陌生人,有了记忆它才能: ...

2026-06-24 · 4 min · 642 words · 硅基 AGI 探索者
鲁ICP备2026018361号