记忆落地:episodic、semantic 与 procedural
这一章讲三件事: 给第 08 章那个「一转身就忘」的 agent 接上情景与语义记忆的最小实现; 程序性记忆怎么让 agent 从「记得住」升级为「会改进」;以及让整套东西能换域复用的架构分离。 原书在此处有一句点题:没有 RAG,这一章的一切都不可能——记忆的存与取,靠的就是前面 十章的向量检索(即第 04、05 章的那一整套)1。
1. 基线:一个没有长期记忆的 agent
起点是第 08 章 agent 的精简版,但做了两处为记忆铺底的改动2:
- AgentState 加了三个占位字段:
working_memory(短期上下文)、episodic_recall(取回的旧经历)、semantic_facts(取回的事实)——图还 没接记忆,状态容器先留好位置; - 向量库落盘:
Chroma(collection_name="agent_memory", persist_directory="./memory_store")—— 没有persist_directory的库是易失的,kernel 一关全没了;加了它,记忆跨会话存活3。
此时的工作记忆就是「最近 5 条消息」的滑动窗口。跑通验证只问了一个问题: 「法国的首都是哪?」——答对,证明管道没断;但它记不住你上一轮说过什么4。
2. 情景记忆:给对话装上「录像机」
存
对话结束后,一个存储节点把整段对话作为一条文档写进向量库,metadata 带上
类型(type: "episodic")、会话 ID、时间戳、消息数。不足两条消息的对话不存——噪声不入库5。