返回课程目录

第 9 课  上下文工程:管理记忆

管理模型在任意时刻知道什么。

预计 24 分钟  ·  系列:从 0 到 1 设计一个 Agent

本课要点

  • 决定什么值得记住,什么只属于当前会话
  • 设计蒸馏、整合与注入的记忆循环
  • 用评估与护栏,让记忆可靠地服务当前任务

1. 为什么记忆很重要

智能体正在从“响应式的助手”演变为“有适应力的协作者”。记忆管理的核心,是管理模型在任意时刻“知道什么”——即存储什么、召回什么、注入什么。

从每次重新认识,到跨会话理解

无记忆

你偏好什么座位?
靠过道。
下一次会话
你偏好什么座位?

有记忆

你偏好什么座位?
靠过道。
长期偏好:靠过道
这次也优先找靠过道的座位。
仅在相关、有效时使用

用户视角

被理解的体验,带来信任与愉悦。

企业视角

交互沉淀为更高信号的行为信息,帮助改善服务、留存与需求洞察。

记忆也可以帮助客服、客户经理与旅行顾问理解用户。不同类型的智能体需要不同节奏的记忆:人生教练的记忆变化更快,IT 故障排除更需要稳定、可预测的状态。

2. Agent 记忆的架构决策

“记忆没有放之四海而皆准的方案。设计从使用场景出发。”

2.1 检索式记忆 vs 状态式记忆

检索式记忆

历史片段旅行对话偏好提及
相关结果1. 用户偏好靠过道2. 通常选择素食餐

从历史文档中查找相关信息

状态式记忆

用户状态
座位默认:靠过道餐食偏好:素食会员等级:金卡本次覆盖:靠窗休息

维护当前连贯的用户状态

对比维度检索式记忆状态式记忆
数据形态松散关联的文档结构化字段与当前状态
更新方式查找相关片段显式更新与冲突规则
使用特点依赖检索质量一致应用有效状态

本课差旅案例采用状态式设计:会员、座位、预算与行程约束需要跨任务保持一致。检索也可与状态更新组合使用。

2.2 记忆的形态

“如果是人类代理,他会主动记住什么来完成任务?”

任务相关的信息

结构化记忆

seat: aisle
meal: vegetarian
member_tier: gold
身份档案
会员
偏好
约束

参与校验、过滤与工具参数

非结构化记忆

短于一周的旅行通常不托运行李。商务出行更重视效率。

保留背景、情境与推理线索

内部状态
影响决策的信息模型上下文用于生成回答
不包含所有内部字段
执行所需字段工具参数用于调用工具
只包含必要字段
不要把内部系统的所有字段都灌进用户档案。

结构化字段从可信来源同步,笔记补充灵活信息。本课案例只从用户显式表达中提取候选记忆。

2.3 记忆作用域

按作用域分离记忆,降低噪声,让演化更安全。如果它默认应该影响未来的行程,存为全局;如果只是当前需要,保留为会话级。

用户级记忆 · 跨会话默认值

相对稳定,影响未来的多次行程

通常偏好靠过道座位偏好
素食饮食偏好
航司金卡会员会员等级
是 → 整合后晋升
是否持久?
仅本次 → 保留在会话

会话级记忆 · 当前暂存区

临时、情境性的,通常只在本次会话中生效

这次是家庭旅行
本次预算不超过 2000 美元
今晚想靠窗睡觉

有效偏好示例

全局默认:靠过道长期生效的偏好
本次覆盖:靠窗仅本次会话生效
本次使用:靠窗当前生效的偏好

本次覆盖,不改写长期默认值。

2.4 记忆生命周期

持续区分哪些是持久的、哪些是情境性的。记忆设计应当随系统的学习而演进。

稳定性

靠过道
靠过道
靠过道

验证稳定后,可结构化

漂移

预算
1000 美元
预算
1500 美元
预算
2000 美元

保留时间,关注较新信息

上下文变异

出行目的
商务偏好靠过道
家庭更愿意省钱

保留情境、置信度或有效期

一次会话做笔记,会话之后再整合

三个记忆管理阶段,连接一个持续循环
实时会话
1

注入

根据记忆注入上下文

推理 / 交互

理解需求、生成回应
2

蒸馏

会话级候选记忆
会话结束后 · 异步

更新全局记忆

写入长期记忆

清零

清理临时信息

冲突解决

按规则处理

去重

合并相似内容
3

整合

筛选合格记忆

蒸馏:从用户明确表达中捕获新信号,可操作的信号,先写入会话暂存区。也可在会话结束后,从可观测执行记录中提取。

整合:把会话级候选记忆合入全局记忆,处理冲突与过时信息。

注入:在运行前,把当前任务相关的记忆放入上下文。

整合工作台

原始笔记(Before)决策(Decision)整合结果(After)
喜欢靠过道
偏好过道座位
语义去重通常偏好靠过道
旧:偏好早班
新:以后优先晚班
明确变更,按规则更新优先晚班
这次靠窗休息仅本次,不晋升保留在会话级记忆不写入全局记忆

!整合最容易出错的地方:过度修剪、提升噪声、引入矛盾,都可能污染后续决策。

3. 构建一个记忆系统:八个设计步骤

从状态对象到会话后整合,把架构决策落成一条可运行的记忆流水线。以下是差旅助手案例的实现方式。

准备状态定义与整理
捕获与保留工具与会话
注入与编排提示与 Hooks
整合更新评估与写回

3.1 定义状态对象

建立明确的事实来源,不把内部系统的所有字段都暴露给模型。

状态对象
profile结构化档案
  • 姓名:张三
  • 常旅客级别:金卡
  • 偏好:靠过道
global_notes全局笔记
  • 更喜欢高铁出行
  • 倾向早班机
  • 2026-09-09 更新
session_notes会话候选
  • 本次预算不超过 2000 美元
  • 希望靠窗
  • 2026-09-09 10:24
history近期行程
  • 2026-08-12 上海 → 北京
  • 2026-07-03 深圳 → 武汉
  • 2026-06-18 北京 → 杭州

3.2 实时记忆蒸馏

让模型通过专用工具保存记忆。工具说明本身,就是捕获质量的关键。

以后出差我更喜欢坐靠窗。

保存记忆笔记

  • 用户明确表达
  • 可用于日后
  • 抽象字段
会话候选:优先靠窗仅保留到会话暂存区
推测性偏好例如:可能喜欢夜航
敏感信息 / 系统指令例如:内部政策、密码
不保存

3.3 修剪会话

只保留最近 N 个用户轮次。修剪后设置标志,下一轮重新注入必要的会话记忆。

本次预算不超过 2000 美元修剪标志 = true → 重新注入

更早的对话轮次超出上下文窗口

……
……

上下文窗口 (保留最近 3 个轮次)

用户我想去上海出差。
助手好的,我来帮您查询。
用户本次预算不超过 2000 美元。

后续对话新一轮

……
……

3.4 记忆注入与优先级规则

记忆默认为参考,不能覆盖用户当下的业务意图。影响重大且无法判断时,聚焦澄清。

1
当前用户要求(最高优先级)
2
会话覆盖(本次会话有效)
3
全局默认值(长期偏好)
可信档案先校验来源与适用范围
示例:临时需求覆盖默认偏好
通常靠过道全局默认值这次靠窗当前用户要求

这是本次会话的临时偏好,不会自动更新全局记忆。

3.5 渲染状态

将结构化数据与精选记忆渲染为清晰的文本格式,便于模型使用。

结构化档案 → YAML frontmatter

seat_preference: aisle
meal: vegetarian

记忆笔记 → Markdown 列表

- 通常偏好靠过道- 短途旅行不托运行李
  • 确定性渲染
  • 精选相关条目
  • 保留时间信息

3.6 用 Hooks 编排自动化

事件触发,在需要时注入会话记忆,避免重复注入。

运行开始
渲染档案与全局记忆
发生偏好吗?
是补入会话记忆
否跳过注入

3.7 组装智能体

每次运行根据最新状态生成提示词。记忆内容以清晰分隔块包装,作为数据使用。

基础角色设定你是一名专业的差旅助手
个人偏好档案个人偏好与约束
精选记忆与使用策略相关记忆与规则
本轮提示词得到记忆化的提示
记忆工具保存 / 查询 / 更新
生命周期 Hooks运行时自动化
Agent差旅助手

3.8 会话后记忆整合

对会话产生的候选记忆进行清洗、合并和更新,形成更稳定的长期记忆。

有效性值得长期保存
去重合并相似内容
冲突解决以最新为准
有效性校验不引入新事实
更新全局每条一句话
状态对象更新后
仅本次不晋升整合成功后,清空会话暂存区。

4. 记忆评估

记忆系统是一条提取、整合与注入的流水线。评估应覆盖端到端,并关注时间的变化:过去的记忆只应在相关时帮助当前任务。

把同一个用户,放进连续的时间里测试
会话 A:通常靠过道2024-06-01 10:24

“我通常总是想要靠过道的座位。”

预期结果捕获长期偏好
会话 B:这次靠窗2024-08-14 16:20

“这次出差我想要靠窗。”

预期结果仅覆盖当前行程
会话 C:恢复默认2024-10-03 09:17

“下次还是帮我订靠过道吧。”

预期结果仍优先靠过道
临时覆盖

评估维度与关注点

蒸馏 · 捕获质量

  • 精确率
  • 召回率
  • 敏感写入拦截

注入 · 使用质量

  • 时效正确性
  • 是否影响当前意图
  • Token 效率

整合 · 更新质量

  • 去重质量
  • 冲突解决
  • 是否引入新事实
评估维度,不代表实测结果。

让测试覆盖真实失败方式

策略 A/B:相关度 vs 相关度 + 时效对比不同检索与排序策略的效果
偏好漂移:模拟同一用户随时间变化测试记忆在时间维度上的稳定性
对抗样本:敏感写入与指令伪装验证系统对恶意或非必要输入的拦截性
关键评估指标(示例)
每百轮写入次数用户覆盖偏好的频率正确应用所需轮数敏感写入拦截率

5. 记忆护栏

记忆会进入模型上下文。错误或恶意内容一旦被反复使用,就可能持续影响后续判断。

多层检查,防止不安全或不合适的记忆进入上下文
敏感信息如个人身份、支付信息
伪装成系统规则如“你必须始终……”
过时偏好如已不再适用的信息
捕获检查抽象字段 · 拒绝敏感载荷
拒绝
整合检查无虚构 · 去重 · 冲突规则
不晋升
注入检查相关性 · 时效 · 数据边界
不注入
本轮上下文仅包含通过检查的安全记忆

系统规则与记忆的边界

系统规则定义模型的行为与能力边界
参考数据通常靠过道来自用户记忆,仅作为参考数据

用户记忆不会成为系统规则,也不会替代模型的原始指令。

5.1 蒸馏检查

限制可写字段,拦截敏感内容与指令伪装。

5.2 整合检查

不添加源记忆中不存在的事实,按明确规则处理冲突、重复与失效。

5.3 注入检查

筛选相关、有效的记忆,使用清晰的数据边界。分隔符有帮助,但不能单独保证安全。

可能改变行为的记忆,要经过捕获、整合与注入三次检查。

6. 结论与下一步

记忆能解锁强大的个性化能力,但高度依赖用例。并非每个智能体在第一天就需要长期记忆。最好的记忆系统是"精准"的:针对特定工作流或用例,为不同类型的信息选择恰当的表示方式(结构化字段 vs 笔记),并明确智能体"能记住什么、不能记住什么"。

先问一个试金石问题记住上一次交互,是否能实质性地帮助它更好或更快地完成任务?
是从简单记忆流水线开始
不明确先验证收益

持续迭代,基于真实结果改进

基础方案
收集真实失败
针对性改进
重跑评估
必要时再评估微调专用记忆模型

随着系统成熟,微调可以进一步提升记忆质量:更准确地判断什么才算"持久性"信息、更可靠地整合(避免幻觉与越界)、以及在冲突记忆存在时更聪明地判断何时该提出澄清问题。

总结:记忆系统通过可量化地迭代变好,而非通过前置的复杂性。从简单开始,严格评估,审慎演化。

7. 案例演示:差旅助手智能体

把档案、会话记忆、长期记忆和整合任务串进一次完整的差旅服务。以下为教学用虚构案例。

用户
帮我安排下周出差。这次想靠窗休息;以后短途优先高铁。
这次靠窗 → 会话覆盖以后短途优先高铁 → 长期候选

7.1 完整差旅服务的六个阶段

从一次用户请求开始,经历记忆的捕获、使用、修剪与整合,形成跨会话的持续体验。

跨会话积累,临时覆盖不扩散
1

会话开始前

读取已有的状态对象,了解用户的默认偏好。

状态对象
  • profile:素食
  • 全局:通常靠过道
2

新会话开始

档案与精选的全局记忆被注入,构成本轮上下文。

档案 + 精选全局记忆
→ 本轮上下文

YAML + Markdown

3

会话进行中

从用户表达中提取记忆候选,并暂存到会话区。

帮我安排下周出差。
这次想靠窗休息;
以后短途优先高铁。

这次靠窗短途优先高铁

保存记忆工具 → 会话暂存区

4

上下文被修剪

当对话变长时,修剪旧消息,并重新注入必要的会话记忆。

······
本次:靠窗
······

修剪后重新注入必要会话记忆

5

会话结束

对暂存的记忆进行筛选、整合,决定哪些写入长期记忆。

异步整合
短途优先高铁整合为长期记忆本次靠窗:不晋升仅本次会话

去重 · 冲突处理 · 无虚构

6

下一次运行

使用更新后的状态对象,提供更贴合的服务。

状态对象(已更新)
  • 通常靠过道
  • 短途优先高铁

继续使用更新后的状态

7.2 同一句话,分成两种不同寿命的记忆

同一个用户表达中,既有只在本次生效的临时偏好,也有适合沉淀为长期记忆的稳定偏好。

用户表达本次会话下一次会话
这次想靠窗休息覆盖座位默认值不沿用本次例外
以后短途优先高铁写入候选并确认适用范围整合后作为长期默认
原有:通常靠过道被本次覆盖,仍保留仍是适用行程的默认值

7.3 把案例映射回设计步骤

这个案例覆盖了课程中的核心设计环节,展示各步骤如何在一次完整的任务中协同工作。

状态对象与作用域案例中的阶段
状态对象与作用域会话开始前
注入、渲染与 Hooks新会话与修剪之后
蒸馏与整合对话进行中与会话结束

长期记忆提供默认理解,会话记忆承接当前变化。两者通过清晰的捕获、暂存与整合流程协作,既能保持本轮连贯,也能跨会话持续理解用户。

记住该记的,也允许用户此刻有所不同。

本课产出

一份包含记忆形态、作用域、生命周期、评估与护栏的设计方案。

进入下一课