Day 13|记忆工程(Memory Engineering)最佳实践

123 阅读7分钟

——让 AI 拥有“长期理解力”的工程化方法*

一句话总结:
记忆系统不是“让模型变聪明”,而是让智能体“不会重复犯同样的错”。 记忆工程是现代 AI智能体中最被低估、同时也是最关键的能力之一。

如果你的智能体出现过以下问题

  • 上下文一长就失忆
  • 连续任务无法承接
  • 用户偏好记不住
  • 工具调用规则老是忘
  • 多轮对话逻辑断裂
  • Agent 在一个长任务中迷路、跑偏
  • A 工作流执行正常,B 工作流立即忘光

那么你现在缺少的不是模型,而是:一个完整的 Memory Architecture(记忆架构)。今天这篇,你将系统掌握:

  • 记忆工程的 4 层结构化模型
  • 哪些内容应该记忆?哪些不能记忆?
  • 如何避免错记、幻觉记忆、污染记忆?
  • 工作流智能体的“任务记忆模板”
  • 用户画像(User Profile)的工程设计
  • 工具使用记忆(Tool Memory)的最佳实践
  • 长任务执行的“状态记忆(State Memory)”
  • 以及:最终可复用的 Memory Engineering 框架

这篇会非常工程化,属于可以直接上生产环境的那种。

一、记忆是什么?不是文本,而是“结构化事实”

所有初学者都在做一个错误事情:把用户话当成“记忆内容”塞进 prompt 或 vector store。这是错的。记忆真正的定义:

记忆 = Agent 在未来决策时必须持有的结构化事实(Structured Facts)。

所以,记忆不等于:“用户说过这个,我就记住”。而是:“这个信息对未来决策是否有效、有用、且稳定?”记忆必须满足三件事:

条件解释
稳定性未来长时间有效,不会频繁变化
显著性和智能体的任务强相关
显著性可决策性 未来会影响模型的行动/选择

二、Memory Engineering 的 4 层架构(重点)

真正的记忆系统 = 4 个记忆层 + 2 个过滤器 这是行业里用得最稳定、可规模化的架构。

  • 0️⃣ 短期上下文(Context)
  • 1️⃣ 工作记忆(Working Memory)
  • 2️⃣ 长期记忆(Long-term Memory)
  • 3️⃣ 程序性记忆(Procedural Memory)
  • 4️⃣ 语义记忆(Semantic Memory)
  • ——(两个过滤器:Extraction Filter + Relevance Filter)
0️⃣ 短期上下文(一次对话的 context window)

特点:

  • 存活时间:几十秒~几分钟
  • 作用:模型即时推理
  • 不存储
  • 任务中断即失效 这不是“记忆”,只是模型的活跃上下文。
1️⃣ 工作记忆(Working Memory)

——任务级别的短期记忆(Session Memory)** 用途:

  • 在一段任务过程保存必要的数据
  • 跨多轮对话保持状态
  • 多工具调用维持一致性
  • 避免模型遗忘关键变量 典型内容:
  • 当前任务目标
  • 用户当前需求
  • 当前草稿、分析、计算结果
  • 未完成子任务

例子(写文章 agent):

{
  "task": "生成文章",
  "stage": "outline",
  "draft": "",
  "style": "专业、工程化",
  "target_length": "1800-2200字"
}

工作记忆在任务结束时 自动清空。

2️⃣ 长期记忆(Long-term Memory)

——用户画像 + 偏好系统** 这是智能体“个性化能力”的根基。 属于长期稳定、不随任务清空的信息。 存储两类内容:

(A)用户偏好(Preference Memory)

如:

  • 喜欢文章风格:工程化
  • 排版偏好:H2、H3、短句
  • 项目方向:大模型 + 工程化实践
  • 禁忌:不要口语化表达
  • 文件输出格式偏好:Markdown
(B)用户画像(User Profile)

如:

  • 身份:测试工程师
  • 核心任务:构建 AI 文章体系、自动化
  • 技能水平(用于动态解释深浅):中高级 长期记忆必须通过: 显著性过滤(Significance filtering) 稳定性过滤(Stability filtering) 判断是否值得保存。
3️⃣ 程序性记忆(Procedural Memory)

——Agent 的动作规则、工具规则,这是最重要、最容易被忽视的一层。 内容包含:

  • 工具调用规范
  • 输入输出 schema
  • 失败重试策略
  • 约束条件
  • 工作流规则
  • 安全限制
  • 模型行为边界

例子:

{
  "tool_rules": {
    "search": "需要明确检索关键词",
    "write_file": "必须指定合法路径,不得覆盖用户未授权文件"
  },
  "agent_rules": {
    "always_finalize_tasks": true,
    "use_react_for_complex_tasks": true
  }
}

你可以把它理解为:“Agent 的操作系统”。程序性记忆不会随着用户变化,只随系统升级变化。

4️⃣ 语义记忆(Semantic Memory)

——外部事实知识(如 RAG)这层是:

  • 向量数据库
  • 结构化知识库
  • 文档库
  • 域知识
  • 产品/接口/数据库 schema
  • 框架、模型能力文档

这类信息不是“记住用户说过什么”,而是:Agent 需要的外部真实世界知识。

  • 测试工程师的 API 文档
  • 产品 PRD
  • 技术规范
  • 你的文章结构模板
  • 你的写作手册

语义记忆 = “Agent 的长期知识库”。

三、记忆过滤器:不是什么都能记

记忆工程最关键的是“过滤”,避免 AI 存垃圾记忆。

1)Extraction Filter

(从对话中抽取有效事实) LLM 负责判断:

“这句话包含事实吗?需要 structured extraction 吗?”

例如: 用户说:

“文章风格不要太口语化。”

提取为:

{
  "fact": "user_style_preference",
  "value": "避免口语化"
}
2)Relevance & Stability Filter

(事实是否值得保存?) 判断:

  • 会长期影响决策吗?
  • 是偏好还是一次性?
  • 是否可能很快变化?
  • 是否与任务强相关?

拒绝存储:

  • 情绪
  • 一次性信息
  • 模糊信息
  • 不相关信息
  • 即时变化的信息

四、Memory Engineering 的 3 份核心模板

(A)用户偏好记忆模板(Preferences Memory Template)
{
  "writing": {
    "style": "专业、工程化、结构化",
    "tone": "清晰、信息密度高",
    "format": "Markdown",
    "avoid": ["口语化", "冗长", "无结构内容"]
  },
  "interaction": {
    "explain_level": "专业,但避免啰嗦",
    "step_by_step": true
  }
}
(B)工作记忆模板(Working Memory Template)
{
  "task_goal": "",
  "subtasks": [],
  "current_stage": "",
  "intermediate_results": {},
  "constraints": {},
  "final_deliverable": ""
}
(C)程序性记忆(Tools + Rules Template)
{
  "tools": {
    "search_api": {
      "required_fields": ["query"],
      "retry_policy": "3 retries",
      "usage_example": "... ..."
    },
    "write_file": {
      "required_fields": ["path", "content"],
      "safety": "cannot overwrite unapproved paths"
    }
  },
  "agent_rules": {
    "multi_step_reasoning": "ReAct",
    "must_verify_results": true,
    "halt_on_uncertainty": true,
    "fallback_mechanism": "ask_for_clarification"
  }
}

五、长任务记忆(State Memory)如何保证 Agent 不迷路?

长任务最怕两种情况:

  • ❌ 执行到一半忘记前面的步骤
  • ❌ 多工具调用间状态不一致

解决方案:在每一步执行后更新 State Memory(状态记忆)。 示例(文章生成任务):

{
  "task": "写文章",
  "stage": "生成大纲",
  "outline": [
    "什么是 Prompt Drift",
    "工程化 Prompt 的 SOPS 框架"
  ],
  "next_action": "开始写正文"
}

状态记忆的关键是:

  • 每次行动后的更新
  • 每个阶段有明确状态
  • 可恢复(resumeable)
  • 可检查(verifiable)

六、记忆污染与错记的 4 大防护机制

这是最常见的坑。

1)记忆必须结构化存储,不存自然语言

❌ “用户说他比较喜欢偏工程化风格。” ✔ "style": "engineering, structured"

2)记忆必须最小化(Minimal Memory)

只存:

  • 对任务关键
  • 长期有效
  • 可决策信息
3)记忆必须可编辑、可清除(可塑性)

允许:

  • 用户修改偏好
  • 用户要求删除某段记忆
  • 系统自动淘汰旧偏好
4)记忆不能当作真理(Hallucination Guard)

所有写入记忆的内容必须来自:

  • RAG 文档
  • 结构化 extraction
  • 用户明确陈述

模型自己的推理不能写入记忆。

七、最终的 Memory Architecture(可直接使用)

把所有层级组合起来:

─────────────
0. Context(短期上下文)
─────────────
1. Working Memory(任务级记忆)
─────────────
2. Long-term Memory(用户偏好 + 用户画像)
─────────────
3. Procedural Memory(工具 + 规则)
─────────────
4. Semantic Memory(知识库)
─────────────

并在写入前经过:

  • Extraction Filter
  • Relevance Filter 这是目前最稳定、可工程落地、可扩展的记忆工程体系。

记忆不是“记住更多”,而是“保留必要、可行动的事实”。** 今天你已经拿到一个可作为工程规范的 Memory Framework:

  • 4 层记忆结构
  • 2 大过滤器
  • 3 类模板
  • 状态记忆机制
  • 防污染原则
  • 可规模化的完整架构

能把记忆工程做好的 Agent,才是真正有连续性、可用性、可扩展性的 Agent。