AI记忆保留层部署工具

mem0-aio是一个为Mem0 OpenMemory提供的Unraid优先、单容器部署解决方案,包含嵌入式Qdrant向量存储和持久化应用数据存储,适用于需要简单可靠自托管安装的用户。

  • by JSONbored
  • Python
  • 本地部署
  • 21 星标
  • 更新于
在 GitHub 查看 JSONbored/mem0-aio

使用说明

内存映射排序列

Unraid优先的单容器部署 Mem0 OpenMemory 适用于那些希望在第一天就实现最简单可靠的自托管安装,而无需手动连接单独的矢量数据库的人。

mem0-aio 将关键的首次启动依赖项捆绑在一起:Qdrant加上持久本地存储。对于可预测的初学者安装,包装器是固执己见的,但它并没有隐藏真正的权衡:OpenMemory仍然需要有效的模型/提供程序配置来完成有用的工作,外部向量后端和托管模型端点仍然需要操作员知识,而暴露直接MCP/neneneba API端口是一个深思熟虑的安全决策,而不是默认要求。

这张图片包括什么

  • 端口上的OpenMemory web UI 3000
  • 内部本地主机端口上的OpenMemory API/MCP服务器 8765
  • 嵌入式Qdrant矢量存储
  • SQLite和Qdrant状态的持久应用程序数据存储
  • 上游备份/导出辅助脚本捆绑到映像中
  • Same-origin UI路由到API,因此标准Unraid安装不需要单独的面向浏览器的API网络
  • 在以下位置取消扫描CA模板 mem0-aio.xml

初学者安装

如果你想要最简单的支持路径:

  1. 安装Unraid模板。
  2. 保留默认appdata路径。
  3. 任一组 OPENAI_API_KEY 用于托管快速入门,或设置 OLLAMA_BASE_URL 将您的外部本地Ollama根URL转换为正常的本地LLM路径。
  4. 如果你使用Ollama,也设置 LLM_MODEL 和 EMBEDDER_MODEL 对于您已经在该服务器上拉取的模型。
  5. 启动容器。
  6. 在端口上打开web UI 3000.
  7. 如果您需要更多自定义内容,请在UI中完成提供程序配置或使用高级环境覆盖。

离开 OPENAI_API_KEY 支持空白。预期的伴随路径是外部Ollama,而不是此图像中的捆绑推理。

当 OLLAMA_BASE_URL 已设置,您没有显式覆盖 LLM_PROVIDER 或 EMBEDDER_PROVIDER,包装器现在默认为 ollama 自动。

对于正常的Ollama安装,包装器现在还可以自动检测Qdrant所需的嵌入维度。如果您使用自定义嵌入器,并且自动检测无法确定大小,请设置 EMBEDDER_DIMENSIONS 在高级视图中明确显示。

API/MCP直接客户

web UI在不发布直接OpenMemory API/MCP端口的情况下工作,因为UI通过同一发布的web端口代理API流量。连接到端口的直接MCP客户端、代理或工具 8765 需要两个高级视图设置:

  1. 集 API / MCP Port 到要发布的主机端口,通常 8765.
  2. 集 [Security] API Bind Address (MEM0_API_HOST) 到 0.0.0.0.

默认值 MEM0_API_HOST=127.0.0.1 是故意的。它使直接的API/MCP服务只能在正常的UI安装的容器内访问,这避免了意外暴露未经验证的内存API和模型/提供商配置表面。

如果容器正常,但外部MCP客户端无法连接,请检查主机端口映射和 MEM0_API_HOST 第一。离开 MEM0_API_HOST 上 127.0.0.1 除非你故意发布端口 8765 在您自己的局域网、防火墙、VPN或反向代理控制之后。

高级用户界面

这个仓库故意不是一个精简的包装器。该模板现在跟踪上游源代码和文档公开的实际OpenMemory自托管环境表面,以及捆绑的SQLite+Qdrant路径的AIO默认值。在高级视图中,您可以:

  • 将OpenMemory指向Ollama、Anthropic、Groq、Together、DeepSeek、Azure OpenAI、Bedrock兼容提供商和其他上游支持的提供商价值观
  • 使用本地Ollama根URL作为正常的homelab路径,或与OpenAI兼容 /v1 受身份验证保护的反向代理的基本URL
  • 独立覆盖LLM和嵌入程序提供程序、模型、API密钥和基本URL
  • 将向量存储移动到Chroma、Weaviate、Redis、pgvector、Milvus、Elasticsearch、OpenSearch或FAISS
  • 使用经过身份验证的外部Qdrant QDRANT_URL 和 QDRANT_API_KEY
  • 默认情况下,在禁用遥测的情况下,继续私下使用捆绑的Qdrant,除非您明确重新启用它
  • 保留捆绑的内部默认值,以便最容易安装,同时仍向高级用户公开上游环境界面

外部矢量存储是独占的。仅配置一个后端: REDIS_URL, PG_*,外部 QDRANT_*Chroma、Weaviate、Milvus、Elasticsearch、OpenSearch或FAISS。容器拒绝竞争或部分向量存储选择器,而不是让OpenMemory默默地选择第一个匹配的后端。

包装器仍然默认为内部捆绑存储路径,因此新的Unraid用户在第一天不会被迫使用额外的服务。

运行时注意事项

  • 截至 2026-04-17上游Mem0的稳定版本比原始包装器基线更新;该回购正在转移到当前的稳定状态 v2.0.0 而不是停留在老的 v1.0.x 线。
  • 对于正常浏览器使用,直接API/MCP端口是可选的,因为UI通过同一发布的web端口代理到API。默认情况下,API绑定到 127.0.0.1 在容器内,并且不是由Unraid模板发布的;集 MEM0_API_HOST=0.0.0.0 仅当有意发布端口时 8765 在您自己的网络或反向代理访问控制背后。
  • 嵌入式Qdrant服务是有意捆绑的,因为这是AIO路径的关键首次启动依赖关系。外部矢量存储支持仍然是可选的高级配置。
  • 对于经过身份验证的外部Qdrant,首选 QDRANT_URL=http://qdrant:6333 加 QDRANT_API_KEY 而不仅仅是 QDRANT_HOST 和 QDRANT_PORT.
  • 不设置 QDRANT_API_KEY 与捆绑的Qdrant默认值相反。使用 QDRANT_URL 或外部 QDRANT_HOST 启用Qdrant身份验证时。
  • 本地Ollama提供商支持需要根Ollama URL,例如 http://host.docker.internal:11434,不兼容OpenAI /v1 路径。
  • 如果你的家庭实验室前门添加了auth,并且只暴露了OpenAI风格 /v1 端点,使用OpenAI兼容的基本URL字段,而不是本地Ollama提供程序路径。
  • Elasticsearch/OpenSearch支持现在已连接到真正的外部部署,但这些堆栈通常需要显式的身份验证和SSL选择。对于Elasticsearch,高级模板公开 ELASTICSEARCH_USE_SSL 和 ELASTICSEARCH_VERIFY_CERTS对于OpenSearch,它公开了可选的用户/密码加 OPENSEARCH_USE_SSL 和 OPENSEARCH_VERIFY_CERTSSSL和证书验证都默认为 true;将验证设置为 false 仅适用于专用网络上的可信自签名端点。
  • 如果您将OpenMemory暴露在LAN之外,请将直接MCP/neneneba API表面和您的模型/提供商凭据视为真正的攻击表面。

出版与发布

  • 包装器版本使用上游版本加上AIO修订版,例如 v2.0.0-aio.1.
  • 上游监控、发布准备、注册表发布和目录同步由 aio-fleet 从 .aio-fleet.yml.
  • 变更日志生成和XML <Changes> 同步由以下人员集中运行 aio-fleet 在发布准备期间。
  • main 发表 latest、固定的上游版本标签、显式的AIO打包行标签,以及 sha-<commit>.
  • 发布作业需要Docker Hub凭据,并直接推送面向CA的Docker Hub标签。

看 docs/releases.md 了解中央发布流程的详细信息。

验证

所需的本地验证在特定于应用程序的测试和 aio-fleet:

git submodule update --init --recursive
python3 -m venv .venv-local
.venv-local/bin/pip install -e "../aio-fleet[app-tests]"
.venv-local/bin/pytest tests/template --junit-xml=reports/pytest-unit.xml -o junit_family=xunit1
.venv-local/bin/pytest tests/integration -m integration --junit-xml=reports/pytest-integration.xml -o junit_family=xunit1
cd ../aio-fleet
.venv/bin/python -m aio_fleet validate-repo --repo mem0-aio --repo-path ../mem0-aio
.venv/bin/python -m aio_fleet trunk run --repo mem0-aio --repo-path ../mem0-aio --no-fix

CI成本模型:

  • 相关PR和 main Pushs首先运行快速验证层
  • 运行Docker支持的集成测试,以进行与构建相关的更改 main 发布元数据在发布仍在进行时提交,并用于手动分派
  • 图像发布保持在集成套件之后,而不是将跳过的集成视为可接受的
  • 外部后端矩阵是同一集成套件的一部分,因此在发布之前会测试支持的向量存储覆盖

外部后端覆盖使用相同的pytest命令。默认情况下,它会启动一个用于确定性嵌入的本地模拟Ollama容器;集 OLLAMA_CONTAINER 只有当您有意对现有的Ollama容器进行测试时:

.venv-local/bin/pytest tests/integration -m integration

支持

资金

如果这项工作节省了您的时间,请在此处支持它:

星史