Files
knowledge-base/AI/mem0/02-architecture.md
hermes-bot 9fd51e7556 refactor: 重构目录结构
- 顶级目录改为 AI/
- 次级目录为具体技术(如 mem0)
- 仓库定位为综合知识库
2026-05-29 16:05:57 +00:00

100 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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跑起来后再按需扩展。**