<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>长时记忆 on 方糖猫Blog</title>
    <link>https://ftmao.com/blog/tags/%E9%95%BF%E6%97%B6%E8%AE%B0%E5%BF%86/</link>
    <description>AI 视频、AI Agent 与工程实践笔记</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Fri, 26 Jun 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://ftmao.com/blog/tags/%E9%95%BF%E6%97%B6%E8%AE%B0%E5%BF%86/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>Agent Memory 科普：用 Mem0 给 AI 加上长时记忆</title>
      <link>https://ftmao.com/blog/posts/agent-memory-mem0/</link>
      <pubDate>Fri, 26 Jun 2026 10:00:00 +0800</pubDate>
      <guid>https://ftmao.com/blog/posts/agent-memory-mem0/</guid>
      <description>&lt;h1 id=&#34;agent-memory-科普用-mem0-给-ai-加上长时记忆&#34;&gt;Agent Memory 科普：用 Mem0 给 AI 加上长时记忆&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;做 AI 应用时，经常会遇到一个尴尬：用户上一句还在说「我 gluten-free」，下一句推荐餐厅时模型就忘了。上下文窗口再长也解决不了「跨会话记忆」的问题，这就需要 Agent Memory。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一为什么需要-agent-memory&#34;&gt;一、为什么需要 Agent Memory？&lt;/h2&gt;
&lt;p&gt;大语言模型有两个和记忆相关的瓶颈：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;上下文窗口有限&lt;/strong&gt;：模型只能看到当前输入的若干 token，超出部分会被截断或遗忘。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;无法跨会话保留信息&lt;/strong&gt;：每次对话都是独立请求，模型不会记住你上周说过的话。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Agent Memory 就是用来解决这些问题的：它把重要信息从对话中提取出来，持久化存储，在后续交互中按需召回。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;二记忆的分类&#34;&gt;二、记忆的分类&lt;/h2&gt;
&lt;p&gt;记忆通常可以分为短期记忆和长期记忆两大类。&lt;/p&gt;
&lt;h3 id=&#34;21-短期记忆&#34;&gt;2.1 短期记忆&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;语义缓存&lt;/strong&gt;：临时把刚刚检索到的外部知识（比如 RAG 召回结果）放在当前上下文里。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工作记忆&lt;/strong&gt;：当前会话的临时工作区，会话结束后清除。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;短期记忆主要依赖上下文窗口，属于「基于会话」的记忆。&lt;/p&gt;
&lt;h3 id=&#34;22-长期记忆&#34;&gt;2.2 长期记忆&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;程序性记忆（Procedural）&lt;/strong&gt;：工作流、工具调用、技能等执行层面的记忆。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;语义记忆（Semantic）&lt;/strong&gt;：知识库、个人信息、实体（人物、地点、组织）等事实性记忆。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;情景记忆（Episodic）&lt;/strong&gt;：某次对话的摘要、经历、事件细节。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;长期记忆需要外部存储，并且能被检索和更新。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;三agent-memory-项目概览&#34;&gt;三、Agent Memory 项目概览&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;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Text2Mem&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;给所有记忆系统定义「操作指令集」，12 个原子操作 + 五元 JSON 契约 + 双层验证&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Mem0&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;GitHub Star 最多的记忆中间件，5 个工厂 / 双存储 / 三种记忆类型&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Letta&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;把 OS 虚拟内存思想搬进 Agent，Git 版本化记忆 + Sleeptime 异步后台学习&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;ReMe&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;阿里 AgentScope 出品，「文件即记忆」，记忆对用户完全透明可直接编辑&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;memU&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;让记忆本身变成一个 24/7 后台主动 Agent&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这篇文章重点介绍 &lt;strong&gt;Mem0&lt;/strong&gt;，因为它是目前工程化落地最方便、生态最好的一个。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四mem0-简介&#34;&gt;四、Mem0 简介&lt;/h2&gt;
&lt;p&gt;Mem0 是一个为大模型应用设计的&lt;strong&gt;长时记忆中间件&lt;/strong&gt;。它把「记忆」这件事从业务代码中抽离出来，变成一个独立、可配置的组件。&lt;/p&gt;
&lt;p&gt;简单理解，Mem0 在 LLM 和向量数据库之间加了一层「记忆管理层」。你只需要调用统一的 &lt;code&gt;Memory&lt;/code&gt; 接口去 &lt;code&gt;add&lt;/code&gt;、&lt;code&gt;search&lt;/code&gt;、&lt;code&gt;get_all&lt;/code&gt;，底层用的是哪家向量库、哪个 Embedding 服务、是否接图数据库，它都帮你封装好了。&lt;/p&gt;
&lt;h3 id=&#34;41-核心架构&#34;&gt;4.1 核心架构&lt;/h3&gt;
&lt;p&gt;Mem0 主要由三部分组成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Embedder（向量化模块）&lt;/strong&gt;：支持 OpenAI、Ollama、HuggingFace、Azure OpenAI、Gemini 等。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VectorStore（向量存储）&lt;/strong&gt;：支持 Upstash Vector、Qdrant、OpenSearch、PGVector、Milvus、Chroma 等。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory 层&lt;/strong&gt;：对外暴露统一的 &lt;code&gt;Memory&lt;/code&gt; / &lt;code&gt;AsyncMemory&lt;/code&gt; 类，负责把对话、事件等转换成向量并写入/读出，同时可选接入图数据库和本地 SQLite 历史库。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;42-一个最小-demo&#34;&gt;4.2 一个最小 Demo&lt;/h3&gt;
&lt;p&gt;下面是用 Upstash Vector 做向量库、vLLM 部署大模型和 Embedding 模型的最小示例：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; mem0 &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Memory
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;config &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;embedder&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;provider&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;openai&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;config&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;api_key&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EMPTY&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;openai_base_url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://localhost:5001/v1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;model&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;custom_embedding&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;vector_store&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;provider&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;upstash_vector&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;config&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;token&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;collection_name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;memory_test&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;enable_embeddings&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;llm&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;provider&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;vllm&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;config&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;model&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;qwen25&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;vllm_base_url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://localhost:5002/v1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;api_key&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EMPTY&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;memory &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Memory&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;from_config(config)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;conversation_history &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chat_with_memories&lt;/span&gt;(user_input: str, user_id: str &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;default_user&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; str:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 1. 先检索相关记忆&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    relevant_memories &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; memory&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;search(query&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;user_input, user_id&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;user_id, limit&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    memories_str &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;- &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;entry[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;memory&amp;#39;&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; entry &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; relevant_memories[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;results&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    system_prompt &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;You are a helpful AI. Answer based on query and memories.&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;User Memories:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;memories_str&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 2. 调用 LLM 生成回复&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    messages &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;role&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;system&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: system_prompt}]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    messages&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;extend(conversation_history)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    messages&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append({&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;role&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: user_input})
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    assistant_response &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; call_llm(messages&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;messages)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    conversation_history&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append({&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;role&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: user_input})
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    conversation_history&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append({&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;role&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;assistant&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: assistant_response})
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 3. 把对话写回记忆库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    memory&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;add(messages, user_id&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;user_id)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; assistant_response&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;这个 Demo 展示了 Mem0 最核心的用法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;search&lt;/code&gt;：在回复前检索相关记忆。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add&lt;/code&gt;：把对话写回记忆库，让 LLM 自动抽取事实。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;五mem0-的适配逻辑&#34;&gt;五、Mem0 的适配逻辑&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Memory.from_config(config)&lt;/code&gt; 初始化时，会同时初始化多个组件：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Memory&lt;/span&gt;(MemoryBase):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;__init__&lt;/span&gt;(self, config: MemoryConfig &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; MemoryConfig()):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;config &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; config
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;embedding_model &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; EmbedderFactory&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;create(&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;vector_store &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; VectorStoreFactory&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;create(&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;llm &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; LlmFactory&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;create(&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;db &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; SQLiteManager(self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;config&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;history_db_path)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;h3 id=&#34;51-数据库适配&#34;&gt;5.1 数据库适配&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;VectorStoreFactory&lt;/code&gt; 通过一个 &lt;code&gt;provider_to_class&lt;/code&gt; 映射，把 provider 名称映射到对应的向量库类：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;VectorStoreFactory&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    provider_to_class &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;qdrant&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mem0.vector_stores.qdrant.Qdrant&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;chroma&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mem0.vector_stores.chroma.ChromaDB&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pgvector&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mem0.vector_stores.pgvector.PGVector&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;upstash_vector&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mem0.vector_stores.upstash_vector.UpstashVector&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;只要实现 &lt;code&gt;VectorStoreBase&lt;/code&gt; 的抽象方法，就可以接入自定义向量库。&lt;/p&gt;
&lt;h3 id=&#34;52-llm-适配&#34;&gt;5.2 LLM 适配&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;LlmFactory&lt;/code&gt; 除了返回模型类，还会返回对应的配置类：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;LlmFactory&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    provider_to_class &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ollama&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mem0.llms.ollama.OllamaLLM&amp;#34;&lt;/span&gt;, OllamaConfig),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;openai&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mem0.llms.openai.OpenAILLM&amp;#34;&lt;/span&gt;, OpenAIConfig),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;vllm&amp;#34;&lt;/span&gt;: (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mem0.llms.vllm.VllmLLM&amp;#34;&lt;/span&gt;, VllmConfig),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;以 &lt;code&gt;VllmConfig&lt;/code&gt; 为例，它的 &lt;code&gt;temperature&lt;/code&gt; 默认是 &lt;strong&gt;0.1&lt;/strong&gt;，&lt;code&gt;top_p&lt;/code&gt; 默认是 &lt;strong&gt;0.1&lt;/strong&gt;，说明 Mem0 官方推荐记忆操作尽量保持确定性，避免随机性导致记忆抽取不一致。&lt;/p&gt;
&lt;h3 id=&#34;53-embedding-适配&#34;&gt;5.3 Embedding 适配&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;EmbedderFactory&lt;/code&gt; 同样用 provider 映射实现：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EmbedderFactory&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    provider_to_class &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;openai&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mem0.embeddings.openai.OpenAIEmbedding&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ollama&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mem0.embeddings.ollama.OllamaEmbedding&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;huggingface&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mem0.embeddings.huggingface.HuggingFaceEmbedding&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;因为 vLLM 兼容 OpenAI 协议，所以部署本地 Embedding 模型时可以直接配置 &lt;code&gt;provider: openai&lt;/code&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;六mem0-的核心流程&#34;&gt;六、Mem0 的核心流程&lt;/h2&gt;
&lt;p&gt;Mem0 最重要的两个函数是 &lt;code&gt;search&lt;/code&gt; 和 &lt;code&gt;add&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;61-search检索记忆&#34;&gt;6.1 search：检索记忆&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;search&lt;/code&gt; 的逻辑很直接：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把 query 转成 embedding 向量。&lt;/li&gt;
&lt;li&gt;在向量库中按 &lt;code&gt;user_id&lt;/code&gt; / &lt;code&gt;agent_id&lt;/code&gt; / &lt;code&gt;run_id&lt;/code&gt; 过滤后做相似度搜索。&lt;/li&gt;
&lt;li&gt;如果配置了 reranker，对结果做重排序。&lt;/li&gt;
&lt;li&gt;可选启用图存储，同时检索实体/关系。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_search_vector_store&lt;/span&gt;(self, query, filters, limit, threshold&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    embeddings &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;embedding_model&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;embed(query, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;search&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    memories &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;vector_store&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;search(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        query&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;query, vectors&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;embeddings, limit&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;limit, filters&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;filters
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 整理结果，过滤低于 threshold 的项&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;h3 id=&#34;62-add写入记忆&#34;&gt;6.2 add：写入记忆&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;add&lt;/code&gt; 是 Mem0 最复杂的函数。它会先让 LLM 从对话中抽取事实，再决定每条事实应该新增、更新、删除还是保持不变。&lt;/p&gt;
&lt;h4 id=&#34;第一步事实抽取&#34;&gt;第一步：事实抽取&lt;/h4&gt;
&lt;p&gt;Mem0 会根据是否有 &lt;code&gt;agent_id&lt;/code&gt; 以及消息角色，选择不同的抽取 prompt：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用户记忆抽取 prompt&lt;/strong&gt;：只从用户消息中提取事实，比如个人偏好、计划、职业信息等。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;助手记忆抽取 prompt&lt;/strong&gt;：只从助手消息中提取事实，比如助手的偏好、能力、性格特征等。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;返回格式是一个 JSON：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;facts&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;姓名是 John&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;正在旧金山找餐厅&amp;#34;&lt;/span&gt;]}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;h4 id=&#34;第二步冲突检测与决策&#34;&gt;第二步：冲突检测与决策&lt;/h4&gt;
&lt;p&gt;对每个新事实，Mem0 会在向量库中搜索相似的已有记忆，然后把「新事实 + 已有记忆」一起交给 LLM，让它判断每条记忆应该执行：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ADD&lt;/strong&gt;：新增一条记忆。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;：更新已有记忆。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DELETE&lt;/strong&gt;：删除矛盾或过时的记忆。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NONE&lt;/strong&gt;：无需变更。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了避免 LLM 幻觉 UUID，Mem0 会把已有记忆的 UUID 映射成 &lt;code&gt;0, 1, 2...&lt;/code&gt; 这样的临时 ID，LLM 决策后再映射回真实 ID 执行操作。&lt;/p&gt;
&lt;h3 id=&#34;63-流程记忆procedural-memory&#34;&gt;6.3 流程记忆（Procedural Memory）&lt;/h3&gt;
&lt;p&gt;Mem0 还有一种特殊的 &lt;code&gt;procedural_memory&lt;/code&gt;，专门面向多步任务 Agent。它记录的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;任务目标与当前进度&lt;/li&gt;
&lt;li&gt;按序执行的每一步动作&lt;/li&gt;
&lt;li&gt;每步动作的原始输出&lt;/li&gt;
&lt;li&gt;关键发现、浏览历史、错误与挑战&lt;/li&gt;
&lt;li&gt;当前上下文与下一步计划&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种记忆适合需要跨多轮继续执行的复杂任务，比如自动化网页操作、数据采集等。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;七mem0-的优势与适用场景&#34;&gt;七、Mem0 的优势与适用场景&lt;/h2&gt;
&lt;h3 id=&#34;71-优势&#34;&gt;7.1 优势&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;接口简单&lt;/strong&gt;：&lt;code&gt;add&lt;/code&gt; / &lt;code&gt;search&lt;/code&gt; / &lt;code&gt;get_all&lt;/code&gt; 就能覆盖大部分需求。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解耦底层&lt;/strong&gt;：向量库、Embedding、LLM 都可以替换。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自动抽取与消冲突&lt;/strong&gt;：不需要自己写事实抽取和去重逻辑。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;工程化友好&lt;/strong&gt;：配置驱动，容易接入现有项目。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;72-适用场景&#34;&gt;7.2 适用场景&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;多轮对话助手：记住用户偏好、历史需求。&lt;/li&gt;
&lt;li&gt;个性化推荐/客服：结合用户画像做推荐。&lt;/li&gt;
&lt;li&gt;多步任务 Agent：记录任务进度和中间结果。&lt;/li&gt;
&lt;li&gt;知识库 + 用户偏好结合：既检索文档，也记住用户个人情况。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;八与其他记忆项目的关系&#34;&gt;八、与其他记忆项目的关系&lt;/h2&gt;
&lt;p&gt;Agent Memory 是一个正在快速发展的领域，不同项目侧重点不同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果你需要&lt;strong&gt;快速落地&lt;/strong&gt;一个带记忆的 LLM 应用，&lt;strong&gt;Mem0&lt;/strong&gt; 是目前最稳妥的选择。&lt;/li&gt;
&lt;li&gt;如果你需要&lt;strong&gt;严格的记忆操作语义&lt;/strong&gt;，可以关注 &lt;strong&gt;Text2Mem&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;如果你需要&lt;strong&gt;版本化和后台学习&lt;/strong&gt;，&lt;strong&gt;Letta&lt;/strong&gt; 更有趣。&lt;/li&gt;
&lt;li&gt;如果你希望&lt;strong&gt;记忆对用户透明可编辑&lt;/strong&gt;，&lt;strong&gt;ReMe&lt;/strong&gt; 是另一种思路。&lt;/li&gt;
&lt;li&gt;如果你希望&lt;strong&gt;记忆本身变成主动 Agent&lt;/strong&gt;，&lt;strong&gt;memU&lt;/strong&gt; 的方向更激进。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;九总结&#34;&gt;九、总结&lt;/h2&gt;
&lt;p&gt;Agent Memory 是 LLM 应用从「一次性问答」进化到「长期陪伴型产品」的关键基础设施。Mem0 把这个能力做成了一个可插拔的中间件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;统一接口&lt;/strong&gt;：&lt;code&gt;add&lt;/code&gt; / &lt;code&gt;search&lt;/code&gt; / &lt;code&gt;get_all&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;三层解耦&lt;/strong&gt;：Embedder、VectorStore、LLM 自由组合。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM 驱动&lt;/strong&gt;：自动抽取事实、检测冲突、决定增删改。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;三种记忆&lt;/strong&gt;：语义记忆、情景记忆、流程记忆，覆盖不同场景。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对于需要长期记忆的 AI 应用来说，Mem0 是一个值得优先考虑的底座。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;参考：Mem0 官方文档与 GitHub 仓库&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
