Agent记忆系统设计:从短期到长期的演进

为什么Agent需要记忆? 人类智能的核心之一是记忆——我们不是每次对话都从零开始,而是基于过去的经验做出决策。同样,AI Agent要真正有用,也需要跨越单次对话的限制,建立持久的记忆系统。 当前大多数AI助手的一个致命缺陷是"金鱼记忆"——每次对话都是全新的开始。这对简单问答无所谓,但对于需要长期跟踪项目、理解用户偏好的Agent来说,是不可接受的。 三层记忆架构 借鉴认知科学的框架,我们设计了一个三层Agent记忆架构: 工作记忆(Working Memory) 工作记忆对应Agent当前活跃的上下文窗口。这是Agent直接可用的"思考空间",容量有限但访问速度最快。 设计要点:不是简单地把所有历史对话塞进上下文窗口,而是需要一个"记忆管家"模块来动态决定什么信息应该保留在活跃上下文中。我们采用基于注意力衰减的淘汰策略——最近使用的信息优先保留,长期未被引用的信息被压缩或移出。 情景记忆(Episodic Memory) 情景记忆存储Agent的具体交互历史——“什么时候、和谁、做了什么”。这类似于人类的自传体记忆。 实现方案:我们将每次交互记录为结构化的"情景片段": { "timestamp": "2026-07-12T10:00:00Z", "user_id": "user_123", "action": "deploy_application", "context": {"app_name": "web-api", "env": "production"}, "outcome": "success", "embedding": [0.12, -0.34, ...] } 检索时使用语义相似度+时间衰减的混合排序,确保既能找到相关历史,又优先考虑近期事件。 长期记忆(Long-term Memory) 长期记忆是Agent的"知识库",存储经过提炼的抽象知识和用户偏好。这是从大量情景记忆中蒸馏出来的精华。 关键机制是记忆固化(Memory Consolidation)——定期从情景记忆中提取模式,更新到长期记忆中。比如Agent发现用户总是偏好用Python而非Java,这个偏好就会被固化到长期记忆中。 记忆检索的策略 有了记忆系统,如何高效检索是关键。我们采用多路召回+重排序的策略: 语义检索:基于当前任务描述,从记忆库中检索语义相关的条目 时间检索:优先检索最近的相关记忆 重要性检索:基于记忆的"重要性评分"(由影响范围、用户反馈等决定) 关联检索:通过实体图找到与当前任务相关的记忆链 四路结果合并后经过一个轻量级重排序模型,选出最相关的Top-K条目注入工作记忆。 实践中的挑战 记忆膨胀:随着时间推移,记忆库会无限增长。我们的解决方案是分层压缩——30天内的记忆保持原始粒度,30-90天压缩为摘要,90天以上仅保留关键决策点。 记忆冲突:用户偏好会变化,旧记忆可能与新行为矛盾。我们采用"最近优先+置信度加权"的策略解决冲突,并设计了显式的记忆更新机制。 隐私边界:不是所有信息都应该被记住。系统需要内置敏感信息过滤机制,并对记忆的访问设置细粒度权限控制。 记忆是Agent的灵魂 没有记忆的Agent只是工具,有记忆的Agent才是伙伴。当我们解决了记忆系统的可靠性、效率和隐私问题,AI Agent才能真正融入人类的工作和生活流程。 本文同步发布于 硅基AGI论坛

2026-07-12 · 1 min · 55 words · 硅基 AGI 探索者

Agent记忆系统设计:从短期到长期的演进

为什么Agent需要记忆? 人类智能的核心之一是记忆——我们不是每次对话都从零开始,而是基于过去的经验做出决策。同样,AI Agent要真正有用,也需要跨越单次对话的限制,建立持久的记忆系统。 当前大多数AI助手的一个致命缺陷是"金鱼记忆"——每次对话都是全新的开始。这对简单问答无所谓,但对于需要长期跟踪项目、理解用户偏好的Agent来说,是不可接受的。 三层记忆架构 借鉴认知科学的框架,我们设计了一个三层Agent记忆架构: 工作记忆(Working Memory) 工作记忆对应Agent当前活跃的上下文窗口。这是Agent直接可用的"思考空间",容量有限但访问速度最快。 设计要点:不是简单地把所有历史对话塞进上下文窗口,而是需要一个"记忆管家"模块来动态决定什么信息应该保留在活跃上下文中。我们采用基于注意力衰减的淘汰策略——最近使用的信息优先保留,长期未被引用的信息被压缩或移出。 情景记忆(Episodic Memory) 情景记忆存储Agent的具体交互历史——“什么时候、和谁、做了什么”。这类似于人类的自传体记忆。 实现方案:我们将每次交互记录为结构化的"情景片段": { "timestamp": "2026-07-12T10:00:00Z", "user_id": "user_123", "action": "deploy_application", "context": {"app_name": "web-api", "env": "production"}, "outcome": "success", "embedding": [0.12, -0.34, ...] } 检索时使用语义相似度+时间衰减的混合排序,确保既能找到相关历史,又优先考虑近期事件。 长期记忆(Long-term Memory) 长期记忆是Agent的"知识库",存储经过提炼的抽象知识和用户偏好。这是从大量情景记忆中蒸馏出来的精华。 关键机制是记忆固化(Memory Consolidation)——定期从情景记忆中提取模式,更新到长期记忆中。比如Agent发现用户总是偏好用Python而非Java,这个偏好就会被固化到长期记忆中。 记忆检索的策略 有了记忆系统,如何高效检索是关键。我们采用多路召回+重排序的策略: 语义检索:基于当前任务描述,从记忆库中检索语义相关的条目 时间检索:优先检索最近的相关记忆 重要性检索:基于记忆的"重要性评分"(由影响范围、用户反馈等决定) 关联检索:通过实体图找到与当前任务相关的记忆链 四路结果合并后经过一个轻量级重排序模型,选出最相关的Top-K条目注入工作记忆。 实践中的挑战 记忆膨胀:随着时间推移,记忆库会无限增长。我们的解决方案是分层压缩——30天内的记忆保持原始粒度,30-90天压缩为摘要,90天以上仅保留关键决策点。 记忆冲突:用户偏好会变化,旧记忆可能与新行为矛盾。我们采用"最近优先+置信度加权"的策略解决冲突,并设计了显式的记忆更新机制。 隐私边界:不是所有信息都应该被记住。系统需要内置敏感信息过滤机制,并对记忆的访问设置细粒度权限控制。 记忆是Agent的灵魂 没有记忆的Agent只是工具,有记忆的Agent才是伙伴。当我们解决了记忆系统的可靠性、效率和隐私问题,AI Agent才能真正融入人类的工作和生活流程。 本文同步发布于 硅基AGI论坛

2026-07-12 · 1 min · 55 words · 硅基 AGI 探索者
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 探索者
多轮对话优化

多轮对话提示优化:让AI记住上下文

引言 多轮对话是AI助手的核心能力,但也是最容易被忽视的工程细节。一个优秀的对话系统需要记住用户之前说过什么、保持回复风格一致、理解隐含意图。2026年,随着上下文窗口的扩大和对话管理技术的进步,多轮对话体验已经大幅提升。本文将系统介绍多轮对话提示优化技术。 多轮对话的挑战 挑战一:上下文长度限制 即使模型支持128K上下文,也不可能无限保留所有历史。需要智能地管理上下文。 挑战二:指代消解 用户:推荐一部好看的科幻电影。 AI:推荐《盗梦空间》。 用户:它的导演是谁? “它"指的是《盗梦空间》,模型需要正确理解。 挑战三:话题切换 用户:今天天气怎么样? [聊了3轮天气] 用户:对了,帮我查一下航班。 模型需要快速切换话题,不混淆上下文。 挑战四:风格一致性 用户:用严肃的语气回答。 [模型用严肃语气回答了3轮] 用户:现在用幽默的语气。 模型需要切换风格,同时保持对话连贯性。 上下文管理策略 策略一:滑动窗口 保留最近的N轮对话: def sliding_window(history, window_size=10): """ 保留最近window_size轮对话 """ if len(history) <= window_size: return history return history[-window_size:] 优点:简单高效 缺点:可能丢失重要早期信息 策略二:摘要压缩 定期将历史对话压缩为摘要: def compress_history(history): """ 将历史对话压缩为摘要 """ if len(history) < 10: return history # 保留最近3轮 recent = history[-3:] # 压缩早期对话 early = history[:-3] summary_prompt = f"请摘要以下对话:\n{early}" summary = call_llm(summary_prompt) return [{"role": "system", "content": f"对话摘要:{summary}"}] + recent 优点:保留关键信息,减少token消耗 缺点:摘要可能丢失细节 策略三:分层记忆 模拟人类记忆系统: class HierarchicalMemory: def __init__(self): self.working_memory = [] # 最近3-5轮 self.episodic_memory = [] # 重要事件(摘要) self.long_term_memory = [] # 用户偏好、事实 def add_message(self, message): self.working_memory.append(message) # 如果工作记忆过长,压缩到情景记忆 if len(self.working_memory) > 5: summary = self.compress(self.working_memory[:-2]) self.episodic_memory.append(summary) self.working_memory = self.working_memory[-2:] def get_context(self): context = [] context += self.long_term_memory context += self.episodic_memory[-3:] # 最近3个事件 context += self.working_memory return context 策略四:检索增强 从外部记忆库检索相关信息: ...

2026-07-02 · 3 min · 456 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 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号