3.6 KiB
3.6 KiB
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,跑起来后再按需扩展。