关于 Amem
Amem 是面向 AI 编码工具的本地优先记忆 MCP 服务,可跨会话保存和检索项目偏好、决策与纠正内容。它使用本地 SQLite 文件,并提供搜索、历史记录、整合和反思功能。
主要功能
- 01使用本地 SQLite 存储记忆
- 02自动与手动捕获记忆
- 03语义、文本、图谱和时间搜索
- 04记忆分层与版本历史
- 05矛盾检测与记忆整合
适用场景
- 01在不同 AI 工具间沿用编码偏好
- 02在新会话中查找项目决策
- 03检查并整合累积的记忆
MCP 相关
Amem 通过 stdio 向 MCP 客户端提供记忆工具、资源和提示词。客户端可存储、搜索、修改和管理记忆。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
amem
AI 编码工具的记忆层。
只需告诉 AI 一次,它就会在所有地方记住。
| 🎯 97.8% R@5 | ⚡ ~14ms p50 | 🛠 33 个工具 | 🔒 100% 本地运行 |
|---|---|---|---|
| LongMemEval-S,500 个问题 | 完整的召回流程 | 完整的记忆工具集 | 无需云服务 |
快速开始 · 工作原理 · 基准测试 · 工具 · 仪表板 · 架构
💡 问题所在
每个 AI 工具都从零开始。每个会话都如此。每个工具都如此。
- You: "Don't use 'any' in TypeScript" → told Claude 3 times. Copilot still doesn't know.
- You: "We chose PostgreSQL over MongoDB" → explained in Cursor. Claude has no idea.
+ With amem: tell it once, every AI tool remembers — forever.
查看实际效果
You (in Claude Code): "Don't use any type in TypeScript"
└─ amem stores this as a correction (priority 1.0, confidence 100%)
You (switch to Copilot): starts coding
└─ Copilot already knows — amem feeds it the same correction
You (open Cursor): "What do you remember about TypeScript?"
└─ Instantly recalls: "Don't use any type" + all related preferences
无需云服务,无需 API 密钥,只需一个 SQLite 文件。所有内容都保留在你的设备上。
🚀 快速开始
|
Claude Code(推荐)
|
GitHub Copilot CLI
|
📦 Cursor / Windsurf / 任意 MCP 客户端
npm install -g @aman_asmuei/amem
amem-cli init # Detects & configures all installed AI tools
amem-cli rules # Generates extraction rules for proactive memory use
也可以手动添加到 MCP 配置中:
{
"mcpServers": {
"amem": {
"command": "npx",
"args": ["-y", "@aman_asmuei/amem"]
}
}
}
验证是否正常运行:
amem-cli stats # Should show "0 memories" initially
💬 告诉 AI:“记住:始终使用严格模式 TypeScript,绝不使用 any 类型”
🔄 开始一个新会话:“你还记得哪些关于 TypeScript 的内容?”——它会立即回想起来。
🧬 由 amem-core 提供支持
amem 是 MCP 服务。检索引擎位于 @aman_asmuei/amem-core 中。
Claude Code / Copilot / Cursor / any MCP client
│
│ MCP (stdio)
▼
┌──────────────────────────────────┐
│ @aman_asmuei/amem (this pkg) │
│ 33 Tools · 7 Resources · 2 Prompts
│ CLI · Hooks · Dashboard │
└───────────────┬──────────────────┘
│ imports
▼
┌──────────────────────────────────┐
│ @aman_asmuei/amem-core │
│ Embeddings · HNSW · Recall │
│ Knowledge Graph · Reflection │
│ 97.8% R@5 on LongMemEval-S │
└───────────────┬──────────────────┘
▼
┌────────────────────┐
│ SQLite + WAL │
│ ~/.amem/memory.db │
└────────────────────┘
为什么拆分成两个包?
| 包 | 角色 | 安装 |
|---|---|---|
@aman_asmuei/amem (本包) | MCP 服务 + CLI + 钩子 | npm i -g @aman_asmuei/amem |
@aman_asmuei/amem-core | 纯 TS 库,不依赖 MCP | npm i @aman_asmuei/amem-core |
同一个引擎为 amem(MCP 服务)、aman-agent(CLI)、aman-tg(Telegram 机器人)以及任何接入记忆功能的 Node 应用提供支持。检索功能的改进通过 amem-core 发布,MCP 工具的变更则通过 amem 发布。两个包的版本独立管理。
97.8% R@5 这一指标体现的是
amem-core引擎的性能(LongMemEval-S,按会话评估,500 个问题,零 API 调用)——无论通过 MCP 调用,还是直接导入库,都能获得相同的效果。
⚙️ 工作原理
amem 通过三个层级捕获知识——从全自动到完全手动:
| 层级 | 方式 | 功能 |
|---|---|---|
| 自动 | 生命周期钩子 | 捕获工具观察结果,在会话结束时自动提取纠正内容、决策和模式 |
| AI 驱动 | 提取规则 | 当你纠正 AI、做出决策或表达偏好时,AI 会主动调用 memory_store |
| 手动 | 自然语言 | “记住:我们使用 PostgreSQL” 或 “忘掉 Redis 相关记忆” |
记忆类型
| 优先级 | 类型 | 示例 |
|---|---|---|
| 1.0 | correction | "不要在集成测试中模拟数据库" |
| 0.85 | decision | "选择 Postgres 而不是 Mongo,以满足 ACID 要求" |
| 0.7 | pattern | "偏好提前返回,而不是嵌套" |
| 0.7 | preference | "使用 pnpm,而不是 npm" |
| 0.5 | topology | "Auth 模块位于 src/auth/" |
| 0.4 | fact | "API 于 2025 年 1 月上线" |
更正始终会优先显示——它们是 AI 的硬性约束。
🔄 记忆层级与时效性
记忆层级
| 层级 | 行为 |
|---|---|
| Core | 在会话开始时始终注入(约 500 个 token)。最关键的更正。 |
| Working | 仅限当前会话,自动显示与当前任务相关的内容。 |
| Archival | 默认层级。可搜索,但不会自动注入。 |
时效性
记忆并非永远有效。事实发生变化时:
- 旧记忆会被标记为过期(而非删除)——保留下来,以便回答*"3 月份的情况是什么?"*
- 矛盾会被自动检测:存储新决策时,旧决策会自动过期
- 使用
memory_since查询任意时间点的情况
🧠 自我进化记忆循环
你的记忆不只是存储内容——它还会从自身结构中学习。调用 memory_reflect 以触发反思引擎:
memory_reflect → Analyzes your entire memory graph
│
├─ Clusters related memories (HNSW neighbor graph)
├─ Detects contradictions (negation pairs, numerical, low-overlap)
├─ Identifies synthesis candidates
├─ Surfaces knowledge gaps (topics with sparse recall)
└─ Returns a structured report with suggested actions
进化循环:
- 反思 —
memory_reflect将记忆聚类并寻找模式 - 综合 — AI 通过
memory_store将相关聚类合并为更高阶的原则 - 关联 —
memory_relate将综合结果与源记忆连接起来(通过综合溯源进行追踪) - 重复 — 每轮循环都会让图谱变得更连贯、更抽象
当需要进行反思时,系统会自动提醒(距离上次运行超过 7 天,或新增记忆超过 50 条)。
📊 反思报告示例
# Memory Reflection Report
Analyzed 127 memories in 12ms
Health Score: 68/100
## Stats
- Clusters: 8 (avg size: 4.2)
- Clustered: 34 | Orphans: 93
- Contradictions: 2
- Synthesis candidates: 3
- Knowledge gaps: 4
## Contradictions Found
⚠ Opposing language detected (23d apart, 87% similar)
A: a1b2c3d4 "Always use semicolons in JavaScript..."
B: e5f6g7h8 "Never use semicolons in JavaScript..."
→ Expire older memory a1b2c3d4 — newer supersedes it
## Synthesis Candidates
### cluster-0 (4 patterns)
"These 4 related memories form a cluster about 'typescript, types':
[patterns]:
- 'Always use strict TypeScript types'
- 'Prefer strict null checks'
- 'Use unknown instead of any'
- 'Enable strictNullChecks in tsconfig'
Synthesize into a higher-order principle..."
## Knowledge Gaps
- "kubernetes deployment" — asked 3x, avg 25% confidence
- "database migration strategy" — asked 2x, avg 0% confidence
📈 基准测试
召回准确率(LongMemEval)
所有数据均来自 amem-core v0.5.1——为此 MCP 服务提供支持的检索引擎。零 API 调用,完全本地运行,可完全复现。
|
LongMemEval-S(会话级)——核心指标
500 个问题 · 仅使用 CPU · 零 API 调用 |
LongMemEval Oracle(轮次级)
479 个可评分问题 · 运行时间 301 秒 · Node 22 |
流水线:本地 bge-small-en-v1.5 双编码器 + ms-marco-MiniLM-L-6-v2 交叉编码器(int8、批处理、默认启用)。完整的分类细分、流水线演进和客观说明,请参阅 amem-core 基准测试。
为什么这对“用 Rust 重写它”的问题很重要。 上面的 10.3 毫秒重排耗时,相较于被替换的逐对实现,速度提升了约 30%——只用了约 20 行批处理代码和 int8 量化,无需原生重写。热点路径本来就很高效;剩余的性能提升来自更谨慎地使用它们。我们继续使用 TypeScript。
搜索延迟
|
完整召回流程(v0.5.1+)
|
仅 HNSW 索引(向量搜索)
|
测量方式:对 100 次搜索取平均,使用 384 维嵌入,返回前 10 个结果。 任何规模下均低于 0.1ms——实际复杂度为 O(log n)。HNSW 是可选依赖;不可用时将回退到暴力搜索。 |
🛠️ 工具参考
核心记忆(7 个工具)
| 工具 | 说明 |
|---|---|
memory_store | 存储记忆,包含类型、标签和置信度。自动删除私人内容的敏感信息,并自动使矛盾内容过期。 |
memory_recall | 语义搜索——默认使用精简模式(约节省 10 倍令牌)。使用 memory_detail 获取完整内容。 |
memory_detail | 精简召回后,通过 ID 获取完整内容。 |
memory_context | 加载与某个主题相关的所有上下文,按类型整理并进行令牌预算管理。 |
memory_extract | 从对话中批量保存多条记忆。 |
memory_forget | 按 ID 或查询删除(需确认)。 |
memory_inject | 在开始编码前呈现更正、决策和图谱邻居。 |
精准检索、历史记录、高级、管理、提醒和维护工具(另有 26 个)
精准检索与历史记录(5 个工具)
| 工具 | 说明 |
|---|---|
memory_patch | 精确修改字段,并自动创建快照。 |
memory_versions | 查看完整编辑历史或恢复到任意版本。 |
memory_search | 通过 FTS5 进行精确全文搜索,并支持精简模式。 |
memory_since | 使用自然语言范围(7d、2w、1h)进行时间查询。 |
memory_relate | 在记忆之间构建带类型的知识图谱。 |
高级(6 个工具)
| 工具 | 说明 |
|---|---|
memory_multi_recall | 使用精简模式进行多策略搜索:语义 + FTS5 + 图谱 + 时间。 |
memory_tier | 在不同层级间移动记忆:核心 / 工作 / 归档。 |
memory_expire | 将记忆标记为不再有效——保留历史记录,但不纳入召回。 |
memory_summarize | 存储结构化会话摘要,包含决策、更正和指标。 |
memory_history | 查看过往会话摘要。 |
memory_reflect | 自我演进式反思引擎——聚类记忆、检测矛盾、识别综合候选项并呈现知识缺口。 |
管理与同步(4 个工具)
| 工具 | 说明 |
|---|---|
memory_doctor | 对 amem 数据库运行只读健康诊断。 |
memory_repair | 对 amem 数据库执行安全且有针对性的修复。 |
memory_config | 在安全保护机制下获取或设置 amem 配置。 |
memory_sync | 在 amem 与其他系统(Claude 自动记忆、Copilot 指令)之间导入或导出记忆。 |
提醒(4 个工具)
| 工具 | 说明 |
|---|---|
reminder_set | 创建提醒,可选择设置截止时间和作用范围。 |
reminder_list | 列出有效(或所有)提醒,可按作用范围筛选。 |
reminder_check | 显示已逾期、今天到期和即将到期(7 天内)的提醒。 |
reminder_complete | 将提醒标记为已完成(支持部分 ID)。 |
日志与维护(7 个工具)
| 工具 | 描述 |
|---|---|
memory_log | 追加原始对话轮次(无损、仅追加)。 |
memory_log_recall | 按会话、关键词或时间新近度搜索或重放日志。 |
memory_log_cleanup | 根据可配置的保留策略清理旧条目。 |
memory_stats | 计数、类型细分、置信度分布。 |
memory_export | 导出为 Markdown 或 JSON。 |
memory_import | 从 JSON 批量导入并自动去重。 |
memory_consolidate | 合并重复项、清理过时内容、提升常用内容的优先级、降低闲置内容的权重。 |
📖 使用指南
存储记忆
|
自然语言(最简单)
|
显式工具调用
|
回忆记忆
// Step 1: Compact index — ~50-100 tokens (default)
memory_recall({ query: "auth decisions", limit: 5 })
// -> a1b2c3d4 [decision] Auth service uses JWT tokens... (92%)
// -> e5f6g7h8 [correction] Never store tokens in localStorage... (100%)
// Step 2: Full details only for what you need
memory_detail({ ids: ["a1b2c3d4", "e5f6g7h8"] })
更多搜索选项
// Multi-strategy: semantic + FTS5 + graph + temporal
memory_multi_recall({
query: "authentication architecture",
limit: 10,
weights: { semantic: 0.4, fts: 0.3, graph: 0.15, temporal: 0.15 }
})
// Exact keyword search (FTS5 syntax)
memory_search({ query: "OAuth PKCE" })
memory_search({ query: '"event sourcing"' }) // phrase match
memory_search({ query: "auth* NOT legacy" }) // boolean
管理记忆
编辑、设置过期时间、提升优先级、建立关联
// Surgical edit with auto-snapshot for rollback
memory_patch({ id: "a1b2c3d4", field: "content", value: "Updated text", reason: "clarified" })
// View edit history / restore
memory_versions({ memory_id: "a1b2c3d4" })
// Expire (preserve for history, exclude from recall)
memory_expire({ id: "a1b2c3d4", reason: "Migrated to GraphQL" })
// Promote to core tier (always loaded at session start)
memory_tier({ id: "a1b2c3d4", tier: "core" })
// Link related memories (graph builds itself, but you can add manual links)
memory_relate({ action: "relate", from_id: "abc", to_id: "xyz", relation_type: "supports" })
关系类型:supports、contradicts、depends_on、supersedes、related_to、caused_by、implements,也可以自定义。
提醒
跨会话截止日期跟踪
reminder_set({ content: "Review PR #42", due_at: 1743033600000, scope: "global" })
reminder_check({})
// -> [OVERDUE] Review PR #42
// -> [TODAY] Deploy auth service
// -> [upcoming] Write quarterly report
reminder_complete({ id: "a1b2c3d4" })
隐私
自动脱敏
// Private blocks stripped before storage
memory_store({
content: "DB password is <private>hunter2</private>, connect to prod at db.example.com",
type: "topology", tags: ["database"]
})
// Stored: "DB password is [REDACTED], connect to prod at db.example.com"
// API keys, tokens, passwords auto-redacted by pattern matching
// Configure patterns in ~/.amem/config.json
⚔️ 坦诚比较:amem 与 graphify
点击展开 — amem 与 graphify 的对比
graphify 是人们了解 amem 后最常问的“那 X 呢?”。它们解决的是本质上不同的问题,而且确实可以互补。
各工具的作用
| amem | graphify | |
|---|---|---|
| 一句话概括 | 在 AI 会话间持久保存记忆 | 代码库 → 知识图谱 |
| 核心问题 | “我的 AI 了解了我什么?” | “这个代码库是什么样的?” |
| 输入 | 自然语言(更正、决策、偏好) | 文件(代码、文档、PDF、图片、视频) |
| 输出 | 按相关性排序的回忆记忆 | 结构图谱 + 报告 + 交互式 HTML |
| 持久性 | 始终持久 — 记忆可跨会话和工具保留 | 快照 — graph.json 会持久保存,但不会随时间学习 |
| 运行时机 | 持续运行,每个会话都会运行 | 按需运行(/graphify .),或通过 git hook 在提交时运行 |
技术对比
| amem | graphify | |
|---|---|---|
| 运行环境 | TypeScript / Node(≥18) | Python(≥3.10) |
| 协议 | MCP 服务(33 个工具、7 个资源) | AI 技能(斜杠命令)+ 可选的 MCP 服务 |
| 存储 | SQLite + FTS5 + WAL | NetworkX 图 → JSON 文件 |
| 搜索 | 语义嵌入 + FTS5 + 图 + 重排序 | 图遍历(BFS/DFS)+ 节点查找 |
| 嵌入 | 本地 bge-small-en-v1.5(384 维) | 无 — 使用图拓扑,而非向量相似度 |
| 代码理解 | 无 — 存储你告诉它的内容 | 深度理解 — 使用 tree-sitter AST 支持 25 种语言 |
| 多模态 | 仅文本 | 代码、文档、PDF、图片、视频、音频 |
| 是否需要 LLM | 否(完全本地运行) | 是,处理文档/图片时需要(代码通过 tree-sitter 处理,无需 LLM) |
| 基准测试 | 在 LongMemEval-S 上的 R@5 为 97.8% | 与直接读取原始文件相比,token 减少 71.5 倍 |
| AI 工具支持 | Claude Code、Copilot、Cursor、任何 MCP 客户端 | Claude Code、Codex、Copilot、Cursor、Gemini、Aider、Kiro 等 10 多种工具 |
各自的优势
amem 的优势:
- 跨项目和工具记住你的偏好、纠正和决策
- 语义检索——通过模糊查询找到合适的记忆(R@5 为 97.8%)
- 时间智能——跟踪某项信息何时为真,并自动让矛盾信息过期
- 自我进化——反思引擎会对信息进行聚类、检测矛盾并找出缺漏
- 不依赖 LLM——所有操作都在本地运行,无需 API 调用
graphify 的优势:
- 理解代码结构——调用图、导入关系、类层次结构、跨文件关系
- 多模态摄取——放入代码、论文、截图、视频,都能生成图谱
- 高效利用 Token——71.5 倍压缩,意味着 AI 读取的是结构,而非原始文件
- 支持多种语言——通过 tree-sitter AST 支持 25 种编程语言
- 支持多种 AI 工具——覆盖 15+ 个平台,并提供专用安装命令
坦诚的结论
-
两者并不互相竞争。 amem 记住你的知识(决策、纠正、偏好)。graphify 映射代码库的结构(调用图、依赖关系、架构)。处理的数据不同,访问模式也不同。
-
你可以同时使用两者。 运行
graphify .获取项目的结构图。使用 amem 记住“我们选择这种架构是因为 X”。图谱告诉 AI 有什么。记忆告诉它为什么会这样。 -
graphify 支持的平台更广(15+ 种 AI 工具)。amem 在支持的平台上集成得更深入(通过 MCP 协议提供 33 个工具、结构化资源和提示词)。
-
处理非代码文件时,graphify 需要 LLM。 amem 完全在本地运行——无需 API 调用,也不需要本地嵌入模型之外的模型推理。
-
真正的选择取决于你的痛点。 如果 AI 总是忘记你的偏好和决策 → 选 amem。如果 AI 无法高效浏览你的代码库 → 选 graphify。如果两者都是问题 → 两者一起用。
🌐 平台兼容性
| 功能 | Claude Code | GitHub Copilot CLI | Cursor / Windsurf / Other |
|---|---|---|---|
| 一键安装插件 | 是 | 是 | -- |
| 33 个 MCP 工具 | 是 | 是 | 是 |
| AI 技能 | 14 | 7 | -- |
| 自动捕获钩子 | 是 | 是 | -- |
| 会话自动摘要 | 是 | 是 | -- |
| 自动记忆同步 | 是 | -- | -- |
CLI 设置(amem-cli init) | 是 | 是 | 是 |
Claude Code 集成最深入(插件 + 钩子 + 自动记忆同步)。Copilot CLI 紧随其后。其他 MCP 客户端通过手动配置即可使用完整的 33 工具服务。
AI 技能
各平台提供的技能
| 你说的话 | 技能 | Claude Code | Copilot CLI |
|---|---|---|---|
| “记住,永远不要使用 any 类型” | remember | 是 | 是 |
| “你还记得哪些关于 auth 的内容?” | recall | 是 | 是 |
| “为这项任务加载上下文” | context | 是 | 是 |
| “显示记忆统计信息” | stats | 是 | 是 |
| “运行记忆诊断” | doctor | 是 | 是 |
| “导出我的记忆” | export | 是 | 是 |
| “列出所有纠正” | list | 是 | 是 |
| “同步我的 Claude 记忆” | sync | 是 | -- |
| “打开记忆仪表板” | dashboard | 是 | -- |
| “安装钩子” | hooks | 是 | -- |
amem 与 Claude 内置的自动记忆互为补充,而非替代。
| Claude 自动记忆 | amem | |
|---|---|---|
| 捕获 | 自动,无需配置 | 带置信度评分的类型化记忆 |
| 存储 | 单个 Markdown 文件 | 支持搜索、图谱和时序功能的 SQLite |
| 召回 | 每次会话都会加载整个文件 | 仅呈现相关记忆 |
| 历史记录 | 更新时覆盖 | 带版本记录和时效性 |
| 搜索 | 无 | 语义搜索 + FTS5 + 图谱 + 重排序 |
**建议:**同时启用两者。运行 amem-cli sync,将 Claude 的记忆导入 amem,以便统一、结构化地访问。
Claude → amem 同步
amem-cli sync # Import all projects
amem-cli sync --dry-run # Preview what would be imported
amem-cli sync --project myapp # Import specific project
| Claude 类型 | amem 类型 | 置信度 |
|---|---|---|
feedback | correction | 1.0 |
project | decision | 0.85 |
user | preference | 0.8 |
reference | topology | 0.7 |
amem → Copilot 同步
将 amem 记忆导出到 .github/copilot-instructions.md,让 Copilot 将其作为持久上下文读取:
amem-cli sync --to copilot # Export to current project
amem-cli sync --to copilot --dry-run # Preview without writing
amem-cli sync --to copilot --project /path/to/repo
此操作会按优先级分组,生成结构化 Markdown:
- 更正(必须遵循)——硬性约束
- 决策——架构选择
- 偏好——用户偏好
- 模式——编码约定
- 上下文——拓扑结构 + 事实
amem 部分由 `` 标记包围,文件中现有的非 amem 内容会保留。
**跨工具同步:**在 Claude 会话中做出的决策会自动同步给 Copilot:
Claude Code → amem sync → amem DB → amem sync --to copilot → copilot-instructions.md
📊 仪表板与知识图谱
amem-cli dashboard # Opens at localhost:3333
amem-cli dashboard --port=8080 # Custom port
功能齐全的 Web 仪表板,包含:
- 🔍 记忆浏览器——搜索,按类型、层级和来源筛选,并提供内联操作(提升、降级、过期)
- 🕸️ 交互式知识图谱——缩放、平移、点击聚焦并高亮邻域、详情面板、搜索、有向边
- 📈 分析——置信度分布、类型细分、会话时间线
- ⏰ 提醒——查看和管理跨会话任务
- 📋 Copilot 预览——查看将导出到
copilot-instructions.md的内容
💻 CLI 参考
# Setup
amem-cli init # Auto-configure AI tools
amem-cli rules # Generate extraction rules
amem-cli hooks # Install hooks for Claude Code
amem-cli hooks --target copilot # Install hooks for GitHub Copilot CLI
amem-cli hooks --uninstall # Remove hooks
amem-cli sync # Import Claude auto-memory → amem
amem-cli sync --to copilot # Export amem → copilot-instructions.md
amem-cli doctor # Health diagnostics
amem-cli repair # Repair corrupted database from backups
# Dashboard
amem-cli dashboard # Web dashboard (localhost:3333)
# Memory operations
amem-cli recall "authentication" # Semantic search
amem-cli stats # Statistics
amem-cli list --type correction # List by type
amem-cli export --file memories.md # Export to file
amem-cli forget abc12345 # Delete by short ID
amem-cli reset --confirm # Wipe all data
🏗 架构
Your AI Tool
Claude Code / Copilot CLI / any MCP client
│ │
│ MCP (stdio) │ Lifecycle Hooks
▼ ▼
┌─────────────────────────────────┐
│ @aman_asmuei/amem │ ← this package
│ │
│ 33 Tools · 7 Resources · 2 Prompts
│ Slash commands · CLI · Hooks │
│ Config: ~/.amem/config.json │
└────────────────┬────────────────┘
│ imports
▼
┌─────────────────────────────────┐
│ @aman_asmuei/amem-core │ ← the engine
│ │
│ Multi-Strategy Retrieval │
│ [HNSW] + [FTS5] + [Graph] + [Temporal]
│ + query expansion │
│ + cross-encoder reranker │
│ │
│ Self-Evolving Reflection │
│ [Clustering] + [Contradictions]│
│ + [Synthesis] + [Gap Detection]│
│ │
│ Embeddings: bge-small-en-v1.5 │
│ Reranker: ms-marco-MiniLM int8 │
│ 97.8% R@5 on LongMemEval-S │
└────────────────┬────────────────┘
│
▼
┌─────────────────────────────────┐
│ SQLite + WAL + FTS5 │
│ ~/.amem/memory.db │
│ │
│ memories (tiered) │
│ conversation_log (raw) │
│ memory_versions (history) │
│ memory_relations (graph) │
│ synthesis_lineage │
│ knowledge_gaps │
│ session_summaries │
│ reminders │
└─────────────────────────────────┘
**amem MCP 服务是 amem-core 的轻量封装。**检索引擎、嵌入、知识图谱和反思功能都位于 amem-core 中,并独立进行版本管理。MCP 连接出现错误?重新发布 amem。需要改进记忆召回?重新发布 amem-core。两者互不耦合。
排名公式
score = relevance x 0.45 + recency x 0.2 + confidence x 0.2 + importance x 0.15
| 因素 | 工作方式 |
|---|---|
| 相关性 | 通过 HNSW 索引计算余弦相似度;查询扩展关键词回退 |
| 时效性 | 指数衰减(0.995^hours) |
| 置信度 | 通过重复确认强化(0-1) |
| 重要性 | 基于类型:更正 1.0……事实 0.4 |
加法评分可确保不会因某个单项因素得分较低而导致排名失效。
⚙️ 配置
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
AMEM_DIR | ~/.amem | 存储目录 |
AMEM_DB | ~/.amem/memory.db | 数据库路径 |
AMEM_PROJECT | (自动从 git 获取) | 项目范围覆盖值 |
配置文件(~/.amem/config.json)
自动使用默认值创建:
{
"retrieval": {
"semanticWeight": 0.4,
"ftsWeight": 0.3,
"graphWeight": 0.15,
"temporalWeight": 0.15,
"rerankerEnabled": true
},
"privacy": {
"enablePrivateTags": true,
"redactPatterns": ["..."]
},
"tiers": {
"coreMaxTokens": 500,
"workingMaxTokens": 2000
},
"hooks": {
"enabled": true,
"captureToolUse": true,
"captureSessionEnd": true
}
}
📋 版本历史
v0.23.0 — 交互式知识图谱仪表板
全宽图谱浏览器,支持缩放/平移、点击聚焦并高亮邻域、带关系导航的详情面板、搜索与筛选、有向边、力导向布局。管理工具(doctor、repair、config、sync)。18 个测试套件共 255 项测试。
v0.19.0 — 自我演进记忆循环
反思引擎,支持基于 HNSW 的聚类、3 层矛盾检测(否定词 + 数值 + 低重叠度)、带有谱系跟踪的综合候选项、知识缺口检测、效用评分,以及在 memory_inject 中自动触发提示。新增数据库表:synthesis_lineage、knowledge_gaps、reflection_meta。迁移版本 v5。
v0.18.0 — 渐进式披露与规模扩展
HNSW 向量索引(在 10k 条数据时快 67 倍)、召回/搜索默认启用精简模式、数据库修复 CLI、并发访问安全、启发式对话提取器、会话结束时自动提取。
v0.13.0 — 一流的召回能力
bge-small-en-v1.5 嵌入、加法评分、查询扩展、自动关联知识图谱、图感知注入、amem doctor、CI 基准测试。
v0.9.x — 时间智能
时间有效性、自动过期矛盾、多策略检索、交叉编码器重排、记忆层级、隐私标签、生命周期钩子、会话摘要、仪表板、配置系统。
v0.7.0 — v0.8.0
导入/导出、置信度衰减、嵌入缓存、多进程安全、自动配置 CLI、仪表板。
v0.1.0 — v0.5.x
核心存储/召回、本地嵌入、SQLite + WAL、整合、项目范围限定、提醒、对话日志、知识图谱、FTS5、渐进式披露。
🧰 技术栈
| 层级 | 技术 |
|---|---|
| 协议 | MCP SDK ^1.25 |
| 语言 | TypeScript 5.6+,严格模式 |
| 数据库 | SQLite + WAL + FTS5 |
| 嵌入 | HuggingFace bge-small-en-v1.5(本地,80MB)+ HNSW 向量索引 |
| 重排 | ms-marco-MiniLM-L-6-v2(默认启用,int8,批处理,本地) |
| 验证 | 使用 .strict() 模式的 Zod 3.25+ |
| 测试 | Vitest — 19 个测试套件中的 281 项测试 + 召回基准测试 |
| CI/CD | GitHub Actions,发布时通过 npm 发布 |
🤝 贡献
git clone https://github.com/amanasmuei/amem.git
cd amem && npm install
npm run build # zero TS errors
npm test # 281 tests pass
PR 必须通过 CI 检查后才能合并。请查看 Issues 中的待处理任务。
由 Aman Asmuei 在 🇲🇾 马来西亚倾情打造
MIT 许可证 · 如果 amem 帮你的 AI 摆脱健忘,请点亮 ⭐
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。