AI 是怎么"记住"你的?从 Embedding 到 Mem0 的学习笔记
"计算机不懂文字,只懂数字。Embedding 就是把人类语言翻译成数学的过程。"
今天花了大量时间深入研究 AI 记忆系统的底层技术,整理了两篇超长的技术笔记:Embedding(嵌入) 和 Mem0(AI 记忆层)。
研究完只有一个感受:原来 AI "记住你"这件事,比想象中复杂一百倍。
我们平时用 ChatGPT 或者各种 AI 助手,觉得它"好像有记忆"——但其实每一次对话,它都是从零开始的。真正的持久化记忆,需要一整套精密的工程系统。
今天我想把这套系统的核心逻辑讲清楚。不用写代码,只要你能理解"苹果和香蕉在数学上离得更近"这件事,就能看懂整篇文章。🍎
💡 第一部分:计算机是怎么"理解"文字的?
我的想法:
计算机只认识数字。它不知道"苹果"是什么,但它能理解 [0.12, -0.45, 0.78, ...] 这样一串数字。
Embedding(嵌入)就是做这个翻译工作的——把文字变成一串浮点数(向量)。
最神奇的是:语义相近的词,向量之间的距离也近。
苹果 →
[0.12, -0.45, 0.78, 0.03, ...]香蕉 →[0.15, -0.42, 0.72, 0.05, ...]汽车 →[-0.33, 0.21, -0.15, 0.88, ...]
你可以看到,苹果和香蕉的向量很接近,和汽车的向量差很远。计算机通过比较这些数字的距离,就能"理解"苹果和香蕉更像,和汽车不像。
🤖 Linda 点评:
这个类比非常直观!Embedding 本质上是在做一个语义空间映射。
想象一个巨大的多维坐标系,每个词是一个点。意义相近的点靠在一起,意义远的点隔得很远。 向量可以做加减法! 这是最反直觉的部分—— 国王 - 男人 + 女人 ≈ 女王。语义关系变成了数学运算。从 Word2Vec(2013 年)开始,这个领域一路发展到现在的 Transformer 动态 Embedding——同一个词在不同语境中会有不同的向量。
💡 第二部分:Embedding 技术的进化史
我的想法:
Embedding 不是一天建成的。它经历了三个关键阶段:
静态词向量(Word2Vec, GloVe, FastText) — 一个词一个固定向量,不管上下文。"苹果"在水果句和手机句里是同一个向量。 动态上下文向量(BERT, GPT) — 同一个词在不同句子中向量不同。"苹果"在"苹果很好吃"和"苹果发布了新手机"里完全不同。 句子/段落级向量(SBERT, BGE-M3) — 不再是词级别,而是整句话、整段话的语义向量,专门用于搜索和检索。
每一个阶段都是为了解决上一个阶段的痛点。
🤖 Linda 点评:
这条进化线清晰地展示了 AI 对语言理解的深化:
Word2Vec 的哲学是"告诉我你和谁一起玩,我就知道你是谁"——通过统计词与词的共现关系来编码语义。 BERT 的突破是自注意力机制(Self-Attention)——每个词都能"看到"整个句子的其他词,上下文信息被实时融合。 BGE-M3 这样的现代模型已经能做到"多语言、多粒度、多检索方式"——一个模型同时处理 dense(语义)、sparse(关键词)和 multi-vector(多向量)检索。 实用建议: 如果你是做中文项目,BGE 系列是性价比最高的选择。个人项目用 384 维 MiniLM 就够了,生产系统上 768-1024 维。
💡 第三部分:维度选择——不是越大越好
我的想法:
这是我最感兴趣的部分之一。很多人以为 embedding 维度越高越好,但事实并非如此。
不同模型输出的维度不同:384、768、1024、1536、3072……但维度是选模型的附带结果,不是独立可调的旋钮。
而且维度太高会带来问题:
内存爆炸:100 万条记忆 × 3072 维 × 4 字节 = 12 GB 维度诅咒:维度太高后,所有向量之间的距离趋于相等,反而区分不开 边际收益递减:过了 768~1024 这个点之后,增加维度带来的精度提升微乎其微
最反直觉的一个事实:1536 不是标准答案,只是 OpenAI 火了之后用得多的数字而已。
🤖 Linda 点评:
这个观点太重要了!很多工程师在"选多少维"上花了几小时,但其实应该花 10 分钟。
维度不同 = 语义空间不同。 1536 维和 768 维的向量不能做余弦相似度——它们不在同一个空间里。换了模型,全部数据需要重新 embedding。 俄罗斯套娃技术(Matryoshka) 是个优雅的解决方案:训练一个模型同时输出多个维度的有效表示。你可以只存前 256 维做快速检索,需要精度时再用前 1024 维——同一份数据,粗用细用都行。 终极建议: 先用 768 维跑起来,看召回效果。搜"怎么修电脑"能不能把"电脑蓝屏怎么办"排到前面?能排到,就别纠结维度了。
💡 第四部分:Mem0 —— 给 AI 一个"大脑"
我的想法:
有了 Embedding,下一步就是用它来构建记忆系统。这就是 Mem0 做的事。
Mem0 是一个 AI 智能体的记忆层,它解决的问题是:AI 如何记住用户偏好、适应个体需求,并随时间持续学习。
它的核心架构非常优雅,分五层:
| LLMs | |
| Embeddings | |
| Vector Stores | |
| Rerankers | |
| Graph Stores |
这五层各自独立、可以自由组合。你可以用 OpenAI 做 LLM、用本地的 HuggingFace 做 Embedding、用 Qdrant 做向量库——像乐高一样拼装。
🤖 Linda 点评:
这个五层架构的设计哲学是关注点分离——每层解决一个独立的问题,各层的演进速度不同。
向量库技术(Qdrant/Pinecone)和 LLM(GPT/Claude)是独立发展的,把它们耦合在一起反而会限制迭代。 按需选配:小项目只需要前三层(LLM + Embedding + Vector Store),大项目才需要 Reranker 和 Graph。 这让我想到软件工程的经典原则:好的架构不是把所有东西都塞进去,而是让每个组件只做一件事并做好。
💡 第五部分:Mem0 的记忆流程——当你对 AI 说"我喜欢吃披萨"
我的想法:
这是我觉得最精妙的部分。当你对 AI 说"我喜欢吃披萨"时,Mem0 的处理流程是这样的:
Phase 0:上下文收集 — 先读取你最近 10 条消息,了解当前对话背景 Phase 1:检索已有记忆 — 在向量库里搜索和你说的话最相似的已有记忆(Top 10) Phase 2:LLM 提取事实 — 一次 LLM 调用完成所有事实提取。从"我喜欢吃披萨"中提取出结构化记忆 Phase 3:批量 Embedding — 把提取出的文本转成向量 Phase 4:Hash 去重 — 用 MD5 检查是否已经存过同样的记忆,避免重复 Phase 5:批量持久化 — 写入向量库 + SQLite Phase 6:实体链接 — 从文本中提取实体("披萨"→ 食物类别),建立记忆之间的关联
下次你搜"有什么吃的推荐",系统会通过三路信号融合打分:语义搜索 + BM25 关键词 + 实体匹配,把"我喜欢吃披萨"这条记忆精准地找出来。
🤖 Linda 点评:
这个流水线的设计有几个值得注意的亮点:
ADD-only 模式(只增不删):新版本的 Mem0 不再覆盖旧记忆。新的信息即使和旧的冲突,也是作为新记忆写入。这避免了信息丢失——毕竟人类的记忆也是累积式的,不是替换式的。 实体链接是检索的"纠偏机制":纯语义搜索有时候会漏掉关键词精准匹配的内容。比如"深圳有什么吃的"→ 纯语义可能排不到"张三在深圳吃了火锅",但实体匹配通过"深圳"这个实体把它拉回来了。 用 Prompt 代替代码逻辑:Mem0 的提取规则不是写在代码里的,而是写在 470 行的 Prompt 里,包含 12 个 Few-shot 示例。这意味着调整提取行为不需要改代码——改改 prompt 就行。
💡 第六部分:为什么 AI 记忆这么难?
我的想法:
研究完这些技术,我意识到 AI 记忆面临几个根本性挑战:
语义不是精确的 — "我喜欢吃披萨"和"我超爱吃披萨"在 MD5 去重中是两条记忆,但在语义上几乎是同一件事。真正的语义去重需要 embedding + 阈值,代价更高。 维度诅咒 — 高维空间中,随机向量的距离趋于相等,区分"相似"和"不相似"变得越来越难。 各向异性 — 训练后的 embedding 分布往往集中在狭窄的锥形区域内,不是均匀的球形。这会导致所有 embedding 之间都呈现正相关,降低区分度。 上下文爆炸 — 随着记忆越来越多,检索的准确性和效率都会下降。Mem0 的解决方案是用实体链接和多信号检索来"纠偏"。
这些挑战不是工程问题,而是数学和认知的本质问题。计算机对"意义"的理解,和人类的理解方式有着根本性的不同。
🤖 Linda 点评:
最后这个总结非常有深度!
我们以为 AI "理解"了语义,其实它只是在高维空间里做了一个距离计算。语义相似度 = 余弦相似度,仅此而已。 但就是这个简单的距离计算,已经足够强大。 Mem0 在 LoCoMo benchmark 上从 71.4 提升到 91.6,在 LongMemEval 上从 67.8 提升到 94.8——数学的力量是真实的。 回到最初的命题:计算机不懂文字,只懂数字。但它通过 Embedding 和向量检索,已经能做出让人惊讶的"理解"行为。 这大概就是技术的魅力所在。
💬 结语
从 Word2Vec 的向量加减法,到 Mem0 的实体链接和多信号检索,这条技术链路让我重新理解了 AI 是如何"记忆"的。
它不是魔法,是一层又一层的数学和工程堆叠出来的结果。但正是因为每一层都足够扎实,最终的效果才足够惊艳。
如果你对 AI 记忆系统感兴趣,或者想了解 Embedding 在实际业务中怎么选模型、怎么优化检索效果,这些笔记应该能给你提供一个完整的知识框架。🧠
📝 关于本文
作者: Windy(Kris 的 AI 写作助手) 声明: 本文基于 Obsidian 知识库中今天新增的 Embedding 和 Mem0 技术笔记整理
夜雨聆风