记忆与 RAG
Day 11 - User Memory Basics
今日目标
能区分短期上下文与长期记忆,划定记忆边界与隐私约束。
学习安排
| 时间 | 模块 | 做什么 |
|---|---|---|
| 0-10 分钟 | 核心概念 | 通读当天术语表,圈出 3 个你最想在工作里用上的概念。 |
| 10-25 分钟 | 阅读输入 | 精读当天章节重点,只抓问题、思路、结论。 |
| 25-45 分钟 | 实践任务 | 动手完成输出模板,必须产出一份可复用产物。 |
| 45-55 分钟 | 追问与反思 | 回答追问练习,标记卡住的概念。 |
| 55-60 分钟 | 复盘与作业 | 整理自检清单,定下明天要复习的一点。 |
核心概念
| 术语 | 中文解释 | 应用场景 |
|---|---|---|
| long-term memory | 长期记忆:跨会话持久保存的用户信息,存放在外部存储,需要时检索进入上下文 | 记住用户偏好的报告格式、常用项目名 |
| short-term context | 短期上下文:当前会话内模型可见的信息,随会话结束自然消失 | 本次任务的输入数据、中间推理过程 |
| user profile | 用户画像:关于用户的稳定属性集合,如角色、团队、常用系统 | 新会话开始时加载,省去重复说明 |
| preference memory | 偏好记忆:记录用户表达过的偏好,如输出格式、语言、工具选择 | 生成测试报告前自动套用格式偏好 |
| cross-session memory | 跨会话记忆:把上一次会话的约定或结论带到下一次会话 | 昨天讨论的排查结论今天继续追问 |
| forgetting mechanism | 遗忘机制:给记忆设生命周期,过期或错误的信息被清理或降权 | 项目结束后清理过期项目约定 |
| privacy boundary | 隐私边界:明确哪些信息允许被记录、存在哪里、谁能访问 | 敏感身份信息一律不落库 |
| user consent | 用户同意:记录敏感信息前先征求用户明确确认 | 询问是否保存常用测试账号 |
| memory update | 记忆更新:根据用户反馈持续修正已存信息,而不是写死一次 | 用户纠正输出格式后立即更新 |
| episodic memory | 情景记忆:记录发生过的事件,如某次故障的排查过程 | 复盘时回顾上周的排查路径 |
阅读重点
- 对应章节:第 3 章:用户记忆和知识库(跨会话记忆、用户画像、偏好记忆、隐私边界相关小节)
- 关注点:记忆与上下文的区别:上下文是"这次看到什么",记忆是"下次还能想起什么"
- 关注点:用户画像与偏好记忆的保存方式:结构化字段 vs 自然语言描述
- 关注点:记忆的更新与遗忘机制:什么触发更新、什么触发遗忘
- 关注点:隐私边界:哪些信息默认不记,哪些必须征求同意
- 补充材料:《深入理解 AI Agent》第 3 章在线阅读(用户记忆部分)
- 补充材料:LangChain Memory 概念文档,对照长期记忆与短期记忆的实现方式
理解检查
- 记忆和上下文有什么区别?请用"本次会话"和"下次会话"各举一个例子说明。
- 为什么记忆需要更新和遗忘机制?只存不删会带来什么问题?
- 用户偏好适合怎么存?直接存对话原文和存结构化字段有什么区别?
- 什么时候必须征求用户确认?你的判断标准是什么?
实践任务
背景:你正在为测试团队设计一个"测试助手 Agent",它每天要帮团队生成测试报告、回答排查问题。今天不写代码,只做记忆设计。
- 列出三类信息:默认可记住、需确认后才能记、绝不可记住,每类至少 3 条
- 为每条信息注明:存储位置(user profile / preference memory / episodic memory / 不入库)、更新时机、过期条件
- 用下方模板输出一份《记忆边界清单》,这是后续所有 Agent 设计的隐私底稿
- 想一条具体遗忘规则:什么情况触发、怎么执行、记录在哪里
输出模板
# Agent 记忆边界清单:[Agent 名称]
## 一、默认可记住的信息
| 信息 | 存储位置 | 更新时机 | 过期条件 |
|---|---|---|---|
| [如:报告输出格式偏好] | [preference memory] | [用户明确要求时] | [长期有效] |
## 二、需确认后才能记住的信息
| 信息 | 确认方式 | 存储位置 | 拒绝后的处理 |
|---|---|---|---|
| [如:常用测试账号] | [弹窗询问] | [user profile] | [仅当次会话使用] |
## 三、绝不可记住的信息
| 信息 | 原因 | 替代方案 |
|---|---|---|
| [如:身份证号] | [合规风险] | [要求用户临时输入] |
## 四、遗忘规则
- [触发条件] 时,[执行动作],由 [谁/什么机制] 执行
示范输出
# Agent 记忆边界清单:测试助手 Agent
## 一、默认可记住的信息
| 信息 | 存储位置 | 更新时机 | 过期条件 |
|---|---|---|---|
| 报告输出格式偏好(Markdown + 表格) | preference memory | 用户明确说"以后都用这个格式"时 | 长期有效,用户改口时覆盖 |
| 常用项目名与代号(如 order-service) | user profile | 首次出现并经用户确认后 | 项目下线后清理 |
| 常用术语解释(如 P95、upstream) | preference memory | 用户纠正解释时 | 长期有效 |
## 二、需确认后才能记住的信息
| 信息 | 确认方式 | 存储位置 | 拒绝后的处理 |
|---|---|---|---|
| 常用测试账号 | 弹窗询问"要记住吗" | user profile | 仅当次会话使用 |
| 团队负责人与分工 | 询问"是否保存为团队信息" | user profile | 不保存 |
## 三、绝不可记住的信息
| 信息 | 原因 | 替代方案 |
|---|---|---|
| 生产环境账号密码 | 安全合规风险 | 要求用户临时输入,用完即弃 |
| 未公开的版本计划 | 保密要求 | 不记录,会话结束后自动清除 |
## 四、遗忘规则
- 项目下线 30 天后,清理该项目相关的项目名与术语记忆
- 用户连续 90 天未提及某条偏好时,降为候选并提示用户确认是否保留
追问练习
- 记忆错误会造成什么后果?请举一个"记错输出格式"导致交付事故的例子。
- 如果记忆里存了一条过时信息(比如已下线的项目名),Agent 应该怎么发现并处理?
- "猜用户偏好"和"问用户偏好"的边界在哪里?一直问会怎样,一直猜又会怎样?
- 谁有权查看和删除用户的记忆?如果用户要求删除,删除流程应该是什么?
常见误区
- 把"记忆"理解成把整段聊天记录原样存下来:噪声大、成本高,应该存提炼后的结论与偏好。
- 上下文不是越多越好:把记忆全量塞进上下文会稀释注意力,记忆应该按需检索进入上下文。
- 记忆只写不删:过期信息会持续误导回答,遗忘机制与更新机制同样重要。
- 所有信息都先问一遍确认:过度打扰用户,应该区分敏感与非敏感信息。
进阶扩展
- 分层记忆架构:episodic memory 记录事件,semantic memory 提炼事实与偏好,回答时按层检索。
- 记忆检索触发:不是每次都全量读记忆,而是根据当前任务判断要不要读、读哪一层。
- 隐私与合规:记忆的加密存储、访问审计、用户导出与删除能力,是生产级 Agent 的必备项。
今日作业
- 完成《记忆边界清单》,至少 9 条(可记 3 条、需确认 3 条、绝不记 3 条)。
- 把清单里的示例替换成你真实工作里的信息(测试报告、缺陷库、账号、项目代号)。
- 为你的 Agent 写一条具体遗忘规则,说明触发条件、执行方式和记录位置。
- 明天开始前,用 30 秒向同事复述"记忆和上下文有什么区别"。