当前位置: 首页 > news >正文

Mem0私有化部署

一、简单介绍

尽管LLM能力强大,但它们本质上是无状态的。你可以把LLM理解为一次性的计算:每次给它一个输入,它产生一个输出,任务完成。它不会自动记住任何之前的对话或信息。为了解决这个问题,一种直观的方法是给模型“塞”更多历史信息(即增大上下文窗口),但这条路有明确的瓶颈:

  • 成本激增:每次对话都携带完整历史,会消耗大量处理时间与费用。
  • 性能退化:大量无关信息会稀释模型的注意力,导致回答质量下降,即“上下文腐烂”。
  • 容量有限:即使是上百万token的窗口,也难以承载一个长期运行、持续学习的Agent所积累的完整状态。

Agent Memory系统正是为突破这些限制而设计的外置、可管理的记忆层。

Mem0 是一款记忆引擎,它能确保对话上下文连贯,避免用户重复发言,并保证客服人员的响应始终保持一致,以采用双重存储机制(向量数据库、图数据库)、双重搜索机制为特点。

Mem0 平台以完全托管服务的形式提供这种体验——无需进行任何基础设施建设,即可扩展、保护和丰富记忆,但是平台版的图服务需要付费使用。因此, 本文将详细介绍如何私有化部署Mem0实现向量存储和图存储。

二、版本选择

目前Mem0稳定的版本为v1.0.11,在部署的时候一定要选择稳定版本,目前官方正在开发V3版本,想要删掉图数据库采用更轻量的方式来存储实体关系。稳定的Mem0的图存储采用的是图数据库如neo4j等(本文以稳定版为例)。

千万不要选择中间版本比如v2.0.0,这个版本删除了图数据库相关代码,会导致图功能无法使用!!!

三、docker-compose部署流程

首先在服务器上创建文件夹,并且使用git命令拉取代码,进入到server目录下

1、创建.env文件

配置必要的环境变量,主要是llm和embedding模型。

# LLM 配置 OPENAI_API_KEY=your-volcano-api-key OPENAI_BASE_URL=your-base-url OPENAI_MODEL=your-model # Embedding 配置 EMBEDDER_PROVIDER=openai EMBEDDER_MODEL=your-model EMBEDDER_BASE_URL=your-base-url EMBEDDER_API_KEY=your-volcano-api-key # 向量维度(关键!) EMBEDDING_MODEL_DIMS=2048 # API 安全认证 ADMIN_API_KEY=your-admin-api-key # pgvector 同理 # Neo4j 连接信息(此处与官方一致) NEO4J_URI=bolt://neo4j:7687 NEO4J_USERNAME=neo4j NEO4J_PASSWORD=mem0graph # 图匹配阈值(降低门槛,更容易触发图谱写入) GRAPH_STORE_THRESHOLD=0.6

2、Mem0镜像

目前有一些公共镜像源,但是再拉取的过程中全失败了,有些是因为镜像已经过期无法使用,如果可以自己拉取可以直接拉取公共镜像。

如果拉取失败,可以自行构建镜像。

(1)创建DockerFile文件

FROM python:3.12-slim WORKDIR /app # 国内镜像加速 ENV PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple ENV PIP_DEFAULT_TIMEOUT=100 COPY requirements.txt . # 安装核心依赖,不安装 mem0ai[graph] 避免 psycopg2 编译问题 RUN pip install --no-cache-dir -r requirements.txt && \ pip install --no-cache-dir mem0ai==1.0.11 langchain-neo4j psycopg2-binary rank-bm25 COPY . . EXPOSE 8000 ENV PYTHONUNBUFFERED=1 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]

(2)修改main.py文件

DEFAULT_CONFIG = { "version": "v1.1", "vector_store": { "provider": "pgvector", "config": { "host": POSTGRES_HOST, "port": int(POSTGRES_PORT), "dbname": POSTGRES_DB, "user": POSTGRES_USER, "password": POSTGRES_PASSWORD, "collection_name": POSTGRES_COLLECTION_NAME, "embedding_model_dims": int(os.environ.get("EMBEDDING_MODEL_DIMS")), }, }, "graph_store": { "provider": "neo4j", "config": { "url": os.environ.get("NEO4J_URI", "bolt://neo4j:7687"), "username": os.environ.get("NEO4J_USERNAME", "neo4j"), "password": os.environ.get("NEO4J_PASSWORD", "mem0graph"), "database": "neo4j" }, "threshold": float(os.environ.get("GRAPH_STORE_THRESHOLD", "0.7")), }, "llm": { "provider": "openai", "config": { "model": os.environ.get("OPENAI_MODEL"), "api_key": os.environ.get("OPENAI_API_KEY"), "openai_base_url": os.environ.get("OPENAI_BASE_URL"), "temperature": 0.2 } }, "embedder": { "provider": "openai", "config": { "model": os.environ.get("EMBEDDER_MODEL), "api_key": os.environ.get("EMBEDDER_API_KEY", os.environ.get("OPENAI_API_KEY")), "openai_base_url": os.environ.get("EMBEDDER_BASE_URL") } }, "history_db_path": HISTORY_DB_PATH, }

3、编写docker-compose文件

cat > docker-compose.yaml << 'EOF' version: '3.8' services: mem0: build: . container_name: mem0-mem0-1 ports: - "8041:8000" env_file: - .env environment: - GRAPH_STORE_THRESHOLD=${GRAPH_STORE_THRESHOLD:-0.6} - EMBEDDING_MODEL_DIMS=${EMBEDDING_MODEL_DIMS:-2048} volumes: - ./history:/app/history depends_on: postgres: condition: service_healthy neo4j: condition: service_healthy networks: - mem0-network postgres: image: pgvector/pgvector:0.8.0-pg16 container_name: mem0-postgres-1 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=postgres ports: - "5434:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5 networks: - mem0-network neo4j: image: neo4j:5.26.4 container_name: mem0-neo4j-1 environment: - NEO4J_AUTH=neo4j/mem0graph - NEO4J_PLUGINS=["apoc"] # 必须启用 APOC 插件 ports: - "7474:7474" - "7687:7687" volumes: - neo4j_data:/data healthcheck: test: ["CMD-SHELL", "wget -q http://localhost:7474 || exit 1"] interval: 5s timeout: 5s retries: 5 networks: - mem0-network pgadmin: image: dpage/pgadmin4:8.12 container_name: mem0-pgadmin environment: - PGADMIN_DEFAULT_EMAIL=admin@admin.com - PGADMIN_DEFAULT_PASSWORD=admin ports: - "5050:80" depends_on: - postgres networks: - mem0-network volumes: postgres_data: neo4j_data: networks: mem0-network: driver: bridge EOF

4、构建并启动

最开始使用v2.0.0版本的出现了向量维度问题,索引只支持2000以内维度,所以需要手动修改索引列类型,如果embedding模型满足维度限制可以直接构建并启动,无需修改列类型并刷新。

# 构建并启动 docker compose up -d --build # 等待数据库就绪 sleep 20 # 修改向量列类型为 halfvec(2048)(支持 2048 维) docker exec -i mem0-postgres-1 psql -U postgres -d postgres <<'EOF' ALTER TABLE memories ALTER COLUMN vector TYPE halfvec(2048); DROP INDEX IF EXISTS memories_vector_idx; CREATE INDEX ON memories USING hnsw (vector halfvec_l2_ops); EOF # 重启 Mem0 刷新连接 docker compose restart mem0

四、使用示例

1、运行命令

curl -X POST http://更换为你的服务地址/memories \ -H "Content-Type: application/json" \ -H "X-API-Key: 可选" \ -d '{"messages":[{"role":"user","content":"赵四是王五的导师,王五正在研究人工智能"}],"user_id":"zhaosi"}'

2、运行结果

{"results":[{"id":"6384538f-e9ee-461b-bfd2-15be8d2812ad","memory":"赵四是王五的导师","event":"ADD"} ,{"id":"d37dc388-d737-4016-b439-1d88d29fef07","memory":"王五正在研究人工智能","event":"ADD"}], "relations":{"deleted_entities":[],"added_entities":[[{"source":"赵四","relationship":"导师","target":"王五"}], [{"source":"王五","relationship":"研究","target":"人工智能"}]]}}

http://www.jsqmd.com/news/669581/

相关文章:

  • 腾兴热点 | 马斯克打造超级计算机集群 小鹏从车企到AI集团 游宝阁用户突破5千万 Sora负责人离职
  • Unity URP项目Post Processing后处理实战:从基础配置到动态效果控制
  • 实测DeepSeek-OCR-2:复杂文档识别效果展示,准确率令人惊喜
  • 2026年质量好的环氧地坪/防静电环氧地坪/聚氨酯环氧地坪高口碑品牌推荐 - 行业平台推荐
  • 2026年口碑好的特种电缆/山东高压电线电缆/山东控制电线电缆/电力电线电缆实力品牌厂家推荐 - 品牌宣传支持者
  • 看雪靶场系列--KCTF2023_签到题--生死较量--解说
  • 2026年靠谱的企业级NAS存储服务器/定制化服务器/高密度存储服务器工厂直供推荐 - 行业平台推荐
  • 深度解析WaveTools架构:构建《鸣潮》游戏性能优化与数据分析的专业工具箱
  • Wan2.2-I2V-A14B私有部署镜像:5分钟一键启动,小白也能玩转文生视频
  • Java CompletableFuture 异步执行逻辑
  • 2026年正规的嘉兴固化地坪/固化地坪/固化剂地坪优质供应商推荐 - 品牌宣传支持者
  • 2026年质量好的吊扇电机全自动装配线组装/半自动吊扇电机全自动装配线口碑好的厂家推荐 - 行业平台推荐
  • 嵌入式设备UI灵感库:用 Pixel Dream Workshop 为低分辨率屏幕设计图标集
  • mysql如何检查数据库表是否存在损坏_使用CHECK TABLE命令修复
  • Phi-3-mini-128k-instruct实战教程:基于vLLM API封装REST接口供Web端调用
  • YOLOFuse性能参考:不同融合策略的mAP与模型大小对比,帮你快速选型
  • 2026年评价高的四川护栏网/基坑护栏网/护栏网精选厂家 - 行业平台推荐
  • 2026年比较好的信号灯杆件/交通设施杆件/路灯杆件批量采购厂家推荐 - 行业平台推荐
  • FaceFusion换脸效果展示:实测高清换脸与卡通脸替换案例
  • 2026年质量好的耐驰螺杆泵配件/螺杆泵厂家精选 - 品牌宣传支持者
  • 新手避坑指南:用薛定谔Maestro处理蛋白结构,从下载4LYW到加氢修复的完整流程
  • 计算机网络参考模型与子网划分
  • 一键部署体验:nlp_structbert_sentence-similarity_chinese-large在星图GPU平台的免配置实战
  • 只需四分钟我会让你变得自信到可怕,从此告别自卑内耗。这不是成功学鸡汤
  • ncmdump音乐解密工具:三分钟解锁网易云音乐加密文件的终极方案
  • codex app每次打开重连5次Reconnecting问题解决
  • 共识的火种:Alpha AI“万家灯火”计划加速全球生态共建
  • Alpamayo-R1-10B开源镜像教程:模型权重分片加载与显存峰值降低30%实测方案
  • 2026年口碑好的永康学生保温杯/ODM保温杯/永康儿童保温杯生产厂家推荐 - 行业平台推荐
  • 保姆级教程:用Python脚本搞定CelebAMask-HQ数据集预处理与可视化(附完整代码)