每天早晨,你的AI代理都像对待陌生人一样对待你。同样的上下文要重新解释。同样的偏好被遗忘。每次会话都从零开始。
大多数“记忆”工具只是将向量数据库附加到代理上,然后称之为完成——但这只是存储。它堆积着几乎重复的内容,直到检索被噪音淹没。一个容量更大的金鱼缸而已。
YourMemory不同:像大脑一样工作的记忆,而非数据库。
flowchart LR
A["🧠 你告诉你的<br/>AI某些事情"] --> B["提取持久的<br/>事实"]
B --> C["去重 + 嵌入<br/>+ 图链接"]
C --> D[("记忆<br/>存储")]
D -->|"相关事实堆积"| E["✨ 整合<br/>N → 1 摘要"]
D -->|"陈旧 + 未使用"| F["📉 衰减<br/>+ 修剪"]
D -->|"新会话"| G["♻️ 检索<br/>混合 + 图"]
E --> D
G --> H["🤖 你的代理<br/>从中断处<br/>继续"]
style D fill:#0a2540,stroke:#19cdff,color:#fff
style E fill:#0c2b3a,stroke:#5eead4,color:#fff
style H fill:#0c2b3a,stroke:#19cdff,color:#fff
一条命令即可安装。默认使用 DuckDB(零配置),团队可使用 Postgres + pgvector。
三个外部数据集。每个数字均可独立复现——基准测试代码位于仓库中。完整方法见BENCHMARKS.md。
xychart-beta
title "Recall@5 · LoCoMo-10(越高越好)"
x-axis ["Mem0", "Zep Cloud", "Supermemory", "YourMemory"]
y-axis "Recall@5 百分比" 0 --> 70
bar [18, 28, 31, 59]
比 Zep Cloud 高出 2 倍的召回率,覆盖全部 10 个样本。*Supermemory 和 Mem0 在基准测试过程中免费层级配额耗尽;分数基于全部 1,534 对计算。
最难的长期记忆标准基准测试。每个问题被埋在约 53 个会话中。
| 指标 | 分数 |
|---|---|
| Recall@5(任意黄金会话在前5) | 89.4% |
| Recall-all@5(所有黄金会话在前5) | 84.8% |
| nDCG@5(排名质量) | 87.4% |
| 系统 | BOTH_FOUND@5 |
|---|---|
| YourMemory(向量 + BM25 + 实体图) | 71.5% |
| YourMemory(无实体边) | 59.5% |
实体图边增加了 +12 个百分点——它们能够从事实1遍历到事实2,即使事实2与查询的嵌入相似度很低。
Python 3.11–3.14。无需Docker,无需设置数据库。所有记忆本地存储在 ~/.yourmemory/ 中。
pip install yourmemory
yourmemory-register <your-token>
yourmemory-setup
获取令牌: 访问 yourmemoryai.xyz → 输入邮箱 → 用6位验证码验证 → 复制你的令牌。
yourmemory-setup 会自动检测并配置 Claude Code、Claude Desktop、Cursor、Windsurf 和 Cline,然后询问你使用哪个后端:
DATABASE_URL(需要 pgvector 扩展)可选——更智能的本地提取: YourMemory 开箱即可使用内置启发式算法。为获得更高质量、完全本地的事实提取,请安装 Ollama,
yourmemory-setup会自动拉取模型(qwen2.5:7b,约4.7 GB)。更喜欢云端?设置YOURMEMORY_EXTRACT_BACKEND=anthropic。
不想碰 pip?从最新发布获取你平台的独立二进制文件:
| 平台 | 文件 |
|---|---|
| macOS(Apple Silicon) | yourmemory-macos-arm64.tar.gz |
| macOS(Intel) | yourmemory-macos-x86_64.tar.gz |
# macOS / Linux — 下载、解压、运行
tar -xzf yourmemory-macos-arm64.tar.gz
./yourmemory-macos-arm64 register <your-token>
./yourmemory-macos-arm64 setup
./yourmemory-macos-arm64 # 启动服务器
一个可执行文件处理所有命令:register、setup、ask "<问题>"、path,以及(无参数时)启动服务器。
完全自包含且离线——二进制文件打包了 Python、每个依赖项,以及两个 ML 模型(嵌入模型 + spaCy)。首次运行时不会下载任何内容。代价是文件大小(约2 GB)。使用单条命令 ./build-binary.sh 自行构建,多平台发布二进制文件由构建工作流自动生成。
YourMemory 将记忆视为一个生命系统——它会生长、整合、遗忘并连接,就像大脑一样。
大多数记忆工具只是不断增长。YourMemory 监视相关事实的聚类,一旦积累足够多,就将其压缩成一个清晰的摘要——原始内容被归档(永不删除,因此不会有任何丢失)。
flowchart LR
subgraph before [相关事实堆积]
A1["Railway 使用 Nixpacks"]
A2["Railway 在 Pro 计划"]
A3["Railway 环境变量保存<br/>Postgres URL"]
A4["在 Railway 上部署<br/>使用 Postgres"]
end
before --> C{"聚类 +<br/>LLM 摘要"}
C --> S["✨ 摘要<br/>在 Railway(Pro,<br/>Nixpacks)上部署,使用 Postgres<br/>通过环境变量"]
C -.->|"已归档,可恢复"| ARC[("归档")]
style S fill:#0a2540,stroke:#5eead4,color:#fff
style C fill:#0c2b3a,stroke:#19cdff,color:#fff
一个生产存储的真实示例:444 条记忆 → 16 个摘要——同样的知识,噪音的极小部分。整合是事件驱动的(当相关记忆堆积时触发),而非盲目的夜间任务。
记忆强度呈指数衰减。重要性和回忆频率会减缓衰减:
effective_λ = base_λ × (1 − importance × 0.8)
strength = clamp(importance × e^(−effective_λ × active_days) × (1 + recall_count × 0.2), 0, 1)
active_days 仅计算你活跃的天数——假期不会导致记忆丢失。强度低于 0.05 的记忆会自动修剪。每个类别以不同的速率老化:
链感知修剪: 如果任何图邻居仍然强大,则已衰减的记忆会被保留——即使很少被直接查询,承载上下文的记忆也能幸存。
检索分两轮进行,以便同时呈现你询问的内容以及你忘记询问的内容:
flowchart LR
Q["查询"] --> R1["向量 + BM25<br/>混合搜索"]
R1 --> R2["图扩展<br/>(你忘记询问的内容)"]
R2 --> S["按相似度 × 强度<br/>排序"]
S --> OUT["🎯 排序后的记忆"]
style OUT fill:#0a2540,stroke:#19cdff,color:#fff
主语感知去重在每次存储前运行——它嵌入每个句子的主语,因此 "Sachit 使用 DuckDB" 和 "YourMemory 使用 DuckDB" 保持分离(不同实体),而 "YourMemory 使用 DuckDB" 和 "YourMemory 将数据存储在 DuckDB" 则合并(同一实体)。没有硬编码的词列表;适用于任何语言。
企业不会让不透明的黑盒存储他们的数据。因此,每次操作——读、写、更新、删除、整合——都会被追加到一个哈希链、防篡改的审计日志中。
flowchart LR
E0["起始"] --> E1
subgraph E1 [事件 1]
H1["row_hash =<br/>sha256(prev + data)"]
end
E1 --> E2
subgraph E2 [事件 2]
H2["row_hash =<br/>sha256(#1.hash + data)"]
end
E2 --> E3
subgraph E3 [事件 3]
H3["row_hash =<br/>sha256(#2.hash + data)"]
end
E3 --> V{"GET /audit/verify"}
V -->|链完整| OK["✅ 已验证"]
V -->|任何行被更改| BAD["❌ 链条在该行<br/>断裂"]
style OK fill:#0a2540,stroke:#5eead4,color:#fff
style BAD fill:#3a0c14,stroke:#fb7185,color:#fff
每条记录包含时间戳、操作者用户+代理、动作、操作、目标记忆、来源(http 或 mcp)以及前一条记录的哈希。更改任何历史记录,verify_chain() 将精确定位链条断裂的位置。
GET /audit # 浏览追踪(按用户/动作/操作筛选)
GET /audit/verify # 密码学验证链条未被篡改
POST /audit/prune # 基于保留期的清理(至少90天,不会更低)
审计日志是故障开放的——它从不阻塞记忆操作——并且仪表板自身的渲染循环产生的读/列表事件被排除在外,因此追踪保持信号而非噪音。
让整个团队的代理共享一个大脑——同时不泄露任何人的私人上下文。记忆可以是共享的(对池可见)或私有的(仅对其所有者可见)。
flowchart TB
P(("🧠 团队池<br/>共享记忆"))
A["Alice 的代理"] <-->|共享| P
B["Bob 的代理"] <-->|共享| P
C["Carol 的代理"] <-->|共享| P
A -. 私有 .-> AP["🔒 仅 Alice"]
B -. 私有 .-> BP["🔒 仅 Bob"]
style P fill:#0a2540,stroke:#19cdff,color:#fff
style AP fill:#0c1424,stroke:#5a6b80,color:#8294a8
style BP fill:#0c1424,stroke:#5a6b80,color:#8294a8
基于角色的访问按代理实施——一位工程师的代理学到的东西,整个团队立即受益;敏感上下文则限于其所有者。
POST /pools # 创建池
POST /pools/{id}/members # 添加成员(带角色)
POST /pools/{id}/memories # 贡献一条共享记忆
POST /pools/{id}/retrieve # 跨池检索
因为存储真实数据的记忆需要被信任的控件:
结合哈希链审计追踪和 90 天保留期下限,这些直接映射到 SECURITY.md 中记录的控件(与 SOC 2 一致)。
两个内置浏览器 UI——无需额外设置,它们会随服务器自动启动。
http://localhost:3033/ui完整的读/写视图,包含记忆·审计·池标签页:状态栏(强 / 衰减 / 接近修剪)、按代理标签页、带实时强度条的记忆卡片、类别筛选、审计追踪以及池管理。
http://localhost:3033/graph交互式力导向图,展示记忆之间的连接方式——根记忆为亮色节点,邻居按类别着色,边厚度表示连接强度。拖拽、缩放并点击任意节点查看完整内容。
http://localhost:3033/graph?memoryId=42&userId=alex&depth=2
三个工具,由你的 AI 自动调用。
| 工具 | 当你的 AI 调用时 | 作用 |
|---|---|---|
recall_memory(query, current_path?) |
# 存储时带空间上下文
store_memory(
"Alex 在 Python 中更喜欢制表符而非空格",
importance=0.9, category="fact",
context_paths=["/projects/backend"],
)
# 下次会话——当在该目录下工作时,空间增强触发
recall_memory("Python 格式化", current_path="/projects/backend")
# → {"content": "Alex 在 Python 中更喜欢制表符而非空格", "strength": 0.87}
唯一一个能够无需任何 LLM API 调用就能回答问题的记忆系统:
yourmemory ask "这个项目使用什么数据库"
# → YourMemory 在本地使用 DuckDB,在生产中使用 Postgres。
yourmemory ask "如何修复 kubernetes 部署"
# → 记忆上下文不足以在没有 LLM 的情况下回答。
当记忆足够强时,它会立即回答——零 token、零云成本、零延迟。当不够时,它会干净地拒绝,而不是胡编乱造。你的查询不会离开你的机器。
MCP 工具由 AI 自行决定是否调用。API 代理消除了这种不确定性——它拦截每次 LLM 调用,自动注入相关记忆,并处理 store_memory / update_memory,无需模型配置。
启动服务器(yourmemory),然后将客户端指向 localhost:3033:
from anthropic import Anthropic
client = Anthropic(
api_key="sk-ant-...",
base_url="http://localhost:3033/proxy/anthropic",
default_headers={"X-YourMemory-User": "alex"}, # 按用户区分记忆
)
# 记忆会自动注入——无需其他更改
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[{"role": "user", "content": "我使用什么数据库?"}],
)
OpenAI 通过 base_url="http://localhost:3033/proxy/openai" 以相同方式工作。
flowchart LR
C["你的 AI 客户端<br/>Claude · Cursor · 任何 MCP"] <--> Y["🧠 YourMemory"]
Y --> M[("记忆<br/>存储")]
Y --> A[("审计<br/>账本")]
style Y fill:#0a2540,stroke:#19cdff,color:#fff
style M fill:#0c1a2c,stroke:#5eead4,color:#fff
style A fill:#0c1a2c,stroke:#5eead4,color:#fff
写入挂起/超时(DuckDB 单写入者锁)。 如果 MCP 服务器和 HTTP 服务器同时运行,它们会竞争 DuckDB 写入锁。修复方法:
pkill -f yourmemory 2>/dev/null || true
rm -f ~/.yourmemory/memories.duckdb.wal ~/.yourmemory/memories.duckdb.lock 2>/dev/null || true
# 重新启动你的客户端
同时运行 Claude Desktop(MCP)和 Claude Code(钩子)?改用 SQLite——它能干净地处理并发读写:DATABASE_URL=sqlite:///~/.yourmemory/memories.db
欢迎提交 PR——见 CONTRIBUTORS.md。
Copyright 2026 Sachit Misra — 采用 CC-BY-NC-4.0 许可证。
免费用于个人使用、教育、学术研究和开源项目。 商业使用需要单独书面协议 → [email protected]
pip install yourmemory| 特性 | 作用 |
|---|
| 🧠 | 整合 | 当足够多的相关事实积累后,它们被压缩成一个清晰的摘要,原始内容被归档。记忆会随时间变得更精准,而不是膨胀。 |
| 📉 | 生物衰减 | 每条记忆都遵循艾宾浩斯遗忘曲线老化。陈旧、未使用的事实会消退;重要且被频繁回忆的则持续存在。 |
| 🔗 | 实体图 | 记忆通过共享的人、地点和概念相互链接——因此检索能发现你忘记询问的内容。 |
| ♻️ | 跨上下文重置生存 | 当上下文窗口压缩时,YourMemory能将工作上下文交还——无需重读文件来搞清楚你之前的位置。 |
| 🔒 | 防篡改审计追踪 | 每次读/写/删除都记录在哈希链账本中。更改一条记录,链条即断裂。 |
| 👥 | 团队记忆池 | 基于角色的共享记忆,使整个团队的代理都能利用同样的机构知识——同时私人记忆保持私有。 |
| 🛡️ | 内置数据权利 | 一键导出(访问权)和遗忘权(清除),以及符合 SOC 2 的控制措施。 |
| 🔌 | MCP原生 & 本地优先 | 兼容 Claude、Cursor、Cline、Windsurf 或任何 MCP 客户端。完全在本地运行——无需API密钥,数据不离开你的系统。 |
| Linux(x86-64) | yourmemory-linux-x86_64.tar.gz |
| Windows(x86-64) | yourmemory-windows-x86_64.exe.zip |
| 类别 | 半衰期 | 最适合 |
|---|
strategy | ~38 天 | 有效的模式、架构决策 |
fact | ~24 天 | 偏好、身份、稳定知识 |
assumption | ~19 天 | 推断的上下文、不确定的信念 |
failure | ~11 天 | 错误、错误的方法、特定于环境的故障 |
| 权利 | 端点 | 作用 |
|---|
| 访问权(DSAR 导出) | GET /users/{id}/export | 完整导出某个用户的所有存储内容 |
| 删除权(遗忘权) | DELETE /users/{id}/memories | 一键清除某个用户的记忆 |
| 可移植性 | POST /users/{id}/import | 重新导入之前的导出内容 |
| 可恢复性 | GET /users/{id}/archive | 检索被整合掉的原始内容 |
| 每个任务开始时 |
| 呈现按相似度 × 衰减强度排序的记忆;路径匹配的记忆获得空间增强 |
store_memory(content, importance, category?, context_paths?) | 学到新内容后 | 嵌入、去重、存储并设置衰减;标记可选的文件/目录路径 |
update_memory(id, new_content, importance) | 存储的事实过时后 | 重新嵌入并替换;将更改记录到审计追踪 |
| 组件 | 角色 |
|---|
| DuckDB | 默认向量存储——零配置、原生余弦相似度 |
| PostgreSQL + pgvector | 可选——适用于团队或大数据集 |
| NetworkX | 默认图后端(~/.yourmemory/graph.pkl) |
| Neo4j | 可选图后端 |
| sentence-transformers | 本地嵌入(multi-qa-mpnet-base-dot-v1,768维) |
| spaCy | 用于去重和实体提取的本地 NLP |
| APScheduler | 自动衰减 + 修剪 |