Skip to content

视频 03 来源笔记:个人 Agent 记忆系统

来源元信息

  • 讲者:小单说AI
  • Bilibili:BV136oYBWEU2
  • 本地字幕:从零实现自己的agent第三期:个人 Agent 记忆系统的实现.ai-zh.srt
  • 字幕覆盖:00:00:00–00:13:09
  • 对照材料:bilibili-transcripts/03-个人Agent记忆系统的实现.txtppt/第三期-记忆系统.html
  • 对应代码:step07_memory_system.py

按时间顺序的主题窗口

[00:00:00–00:01:21] 无限 History 的三个失败模式

History 会不断增长,直到上下文溢出;每轮输入 Token 与成本随之上升;进程结束后内存中的 History 消失,下一次启动无法延续。记忆系统首先是在解决容量、成本和跨会话持久性。

[00:01:21–00:02:11] 从人类记忆建立分层模型

视频没有先选数据库,而是先问不同信息承担什么任务。这个顺序很重要:先定义记忆的功能,再选择存储与检索机制。

[00:02:11–00:02:52] 工作记忆

当前正在发生的细节最清晰,对应模型当轮附近的 History。它容量小、变化快、直接参与推理。

[00:02:52–00:03:35] 情景记忆与核心记忆

较早经历被浓缩成按时间和场景索引的摘要;更长期的目标、方向和稳定事实构成核心记忆。视频借此区分“发生过什么”与“什么长期指导行动”。

[00:03:35–00:04:47] 三层向 Agent 的映射

工作记忆在内存 History;情景记忆按日期写入 Markdown;核心记忆常驻系统提示,并在压缩时更新。不同层的读取频率和写入触发条件不同。

[00:04:47–00:05:58] 冷、温、热数据与用户偏好

原始 History 和 Token 日志用于审计;每日摘要在需要回忆时检索;MEMORY.md 与用户资料常驻。用户偏好是可用但敏感的长期数据,不能与企业规则或事实知识混为一谈。

[00:05:58–00:07:09] 三类本地文件

history.jsonl 追加保存原始对话;日期 Markdown 追加压缩时形成的情景摘要;MEMORY.md 使用整体重写策略并设置长度上限。追加适合审计,重写适合消除冲突与控制体积。

[00:07:09–00:08:14] 每轮数据流与压缩触发

用户消息进入 History 并落盘,模型调用后记录用量与助手回复,再检查上下文阈值。超过阈值后同步压缩,保留最近若干轮,再回复用户。

[00:08:14–00:09:21] 一次压缩完成三项输出

旧对话与当前核心记忆交给模型,生成新的核心记忆、用户资料和当日情景摘要。合并为一次调用降低延迟和失败面;拆成多次调用会提高专一性,但成本与协调更高。

[00:09:21–00:09:58] 关键参数

压缩阈值、保留轮数、情景时间粒度、同步或异步压缩、记忆检索工具和核心文件长度上限,共同决定质量、成本与延迟。

[00:09:58–00:11:29] 仓库与工程模块

视频从累计教学 Step 转到模块化项目,展示上下文、Loop、Memory、Runner、Skill、Token 与 Tool 的职责。这部分说明教学单文件与生产式模块化实现的差别。

[00:11:29–00:13:09] 查看记忆与提示文件

演示原始对话、用量记录、MEMORY.md、按日情景文件、用户资料和压缩提示模板。最后通过主入口启动 Agent,形成一次可复查的本地记忆实验。

主教学论点

记忆不是“把所有历史重新发给模型”,而是让不同使命的信息进入不同生命周期:原始事实用于审计,近期上下文用于当前推理,摘要用于回忆,稳定目标和用户事实用于长期约束。

完整状态流

user_input → append history → model call → append answer / usage → threshold check → compact old turns → update episode + core + user → keep recent turns → reply

应观察的状态包括:当前消息数、估算 Token、是否进入压缩、被压缩范围、三类输出的旧值与新值、压缩耗时和失败原因。

重要比喻

  • 晚餐当下的清晰细节 → 工作记忆。
  • 一天行程按场景回忆 → 情景记忆。
  • 长期人生方向 → 核心记忆。

这个比喻帮助分层,但 Agent 文件不等同于人脑结构,也不能据此推导认知科学结论。

术语与纠正

  • 自动字幕中的 “黑四对数组” 应为 history
  • “tokens 点 JSON”是用量日志,不是模型上下文本身。
  • PPT 把长期层标作 SEMANTIC · ALWAYS-ON;视频口述“核心记忆”。课程中统一称“核心/语义长期记忆”。
  • 仓库固定代码使用 history.jsonlMEMORY.mdUSER.md 和日期文件;个别转写把文件名识别错误。

需要工程限定的说法

  • 模型生成的记忆摘要可能失真,关键事实需来源、时间和置信度。
  • 全量重写能去重,但也可能误删;应保留版本或从原始日志重建。
  • 用户偏好不能覆盖系统规则、企业政策或知识库证据。
  • 原始 History 可能含隐私和密钥,追加落盘前需要脱敏、保留期和访问控制。
  • 同步压缩简化一致性,但会增加当前轮延迟;异步压缩则需要解决并发与版本冲突。

对 Skill 自进化的连接

用户记忆保存“用户是谁、偏好什么”;运行经验保存“这次为什么成功或失败”;Skill 保存“验证过的可复用方法”。三者不能混写。只有经过保留集评估、权限检查和人工批准的候选方法,才能升级为新 Skill 版本。

来源映射

  • CAE:step07_memory_system.pydoc/step07_memory_system.md
  • 《深入理解 AI Agent》:第 2 章上下文压缩;第 3 章记忆层次、存储格式、压缩整理与隐私;第 8 章从轨迹沉淀知识和指令。
  • 必做实验:chapter2/context-compressionchapter3/user-memorychapter8/self-modifying-agent
  • Mini Emperor:当前项目的 Skill 轨迹与版本进化在 evolution.py;完整用户记忆层是课程后续需要补的实现边界。
  • 进入正文:book/03-记忆与Skill进化.md

内容差异与待核对

  • PPT 明确补充“冲突解决 · 全量重写”和“设计权衡”,视频对错误恢复、并发写与隐私讲得较少。
  • 仓库文本稿仍把部分模板文件识别为 SKILL.md;固定代码中的真实路径应以 TEMPLATES_DIRCOMPACT_PROMPT_PATHMemoryStore 为准。
  • 本期说“压缩后保留十轮”,代码常量名为 RECENT_MESSAGES = 10,实际单位是消息条数,不应无条件理解为十组用户/助手对话。

Markdown 是唯一内容源,HTML 由构建流程生成。