轻量 Agent 记忆:先存事实,不要存整段聊天
轻量 Agent 记忆先存事实不要存整段聊天Agent 产品经常被要求“有记忆”。用户希望它记住偏好、项目背景、历史决策和常用约束。最简单的做法是把聊天记录全部塞回上下文或者把所有消息向量化后检索。但这样成本高、噪声多也容易把过期信息带回当前任务。轻量 Agent 的记忆系统应该先存可验证事实而不是整段聊天。记忆不是聊天记录的另一个名字。它应该是经过提取、确认、过期管理和权限控制的上下文资产。一、记忆要从对话中提取flowchart TD A[Conversation] -- B[Fact Extractor] B -- C[Candidate Memory] C -- D[User Or Rule Confirm] D -- E[Memory Store] E -- F[Retrieval]对话里有大量临时信息试错、玩笑、过期需求、被否定的方案。如果全部存起来Agent 后续很容易检索到错误上下文。更稳的方式是从对话中提取候选事实例如“项目使用 Vue3”“代码风格偏向少依赖”“部署环境是 Linux”再通过规则或用户确认进入记忆库。候选记忆要带来源。后续如果发现某条记忆不准确可以回到原始对话检查。没有来源的记忆很难纠错也很难解释 Agent 为什么做出某个建议。二、事实结构要明确{ key: frontend_framework, value: Vue3, scope: project, confidence: 0.92, source: conversation_2026_07_03, expires_at: null }一条记忆至少要包含 key、value、scope、confidence、source 和过期策略。scope 很重要用户级偏好、项目级约束、任务级临时信息不能混在一起。项目 A 使用 Vue3不代表项目 B 也使用 Vue3本次任务要求保守修改不代表永久偏好保守。confidence 也不能省。模型提取的事实可能只是推断不一定来自明确陈述。低置信记忆可以参与提示但不应该作为硬约束。对于关键记忆最好要求用户确认。三、检索要按任务过滤function selectMemory(task: Task, memories: Memory[]) { return memories.filter(m m.scope task.scope !isExpired(m)); }记忆越多越不能全部塞给模型。检索要按项目、任务类型、权限和时间过滤。写提交说明不需要用户的 UI 偏好生成部署脚本不需要历史讨论里的文案语气。上下文越干净Agent 越稳定。还要防止旧记忆污染新任务。技术栈迁移、接口变更、需求更新后旧记忆如果没有过期机制会让 Agent 一直按旧规则回答。记忆系统应该支持更新、废弃和冲突检测。四、用户要能管理记忆memory_controls: list: true delete: true edit: true disable_for_task: trueAgent 记住了什么用户应该能看到。记忆管理界面不一定复杂但至少要支持查看、删除、修改和本次任务禁用。否则用户会觉得系统在暗处使用信息信任感会下降。隐私边界也要清楚。涉及个人身份、密钥、客户数据、商业计划的信息默认不应进入长期记忆。轻量 Agent 的目标是提高效率不是收集一切可收集的上下文。五、总结轻量 Agent 记忆应该先存事实不要存整段聊天。提取候选、确认入库、结构化字段、按任务检索、支持用户管理是记忆系统可控的关键。好的记忆让 Agent 更懂当前任务坏的记忆只会把旧噪声带回上下文。记得少一点、准一点往往比什么都记更有用。