# Mem0 架构详解 ## 整体架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Mem0 Server │ │ (总控,协调所有组件) │ └─────────────────────────────────────────────────────────────┘ │ │ │ │ ▼ ▼ ▼ ▼ ┌────────┐ ┌─────────┐ ┌──────────┐ ┌────────┐ │ TEI │ │ Qdrant │ │PostgreSQL│ │ LLM │ │(向量) │ │(向量库) │ │ (关系数据)│ │(回答) │ └────────┘ └─────────┘ └──────────┘ └────────┘ 生成向量 存/搜向量 存元数据/关系 生成自然语言 ``` ## 各组件职责 | 组件 | 类型 | 职责 | 你的环境 | |------|------|------|----------| | **TEI** | Text Embeddings Inference | 把文本转换成向量(embeddings) | BGE-M3 模型 | | **Qdrant** | 向量数据库 | 存储向量 + 原始文本,搜索相似向量 | tei namespace | | **PostgreSQL** | 关系数据库 | 存储用户数据、记忆元数据、关系链 | tei namespace | | **LLM** | 大语言模型 | 把向量检索结果组织成自然语言回答 | 待确认 | | **Neo4j** | 图数据库 | 存储记忆之间的关联关系(可选) | 可选,暂不需要 | ## 读写流程 ### 写入记忆(2次请求) ``` 用户 → Mem0: "今天吃了火锅" │ ├→ TEI: 生成向量 [0.123, -0.456, ...] │ │ ├→ Qdrant: 存储向量 + 原始文本 │ │ └→ PostgreSQL: 存储元数据/关系 ``` ### 搜索记忆(3次请求) ``` 用户 → Mem0: "最近吃了什么" │ ├→ TEI: 生成查询向量 [0.456, ...] │ │ ├→ Qdrant: 搜索相似向量 → 返回 "今天吃了火锅" │ │ ├→ PostgreSQL: 查询关联元数据 │ │ └→ LLM: 组织自然语言回答 │ ▼ 用户得到回答 ``` ## TEI 和 Qdrant 的关系 **TEI 和 Qdrant 完全独立,不知道对方存在**,全靠 Mem0 Server 在中间协调。 | 比喻 | 说明 | |------|------| | **TEI** | 翻译软件,把中文翻译成密码(向量) | | **Qdrant** | 图书馆,把密码对应的书存起来、搜出来 | ### 数据流 ``` Mem0 Server │ ├── 调用 TEI ────────→ TEI(只吐向量) │ └── 调用 Qdrant ──── → Qdrant(只存/搜向量) ``` ## 为什么需要两者 - **TEI**:把文字变成数字,才能做语义计算 - **Qdrant**:高效存储和搜索海量向量 两者缺一不可,分工不同。 ## Neo4j(可选) Neo4j 是图数据库,存储**记忆之间的关系**,用于复杂推理。 ### 何时需要 - 多跳问答("我老婆的表哥的同事") - 知识图谱构建 - 社交网络分析 ### 何时不需要 - 普通语义搜索 - 个人记忆库 - RAG 增强 **建议:先不加 Neo4j,只用 Qdrant + PostgreSQL,跑起来后再按需扩展。**