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

3.6 KiB
Raw Blame History

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