项目 :rohitg00/agentmemory 版本 :v0.9.11(2026-05-12) | Star :6,247 ⭐ | Fork :577 | Open Issues :56 创建时间 :2026-02-25 | 语言 :TypeScript + Rust(iii-engine) 官网 :agent-memory.dev 数据截止:2026-05-13
一、问题:AI 编程助手的"失忆症"
用 Claude Code、Cursor、Codex CLI 做项目的人都经历过这个循环:
vbnet
Session 1: "用 jose 做 JWT 认证,不要 jsonwebtoken,因为 Edge 兼容性"
Session 2: "加个限流中间件"
Agent: "好的,你的认证用的是 jsonwebtoken 吧?"
你: "......上次说了用 jose"
内置记忆文件(CLAUDE.md、MEMORY.md)能缓解,但有硬伤:约 200 行就到顶,靠手动维护,项目大了容易过时。
agentmemory 的方案 :跑一个后台服务,通过 Agent 的生命周期 Hooks 自动捕获每一次工具调用,压缩成结构化记忆,下次会话自动注入相关上下文。核心卖点是"全自动"------开发者什么都不用做。
二、架构:iii-engine 一体化设计
2.1 技术决策
agentmemory 最核心的决策是不自己造数据库 。它构建在 iii-engine 之上------一个 Rust 编写的通用运行时,内置 HTTP 触发器、KV 状态存储、内存向量索引、WebSocket 流和 OpenTelemetry 可观测性。
传统方案需要拼装 Express + SQLite/Postgres + pgvector + Socket.io + pm2,agentmemory 全部用 iii-engine 原语替代。
好处:
- 一个
npx命令就能跑起来,零外部数据库依赖 - 进程内向量索引,检索延迟 P50 < 20ms(官网数据)
- 内置 OTEL 可观测性,每个记忆操作自动产生 trace span
代价:
- 引入 iii-engine 作为硬依赖,这是一个相对较新的 Rust 运行时
- 当前 pin 在 v0.11.2,v0.11.6+ 引入新 sandbox 模型需要重构适配
- Windows 用户需要额外安装步骤(无 PowerShell 安装器)
2.2 嵌入与存储
| 组件 | 默认方案 | 备选 |
|---|---|---|
| 嵌入 | all-MiniLM-L6-v2(本地,384 维,免费) |
OpenAI、Gemini、Voyage AI、Cohere、OpenRouter |
| 结构化存储 | iii KV State | --- |
| 向量索引 | 内存向量索引 | --- |
| LLM 压缩 | 关闭(no-op provider) | Anthropic、Gemini、OpenRouter、MiniMax |
⚠️ 重要 :README 中的 Token 成本对比( <math xmlns="http://www.w3.org/1998/Math/MathML"> 10 / 年 v s 10/年 vs </math>10/年vs500/年)是在"无 LLM 参与 + 本地嵌入"前提下的数据。默认配置下 LLM 压缩是关闭的,你需要手动配置 API key 才能启用。
三、记忆管道:从捕获到检索
3.1 自动捕获
以 Claude Code 为例,注册 12 个生命周期 Hooks(以下列出核心的 10 个,另有 Notification、TaskCompleted 等为 Claude Code 特有事件):
ini
PostToolUse 触发
→ SHA-256 去重(5 分钟窗口内相同内容跳过)
→ 隐私过滤(剥离 API key、secret、<private> 标签内容)
→ 存储原始观察(raw observation)
→ [可选] LLM 压缩为结构化事实
→ 向量嵌入
→ BM25 + 向量索引
Session 结束(Stop/SessionEnd)
→ 生成会话摘要
→ [可选] 知识图谱实体提取(需 GRAPH_EXTRACTION_ENABLED=true)
12 个 Hooks 的覆盖范围:
| Hook | 捕获内容 |
|---|---|
| SessionStart | 项目路径、会话 ID |
| UserPromptSubmit | 用户提示(隐私过滤后) |
| PreToolUse | 文件访问模式 + 上下文富化 |
| PostToolUse | 工具名、输入、输出 |
| PostToolUseFailure | 工具执行失败时的错误上下文 |
| PreCompact | 压缩前重新注入记忆 |
| SubagentStart | 子 Agent 启动 |
| SubagentStop | 子 Agent 结束 |
| Stop | 会话结束摘要 |
| SessionEnd | 会话完成标记 |
| Notification | Claude Code 特有:通知事件 |
| TaskCompleted | Claude Code 特有:任务完成事件 |
注:Codex CLI 注册其中 6 个(SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、PreCompact、Stop),不支持 Subagent 和 Claude-Code 特有事件。
3.2 三流融合检索
检索时融合三种信号:
- BM25:带 Porter 词干提取和同义词扩展的关键词匹配(始终开启)
- 向量:余弦相似度(需配置嵌入 provider)
- 知识图谱:实体匹配 → BFS 邻居遍历(查询中检测到实体时触发)
三者通过 RRF(Reciprocal Rank Fusion, k=60) 融合,再按来源会话多样化(最多 3 条/会话)。
3.3 四层记忆固化
借鉴人脑记忆巩固机制:
- Working(工作记忆):原始工具调用记录
- Episodic(情景记忆):单次会话压缩摘要
- Semantic(语义记忆):跨会话可复用的事实和模式
- Procedural(程序记忆):流程和决策模式
配合艾宾浩斯遗忘曲线的自动衰减、矛盾检测、重要性驱逐。四层固化需 CONSOLIDATION_ENABLED=true(默认开启),知识图谱提取需 GRAPH_EXTRACTION_ENABLED=true(默认关闭)。
四、基准测试:数据背后的真相
4.1 检索精度
数据来自 LongMemEval-S 基准(ICLR 2025)。我在仓库的 benchmark/LONGMEMEVAL.md 中找到了详细的方法论说明:
- 数据集:LongMemEval-S,500 个问题,每个问题约 48 个会话,约 115K tokens
- 指标 :
recall_any@K------top-K 结果中是否包含任意一个正确会话 - 关键声明(原文):"We do NOT claim these as 'LongMemEval scores' --- they are retrieval-only evaluations on the LongMemEval-S haystack."
- 无 LLM 参与:纯检索评估,不涉及答案生成或 LLM 判断
| 系统 | R@5 | R@10 | R@20 | NDCG@10 | MRR |
|---|---|---|---|---|---|
| agentmemory (BM25+Vector) | 95.2% | 98.6% | 99.4% | 87.9% | 88.2% |
| agentmemory (BM25-only) | 86.2% | 94.6% | 98.6% | 73.0% | 71.5% |
| MemPalace (vector-only) | 96.6% | ~97.6% | --- | --- | --- |
解读:
- 三流融合相比纯 BM25 提升 +9pp(R@5),MRR 提升 +16.7pp,这是实质性的进步
- 但 MemPalace(vector-only)的 R@5 更高(96.6% vs 95.2%),不过 LONGMEMEVAL.md 未披露 MemPalace 使用的嵌入模型,无法直接比较成本和部署复杂度
- agentmemory 的优势在于低门槛 ------用 384 维的
all-MiniLM-L6-v2(本地免费,无 API key)即可达到 95.2%
4.2 按问题类型分析
| 类型 | BM25+Vector R@5 | BM25-only R@5 | 向量增益 | 样本数 |
|---|---|---|---|---|
| knowledge-update | 98.7% | 92.3% | +6.4pp | 78 |
| multi-session | 97.7% | 86.5% | +11.2pp | 133 |
| single-session-assistant | 96.4% | 80.4% | +16.0pp | 56 |
| temporal-reasoning | 95.5% | 88.0% | +7.5pp | 133 |
| single-session-user | 90.0% | 91.4% | -1.4pp | 70 |
| single-session-preference | 83.3% | 60.0% | +23.3pp | 30 |
发现:
- Preference 是最难的类别(83.3%),因为偏好往往是隐式/间接表达的
- single-session-user 类型向量反而不如 BM25(-1.4pp),说明纯关键词匹配在某些场景下更精准
- 向量增益最大的是 preference(+23.3pp)和 single-session-assistant(+16.0pp),说明语义理解对模糊表达的价值
4.3 与竞品的基准对比
| 系统 | 基准 | R@5 |
|---|---|---|
| agentmemory | LongMemEval-S | 95.2% |
| MemPalace | LongMemEval-S | ~96.6% |
| Letta/MemGPT | LoCoMo | 83.2% |
| Mem0 | LoCoMo | 68.5% |
结论:agentmemory 在 LongMemEval-S 上的表现确实优秀,但不能直接与 mem0/Letta 的数据横向比较。
4.4 Token 成本
| 方案 | 年 Token 消耗 | 年成本 | 前提条件 |
|---|---|---|---|
| 全量上下文粘贴 | 19.5M+ | 不可行 | --- |
| LLM 摘要 | ~650K | ~$500 | --- |
| agentmemory | ~170K | <math xmlns="http://www.w3.org/1998/Math/MathML"> 0 0 ~ </math>0 10 | 免费(本地嵌入)或 ~$10(API 嵌入),均无 LLM 参与 |
每次会话注入约 1,900 tokens,对比内置记忆文件的 22K+ tokens,单次会话注入成本节省约 92%。
五、安全史:两个 Critical 漏洞
从仓库的 .github/security-advisories/ 目录中,我发现了两个已修复的严重安全漏洞:
5.1 存储型 XSS(CVSS 9.6)
- 影响版本:< 0.8.2
- 问题 :实时查看器(端口 3113)使用内联
onclick=事件处理器渲染用户控制的数据(工具输出、文件路径、记忆内容),同时 CSP 允许script-src 'unsafe-inline' - 攻击场景:查看器默认绑定 127.0.0.1(不暴露到网络),但攻击者可通过构造恶意文件内容或 commit message,让 Agent 捕获后,当开发者打开本地查看器时执行任意 JavaScript,可窃取整个记忆库、读取 AGENTMEMORY_SECRET、向任意端点发起请求
- 修复 (v0.8.2):移除所有内联
on*=处理器,改用data-action委托事件,CSP 改为 per-response script nonce
5.2 远程代码执行(CVSS 9.8)
- 影响版本:< 0.8.2
- 问题 :CLI 启动时自动执行
curl -fsSL https://install.iii.dev/iii/main/install.sh | sh安装 iii-engine,无校验、无签名 - 攻击场景:如果 install.iii.dev 被劫持(DNS 劫持、域名接管、MITM),所有新用户的机器上会执行攻击者控制的 shell 脚本
- 修复 (v0.8.2):移除
execSync调用,改为使用本地已有的 iii 二进制,或 fallback 到 Docker Compose,或显示手动安装指引
教训 :agentmemory 的安全意识在早期版本(< 0.8.2)是不足的。虽然两个漏洞都已修复,但说明这个项目在安全方面经历过"先犯错再修复"的过程。如果你使用的是旧版本,必须升级到 0.8.2+。
六、社区真实问题
Issue #149:AUTO_COMPRESS + agent-sdk 导致瞬间打满配额
一位用户在 Claude Code 重度会话中(Opus 模型、多个 subagent、50+ 工具调用)开启了 AGENTMEMORY_AUTO_COMPRESS=true,同时 LLM provider 意外 fallback 到了 agent-sdk。结果:几分钟内 Claude Pro 配额从 30% 跳到 100%,触发 429 限流。
根因 :Gemini API key 变量名写错(GOOGLE_API_KEY 而非 GEMINI_API_KEY),导致 detectProvider() fallback 到 agent-sdk,每次 PostToolUse 都调用 Claude API 进行压缩。
教训:AUTO_COMPRESS 默认关闭是有道理的。开启前务必确认 LLM provider 配置正确。
Issue #234:MCP shim 只返回 7 个工具
npx @agentmemory/agentmemory mcp --tools all 在非 Claude Code 客户端上实际只返回 7 个工具,原因是 src/mcp/standalone.ts 中有一个硬编码的 IMPLEMENTED_TOOLS 集合。
影响:Cursor、OpenCode、Gemini CLI 等用户只能用到 51 个工具中的 7 个。已确认 bug(v0.9.4),后续版本可能修复。
Issue #299/#301:Docker 权限问题
iii-engine 以 UID 65532 运行(distroless 镜像),但 Docker 初始化命名卷时默认 root:root 755 权限,导致写入失败。v0.9.7+ 修复。
Issue #310:OpenClaw 内存槽不可用
OpenClaw 集成声明了 kind: "memory" 但从未调用 api.registerMemoryCapability(),导致内存槽报告不可用。v0.9.11 修复。
总结:agentmemory 还在快速迭代中(2.5 个月 47 个 release),社区反馈的问题修复速度尚可,但稳定性仍在磨合期。
七、集成生态
7.1 三种集成方式
| 方式 | 支持的 Agent | 深度 |
|---|---|---|
| Hooks + MCP + Skills | Claude Code(12 hooks)、Codex CLI(6 hooks) | 最深:自动捕获 + 技能命令 |
| MCP Server | Cursor、Claude Desktop、Cline、Roo Code、Windsurf、Gemini CLI、Goose、Kilo Code、OpenCode、OpenClaw、Hermes | 标准:MCP 工具 |
| REST API | Aider 及任何能发 HTTP 请求的 Agent | 兜底:curl 调用(121 个 REST 端点) |
7.2 最新动态(v0.9.11,2026-05-12)
- Codex 插件支持 :
codex plugin marketplace add rohitg00/agentmemory一步安装 MCP + 6 hooks + 4 skills - OpenClaw 修复:内存槽现在正确报告为可用
- Docker 权限修复:启动前自动 chown 命名卷
7.3 MCP 配置
所有支持 MCP 的 Agent 使用统一配置:
json
{
"mcpServers": {
"agentmemory": {
"command": "npx",
"args": ["-y", "@agentmemory/mcp"],
"env": {
"AGENTMEMORY_URL": "http://localhost:3111"
}
}
}
}
注意:Issue #234 指出 standalone MCP 模式下实际可用工具数可能受限(仅 7 个)。建议通过完整服务器模式使用。
八、部署实操
快速体验
bash
# Terminal 1:启动记忆服务器
npx @agentmemory/agentmemory
# Terminal 2:运行 demo
npx @agentmemory/agentmemory demo
# 实时查看器:http://localhost:3113
demo 搜索 "database performance optimization" 能命中 "N+1 query fix"------这是纯关键词匹配做不到的语义关联。
关键环境变量
| 变量 | 默认值 | 说明 |
|---|---|---|
AGENTMEMORY_AUTO_COMPRESS |
false |
⚠️ 开启后每次 PostToolUse 调用 LLM,见 #149 |
AGENTMEMORY_SLOTS |
false |
可编辑的固定记忆槽 |
AGENTMEMORY_INJECT_CONTEXT |
false |
SessionStart 注入项目上下文 |
GRAPH_EXTRACTION_ENABLED |
false |
知识图谱实体提取 |
AGENTMEMORY_TOOLS |
core |
core=8 工具 / all=51 工具 |
建议 :初次使用保持默认,先验证基础记忆捕获和检索,再逐步开启高级功能。特别谨慎对待 AUTO_COMPRESS。
Windows
需要额外安装 iii-engine v0.11.2 二进制文件(从 iii releases 下载),或使用 Docker Desktop,或仅用 MCP 模式。
九、竞品对比与选型
| 维度 | agentmemory | Mem0 | Letta/MemGPT | claude-mem |
|---|---|---|---|---|
| Star | 6.2K(已验证) | 53K+ | 22K+ | 46K+(COMPARISON.md 声称,未独立验证) |
| 定位 | 记忆引擎 + MCP | 记忆层 API | 完整 Agent 运行时 | MCP 服务器 |
| 自动捕获 | 12 Hooks(全自动) | 手动 add() |
Agent 自管理 | 有限 |
| 检索 | BM25+向量+图谱 | 向量+图谱 | 向量(档案) | FTS5 |
| 依赖 | iii-engine | Qdrant/pgvector | Postgres+向量库 | SQLite |
| 框架锁定 | 无 | 无 | 高 | Claude Code |
| 知识图谱 | ✅ | ✅(Mem0g) | ❌ | ❌ |
| 记忆衰减 | ✅ 艾宾浩斯 | ❌ | ❌ | ❌ |
| 审计追踪 | ✅ | ❌ | 有限 | ❌ |
| 安全历史 | 2 个 Critical(已修复) | 无公开记录 | 无公开记录 | 无公开记录 |
选型决策树
csharp
你需要什么?
│
├─ 用 Claude Code / Codex CLI 做日常开发,不想"装上就忘"
│ └→ agentmemory(自动捕获 + 零配置,最省心)
│
├─ 需要云原生 API、多语言 SDK、生产级高可用
│ └→ Mem0(更成熟的基础设施,53K ⭐,但需手动 add())
│
├─ 需要完整的 Agent 运行时(自主决策、多步推理)
│ └→ Letta/MemGPT(但框架锁定严重)
│
└─ 只用 Claude Code,想要最简单的方案
└→ claude-mem(SQLite + FTS5,轻量级,Star 数未独立验证)
十、我的判断:三个层次
第一层:技术方案是否成立?
成立。 12 个 Hooks 全自动捕获 + 三流融合检索 + 四层记忆固化------这套组合拳在"让 Agent 记住项目上下文"这个细分场景下确实有效。95.2% 的 R@5(LongMemEval-S)和每次会话 92% 的注入成本节省是有说服力的数据。
第二层:是否适合生产环境?
谨慎。 以下几点需要考虑:
- iii-engine 生态尚不成熟(agentmemory 仓库创建仅 2.5 个月,56 个 open issues)
- 安全历史有污点(2 个 CVSS 9.6/9.8 的漏洞,虽然已修复)
- MCP shim 工具数 bug(#234)影响非 Claude Code 用户
- 很多功能默认关闭,开启后可能有坑(#149)
第三层:是否值得关注?
值得。 即使你今天不用它,agentmemory 代表了一个趋势:AI Agent 的记忆层正在从"可选附件"变成"基础设施"。它的四层固化模型、三流融合检索、自动遗忘机制,都是这个方向上有价值的探索。
我的建议:在个人项目上试用,等 iii-engine 适配 v0.11.6+ 的 sandbox 重构落地后再考虑团队使用。