AI Agent 记忆系统设计:工作上下文、跨会话记忆与执行事实
Agent 记忆要分别保存当前任务状态、跨会话可复用的信息和实际执行记录。 当前任务靠状态继续,偏好与经验按需检索;工具是否执行成功,要按操作 ID 查业务记录,不能靠相似度猜。
记忆只是来源可查的偏好或证据。用户本轮明确要求覆盖旧偏好,外部资料也不能变成授权。短期、长期描述复用范围;情景、语义等描述内容类型,两者不是同一条分类轴。LangChain Memory 概念
一个偏好变化的例子
Section titled “一个偏好变化的例子”假设用户曾确认“中文回复,代码示例用 TypeScript”。下次会话可以默认沿用,但本轮说“这次用 Java”,就用 Java。
| 信息 | 保存方式 | 本轮怎样使用 |
|---|---|---|
| 这次任务与“用 Java” | 当前任务状态 | 直接指导这轮执行 |
| 历史 TypeScript 偏好 | 结构化偏好,带来源与版本 | 本轮不覆盖明确要求 |
| 用户何时确认过偏好 | 情景记录,带时间与原始来源 | 冲突时回查 |
| 工具是否已修改文件 | 任务或业务记录,按操作 ID 查询 | 决定是否继续、重试或核对 |
情景记忆保存经历,语义记忆保存事实与偏好,程序记忆保存操作规则。语义事实可以直接来自用户确认,也可以从事件提炼;提炼结果必须能回到来源。用户删除信息时,还要清理派生摘要、嵌入和缓存。
三份最小记录
Section titled “三份最小记录”工作上下文保留当前步骤、约束和失败原因。下面是周报任务的结构示例,不是框架必填字段:
{ "goal": "完成用户的周报自动生成", "currentStep": "收集本周 PR 合并记录", "constraints": ["必须中文输出", "不得泄露内部仓库地址"], "attempts": 2, "lastError": "GitHub API rate limit", "nextAction": "切换 GraphQL 批量查询并加缓存"}情景记录保留时间与来源;importance、ttlDays 是自定示例,普通对话可短期保留,仍有效的已确认偏好不能一刀切过期:
{ "eventId": "evt_20260305_001", "userId": "u_123", "content": "用户偏好 PR 说明先结论后细节", "embedding": "...", "timestamp": "2026-03-05T10:12:00Z", "source": "chat|tool|system", "importance": 0.82, "ttlDays": 30}稳定偏好可放结构化表,不必每次重新检索整段聊天。记录还需关联来源和版本:
{ "userId": "u_123", "preferences": { "language": "zh-CN", "codeStyle": "readability-first", "reportStyle": "executive-summary-first" }, "lastUpdated": "2026-03-05T10:00:00Z"}LangGraph 等框架把会话状态放在 thread 的检查点中,跨会话记忆放在 namespace 的存储中。业务执行事实则独立落库。需要处理服务重启时,可以按 Agent 状态持久化与恢复中的 LangGraph 与 PostgreSQL 示例,验证新进程能否复用工具结果并继续任务。
写入、检索与注入
Section titled “写入、检索与注入”| 环节 | 可执行规则 |
|---|---|
| 写入门控 | 筛选偏好、决策、经验与稳定事实;确认来源、允许保存范围,敏感字段脱敏,去重并定有效期 |
| 记忆提炼 | 聚类事件、提炼稳定信息;低置信结论保留待核对;派生结果回链来源,变更留版本 |
| 检索 | 先按租户、用户和权限过滤,再查询相关内容,避免跨用户召回 |
| 注入 | 加载当前状态和最新指令,只放这一步相关的记忆与引用;事实核对时可读原始记录 |
| 冲突 | 显式确认高于历史推断,当前要求高于旧偏好;行为变化只作更新线索,不自动改权限 |
| 删除与过期 | 清理原记录及其派生内容,保留必要的删除状态,避免下一次又被重新提炼 |
检索可同时考虑相关度、新鲜度和重要性,权重由任务评测调整,不能只看“语义很像”:
Score = α × Similarity + β × Recency + γ × ImportanceSimilarity 是语义相关度,Recency 是时间信号,Importance 是规则或模型产生的重要性评分。过期事实先过滤,不能仅靠高分压过时效。
| 选择 | 得到什么 | 要承担什么 |
|---|---|---|
| 同步写入(hot path) | 下一步立即可读到新记忆 | 增加本轮延迟 |
| 后台写入(background) | 不阻塞当前响应 | 短暂不可见,需处理重试与冲突 |
| 压缩旧会话 | 减少当前上下文占用 | 有损;约束、进度、未解问题与原始引用必须保留 |
保留几轮原文、何时压缩都按任务调整,不必每轮固定压缩。步骤、单动作重试与 token 预算设上限,超限后停止、降级或接管。
先用状态表和一张带来源的偏好表解决真实需求。事件增多、有语义召回需求时再加向量索引;不需要跨会话复用的产品可能只需当前状态。评测检查召回是否相关、注入后是否改善任务、成本是否可接受,并覆盖偏好变化、跨租户、过期与删除。Agent 评测、Hindsight 接入参考
具体实现可读 OpenClaw 记忆系统深度拆解:用周末旅行规划场景,追踪记忆何时写入、怎样召回,以及模型与程序各自负责什么。