Files
mem0-server/TECH_STACK.md
2026-03-06 20:52:16 +08:00

6.7 KiB
Raw Blame History

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 事务保证数据一致性

OllamaAI 服务)

  • 本地运行:数据隐私和安全
  • 模型丰富:支持多种开源模型
  • 易于使用:简单的 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 并发配置

📚 相关文档


这个简洁的技术架构专注于核心功能,避免了不必要的复杂性,同时保持了强大的扩展能力!🎉