refactor: 重构目录结构

- 顶级目录改为 AI/
- 次级目录为具体技术(如 mem0)
- 仓库定位为综合知识库
This commit is contained in:
hermes-bot
2026-05-29 16:05:57 +00:00
parent a6755089ab
commit 9fd51e7556
6 changed files with 13 additions and 11 deletions

44
AI/mem0/01-basics.md Normal file
View File

@@ -0,0 +1,44 @@
# Mem0 基础概念
## 什么是 Mem0
Mem0 是一个 **AI 记忆层**Memory Layer为大语言模型提供持久化记忆能力。
核心功能:
- 存储 AI 与用户的对话记忆
- 语义搜索相关记忆
- 记忆关联推理
## Self-Host 是什么
Self-host自托管= 把 Mem0 部署在自己服务器上,而不是使用官方云服务。
| 方式 | 说明 | 数据位置 |
|------|------|----------|
| **官方云服务** | 调用 mem0.ai 的 API | 数据在第三方服务器 |
| **Self-host** | 自己部署 mem0 代码 | 数据完全在自己控制 |
### Self-host 的优势
1. **数据隐私** - 所有数据不经过第三方
2. **网络可控** - 可运行在私有网络/内网
3. **成本可控** - 无 API 调用费用,适合大规模使用
4. **定制灵活** - 可修改源码,切换向量数据库
## Mem0 官方仓库
- GitHub: `mem0ai/mem0`
- 主要分支/目录:
- `server/` - FastAPI 服务,完整功能(需 PostgreSQL + pgvector + Neo4j
- `openmemory/` - 轻量版本(已 sunset建议用 server/
## OpenMemory 和 Mem0 的关系
`openmemory/``mem0ai/mem0` 仓库下的一个**子目录/组件**,不是独立项目。
| 目录 | 存储后端 | 架构复杂度 | 状态 |
|------|---------|-----------|------|
| `server/` | PostgreSQL + pgvector + Neo4j | 高 | ✅ 维护中 |
| `openmemory/` | Qdrant only | 低 | ⚠️ 已 sunset |
> ⚠️ 官方建议新部署使用 `server/` 目录

100
AI/mem0/02-architecture.md Normal file
View File

@@ -0,0 +1,100 @@
# 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跑起来后再按需扩展。**

120
AI/mem0/03-deployment.md Normal file
View File

@@ -0,0 +1,120 @@
# Mem0 部署方案
## 部署选项
### 选项 Aserver/(完整功能)
| 组件 | 说明 |
|------|------|
| **Mem0 Server** | FastAPI 服务 |
| **PostgreSQL + pgvector** | 关系数据 + 向量存储 |
| **Neo4j** | 图数据库(可选) |
### 选项 Bopenmemory/(轻量,已 sunset
仅需 Qdrant但官方已停止维护不建议使用。
---
## K8s 部署server/ 方案)
### 你已有的基础设施
```
tei namespace 下已有:
├── Qdrant ← 向量数据库
├── PostgreSQL ← 关系数据库
├── Dify ← 编排平台LLM 能力?)
├── TEI ← Text Embeddings Inference
└── BGM ← BGE-M3 嵌入模型服务
```
### 部署架构
```
┌─────────────────────────────────────────────────────────────┐
│ Mem0 Pod │
│ ├── mem0-server (main container) │
│ │ - Port: 8000 │
│ │ - 连接 TEI、Qdrant、PostgreSQL、LLM │
│ └── git-sync (sidecar, 可选) │
│ - 从 Gitea 拉取配置/知识库 │
└─────────────────────────────────────────────────────────────┘
├─ TEI: http://tei-server:8080
├─ Qdrant: http://qdrant:6333
├─ PostgreSQL: postgres:5432
└─ LLM: 待确认Dify / OpenAI 代理 / Ollama
```
### 核心环境变量
```bash
# PostgreSQL已有
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=mem0
POSTGRES_USER=postgres
POSTGRES_PASSWORD=xxx
APP_DB_NAME=mem0_app
# Qdrant已有
QDRANT_HOST=qdrant
QDRANT_PORT=6333
# TEI Embedder已有
EMBEDDER_PROVIDER=tei
TEI_ENDPOINT=http://tei-server:8080
# LLM待确认
LLM_PROVIDER=openai # 或 dify / ollama / anthropic
OPENAI_API_KEY=xxx # 或通过 Dify
# Auth
JWT_SECRET=xxx
ADMIN_API_KEY=xxx
AUTH_DISABLED=false
# Telemetry国内建议关闭
MEM0_TELEMETRY=false
```
### 你需要准备的内容
1. [ ] 确认 LLM 来源Dify / OpenAI 代理 / Ollama
2. [ ] 确认 PostgreSQL 数据库已创建(`mem0` 数据库)
3. [ ] 确认 Qdrant collection 已创建(或让 mem0 自动创建)
4. [ ] 配置环境变量
5. [ ] 编译/获取 mem0 镜像
---
## 国内网络问题
### 问题
- 无法访问 Docker Hub
- 无法访问 GitHub raw content
### 解决方式
1. **镜像提前导入**:在有网环境 `docker pull``docker save`,导入到 K8s 节点
2. **内网镜像仓库**:配置私有的 Harbor 或 registry
3. **代码构建**:下载代码后 `docker build` 本地镜像
### 建议的镜像来源
| 镜像 | 国内可用的 registry |
|------|-------------------|
| pgvector | `registry.cn-hangzhou.aliyuncs.com` 搜索 |
| neo4j | `docker.m.daocloud.io/neo4j` (DaoCloud) |
| mem0 | 需自行 build 或找社区镜像 |
---
## 待完成
- [ ] 确认 mem0 代码可下载
- [ ] 确认 LLM 来源
- [ ] 生成 K8s YAML 文件
- [ ] 测试部署

62
AI/mem0/04-your-infra.md Normal file
View File

@@ -0,0 +1,62 @@
# 你的基础设施
## K8s 集群
- **Namespace**: `tei`
- **已有组件**: Qdrant, PostgreSQL, Dify, TEI, BGE-M3
## 服务列表
### TEI (Text Embeddings Inference)
- **服务名**: `tei` (在 tei namespace)
- **模型**: BGE-M3 (BGM-M3)
- **用途**: 生成文本向量embeddings
- **特点**: 中文支持好,比 OpenAI embedder 更适合中文
### Qdrant
- **服务名**: `qdrant`
- **端口**: 6333 (HTTP), 6334 (gRPC)
- **用途**: 向量数据库,存储和搜索向量
- **注意**: Mem0 Server 通过 Qdrant 的 HTTP API 连接
### PostgreSQL
- **服务名**: `postgres`
- **端口**: 5432
- **扩展**: pgvector用于向量支持
- **用途**: 存储用户数据、记忆元数据、关系数据
### Dify
- **服务名**: `dify`
- **用途**: 编排平台,可能提供 LLM 能力
- **注意**: 需确认 Dify 是否作为 LLM Provider 接入 Mem0
### BGE-M3 / BGM-M3
- **模型**: BAAI General Embedding Model - M3
- **部署方式**: 通过 TEI 推理服务
- **特点**: 支持 100+ 语言,中文效果优秀
## 网络架构
```
Mem0 Pod在 tei namespace
├── TEI: http://tei-server:8080
│ └── 模型: BGE-M3
├── Qdrant: http://qdrant:6333
├── PostgreSQL: postgres:5432
└── LLM: 待确认
├── 选项 1: Dify
├── 选项 2: OpenAI 代理
└── 选项 3: Ollama (本地模型)
```
## 待确认事项
1. [ ] TEI 服务的具体地址和端口
2. [ ] Qdrant 是否需要手动创建 collection
3. [ ] PostgreSQL 是否已创建 `mem0` 数据库
4. [ ] Dify 的 LLM API 是否可用
5. [ ] LLM 最终选择Dify / OpenAI 代理 / Ollama

77
AI/mem0/05-faq.md Normal file
View File

@@ -0,0 +1,77 @@
# Mem0 常见问题
## Q: Mem0 和 OpenMemory 是什么关系?
A: OpenMemory 是 `mem0ai/mem0` 仓库下的一个子目录不是独立项目。OpenMemory 使用 Qdrant 作为唯一存储后端已被官方废弃sunset建议使用 `server/` 目录。
## Q: 为什么需要 TEI 和 Qdrant 两个东西?
A: 它们是完全不同的组件,分工合作:
- **TEI**:把文本转换成向量(理解语义)
- **Qdrant**:存储向量 + 搜索相似向量
类比TEI 是翻译软件Qdrant 是图书馆。两者缺一不可,但互相不知道对方存在,全靠 Mem0 Server 协调。
## Q: Neo4j 是必须的吗?
A: 不是。大部分场景不需要 Neo4j
- 普通语义搜索Qdrant 足够
- 关系推理(如"我老婆的表哥的同事"):需要 Neo4j
建议先不加,只部署 Qdrant + PostgreSQL跑起来后再按需扩展。
## Q: 写入和读取记忆需要多少次请求?
A:
- **写入**2次TEI生成向量 → Qdrant存储
- **读取/搜索**3次TEI生成查询向量 → Qdrant搜索 → LLM生成回答
## Q: 中国网络环境下如何部署?
A: 主要问题:
1. 无法从 Docker Hub 拉镜像 → 提前下载导入或使用国内镜像
2. 无法访问 GitHub → 使用 gitea 托管代码
## Q: Self-host 需要哪些环境变量?
A: 核心变量:
```bash
# 数据库
POSTGRES_HOST=
POSTGRES_PORT=5432
POSTGRES_DB=
POSTGRES_USER=
POSTGRES_PASSWORD=
# 向量库
QDRANT_HOST=
QDRANT_PORT=6333
# Embedder
EMBEDDER_PROVIDER=tei
TEI_ENDPOINT=
# LLM
LLM_PROVIDER=
OPENAI_API_KEY=
# Auth
JWT_SECRET=
ADMIN_API_KEY=
AUTH_DISABLED=false
```
## Q: Mem0 有官方 K8s 部署吗?
A: 没有官方 Helm Chart 或 K8s YAML。需要自行转换 docker-compose.yaml 为 K8s 资源,或使用社区方案。
## Q: TEI 是否需要知道 Qdrant
A: 不需要。TEI 只做向量生成(文本→向量),不存储任何数据,不与 Qdrant 通信。
## Q: 为什么你的 mem0 代码 clone 这么慢?
A: 可能网络问题。可以尝试:
- 使用断点续传:`curl -C - -L -o file.tar.gz URL`
- 使用国内镜像或代理
- 通过 Gitea 等国内 Git 服务托管