跳转到内容

程序性记忆(Procedural Memory)

程序性记忆(Procedural Memory)

学习目标

读完本章后,你将能够:

  • 区分语义记忆、情景记忆与程序性记忆的用途差异
  • 设计 Agent 执行历史的摘要式存储方案
  • 实现保留所有输出原文的结构化摘要格式
  • 评估程序性记忆在 Agent 恢复上下文场景中的作用

核心概念

三种记忆类型

记忆系统通常支持三种类型的记忆,各自服务于不同的目的:

类型枚举值用途示例
语义记忆semantic_memory事实、偏好、知识”用户喜欢 Python”
情景记忆episodic_memory事件、经历”用户昨天去了巴黎”
程序性记忆procedural_memoryAgent 执行历史摘要”Agent 已爬取 5 个页面,存储了 HTML 内容”

程序性记忆的特点

程序性记忆(Procedural Memory)是 Agent 执行历史的结构化摘要,核心目标是让 Agent 在后续会话中无歧义地继续任务。其特点:

  1. 保留所有输出原文:Agent 的每次操作结果(返回数据、HTML 片段、JSON、错误消息)都原样记录
  2. 顺序编号:每个 Agent 动作按执行顺序编号
  3. 包含元数据:每个步骤附带关键发现、导航历史、错误信息、当前上下文

结构化摘要格式

程序性记忆的结构化格式包含两个层级:

全局元数据

  • 任务目标:Agent 要完成的总体目标
  • 进度状态:当前完成百分比和已完成的里程碑

顺序 Agent 动作(编号步骤):

  1. Agent 动作:精确描述做了什么(点击了什么、调用了什么 API)
  2. 动作结果(必须原文):返回的数据、响应、HTML、JSON、错误消息
  3. 嵌入式元数据
    • 关键发现
    • 导航历史(访问了哪些页面及其 URL)
    • 错误与挑战(错误消息、堆栈跟踪、恢复尝试)
    • 当前上下文(操作后的状态和下一步计划)

触发条件

程序性记忆在 agent_id 存在且消息中包含 assistant 角色时触发,使用专门的 PROCEDURAL_MEMORY_SYSTEM_PROMPT 提示词,由 LLM 对 Agent 的执行历史进行摘要。

设计优势与代价

优势

  1. 任务可恢复性:Agent 中断后可从摘要中精确恢复上下文
  2. 完整性:所有输出原文保留,不因摘要而丢失细节
  3. 结构化:编号步骤 + 元数据使摘要易于程序化解析

代价

  1. 存储量大:保留所有输出原文导致摘要体积大
  2. LLM 依赖:摘要质量依赖 LLM 的总结能力
  3. 仅限 Agent 场景:需要 agent_idassistant 角色,不适用于纯用户对话场景

陷阱与对策

陷阱对策
LLM 摘要时丢失关键细节提示词中强调”保留所有输出原文”、“不要改写或总结”
错误信息被截断要求包含完整错误消息和堆栈跟踪
摘要过长超出上下文窗口对过长的动作结果进行适度截断(如 300 字符限制)