6.7 KiB
6.7 KiB
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 接口
- ✅ 性能优秀:优化的推理引擎
📊 环境变量配置
所有配置通过环境变量传入,实现配置与代码分离。
必需的环境变量
# 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(推荐)
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
启动命令:
docker-compose up -d
Docker 命令
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 加速推理(如可用)
- 批量处理优化
- 模型缓存机制
🛠️ 开发建议
本地开发
# 使用开发模式运行
docker-compose -f docker-compose.yaml up --build
# 查看日志
docker-compose logs -f mem0
生产部署
- 使用固定版本镜像
- 配置数据卷备份
- 监控资源使用
- 设置健康检查
性能优化
- 调整 ChromaDB 批次大小
- 优化 SQLite 索引
- 使用更快的存储介质(SSD)
- 增加 Ollama 并发配置
📚 相关文档
- README.md - 项目主文档
- DEPLOYMENT.md - 详细部署指南
- QUICK_START.md - 快速入门
- ENV_VARIABLES.md - 环境变量详解
这个简洁的技术架构专注于核心功能,避免了不必要的复杂性,同时保持了强大的扩展能力!🎉