OpenMemory:开源自托管AI记忆引擎,基于分层架构实现LLM持久化语义记忆
一、OpenMemory是什么?
OpenMemory是一款开源、自托管、框架无关的AI记忆引擎,旨在为大型语言模型(LLM)应用提供持久化、结构化和语义化的记忆能力。它通过独特的分层记忆分解(HMD v2)架构,解决了传统向量数据库或SaaS记忆层在召回率、延迟、成本和可解释性上的痛点,支持多格式数据摄入、本地嵌入模型集成,适用于AI代理、智能助手、企业copilots等场景,且完全开源无 vendor 锁定。
简单来说,OpenMemory就像AI的“长期记忆中枢”:它能将用户与AI的对话、上传的文档、行为偏好等信息转化为结构化的“记忆单元”,并通过语义关联建立联系;当AI需要调用历史信息时,它能快速检索出最相关的内容,且整个过程完全在用户可控的环境中运行(本地服务器、私有云等),无需依赖第三方。
二、功能特色
OpenMemory的核心竞争力源于其独特的设计理念和技术实现,相比传统方案,它在功能上有以下突出特色:
1. 分层记忆分解(HMD v2)架构:模拟人类记忆模式
人类记忆分为瞬时记忆、短期记忆和长期记忆,且不同记忆之间存在关联(如“看到咖啡杯”会联想到“早上喝了咖啡”)。OpenMemory借鉴这一逻辑,设计了分层记忆分解架构,让AI记忆更接近人类认知模式:
标准节点(Standard Nodes):每个“记忆”对应一个独立节点,存储原始内容(如对话片段、文档段落)、元数据(时间、来源、关联用户)等,避免数据重复,减少存储冗余。
多扇区嵌入(Multi-Sector Embeddings):每个节点包含5个嵌入扇区,分别对应不同维度的记忆特征:
情景扇区:记录记忆发生的场景(如“2025年10月的对话”“来自用户上传的PDF”);
语义扇区:提取内容的核心语义(如“用户提到喜欢低糖咖啡”);
程序扇区:关联可执行动作(如“用户要求每周发送报表”);
情感扇区:捕捉情绪倾向(如“用户对延迟发货表示不满”);
反思扇区:记录AI对该记忆的总结(如“用户可能需要优先处理订单问题”)。
单向路径链接(Waypoints):记忆节点之间通过单向链接形成“关联图谱”(如“用户提到‘低糖’”→“用户喜欢低糖咖啡”→“用户上周购买了低糖咖啡豆”),模拟人类记忆的“联想激活”过程。
复合相似性检索:结合多扇区嵌入的融合计算与路径图的“激活扩散”算法(从一个节点出发,沿链接找到相关节点),确保召回的记忆既符合语义相似性,又符合逻辑关联性。
2. 性能与成本优势:更快、更便宜
传统向量数据库依赖单一向量相似度检索,容易漏掉逻辑相关但语义向量差异大的内容;而SaaS记忆服务(如OpenAI Memory)则受限于网络延迟和按次收费模式。OpenMemory通过架构优化实现了显著优势:
速度更快:在包含10万记忆节点的测试中,平均响应时间仅110-130ms,比Supermemory、OpenAI Memory等竞品快2-3倍;
成本更低:基于本地存储和开源嵌入模型(如Ollama、E5),每百万令牌处理成本仅0.30-0.40美元,是SaaS竞品的1/6-1/10;
召回率更高:复合相似性检索结合语义与逻辑关联,召回准确率比单一向量数据库高15%-20%(基于CaviraOSS团队的公开测试数据)。
3. 开源与自托管:数据安全无锁定
OpenMemory采用MIT许可协议,代码完全开源,用户可自由修改、部署和二次开发,避免被第三方服务商锁定。其自托管能力支持多种部署环境:
本地服务器(适合个人或小团队);
Docker容器(适合企业级标准化部署);
私有云(适合对数据合规性要求高的场景,如医疗、金融)。
同时,它提供了多重安全保障:100%本地数据存储(无数据上传风险)、可选AES-256加密、PII(个人身份信息)自动清洗钩子(可过滤手机号、邮箱等敏感信息)、多租户隔离(支持不同用户/团队数据独立存储)。
4. 多格式支持与灵活集成
OpenMemory不仅能处理文本类记忆(如对话、笔记),还支持多格式数据摄入:
文档:PDF、DOCX、TXT等;
媒体:音频(需配合语音转文字工具)、网页链接(自动抓取内容);
结构化数据:CSV表格、JSON等(可提取字段作为记忆元数据)。
此外,它提供跨语言SDK,方便快速集成到各类应用:
JavaScript/TypeScript SDK(
sdk-js):支持浏览器和Node.js环境;Python SDK(
sdk-py):兼容主流LLM框架(如LangChain、LlamaIndex)。
5. 可解释性:记忆召回路径透明
传统向量数据库的检索结果是“黑盒”(只返回相似内容,不说明为何关联),而OpenMemory支持“记忆召回路径可视化”:用户可查看AI调用的记忆节点、节点间的关联链接,以及每个扇区的匹配分数,清晰了解“AI为什么会想到这个信息”,这对需要审计或调试的场景(如企业助手)至关重要。
与竞品对比表
| 对比维度 | OpenMemory | 传统向量数据库(如Pinecone) | SaaS记忆服务(如OpenAI Memory) |
|---|---|---|---|
| 开源与自托管 | ✅ 开源(MIT),完全自托管 | ❌ 多为闭源或商业化托管 | ❌ 完全依赖第三方,无自托管选项 |
| 记忆维度 | ✅ 多扇区嵌入(情景/语义/情感等) | ❌ 仅支持单一语义向量 | ✅ 多维度,但不开放细节 |
| 检索逻辑 | ✅ 复合相似性(语义+逻辑关联) | ❌ 仅语义向量相似性 | ✅ 多维度,但算法不透明 |
| 平均响应时间(10万节点) | 110-130ms | 300-500ms | 250-400ms(受网络影响) |
| 每百万令牌成本 | ~$0.30-0.40 | ~$1.50-2.00 | ~$2.00-4.00 |
| 可解释性 | ✅ 支持召回路径可视化 | ❌ 无路径解释 | ❌ 黑盒模式 |
| 数据隐私 | ✅ 本地存储,可选加密 | ❌ 数据需上传至服务商 | ❌ 数据存储在第三方服务器 |
三、技术细节
OpenMemory的技术架构围绕“高效存储、精准检索、安全可控”设计,核心分为数据库层、检索引擎、安全层和集成层四个部分:
1. 数据库层:基于SQLite的结构化存储
OpenMemory选择SQLite作为底层数据库(轻量、无需独立服务、支持本地文件存储),核心表结构如下:
memories表:存储记忆节点的基础信息,包括id(唯一标识)、content(原始内容)、type(类型:对话/文档/行为等)、timestamp(创建时间)、user_id(关联用户)、metadata(自定义元数据,如来源、标签)。vectors表:存储多扇区嵌入向量,每个向量以二进制格式存储,关联memory_id(对应memories表)和sector(扇区类型:情景/语义等)。waypoints表:记录记忆节点间的单向链接,包含source_id(源节点)、target_id(目标节点)、weight(关联权重,0-1之间,值越高关联越强)、reason(关联原因,如“语义相似”“时间连续”)。tenants表:支持多租户隔离,存储租户ID、加密密钥(若启用)、权限配置等。
2. 检索引擎:复合相似性算法的核心
检索引擎是OpenMemory的“大脑”,负责根据用户查询快速找到相关记忆,核心流程包括:
嵌入生成:当新记忆进入系统时,调用指定的嵌入模型(如本地部署的BGE模型),生成5个扇区的向量,存入
vectors表;同时,系统会自动分析记忆内容,与已有节点建立单向链接(如“同一用户的连续对话”“语义相关的文档段落”),存入waypoints表。查询处理:用户查询(如“用户上周提到的咖啡偏好”)先被转化为多扇区向量,然后执行两步检索:
扇区融合检索:计算查询向量与各记忆节点的多扇区向量相似度(加权平均,权重可自定义),初步筛选出Top N候选节点;
激活扩散检索:从候选节点出发,沿
waypoints表的单向链接扩展,找到关联节点(如候选节点的“后续对话”“相关文档”),并根据链接权重调整排序。结果返回:最终返回排序后的记忆节点,附带召回路径(哪些节点通过扇区匹配找到,哪些通过关联链接扩展)和各扇区的匹配分数。
3. 安全层:数据保护机制
加密支持:可配置对
memories表的content字段和vectors表的向量数据进行AES-256加密,密钥由用户管理,系统不存储明文密钥。PII清洗:内置钩子函数,可在记忆入库前自动检测并替换手机号、邮箱、身份证号等敏感信息(如将“138xxxx1234”替换为“[PHONE]”),也支持自定义清洗规则。
权限控制:通过
tenants表实现多租户隔离,每个租户只能访问自己的记忆数据,管理员可配置租户的读写权限(如“只读”“可写入但不可删除”)。
4. 集成层:SDK与API设计
OpenMemory提供RESTful API和SDK,简化集成流程:
核心API包括:
POST /memories:创建新记忆(支持上传文本、文档链接等);GET /memories/search:检索相关记忆(支持指定扇区权重、关联深度等参数);PUT /memories/:id:更新记忆内容或元数据;DELETE /memories/:id:删除记忆节点(自动清理关联链接和向量)。SDK封装了API调用细节,提供更友好的接口,例如Python SDK的检索示例:
from openmemory import OpenMemoryClient client = OpenMemoryClient(base_url="http://localhost:8080") # 检索与“咖啡偏好”相关的记忆,优先考虑语义和情感扇区 results = client.search( query="咖啡偏好", sector_weights={"semantic": 0.6, "emotional": 0.3}, # 语义权重60%,情感30% max_depth=2 # 激活扩散最多扩展2层关联节点 ) for result in results: print(f"记忆内容:{result.content},关联路径:{result.path}")

四、应用场景
OpenMemory的设计使其适用于各类需要“长期记忆”的AI应用,以下是典型场景:
1. 长期AI代理(Autonomous Agents)
AI代理需要在长时间内完成复杂任务(如“规划旅行”“管理项目”),需记住用户的动态需求(如“用户突然想增加一个行程”)、环境变化(如“航班延误”)和历史操作(如“已预订酒店”)。OpenMemory可作为代理的“记忆库”,通过多扇区嵌入记录任务相关的情景(时间、地点)、语义(需求细节)和程序(待执行步骤),并通过关联链接确保代理能“联想”到相关信息(如“航班延误”→“需调整酒店入住时间”)。
2. 智能助手(如聊天机器人、语音助手)
智能助手需要记住用户的长期偏好(如“用户对坚果过敏”“喜欢每天早上8点听新闻”)、历史对话(如“上周提到的医生预约时间”),避免重复询问或遗忘关键信息。例如,当用户说“帮我订明天的早餐”,助手可通过OpenMemory检索到“用户不吃坚果”“喜欢全麦面包”等记忆,直接生成符合偏好的订单,无需再次确认。
3. 个人/企业日记应用
日记应用需要记录日常琐事、灵感或工作笔记,并支持按语义检索(如“找到上个月关于项目方案的想法”)。OpenMemory的多扇区嵌入可区分“工作日记”(程序扇区记录待办)和“生活日记”(情感扇区记录心情),且单向链接能关联“方案想法”与后续的“执行结果”,让用户不仅能找到内容,还能看到完整的“思考链”。
4. 企业级Copilots工具
企业Copilots(如代码助手、客户服务助手)需要记住企业内部知识(如“产品定价规则”“客户历史投诉”)和员工操作习惯(如“某销售常用的报价模板”)。OpenMemory的自托管能力确保企业数据不泄露,多租户隔离可区分不同部门的记忆(如“销售部客户信息”与“技术部产品文档”),而可解释性检索则方便管理员审计“Copilots为何给出某建议”(如“基于客户3个月前的投诉记录”)。
5. 教育/学习助手
学习助手需要记住学生的知识盲点(如“多次做错的数学公式”)、学习进度(如“已完成第三章练习”)和偏好(如“喜欢视频讲解”)。OpenMemory的情感扇区可记录学生对知识点的掌握情绪(如“对几何证明感到困惑”),程序扇区可关联“推荐的学习资源”,帮助助手精准推送个性化学习内容。
五、使用方法
OpenMemory支持两种部署方式:适合开发测试的手动部署,和适合生产环境的Docker部署,以下是详细步骤:
1. 手动部署(开发推荐)
环境要求
Node.js 18+(后端运行环境);
npm 9+(包管理工具);
Python 3.8+(若使用Python SDK);
可选:Ollama(本地嵌入模型部署,推荐)。
步骤
克隆仓库:
git clone https://github.com/CaviraOSS/OpenMemory.git cd OpenMemory
配置环境变量:
复制示例配置文件并修改参数(如端口、嵌入模型、是否启用加密等):cp .env.example .env
关键配置项说明:
PORT=8080:服务运行端口;EMBEDDING_PROVIDER=ollama:嵌入模型提供商(支持ollama/openai/local,推荐ollama本地部署);OLLAMA_MODEL=bge-large-en:Ollama使用的嵌入模型(需先通过ollama pull bge-large-en下载);ENABLE_ENCRYPTION=false:是否启用数据加密(生产环境建议设为true);DATABASE_PATH=./data/openmemory.db:SQLite数据库文件路径。安装后端依赖并启动服务:
cd backend npm install npm run dev # 开发模式(自动重启),或 npm start (生产模式)
服务启动后,默认运行在
http://localhost:8080,可通过http://localhost:8080/health检查是否正常运行(返回{"status":"ok"})。使用SDK集成:
JavaScript SDK:
npm install @caviraoss/openmemory-sdk-js
示例代码:
import { OpenMemoryClient } from '@caviraoss/openmemory-sdk-js'; const client = new OpenMemoryClient({ baseUrl: 'http://localhost:8080' }); // 创建记忆 const memory = await client.createMemory({ content: '用户喜欢低糖咖啡,每天早上9点下单', type: 'user_preference', metadata: { source: 'chat' } }); // 检索记忆 const results = await client.search({ query: '咖啡偏好' }); console.log(results);Python SDK:
pip install openmemory-sdk-py
示例代码(同上功能):
from openmemory import OpenMemoryClient client = OpenMemoryClient(base_url="http://localhost:8080") memory = client.create_memory( content="用户喜欢低糖咖啡,每天早上9点下单", type="user_preference", metadata={"source": "chat"} ) results = client.search(query="咖啡偏好") print(results)
2. Docker部署(生产推荐)
Docker部署可简化环境配置,适合企业级应用,步骤如下:
克隆仓库(同上):
git clone https://github.com/CaviraOSS/OpenMemory.git cd OpenMemory
配置环境变量(同上):
cp .env.example .env # 根据生产需求修改.env(如端口设为80,启用加密等)
构建并启动容器:
docker compose up --build -d
该命令会构建后端服务镜像,启动容器,并将数据库文件映射到本地
./data目录(确保数据持久化)。服务启动后可通过http://服务器IP:端口访问。
3. 验证部署
部署完成后,可通过API测试工具(如Postman)发送请求验证:
创建记忆:
POST http://localhost:8080/memories Content-Type: application/json { "content": "测试记忆内容", "type": "test", "metadata": {"tag": "demo"} }检索记忆:
GET http://localhost:8080/memories/search?query=测试
若返回包含“测试记忆内容”的结果,则部署成功。
六、常见问题解答(FAQ)
1. OpenMemory与向量数据库的核心区别是什么?
向量数据库仅通过单一语义向量存储和检索信息,无法关联记忆的情景、情感等维度,也不支持逻辑关联(如“时间先后”“因果关系”);而OpenMemory通过多扇区嵌入和单向路径链接,实现了“语义+逻辑”的复合检索,更接近人类记忆模式,召回率更高。
2. 必须部署本地嵌入模型吗?可以用OpenAI的嵌入API吗?
不是必须。OpenMemory支持多种嵌入提供商,包括本地模型(Ollama)、OpenAI API、Azure OpenAI等。若对延迟和成本敏感,推荐本地部署Ollama(免费且无网络延迟);若追求快速上手,可配置EMBEDDING_PROVIDER=openai并填入API密钥。
3. 自托管需要专业技术吗?普通用户能部署吗?
Docker部署对技术要求较低,只需按照步骤执行命令即可,适合普通用户;手动部署需要基本的Node.js环境配置知识,适合开发者。项目文档提供了详细的部署指南,且社区(GitHub Issues)会解答常见问题。
4. 支持多语言记忆吗?比如中文、日文?
支持。只要使用的嵌入模型支持多语言(如bge-large-zh中文模型、gte-large-jp日文模型),OpenMemory就能正常处理多语言记忆。配置时只需将.env中的OLLAMA_MODEL改为对应模型即可。
5. 数据存储容量有限制吗?能处理千万级记忆节点吗?
理论上无容量限制,取决于存储介质(如硬盘大小)。但由于基于SQLite,当节点数超过100万时,建议优化索引(项目提供索引优化脚本)或迁移至更适合大规模数据的数据库(如PostgreSQL,需修改数据库层代码)。目前测试显示,10万节点可稳定运行,响应时间保持在150ms以内。
6. 如何备份和恢复数据?
OpenMemory的数据存储在SQLite文件(默认./data/openmemory.db)中,备份时直接复制该文件即可;恢复时将备份文件放回原路径,重启服务即可读取。Docker部署需注意备份映射到本地的./data目录。
七、相关链接
八、总结
OpenMemory是一款针对LLM应用的开源自托管AI记忆引擎,通过分层记忆分解架构、多扇区嵌入和复合相似性检索,解决了传统方案在召回率、延迟、成本和可解释性上的痛点。它支持多格式数据摄入、本地部署和灵活集成,适用于AI代理、智能助手、企业copilots等多种场景,且完全开源无 vendor 锁定,为需要“长期记忆”的AI应用提供了安全、高效、低成本的解决方案。
版权及免责申明:本文由@AI工具箱原创发布。该文章观点仅代表作者本人,不代表本站立场。本站不承担任何相关法律责任。
如若转载,请注明出处:https://www.aipuzi.cn/ai-news/openmemory.html

