OpenMemory
AI内存引擎作为MCP服务器公开。具有服务器端智能的结构化知识——域路由、实体提取、重复数据删除和替换。任何人工智能工具都可以查询它。你拥有数据。
问题
人工智能代理可以存储知识,但现有的方法限制了它的结构化和检索效率。像ChatGPT和Claude这样的内置存储器存储没有模式或关系的平面文本,并且不能跨工具移植。开发人员库提供内存原语,但需要大量的集成工作。知识图引擎以每次摄入多个LLM调用和操作开销为代价,提供丰富的实体提取。轻量级解决方案实现了跨工具共享,但没有结构、置信度评分或重复数据删除。
共同的差距:结构化的、模式驱动的知识,具有有效的检索能力,可以在任何人工智能工具上工作,而无需大量的基础设施成本。
解决方案
一个积累结构化知识的地方——经过验证,归您所有——每个人工智能工具都可以使用细粒度权限进行查询。适用于个人身份、团队知识、项目背景或任何需要持久内存的AI用例。
快速开始
添加到AI工具的MCP配置中:
{
"mcpServers": {
"openmemory": {
"command": "npx",
"args": ["-y", "@openmem/mcp@0.2.0"]
}
}
}适用于Claude Code、Claude Desktop、Cursor和任何兼容MCP的工具。数据存储在 ~/.openmemory 默认情况下。要更改此设置,请添加 "env": { "OPENMEMORY_DATA": "/absolute/path" } 到上面的配置。
禁用客户端的内置内存。 OpenMemory取代了它——在两个系统中运行这两个片段——你的知识。在克劳德桌面:设置→ 记忆→ 关闭。在ChatGPT中:设置→ 个性化→ 记忆→ 这确保了OpenMemory是唯一的真相来源。
运作原理
OpenMemory通过两条互补的路径获取知识:
- 快速捕获 --在对话过程中,AI会呼叫
capture_fact每当它学到有用的东西。事实立即存储在会话暂存缓冲区中。
- 批量合并 --服务器会定期将所有未决事实作为一批进行处理:对域进行分类,提取实体(人、地点、组织),检测重复和矛盾,并构建知识图。
可选地,服务器还可以在整合过程中扫描原始对话事件,以提取人工智能遗漏的事实——这是一个确保重要知识不会丢失的安全网。
结果是一个结构化的、不断发展的知识图,任何人工智能工具都可以通过MCP查询。
特性
- 混合知识捕获 --人工智能在对话中明确地捕捉事实。可选地,服务器还可以在整合过程中从原始事件中提取事实作为安全网。
- 批量合并 --定期处理将未决捕获整合到长期知识图中:对领域进行分类,提取实体,解决重复问题,检测矛盾。
- 实体图 --人、地点、组织会自动提取和链接。关系强度跟踪佐证。
- 混合搜索 --BM25关键字+结构化域+实体图路径,通过具有时间衰减的互易秩融合进行合并。
- 会话内存 --最近捕获的事实可以通过以下方式立即访问
get_session_context甚至在整合之前。 - 不可变历史 --事实永远不会被删除,只会被取代。完整的历史得以保存。
- 来源可追溯性 --每一个事实都与产生它的对话事件有关。
- 手动合并 --呼叫
consolidate在自然断点处(主题更改、任务完成、预压缩)。不依赖会话边界。
MCP工具
会话
log_event--记录对话事件(消息、工件)。get_events--从当前或以前的会话中检索事件。get_session_context--回忆当前会话中捕获的事实(会话工作记忆中)。
阅读
get_profile--核心身份事实get_preferences--按域的首选项get_people--具有关系的个人资料get_context--与主题相关的所有内容(搜索+实体遍历)search_knowledge--跨毕业知识的混合搜索
写作
capture_fact--储存一个事实。使用会话标记快速追加。全面情报推迟到巩固。consolidate--将悬而未决的事实纳入长期知识。提取实体,解析重复项,检测矛盾,构建知识图。在自然断点或上下文压缩之前调用。
元
get_schemas--可用域和结构get_stats--事实计数、实体计数、域分布
会话事件日志记录
OpenMemory将每一次交互都作为 SessionEvent --DIKW数据层。这是巩固、搜索和回忆的基础。
如何捕获事件
所有事件均通过 log_event MCP工具或 openmemory log-event CLI命令。主叫AI记录对话消息;Claude Code钩子可以自动执行此操作:
克劳德代码挂钩
对于Claude Code来说,钩子提供了确定性的捕获——它们每次都会触发,不管AI是否“记住”了工具描述。
可用挂钩
| 钩子 | 开火时 | 它捕获了什么 |
|---|---|---|
UserPromptSubmit | 用户发送消息 | 完整提示文本 |
Stop | 助理完成响应 | 最后一条助理消息 |
PostToolUse | 工具调用完成 | 工具名称、输入和响应 |
设置
安装挂钩的CLI:
npm install -g @openmem/mcp或者,更换 openmemory 和 npx -y @openmem/mcp 在下面的钩子命令中(不需要安装,但每个钩子会增加2-3s的延迟)。
添加 .claude/settings.json (项目层面)或 ~/.claude/settings.json (全球):
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "openmemory log-event --role user --event-type message"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "openmemory log-event --role assistant --event-type message"
}
]
}
],
"PostToolUse": [
{
"matcher": "^(?!mcp__openmemory__)",
"hooks": [
{
"type": "command",
"command": "openmemory log-event --role tool --event-type tool_result"
}
]
}
]
}
}CLI从stdin读取钩子JSON有效负载并提取相关内容字段(prompt 为了 UserPromptSubmit, last_assistant_message 为了 Stop,完整的JSON格式 PostToolUse).事件将附加到数据库中最近活动的会话。
这 PostToolUse matcher不包括OpenMemory自己的工具(^(?!mcp__openmemory__))以避免捕获内部操作。
CLI 参考
这 openmemory log-event 命令将事件直接插入数据库(无需运行服务器):
# From a hook (reads JSON payload from stdin):
echo '{"hook_event_name":"UserPromptSubmit","prompt":"hello"}' | openmemory log-event --role user
# With explicit content:
openmemory log-event --role user --event-type message --content "hello world"
# Options:
# --role user | assistant | system | tool (default: user)
# --event-type message | tool_call | tool_result | artifact (default: message)
# --content-type text | json | image | audio | binary (default: text)
# --content Event content (or pipe via stdin)
# --session-id Target session (default: most recent)
# --data Data directory (default: ~/.openmemory or $OPENMEMORY_DATA)集成模式
OpenMemory的工具描述是主要的集成层——它们告诉AI助手何时捕捉事实和搜索知识,与每个MCP客户端开箱即用。为了实现更深入的集成,客户端可以添加 基于规则的钩子 (加载到AI上下文中的指令)在对话生命周期的关键时刻。这些是可选的,但使捕获和检索更加可靠。
无配置
这 capture_fact 工具描述告诉人工智能“当你学到有用的东西时,主动调用它。” search_knowledge 描述说“在回答可能受益于个人背景的问题之前,先调用此功能。”这些描述随服务器和驱动器行为一起提供,无需任何客户端设置。
挂钩点
| 钩点 | 何时 | 打什么电话 | 为什么重要 |
|---|---|---|---|
| 会话开始 | 对话开始 | get_profile, search_knowledge | AI从第一条消息中知道你是谁 |
| 主动捕捉 | 用户提及偏好、事实或决定 | capture_fact | 跨课程的知识复合 |
| 响应前搜索 | 生成回复之前 | search_knowledge, get_context | 基于个人知识的回应 |
| 预压缩 | 上下文窗口压缩之前 | consolidate | 在删除上下文之前处理未决事实 |
| 自然断点 | 主题更改、任务完成 | consolidate (可选) | 保持知识图最新 |
预压时: 这是最高值的挂钩点——没有它,当客户端压缩上下文时,知识会悄无声息地丢失。召唤 consolidate 在压缩之前,将所有悬而未决的事实转化为长期知识。如果启用了事件提取,服务器还会扫描原始对话事件,以提取AI遗漏的事实。
克劳德代码
创建 .claude/rules/openmemory.md 在您的项目中(或 ~/.claude/rules/openmemory.md 全球)。这会自动加载到上下文中:
# OpenMemory
- At the start of each conversation, call `get_profile` to load identity context
- Before answering questions about preferences, people, or history, call `search_knowledge`
- When the user mentions preferences, personal details, relationships, or decisions, call `capture_fact`
- When the conversation is getting long, call `consolidate` to process pending facts before they are lost to compaction
- At natural breakpoints (topic change, task completion), call `consolidate` to keep the knowledge graph current要允许OpenMemory工具在没有每次调用批准提示的情况下使用,请添加 permissions.allow 数组in .claude/settings.json:
{
"permissions": {
"allow": [
"mcp__openmemory__*"
]
}
}光标/风帆
添加 .cursorrules (光标)或 .windsurfrules (Windsurf)在您的项目根目录中:
When the openmemory MCP server is available:
- At conversation start, call get_profile to load user context
- Before answering questions about preferences or history, call search_knowledge
- When the user shares preferences, facts, or decisions, call capture_fact
- When context is getting long, call consolidate to process pending facts before they are lost克劳德桌面/其他MCP客户端
无需配置。工具描述自动处理集成——人工智能助手读取工具描述,并知道何时进行捕获和搜索。
发展
git clone https://github.com/gordonkjlee/openmemory
cd openmemory
npm install
npm run build
npm test许可证
麻省理工学院
