<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>用户记忆 on Zewang's Blog</title><link>https://zewang0217.github.io/tags/%E7%94%A8%E6%88%B7%E8%AE%B0%E5%BF%86/</link><description>Recent content in 用户记忆 on Zewang's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Mon, 17 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://zewang0217.github.io/tags/%E7%94%A8%E6%88%B7%E8%AE%B0%E5%BF%86/index.xml" rel="self" type="application/rss+xml"/><item><title>深入理解 AI Agent（五）：用户记忆系统</title><link>https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><guid>https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/</guid><description>&lt;h1 id="深入理解-ai-agent五用户记忆系统"&gt;深入理解 AI Agent（五）：用户记忆系统
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;资料源：李博杰《深入理解 AI Agent：设计原理与工程实践》第3章（3.1 节）
开源仓库：https://github.com/bojieli/ai-agent-book （v1.4，2026-08-13）&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="一句话主线"&gt;一句话主线
&lt;/h2&gt;&lt;p&gt;第2章解决&amp;quot;单次任务内的上下文管理&amp;quot;，第3章处理更难的问题：&lt;strong&gt;如何让 Agent 在对话结束后仍然记住用户、记住知识&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这一篇（五）聚焦&lt;strong&gt;用户记忆&lt;/strong&gt;——面向个人的持久化知识。核心问题：怎么评估记忆好不好、存在哪里、用什么格式、怎么更新。书给出了三套正交的分类体系 + 一个完整生命周期。&lt;/p&gt;
&lt;h2 id="记忆生命周期提取--验证--更新"&gt;记忆生命周期：提取 → 验证 → 更新
&lt;/h2&gt;&lt;p&gt;用户记忆不保存每句对话，而是用额外的 LLM 调用&lt;strong&gt;提取、压缩并审查&lt;/strong&gt;对未来有用的事实。&lt;/p&gt;
&lt;p&gt;以订机票对话为例：用户说&amp;quot;帮我订下周五去东京的航班，我喜欢靠窗座位，我是素食者，需要特殊餐食&amp;quot;，Agent 回答后，框架调用专门的 LLM 分析对话，提取出值得长期记住的信息（偏好靠窗座位、素食、常旅客号、东京行程）。&lt;/p&gt;
&lt;p&gt;生命周期伪代码（注意：提取器可以提出候选，但&lt;strong&gt;不能自行把未核验的字符串当成事实&lt;/strong&gt;）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;answering&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;recent_turns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tail&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;relevant_memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LLM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;recent_turns&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;relevant_memory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="n"&gt;conversation&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt; &lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;candidates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;extract_memory_candidates&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;verified&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;verify_against_sources_and_policy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append_or_update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;verified&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="1420" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig01_memory_lifecycle.png" srcset="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig01_memory_lifecycle_hu_35e1c8e2ec724bf5.png 800w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig01_memory_lifecycle_hu_44f24cec5ed16f9d.png 1600w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig01_memory_lifecycle.png 2272w" width="2272"&gt;&lt;/p&gt;
&lt;p&gt;提取结果要满足三条规则：&lt;strong&gt;选择性&lt;/strong&gt;（丢弃&amp;quot;搜索返回 3 个选项&amp;quot;这类短期细节）、&lt;strong&gt;抽象化&lt;/strong&gt;（把本次&amp;quot;靠窗座位&amp;quot;归纳为长期偏好）、&lt;strong&gt;结构化&lt;/strong&gt;（用可检索的字段保存事实）。&lt;/p&gt;
&lt;h2 id="三层次评估框架什么样的记忆系统算好"&gt;三层次评估框架：什么样的记忆系统算&amp;quot;好&amp;quot;
&lt;/h2&gt;&lt;p&gt;动手设计前先立评估标准。书综合 LoCoMo 等公开基准与商业实践，提出递进的三层次：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;第一层·基础回忆&lt;/strong&gt;：准确存储和检索用户直接提供的、结构化无歧义信息（&amp;ldquo;我的会员号是 12345&amp;rdquo;）。记忆系统最基本的可靠性&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;第二层·多会话检索&lt;/strong&gt;：面对来自多个对象、不同时期的会话，能检索出所有相关信息并推理判断。用户有两辆车时问&amp;quot;为我的车预约保养&amp;quot;，系统要找出全部两辆车的信息并主动询问是哪辆，而不是猜&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;第三层·主动服务&lt;/strong&gt;（&amp;ldquo;助理&amp;quot;级别的试金石）：综合跨越很久的会话信息，提供预见性的主动帮助——订国际航班时主动关联数月前存的护照信息、发现即将过期并预警。要求系统在没有明确指令的情况下主动规避问题、整合复杂信息&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="记忆层次放哪里"&gt;记忆层次：放哪里
&lt;/h2&gt;&lt;p&gt;记忆分三个层次：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;轨迹（Trajectory）&lt;/strong&gt;：单次会话的完整原始记录，按时间追加、只增不改——&amp;ldquo;流水账&amp;rdquo;。为决策提供即时上下文&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用户长期记忆&lt;/strong&gt;：跨会话提炼的稳定信息，会被反复改写、合并、淘汰——&amp;ldquo;档案&amp;rdquo;。通过特定工具显式读取和更新&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;业务状态&lt;/strong&gt;：开发者定义的高层状态抽象（&amp;ldquo;需要澄清&amp;rdquo;/&amp;ldquo;处理请求中&amp;rdquo;/&amp;ldquo;等待付款&amp;rdquo;），事件驱动架构中尤为重要&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="三套分类体系不要混为一谈"&gt;三套分类体系：不要混为一谈
&lt;/h2&gt;&lt;p&gt;书特意用一张表厘清三套容易混淆的分类：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;分类体系&lt;/th&gt;
 &lt;th&gt;回答的问题&lt;/th&gt;
 &lt;th&gt;具体类别&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;记忆层次&lt;/td&gt;
 &lt;td&gt;存在哪里？&lt;/td&gt;
 &lt;td&gt;轨迹（当前会话）、用户长期记忆（跨会话）、业务状态（任务阶段）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;存储格式&lt;/td&gt;
 &lt;td&gt;怎么存？&lt;/td&gt;
 &lt;td&gt;Simple Notes、Enhanced Notes、JSON Cards、Advanced JSON Cards&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;认知类型&lt;/td&gt;
 &lt;td&gt;存什么？&lt;/td&gt;
 &lt;td&gt;情景记忆（具体事件）、语义记忆（一般知识）、程序记忆（行为流程）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;三套体系是&lt;strong&gt;正交&lt;/strong&gt;的，可以自由组合：一条&amp;quot;用户偏好靠窗座位&amp;quot;的语义记忆，可以用 Simple Notes 格式存在用户长期记忆里。选格式取决于工程需求（简单性 vs 表达力），选类型取决于业务场景（事实/事件/流程）。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="1420" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig02_three_taxonomies.png" srcset="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig02_three_taxonomies_hu_2496cb8477283c15.png 800w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig02_three_taxonomies_hu_23b14fbf1dee57f.png 1600w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig02_three_taxonomies.png 2272w" width="2272"&gt;&lt;/p&gt;
&lt;h2 id="四种存储格式简单性递减表达力递增"&gt;四种存储格式：简单性递减，表达力递增
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Simple Notes（极简）&lt;/strong&gt;：每条记忆是最小不可再分的事实（&amp;ldquo;用户邮箱：john@example.com&amp;rdquo;）。O(1) 开销极低，但信息关联性完全丢失——&amp;ldquo;在 TechCorp 担任高级工程师负责推荐系统&amp;quot;被拆成三个独立事实，同一份工作的内在联系被割裂。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enhanced Notes（整体论）&lt;/strong&gt;：每条记忆保存包含完整上下文的段落（&amp;ldquo;用户在 TechCorp 担任高级软件工程师，专注于机器学习已有三年…&amp;quot;）。语义完整、保留叙事结构；代价是存储冗余（相同信息多处重复）、更新复杂（属性变化需重写多个段落）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JSON Cards（三层结构化）&lt;/strong&gt;：类别 → 子类别 → 键值对（personal.contact.email）。支持部分更新（改 work.position.title 不影响 work.company.name），可预测可扩展。但刚性结构假设信息可清晰分类——&amp;ldquo;周末用 Python 开发个人项目&amp;quot;同时涉及时间/技术/活动类型，强制归单一类别丢失多维性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Advanced JSON Cards（知识管理范式）&lt;/strong&gt;：每个卡片不仅记录事实，还加入&lt;strong&gt;backstory&lt;/strong&gt;（信息来源的叙事背景）、&lt;strong&gt;person&lt;/strong&gt;（主体身份）、&lt;strong&gt;relationship&lt;/strong&gt;（与用户的关系）和时间戳。解决现实中的&lt;strong&gt;消歧&lt;/strong&gt;问题：用户有多位&amp;quot;张医生&amp;rdquo;（牙医 vs 心脏科医生），脱离情境无法区分。代价是生成和维护成本高。&lt;/p&gt;
&lt;p&gt;实践选择标准：关键且少量的数据（用户偏好、关键人物关系）用 Advanced JSON Cards；大量非关键的对话事实用 Simple Notes 降成本；&lt;strong&gt;多数生产系统采用混合模式&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="进阶形态可执行代码user-as-code"&gt;进阶形态：可执行代码（User as Code）
&lt;/h3&gt;&lt;p&gt;四种格式本质都是文本——擅长召回单条事实，却把聚合、冲突发现、约束执行交给 LLM&amp;quot;心算&amp;rdquo;。User as Code 把用户状态改成&lt;strong&gt;带类型的可执行对象&lt;/strong&gt;，规则写成普通函数，让&amp;quot;表示&amp;quot;和&amp;quot;推理&amp;quot;用同一种可验证介质。借鉴&amp;quot;预写日志 + 检查点&amp;rdquo;：会话后事实追加到只增日志，周期性从完整日志重建带类型状态。&lt;/p&gt;
&lt;p&gt;带类型状态把原本需要 LLM&amp;quot;读一遍再心算&amp;quot;的操作交给确定性函数：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trip&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;trip&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;trips&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;trip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_international&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;departure_date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2025&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# =&amp;gt; 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_drug_allergy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="c1"&gt;# 冲突发现：用药 vs 过敏史交叉比对&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;medication&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;current_medications&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;allergy&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;allergies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;medication&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drug_class&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;allergy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drug_class&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;emit_conflict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;medication&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;allergy&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="认知科学基础情景语义程序记忆"&gt;认知科学基础：情景、语义、程序记忆
&lt;/h2&gt;&lt;p&gt;人类记忆分工作记忆和长期记忆。工作记忆对应 Agent 的上下文窗口（轨迹是核心内容）；长期记忆分三种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;情景记忆（Episodic）&lt;/strong&gt;：具体事件和经历。&amp;ldquo;上周三和同事在那家意大利餐厅吃了顿很棒的晚餐&amp;rdquo; ↔ Agent 记录&amp;quot;用户订了下周五去东京的 ANA 航班&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;语义记忆（Semantic）&lt;/strong&gt;：从具体事件抽象出的一般知识。&amp;ldquo;意大利的首都是罗马&amp;rdquo; ↔ &amp;ldquo;用户是素食者&amp;rdquo;——从多次交互提炼的稳定特征&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;程序记忆（Procedural）&lt;/strong&gt;：行为模式和流程。&amp;ldquo;骑自行车的能力&amp;rdquo; ↔ &amp;ldquo;先搜直飞航班 → 确认座位偏好 → 用常旅客号 → 订餐&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="1420" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig03_memory_types_interaction.png" srcset="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig03_memory_types_interaction_hu_b9cf2b99d3faffff.png 800w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig03_memory_types_interaction_hu_6cda0dad74da2e85.png 1600w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig03_memory_types_interaction.png 2272w" width="2272"&gt;&lt;/p&gt;
&lt;p&gt;多类型记忆协同的参考架构：长期记忆（情景/语义/程序）+ 工作记忆，动态交互——重要信息选择性写入长期记忆，相关记忆按需激活加载。注意&lt;strong&gt;工作记忆 ≠ 轨迹&lt;/strong&gt;：轨迹是不可变的完整事件序列（按时间追加），工作记忆是经过筛选和激活的动态子集（按相关性裁剪）。&lt;/p&gt;
&lt;h2 id="记忆框架案例两种设计哲学"&gt;记忆框架案例：两种设计哲学
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Mem0：从&amp;quot;写入时消歧&amp;quot;到&amp;quot;检索时推理&amp;quot;&lt;/strong&gt;——一个很有启发性的演进：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;v2（2025 论文）&lt;/strong&gt;：对话结束后 LLM 抽取候选事实 → 向量检索相近已有记忆 → LLM 在 ADD/UPDATE/DELETE/NOOP 中决策。用户先说&amp;quot;住北京&amp;quot;后说&amp;quot;搬到上海&amp;quot;，系统把前一条 UPDATE 掉，&lt;strong&gt;写入时消除冲突&lt;/strong&gt;。优势：记忆库始终简洁一致；风险：一次错误更新/删除&lt;strong&gt;不可逆丢失历史&lt;/strong&gt;，且每条候选都要第二次 LLM 判断&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;v3（2026.4）&lt;/strong&gt;：只做 ADD（仅追加写入），&amp;ldquo;住北京&amp;quot;和&amp;quot;搬到上海&amp;quot;作为带时间信息的两条事实&lt;strong&gt;并存&lt;/strong&gt;。查询时融合语义相似度 + BM25 关键词 + 实体匹配 + 时间排序。&lt;strong&gt;让相关性在检索时解决冲突&lt;/strong&gt;。LoCoMo 从 71.4 → 92.5（+21.1），LongMemEval 67.8 → 94.4（+26.6）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="1420" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig04_mem0_v2_v3.png" srcset="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig04_mem0_v2_v3_hu_8698b16048b7da1f.png 800w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig04_mem0_v2_v3_hu_58bc1c9cb1c2a61a.png 1600w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig04_mem0_v2_v3.png 2272w" width="2272"&gt;&lt;/p&gt;
&lt;p&gt;这个演进呼应第2章的哲学：&lt;strong&gt;写入保持简单（只追加），把复杂性推迟到检索时解决&lt;/strong&gt;——避免不可逆的信息丢失。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memobase：用户画像 + 事件记忆&lt;/strong&gt;——聚焦&amp;quot;用户画像&amp;quot;这一具体形态：Profile（开发者配置的槽位，主题-子主题两级组织，精确控制范围和粒度）+ Event Memory（按时间线记录事件，回答&amp;quot;我们上次讨论预算是什么时候&amp;rdquo;）。缓冲批处理：对话先在缓冲区累积，达到规模/时限再统一触发提取，摊薄 LLM 调用成本。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="1420" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig05_memobase.png" srcset="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig05_memobase_hu_16d89bf727c644de.png 800w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig05_memobase_hu_43d1d596bfcc9a98.png 1600w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig05_memobase.png 2272w" width="2272"&gt;&lt;/p&gt;
&lt;h2 id="记忆压缩与整理"&gt;记忆压缩与整理
&lt;/h2&gt;&lt;p&gt;累积式存储会导致记忆爆炸。三层压缩：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;重要性评分筛选&lt;/strong&gt;：综合四因素——访问频率（越常检索越重要）、时间衰减（越久远越易忘）、情感强度、信息独特性（重复信息重要性降低）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;聚类&lt;/strong&gt;：相似记忆分组，每组生成代表性摘要（多次天气对话 → &amp;ldquo;用户经常询问天气，特别关心降雨&amp;rdquo;），原始细节存档二级存储&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;抽象泛化&lt;/strong&gt;：从具体情景记忆提取一般性规律，转化为语义/程序记忆（多次购物对话 → &amp;ldquo;偏好性价比高的产品&amp;rdquo;）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;冲突检测用&lt;strong&gt;版本化方法&lt;/strong&gt;：保留历史版本同时标记最新版本。某些信息（当前地址）只留最新，其他（工作经历）保留完整历史。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="1420" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig06_memory_compression.png" srcset="https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig06_memory_compression_hu_e3f3f7982fe8d7d0.png 800w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig06_memory_compression_hu_cd2b12f1c231048a.png 1600w, https://zewang0217.github.io/p/ai-agent-in-depth-ch3-user-memory/fig06_memory_compression.png 2272w" width="2272"&gt;&lt;/p&gt;
&lt;p&gt;边界澄清：本节是记忆存储层的整理算法；第2章的上下文压缩是单次会话内窗口问题；第8章把&amp;quot;在线追加证据、离线集中整理&amp;quot;推广到 Agent 行为进化。&lt;/p&gt;
&lt;h2 id="隐私保护日志脱敏"&gt;隐私保护：日志脱敏
&lt;/h2&gt;&lt;p&gt;核心挑战：让 Agent 利用用户信息提供个性化服务，又不让敏感数据暴露在 LLM 上下文和系统日志中。实验 3-3 用&lt;strong&gt;本地&lt;/strong&gt; Qwen3 0.6B 小模型做 PII 检测脱敏——选择本地部署而非云端 API 的原因很明确：日志本身可能包含敏感信息，发送到云端脱敏就违背了隐私保护初衷。相比正则，LLM 脱敏召回率 95%+、假阳性更低；超高吞吐用混合策略（正则快速过滤明显模式，LLM 深度分析剩余）。&lt;/p&gt;
&lt;h2 id="思考与延伸三套体系两种哲学四因素"&gt;思考与延伸：三套体系、两种哲学、四因素
&lt;/h2&gt;&lt;p&gt;学习这节时记下的几个点：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;记忆涉及的三套分类体系（正交）挺有意思的。Mem0 和 Memobase 的设计哲学也很有意思。情景记忆（episodic）带元数据的时间序列；语义记忆（semantic）抽象出的一般知识；程序记忆（procedural）可复用的行为流程。这三个是长期记忆，跨会话，可以加载到工作记忆里面。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;三套体系正交的实操意义：同一份信息可以同时按三种维度组织——&amp;ldquo;用户偏好靠窗座位&amp;quot;这条语义记忆，可以用 Simple Notes 格式存在用户长期记忆里。选格式看工程需求（简单性 vs 表达力），选类型看业务场景（事实/事件/流程）。设计记忆系统时三套都过一遍，不容易漏。&lt;/p&gt;
&lt;p&gt;Mem0 v2→v3 的哲学值得单独记住：&lt;strong&gt;写入保持简单（只追加），把复杂性推迟到检索时&lt;/strong&gt;——避免错误 UPDATE/DELETE 的不可逆信息丢失。这和&amp;quot;记忆系统不要轻易物理删除、靠版本化保留可追溯性&amp;quot;是同一条设计主线。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;记忆压缩与整理：重要性评分思路——访问频率、时间衰减、情感强度、信息独特性，四个标准可以参考。第二层是聚类实现，相似的记忆聚合到组，生成代表性摘要。第三层是抽象和泛化，从情景记忆提取出一般规律，转化为语义/程序记忆。同时，保留历史版本并标记最新版本。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;四标准其实是&lt;strong&gt;两个正向 + 两个防御&lt;/strong&gt;：访问频率 + 情感强度决定&amp;quot;多重要&amp;rdquo;（该留），时间衰减 + 信息独特性决定&amp;quot;多冗余&amp;quot;（该删）——组合起来就是一条记忆的存活分数，低过阈值就压缩或删。&amp;ldquo;保留历史版本 + 标记最新版本&amp;quot;与 Advanced JSON Cards（backstory/person/relationship）、Mem0 v3 的&amp;quot;仅追加&amp;quot;是同一条设计主线：&lt;strong&gt;记忆系统不要轻易物理删除，靠版本化保留可追溯性&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="小结"&gt;小结
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;记忆是提炼不是记录&lt;/strong&gt;：后台提取候选 → 来源与策略核验 → 更新；选择性、抽象化、结构化&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;三层次评估先行&lt;/strong&gt;：基础回忆 → 多会话检索 → 主动服务（主动服务最难，需要&amp;quot;全局概览 + 精确细节&amp;quot;双视角）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;三套分类体系正交&lt;/strong&gt;：层次（在哪）、格式（怎么存）、认知类型（存什么）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;格式选择是工程权衡&lt;/strong&gt;：Simple Notes 便宜但割裂，Advanced JSON Cards 表达力强但贵——生产用混合模式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;写入保持简单&lt;/strong&gt;：Mem0 v3 的&amp;quot;仅追加 + 检索时消歧&amp;quot;优于 v2 的&amp;quot;写入时更新删除&amp;rdquo;——避免不可逆丢失&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下一篇（六）讲知识库的检索技术基础：RAG——分块、稠密嵌入、稀疏嵌入、混合检索。&lt;/p&gt;</description></item></channel></rss>