285 lines
6.7 KiB
Markdown
285 lines
6.7 KiB
Markdown
# Mem0 Server 技术架构
|
||
|
||
## 📋 技术栈
|
||
|
||
Mem0 Server 采用简洁高效的技术架构,所有组件均通过环境变量配置。
|
||
|
||
### 核心组件
|
||
|
||
| 组件 | 技术 | 用途 | 存储方式 |
|
||
|------|------|------|----------|
|
||
| **Vector Store** | ChromaDB | 向量存储,用于语义搜索 | 文件系统 |
|
||
| **Graph Store** | SQLite | 图存储,管理实体关系 | 文件系统 |
|
||
| **LLM** | Ollama | 大语言模型,文本生成 | 外部服务 |
|
||
| **Embedder** | Ollama | 嵌入模型,向量化文本 | 外部服务 |
|
||
|
||
---
|
||
|
||
## 🏗️ 架构图
|
||
|
||
```
|
||
┌─────────────┐
|
||
│ Mem0 App │ (FastAPI, port: 8888)
|
||
│ main.py │
|
||
└──────┬──────┘
|
||
│
|
||
├──→ ┌─────────────┐
|
||
│ │ ChromaDB │ (Embedded)
|
||
│ │ Vectors │
|
||
│ └─────────────┘
|
||
│
|
||
├──→ ┌─────────────┐
|
||
│ │ SQLite │ (Embedded)
|
||
│ │ Graph │
|
||
│ └─────────────┘
|
||
│
|
||
└──→ ┌─────────────┐
|
||
│ Ollama │ (External Service)
|
||
│ LLM + AI │
|
||
└─────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 技术选型理由
|
||
|
||
### ChromaDB(向量存储)
|
||
- ✅ **轻量级**:无需独立数据库服务
|
||
- ✅ **易部署**:嵌入式设计,开箱即用
|
||
- ✅ **高性能**:专为向量相似度搜索优化
|
||
- ✅ **持久化**:数据直接存储到文件系统
|
||
|
||
### SQLite(图存储)
|
||
- ✅ **零配置**:无需安装和配置
|
||
- ✅ **单文件**:数据存储在单个文件中
|
||
- ✅ **成熟稳定**:经过广泛验证的数据库
|
||
- ✅ **事务支持**:ACID 事务保证数据一致性
|
||
|
||
### Ollama(AI 服务)
|
||
- ✅ **本地运行**:数据隐私和安全
|
||
- ✅ **模型丰富**:支持多种开源模型
|
||
- ✅ **易于使用**:简单的 API 接口
|
||
- ✅ **性能优秀**:优化的推理引擎
|
||
|
||
---
|
||
|
||
## 📊 环境变量配置
|
||
|
||
所有配置通过环境变量传入,实现配置与代码分离。
|
||
|
||
### 必需的环境变量
|
||
|
||
```bash
|
||
# ChromaDB 配置
|
||
CHROMA_DB_PATH=/app/chroma_db
|
||
CHROMA_COLLECTION_NAME=memories
|
||
|
||
# SQLite 配置
|
||
SQLITE_DB_PATH=/app/graph_store.db
|
||
|
||
# Ollama 配置
|
||
OLLAMA_HOST=http://host.docker.internal:11434
|
||
OLLAMA_LLM_MODEL=llama3.2
|
||
OLLAMA_EMBEDDER_MODEL=nomic-embed-text
|
||
|
||
# 历史数据库配置
|
||
HISTORY_DB_PATH=/app/history/history.db
|
||
```
|
||
|
||
### 环境变量说明
|
||
|
||
| 变量名 | 说明 | 默认值 | 示例 |
|
||
|--------|------|--------|------|
|
||
| `CHROMA_DB_PATH` | ChromaDB 数据存储路径 | `/app/chroma_db` | `/data/chroma` |
|
||
| `CHROMA_COLLECTION_NAME` | ChromaDB 集合名称 | `memories` | `my_memories` |
|
||
| `SQLITE_DB_PATH` | SQLite 数据库路径 | `/app/graph_store.db` | `/data/graph.db` |
|
||
| `OLLAMA_HOST` | Ollama 服务地址 | `http://localhost:11434` | `http://ollama:11434` |
|
||
| `OLLAMA_LLM_MODEL` | LLM 模型名称 | `llama3.2` | `mistral`, `llama3.1` |
|
||
| `OLLAMA_EMBEDDER_MODEL` | Embedder 模型名称 | `nomic-embed-text` | `mxbai-embed-large` |
|
||
| `HISTORY_DB_PATH` | 历史数据库路径 | `/app/history/history.db` | `/data/history.db` |
|
||
|
||
---
|
||
|
||
## 🚀 部署方式
|
||
|
||
### Docker Compose(推荐)
|
||
|
||
```yaml
|
||
services:
|
||
mem0:
|
||
build: .
|
||
ports:
|
||
- "8888:8000"
|
||
volumes:
|
||
- ./chroma_db:/app/chroma_db
|
||
- ./history:/app/history
|
||
environment:
|
||
- CHROMA_DB_PATH=/app/chroma_db
|
||
- CHROMA_COLLECTION_NAME=memories
|
||
- SQLITE_DB_PATH=/app/graph_store.db
|
||
- OLLAMA_HOST=http://host.docker.internal:11434
|
||
- OLLAMA_LLM_MODEL=llama3.2
|
||
- OLLAMA_EMBEDDER_MODEL=nomic-embed-text
|
||
```
|
||
|
||
启动命令:
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
### Docker 命令
|
||
|
||
```bash
|
||
docker run -d \
|
||
--name mem0-server \
|
||
-p 8888:8000 \
|
||
-v $(pwd)/chroma_db:/app/chroma_db \
|
||
-v $(pwd)/history:/app/history \
|
||
-e CHROMA_DB_PATH=/app/chroma_db \
|
||
-e CHROMA_COLLECTION_NAME=memories \
|
||
-e SQLITE_DB_PATH=/app/graph_store.db \
|
||
-e OLLAMA_HOST=http://host.docker.internal:11434 \
|
||
-e OLLAMA_LLM_MODEL=llama3.2 \
|
||
-e OLLAMA_EMBEDDER_MODEL=nomic-embed-text \
|
||
mem0-server
|
||
```
|
||
|
||
---
|
||
|
||
## 💾 数据持久化
|
||
|
||
### ChromaDB 数据
|
||
- **位置**:`./chroma_db/`
|
||
- **内容**:向量数据、集合元数据
|
||
- **格式**:ChromaDB 内部格式
|
||
|
||
### SQLite 数据
|
||
- **位置**:`./graph_store.db`(或自定义路径)
|
||
- **内容**:图结构数据、实体关系
|
||
- **格式**:SQLite 数据库文件
|
||
|
||
### 历史数据
|
||
- **位置**:`./history/history.db`
|
||
- **内容**:记忆变更历史记录
|
||
- **格式**:SQLite 数据库文件
|
||
|
||
---
|
||
|
||
## 🔍 工作流程
|
||
|
||
### 1. 创建记忆
|
||
```
|
||
用户消息 → FastAPI → Memory.add()
|
||
↓
|
||
Ollama Embedder → 生成向量
|
||
↓
|
||
ChromaDB → 存储向量
|
||
↓
|
||
SQLite → 存储实体关系
|
||
↓
|
||
返回结果
|
||
```
|
||
|
||
### 2. 搜索记忆
|
||
```
|
||
搜索查询 → FastAPI → Memory.search()
|
||
↓
|
||
Ollama Embedder → 查询向量化
|
||
↓
|
||
ChromaDB → 向量相似度搜索
|
||
↓
|
||
返回匹配的记忆
|
||
```
|
||
|
||
### 3. 获取记忆
|
||
```
|
||
用户 ID → FastAPI → Memory.get_all()
|
||
↓
|
||
SQLite → 查询图关系
|
||
↓
|
||
ChromaDB → 获取相关向量
|
||
↓
|
||
返回结构化记忆
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 优势特点
|
||
|
||
### 简洁性
|
||
- ✅ 无外部数据库依赖
|
||
- ✅ 配置文件少
|
||
- ✅ 易于理解和维护
|
||
|
||
### 灵活性
|
||
- ✅ 所有配置通过环境变量
|
||
- ✅ 支持自定义模型
|
||
- ✅ 可切换不同组件
|
||
|
||
### 可扩展性
|
||
- ✅ ChromaDB 支持集群部署
|
||
- ✅ SQLite 可替换为 PostgreSQL
|
||
- ✅ Ollama 可替换为其他 LLM 服务
|
||
|
||
### 数据隐私
|
||
- ✅ 本地运行 AI 模型
|
||
- ✅ 数据不上传第三方
|
||
- ✅ 完全可控的数据流
|
||
|
||
---
|
||
|
||
## 📈 性能特性
|
||
|
||
### ChromaDB
|
||
- 毫秒级向量相似度搜索
|
||
- 支持百万级向量规模
|
||
- 内存映射加速查询
|
||
|
||
### SQLite
|
||
- 微秒级简单查询
|
||
- 事务安全保证
|
||
- 自动索引优化
|
||
|
||
### Ollama
|
||
- GPU 加速推理(如可用)
|
||
- 批量处理优化
|
||
- 模型缓存机制
|
||
|
||
---
|
||
|
||
## 🛠️ 开发建议
|
||
|
||
### 本地开发
|
||
```bash
|
||
# 使用开发模式运行
|
||
docker-compose -f docker-compose.yaml up --build
|
||
|
||
# 查看日志
|
||
docker-compose logs -f mem0
|
||
```
|
||
|
||
### 生产部署
|
||
- 使用固定版本镜像
|
||
- 配置数据卷备份
|
||
- 监控资源使用
|
||
- 设置健康检查
|
||
|
||
### 性能优化
|
||
- 调整 ChromaDB 批次大小
|
||
- 优化 SQLite 索引
|
||
- 使用更快的存储介质(SSD)
|
||
- 增加 Ollama 并发配置
|
||
|
||
---
|
||
|
||
## 📚 相关文档
|
||
|
||
- [README.md](./README.md) - 项目主文档
|
||
- [DEPLOYMENT.md](./DEPLOYMENT.md) - 详细部署指南
|
||
- [QUICK_START.md](./QUICK_START.md) - 快速入门
|
||
- [ENV_VARIABLES.md](./ENV_VARIABLES.md) - 环境变量详解
|
||
|
||
---
|
||
|
||
这个简洁的技术架构专注于核心功能,避免了不必要的复杂性,同时保持了强大的扩展能力!🎉
|