回路 / The Loop — 提出有价值的问题,比直接获取答案更重要。
这个专题收集和整理我与 Gemini、ChatGPT、Claude 等 AI 的对话记录。每一篇对应一次完整的提问与回答过程。通过留存这些层层追问,还原日常思考的真实轨迹。
概要
这是一场围绕 智能体记忆系统(Agent Memory) 的深度对话。起点是 brgsk 的一篇博文 agent memory: an anatomy。作者用 Endel Tulving(恩德尔·图尔温,加拿大爱沙尼亚裔认知心理学家,1972 年首次提出”情节记忆 vs 语义记忆”二分法,被誉为”现代记忆研究之父”)1972/1985 年提出的认知科学记忆分类作为标尺,去丈量当下主流的智能体记忆库(LangMem、Mem0、Graphiti),结论相当扎心——很多库只是把认知科学的术语原封不动搬到了 API,工程实现却根本不分流。
围绕这篇文章,我从”提炼核心观点”一路追问到”那我们应该怎么做”,再到”LangMem 的程序记忆实现到底在哪里”、“create_prompt_optimizer 怎么避免越改越差”,最后回到原文中四类核心引用各自在论证什么。
核心结论:
- 绝大多数所谓的”智能体记忆库”,本质上只是”自传体语义记忆系统” —— 帮用户代管 TA 的个人事实库,比”记忆”这个词所承诺的要狭窄得多。
- 三类工程误区必须停止:把所有记忆类型挤进同一个向量库只靠 metadata 标签区分;同步在每条消息后做提取;盲目模仿生物式遗忘真的去删数据。
- 正确的方向是分流架构 + 离线巩固:程序记忆走 System Prompt 演进(如 LangMem 的
create_prompt_optimizer),自传体语义记忆走异步的 sleep-time / Dreams 管道,前瞻性记忆走条件监听器。
Q: 一个智能体”记忆库”在工程上由哪些组件构成?
按 brgsk 的拆解,任何一个智能体记忆库都可以解剖成三个核心组件,看懂它们就能读懂任何记忆库的文档:
提取器(Extractor) — 一次 LLM 调用,从对话流水里把”值得记的事”压成一条短小、抽象的 statement(陈述)。比如把”用户周二喝咖啡时说他偏好 TypeScript”压成”用户偏好 TypeScript”。
提取器最关键的设计抉择是时机:
- 逐条消息立即提取:寒暄上也得跑一次 LLM,token 浪费严重;
- 会话结束后批量提取:长上下文会触发”中间被遗忘(lost-in-the-middle)“现象,提取质量下降。
更重要的是,提取本身就是一种 从”具体场景事件”到”去情境化事实”的压缩。“周二喝咖啡时说的”会丢失时间锚点;“昨天/下周”这种相对时间词、强调语气、哪些被详细解释了哪些被一带而过——都会在压缩中蒸发。
存储器(Store) — 数据库。可以是向量索引(按语义相似度查)、关系表(按列过滤)、知识图谱(按类型化的边连接)。每条 statement 都附带 metadata:时间戳、置信度、回指原始对话的指针。
存储器最难回答的问题不是”放在哪儿”,而是 “新陈述与旧陈述矛盾时怎么办”。用户 4 月之前住在巴黎,现在搬到阿姆斯特丹——库里现在两条都在,且都呈现为”当前事实”。三种选择:
- 覆盖(overwrite):只留新值,丢失历史;
- 追加(append):两条都留,把决定权丢给检索器;
- 保留两条但把旧的标记为 superseded(已被取代)。
brgsk 的判断很直接:一个无法回答”上个月我们当时认为是什么”的存储器,根本不是记忆系统,只是一张带时间戳的快照表。
检索器(Retriever) — 查询时把当前问题转成一次搜索,返回最相关的 statements。基线是向量相似度,第二层叠关键词搜索,第三层加一个 reranker(重排序模型)。结构上就是 RAG,只不过语料不是文档库而是用户累积的陈述库。一些进阶库还会加:
- 时间过滤:已知过期的陈述不返回;
- 预设检查(presupposition check):当问题本身预设了一个陈旧事实时,把它从注入上下文中拦下来。
Q: 在认知科学的分类里,这些工程实现到底覆盖了哪些?又落空了哪些?
主流认知科学把人类记忆分四种(图尔温 1972/1985 + Baddeley & Hitch(艾伦·巴德利与格雷厄姆·希契,英国心理学家,1974 年合作提出”工作记忆”多组件模型)1974):情节、语义、程序、工作。再加一个不在经典分类里、但被广泛研究的 前瞻性记忆。映射到工程上:
| 记忆类型 | 认知科学 | 智能体工程实现 |
|---|---|---|
| 工作记忆 | 巴德利与希契 (1974):短期处理系统 | 上下文窗口(Context Window)—— 是另一台机器,不在本话题讨论范围 |
| 情节记忆 | 图尔温 (1972):特定时间地点的事件 | 一张带时间戳的陈述表 —— 但提取阶段就被压成了去情境化的语义事实 |
| 语义记忆 | 图尔温 (1972):脱离情境的世界知识 | 这是当前几乎所有库的实际核心 |
| 程序记忆 | 图尔温 (1985):非陈述性技能、肌肉记忆 | 检验”贴标签 vs. 真实现”的最干净试金石(见下文) |
| 前瞻性记忆 | ”在未来某条件下记得做某事” | 生产级库基本完全空白 |
brgsk 的论断之一:这四类记忆里有三类在生产库中基本是缺席的。
- 情节记忆在提取阶段就被压成去情境化语义事实——
user mentioned they live in Berlin (2026-03-14)看起来有时间戳,但承载的是”用户住在柏林”这个事实,不是”那天发生了什么”的可重历事件; - 程序记忆在大部分库里只是给语义事实贴了个
memory_type = "procedural"的元数据标签——底层的存储与检索机制毫无变化; - 前瞻性记忆在所有主流库里都不存在。最接近的产线方案是 agent 框架里的”定时触发器(scheduled trigger)“,但它只能解决 “在 T 时刻做 Y”,无法解决前瞻性记忆真正的形式 “当条件 X 下次出现时做 Y”。
剩下的就只有语义记忆,而且具体到其中一个子集:自传体记忆(autobiographical memory)——智能体替用户代管 TA 的个人生活事实(住哪、在做什么项目、谁对 TA 重要、做过什么决定)。
大多数智能体记忆库本质上只是”多了几个步骤的自传体记忆系统”。 把问题缩窄并精确命名,工程挑战会变得清晰得多。
Q: 那作者眼里的”工程误区”和”正确方向”分别是什么?
brgsk 把生物记忆的几个特征逐一拆开,分别归类到三种态度:应当引入、结构性缺失、不应模仿。
应当引入:记忆巩固(Consolidation)
人类睡眠时会”重放”白天的经历,慢速压缩并修剪冗余记忆。工程类比就是 离线巩固管道:定期重新审视累积的记忆库,去重、解决矛盾、跨会话发现模式。
两个 mid-2026 的生产级例子:
- Letta 的 sleep-time compute — 智能体闲置时,后台子智能体(subagent)重写并合并归档记忆(详见 Letta blog 与论文 arXiv:2504.13171);
- Anthropic 的 Dreams — 异步管道,吃进一个 memory store + 一批 session transcripts,输出一个全新的、合并了重复、用最新值替换了陈旧条目、并提炼了跨会话洞察的存储库(详见 platform.claude.com/docs/en/managed-agents/dreams)。
注意:两者都是调度执行或用户触发,不是真正的”自动 idle-time”;而 LangMem、Mem0、Graphiti、Cognee 等库里被叫作 “consolidation” 的东西,大多只是写入时(write-time)的去重 / 合并机制,而不是离线对累积的存储库做反思。
那些在每条消息后同步跑提取的库,做的只是”在实时延迟预算下退化版的 consolidation”。在结构上确实没有离线、对累积陈述做反思的版本来得清爽——虽然”输出是否更好”还是开放的实证问题。
结构性缺失:情绪显著性(Emotional Salience)
人类大脑的杏仁核会给带有强烈情感(恐惧、惊讶、尴尬)的经历打更深的编码标签。纯文本智能体没有身体、没有自主神经系统、没有感受,输入只是文本 token,根本没有这种信号。
斯坦福小镇论文(Park et al., 2023, arXiv:2304.03442,一作 Joon Sung Park——朴俊成,斯坦福大学博士,2023 年”生成式智能体(虚拟小镇)“开创性论文的第一作者)让 LLM 给每条记忆打 1–10 的”深刻度(poignancy)“评分,再用 recency × importance × relevance 做加权检索——这是用一个本身没有情感的模型去”估计”情感,是一个代理指标,不是真正的情感。多模态、有环境根植的模型未来或许有类似物,纯文本智能体做不到。
不应模仿:盲目模仿生物式遗忘
很多库用 recency 衰减、importance 评分、定时清理任务来”模仿”人类遗忘——前提是”既然人会忘,那 agent 也应该忘”。
brgsk 的反驳很直接:人类遗忘是约束(constraint),不是功能(feature)。大脑因为生理资源有限不得不忘,不是因为遗忘本身有价值。智能体没这个约束——存储几乎免费,保留一切反而能让系统支持审计、可调试,能回答”上个月我们当时认为是什么”。
注:这里说”几乎免费”是字面成本极低——但索引开销、检索延迟、token 注入成本都会随存储增长,且 PII / 数据保留 / 用户删除请求(DSR)等合规约束并不会因为磁盘便宜就消失。
那么”存储增长导致检索退化”这个生物式遗忘真正想解决的问题怎么办?答案是把它重新表述为两个独立问题:
- 检索(Retrieval) —— 把当前事实排在过期事实之上,按主题缩小搜索范围;
- 裁决(Adjudication) —— 在不删除旧信息的前提下,把它清晰地标记为”已被新值取代”。
像 Dreams 这样的离线巩固系统则从另一端攻击同一个问题:会话之间做非破坏性的重组,产出更干净的存储库,但不丢失原始输入。
Q: 既然”概念分类与工程实现严重脱节”是核心病灶,那应该怎么做?
打破”概念上高大上、工程上靠打标签”的伪记忆僵局,关键是 按记忆类型的本质构建完全分流(decoupled)的工程支撑,不要指望一个统一的 VectorStore 包治百病。
程序记忆:从”事实检索”转向”指令演进”
程序记忆的本质是 “知道怎么做”——一种行为倾向(behavioral disposition),不应该是向量库里一条冷冰冰的文本。
brgsk 在文章中点名:LangMem 是少有的把这件事做对的库——它通过对历史执行轨迹(trajectories)打分和反思,动态演进 System Prompt 或指令集,把”技能”内化在运行策略里,而不是在调用时去向量库捞一句”用户喜欢用 TypeScript”。
自传体语义记忆:放弃同步幻想,引入异步巩固
既然情节记忆不可避免地会被压成语义事实,那就大方承认在做的是”自传体语义记忆系统”,把它的核心工程问题——状态同步与矛盾裁决——做到极致:
- 停止同步提取 —— 不在每条消息后跑高延迟、低质量的 fact extraction;
- 引入异步睡眠流 —— 参考 Anthropic 的 Dreams 或 Letta 的 sleep-time compute,闲时跑离线管道做合并、去重、对矛盾按最新值裁决;
- 保留历史,靠分层检索 —— 不删数据,靠时效性权重和主题过滤器让最新事实压过陈旧事实。
前瞻性记忆:从”定时任务”转向”条件监听”
这是当前生产库的绝对蓝海。摆脱”在 T 时刻做 Y”的简单 cron 思路,去解决 “当条件 X 下次出现时做 Y”——在 agent loop 里加一层轻量级的”预设检查 / 意图监听器”,每次上下文更新时做低成本匹配,命中后把预存意图推入当前上下文窗口。
一句话工程落地方案:程序记忆去优化 Prompt,自传体语义记忆做离线巩固 RAG,前瞻记忆做条件监听。
Q: LangMem 的 GitHub 上只能看到两个 tool(create_manage_memory_tool 和 create_search_memory_tool),所谓的”程序记忆”在哪里?
那两个 tool 是让 agent 在对话热路径(hot path)上实时读写自传体语义事实用的。“程序记忆”不在 tool 层,而在 create_prompt_optimizer 这个独立的离线/后台优化器 API 里。
它的调用范式不是去读写向量库,而是 输入”历史轨迹 + 旧 Prompt”,输出”新 Prompt”:
from langmem import create_prompt_optimizer
# 1. 收集 Agent 的历史执行轨迹 + 评分反馈
trajectories = [
(
[{"role": "user", "content": "帮我写一段代码"}, ...],
{"score": 0.2, "feedback": "未遵循 JSON 格式"}
),
# ...
]
# 2. 创建 Prompt 优化器
optimizer = create_prompt_optimizer(
"anthropic:claude-3-5-sonnet-latest",
kind="metaprompt" # or "gradient" / "prompt_memory"
)
# 3. 演进 System Prompt
updated_prompt = optimizer.invoke({
"trajectories": trajectories,
"prompt": "你是一个严谨的资深产品经理。"
})
它的底层逻辑是**“基于真实轨迹反思 + 文本梯度下降”的闭环**:
- 一个 Meta-LLM(“教练模型”)去 review 带得分/反馈的执行轨迹;
- 识别 agent 在哪些 border cases 下没遵循既定规则;
- 把吸取的教训改写为更具体、不易产生歧义的约束指令,注入并更新原 System Prompt。
一句话区分:那两个 tool 解决的是 “What to know”(用户的事实),
create_prompt_optimizer解决的是 “How to do”(智能体的行为)。LangMem 在工程上真正把”事实存储”与”行为演进”分流成了两个机制,这就是 brgsk 评价它颇高的原因。
Q: create_prompt_optimizer 提供哪三种 kind?怎么避免越改越差?
按 LangMem 官方文档,kind 参数有三个选项,复杂度与 LLM 调用次数依次递增:
三种算法
prompt_memory(单步推断) — 最轻量的方式(仅 1 次 LLM 调用)。把历史轨迹丢给一个内置元提示,让大模型单步推断出原 Prompt 需要追加或微调什么指令。适合对成本和延迟极敏感的轻量后台任务。
metaprompt(元提示词反思) — Meta-LLM 像”全局教练”一样通读历史日志,反思 System Prompt 在设计上的边界漏洞和歧义,然后用一套更健壮的提示词框架做整体重构。
gradient(文本梯度下降) — 最强大也最重,通常 2 到 10 次 LLM 调用。模仿深度学习的”梯度下降”:
- 计算文本梯度 — 第一步调用 LLM 分析历史轨迹与反馈,找出实际输出与预期目标之间的差距,生成一份详细说明哪些规则失效、需要如何修正的”文本梯度”;
- 应用梯度更新 — 第二步调用另一个 LLM,把这些建议精准融合进原 Prompt。
四层防退化护栏
自动化提示词优化最怕”按下葫芦起了瓢”——修了 A 的缺陷却毁掉了原本正常的 B。LangMem(及其背后的 Promptim 思路)有几层护栏:
- 基于得分轨迹(Scored Trajectories)的严密锚定 — 不允许脱离实际的盲目改写。轨迹必须是真实日志,且强烈依赖附加的质量评分或反馈(
{"score": 0.2, "feedback": "..."}); - “先诊断、再下药”的责任归因 —
gradient模式下,第一步专门寻找”导致失败的规则根源”并产出批判性诊断,把”诊断错误(计算梯度)“与”应用修改(更新权重)“彻底分离; - 多步自省(
max_reflection_steps) — 优化器在组合出新 Prompt 后,在内部跑一轮模拟审判:“新规则是否与原有核心约束冲突?是否过于激进?“通过自省后才输出; - 验证集测试与最高分保留 — 优化器在小批量历史劣质轨迹上学习并提出新 Prompt 变体,再在保持不动的 held-out dev set 上跑全局评分,只有新 Prompt 在验证集上整体超过历史最高版本时,才采纳并覆盖原 Prompt,否则触发回滚。
这套机制本质上就是把软件工程里的回归测试 + 机器学习里的训练/验证集分离搬到 Prompt 层,确保整体性能只进不退。
Q: 给 create_prompt_optimizer 的 trajectories,仅传对话原文够吗?
技术上够,工程上强烈不建议。LangMem 的语法允许你只丢”纯对话原文”,但要让 Prompt 优化器越改越聪明、不产生负面退化,附加信息(评分 + 反馈)才是它计算文本梯度的真正灵魂。
一条高质量的轨迹是个元组(tuple),通常包含两部分:
- 定量评分(Score) — 例如
0.0到1.0,明确告知优化器这次交互是 Good Case 还是 Bad Case; - 定性反馈(Feedback) — 具体痛点描述,如
"未遵循 JSON 格式要求"、"语气太生硬"、"答非所问,把快速排序写成了冒泡排序",给大模型指明改 Prompt 的具体方向。
trajectories = [
# Bad Case:明确负向反馈
(
[{"role": "user", "content": "帮我写快速排序"},
{"role": "assistant", "content": "这里是冒泡排序:..."}],
{"score": 0.1, "feedback": "严重错误!用户要快速排序,给了冒泡排序"}
),
# Good Case:正向确认
(
[{"role": "user", "content": "分析这份财务报表"},
{"role": "assistant", "content": "..."}],
{"score": 1.0, "feedback": "结构清晰,优先列出核心指标"}
),
]
不带附加信息会让优化器陷入三种困境:
- 无法做”责任归因” — Meta-LLM 不知道哪句让用户满意、哪句触发了反感,无法精准定位 System Prompt 中哪条规则失效;
- 无法锚定”文本梯度” —
gradient算法的核心就是拿”实际输出”对比”预期目标”算差距,feedback 就是这个差距的文字表述; - 无法防止毁灭性过度矫正 — 没有 1.0 满分的轨迹做护栏,新规则极易在修复 A 的同时破坏原本就做得很好的 B。
Q: 离线记忆巩固在 Anthropic Dreams 与 Letta sleep-time compute 里,具体长什么样?
两者都把”在闲置时离线重组累积的记忆”做成了产品级机制,但形态略有不同。
Anthropic Dreams:异步管道 + 全新输出存储
Dreams 是 Managed Agents 中 Build persistent memory 模块下的 Research Preview 特性,需要 dreaming-2026-04-21 beta header。它是一个异步任务,输入两类资源:
- 一个已有的 memory store —— Claude 会去验证、去重、重组的存储库;
- 1 到 100 个 sessions —— Claude 从这些过往对话流水里挖掘模式与洞察,融合到输出中。
Dreams 的输入存储库永远不会被修改,它产出的是另一个独立的输出 memory store,你可以审查后选择启用或丢弃。
dream = client.beta.dreams.create(
inputs=[
{"type": "memory_store", "memory_store_id": store_id},
{"type": "sessions", "session_ids": [session_a, session_b]},
],
model="claude-opus-4-8",
instructions="Focus on coding-style preferences; ignore one-off debugging notes.",
)
dream 的状态机:pending → running → completed/failed/canceled。运行时通常需要数分钟到数十分钟,可通过 polling 跟踪 status 与 usage。当一个 dream 在 running 时,它的 session_id 字段指向正在执行管道的底层 session,可以流式订阅这个 session 的事件,实时观察 dream 在读写什么。
限制:单次 dream 最多 100 个 sessions,instructions 不超过 4096 字符。计费按所选模型的标准 API token 费率,与输入 sessions 的数量和长度大致线性相关。
Letta sleep-time compute:双 agent 架构 + 异步内存编辑
Letta 把这套思路落到了 开源 Letta 0.7.0+ 的一个新 agent 类型上。内部实际上跑了两个 agent:
- Primary agent(主智能体) —— 与用户对话,可调用工具、检索归档记忆(archival memory),但没有编辑核心记忆(core memory)的工具;
- Sleep-time agent(睡眠时智能体) —— 拥有编辑 primary agent 核心记忆 + 自身核心记忆的工具,在后台异步重组上下文。
这种分工解决了 MemGPT 1.0 里”内存管理 + 对话 + 工具调用全挤在一个 agent”导致的慢和不可靠问题。两个 agent 可独立配置不同模型——latency 敏感的 primary 用 gpt-4o-mini,不那么敏感的 sleep-time 可以用 gpt-4.1 或 Sonnet 3.7 这类更强模型来”想得更深”。
底层论文 arXiv:2504.13171 在 AIME、GSM 等数学基准上证明了:sleep-time compute 是一种 Pareto improvement——把计算负载从高延迟的用户交互期挪到本来就空闲的时段,性能不降反升。
共同点:两者都用异步、调度执行的方式做记忆巩固,把高质量但耗时的记忆重组从用户的等待时间里剥离出去;都通过让一个独立的”管理 agent / 管道”专职处理 store,来避免主对话 agent 在每条消息后都被 fact extraction 拖慢。
Q: brgsk 的原文里,哪些引用是承重支柱?它们各自在论证什么?
整篇文章用四类引用搭起了论证骨架——理论奠基石、靶子、路标、互补视角。
一、理论奠基石:图尔温 + 巴德利与希契
- Endel Tulving, “Episodic and Semantic Memory” (1972) —— 第一次把”记忆”拆成情节与语义两个独立系统;
- Endel Tulving, “How Many Memory Systems Are There?” American Psychologist 40 (1985) —— 引入程序记忆,确立非陈述性 vs 陈述性的高层划分;
- Baddeley & Hitch, Working Memory (1974) —— 把工作记忆作为独立的短期处理系统提出来。
作用:这是 brgsk 整篇文章的批判起点。他用这套半个世纪的认知科学分类当作”尺子”,去丈量当今 LangMem、Mem0、Graphiti 等库——结论是”这些库直接搬走了术语,工程实现却根本没跟上”。
二、批判靶子:斯坦福小镇论文(朴俊成等,2023)
- Joon Sung Park et al., “Generative Agents: Interactive Simulacra of Human Behavior,” arXiv:2304.03442 (2023)
这是引爆”AI 虚拟小镇”的开创性论文,它为大模型 agent 设计了一套 memory stream 架构:每条记忆通过 LLM 打 1–10 分评估”深刻度(poignancy)“,结合时间衰减(recency)和语义相关度(relevance)做加权检索。
作用:brgsk 用它当反面教材或检验靶子——
- 批判假情感:让 LLM 强行打分模仿杏仁核,本质是”没有情感的模型在估计情感”,结构性缺失;
- 批判盲目模仿遗忘:用时间权重让记忆自然衰减,是把”人类大脑带宽不够”这个约束当成了功能导入。
三、正路标杆:Letta sleep-time compute + Anthropic Dreams
- Letta blog: Sleep-time Compute (2025) + 论文 arXiv:2504.13171;
- Anthropic Dreams 文档(2026 beta)。
作用:mid-2026 的两个生产级”正面代表”,证明在工程上把生物学的”睡眠巩固”机制做对的姿势是——用离线算力(offline compute)在会话间隙对累积记忆做非破坏性重组,而不是在每条消息后同步跑提取。
四、互补视角:Sebastian Lund(塞巴斯蒂安·伦德,Cria 提示词组合库的作者)的 Ultimate Guide to LLM Memory
伦德完全绕开认知科学的生物类比,从运行时 Prompt 窗口被什么填充的工程视角,把 LLM 记忆切成四层:Working / Episodic / Semantic / Document——本质上是在描述”提示词组合(Prompt Composition)“的策略,而非记忆的本体论。
作用:brgsk 在文末特意点出伦德的视角”轴线不同但完全兼容”——他自己的轴线是**“在工程化之前的记忆类型本体”,伦德的轴线是”运行时怎么把记忆塞进 Prompt 窗口”**。两个不同维度的划分恰好可以”完美拼合(compose)“,给开发者一张更全面的全景图。
Q: 这四个延伸资源的链接和一句话总结?
| 资源 | 链接 | 一句话总结 |
|---|---|---|
| brgsk 原文 | agent memory: an anatomy | 用图尔温的认知科学分类当尺子,揭露当下智能体记忆库”概念高大上、工程靠打标签”的伪记忆现状,并指明分流架构 + 离线巩固的正路 |
| LangMem | github.com/langchain-ai/langmem | LangChain 推出的智能体记忆库,工程上把”实时事实读写”和”独立的后台 Prompt 优化器”分流成两个机制,是少数把程序记忆做对的库 |
| Letta sleep-time compute | letta.com/blog/sleep-time-compute | arXiv:2504.13171 | 用闲置时段的后台 sub-agent 异步重写并合并归档记忆,论文在 AIME/GSM 等基准上证明这是一种 Pareto improvement |
| Anthropic Dreams | platform.claude.com/docs/en/managed-agents/dreams | Managed Agents 的离线管道 beta 特性,吃进 memory store + 过往 sessions,输出一个全新的、合并矛盾、保留最新值、并提炼跨会话洞察的存储库(输入永不被改) |
| 斯坦福小镇论文 | arXiv:2304.03442 | Generative Agents 的开创性论文,提出 LLM 给记忆打 1–10 深刻度分 + recency × importance × relevance 加权检索的 memory stream 架构 |
| Sebastian Lund’s Ultimate Guide to LLM Memory | fastpaca.com/blog/ultimate-guide-to-llm-memory | 从”运行时 Prompt 窗口怎么被填充”的工程视角,把 LLM 记忆切成 Working / Episodic / Semantic / Document 四层,是对认知科学分类的互补视角 |
参考资料
- agent memory: an anatomy(brgsk) —— 本文对话的源文章,用认知科学分类拆解智能体记忆库的本体论与工程现实
- LangMem GitHub —— LangChain 出品,含
create_manage_memory_tool、create_search_memory_tool、create_prompt_optimizer等核心 API - LangMem Optimize a Prompt 官方指南 —— 文档说明
kind="gradient" / "metaprompt" / "prompt_memory"三种优化算法 - Letta sleep-time compute blog —— 双 agent 架构(primary + sleep-time)的产品介绍
- arXiv:2504.13171 — Sleep-time Compute: Beyond Inference Scaling at Test-time —— Letta 的研究论文,证明 sleep-time compute 在 AIME / GSM 上的 Pareto improvement
- Anthropic Dreams 文档 —— Managed Agents 的离线记忆巩固 beta 特性,含 API、生命周期、计费与限制说明
- arXiv:2304.03442 — Generative Agents: Interactive Simulacra of Human Behavior(Park et al.) —— 斯坦福小镇论文,poignancy 评分 + 加权检索的 memory stream 架构(被 brgsk 当批判靶子使用)
- Endel Tulving (1972), “Episodic and Semantic Memory” —— 情节记忆 vs 语义记忆的奠基章节,收录在 Organization of Memory(Academic Press)
- Endel Tulving (1985), “How Many Memory Systems Are There?” American Psychologist 40 —— 引入程序记忆,确立陈述/非陈述性的二级划分
- Sebastian Lund — Ultimate Guide to LLM Memory —— 从 Prompt 组合工程视角划分 Working / Episodic / Semantic / Document 四层
- MemGPT 论文(arXiv:2310.08560) —— Letta 团队最早提出”分层、自管理”的 LLM 记忆架构,sleep-time compute 是其后续演进