万字深度解析 claude-mem:给 Claude Code 装上「长期记忆大脑」——从生命周期钩子到 AI 智能压缩的工程化实践(2026)
你有没有遇到过这种情况:写到一半,模型「忘了」你刚刚的设计约束;多轮对话后,代码风格开始漂移;上下文越长,token 越贵,但效果反而变差。问题不在模型能力,而在记忆机制。2026 年 6 月,thedotmack/claude-mem 以 2.4 万 Star 成为 Claude Code 生态最热门的记忆插件——它用工程化手段彻底解决了 AI 编码助手的无记忆痛点。
目录
- 问题背景:AI 编码助手的三重失忆困境
- claude-mem 是什么:项目定位与核心能力
- 架构深度拆解:五大核心组件的技术内幕
- 生命周期钩子机制:五个关键时刻精准捕获
- AI 智能压缩引擎:从原始日志到高密度摘要
- 混合检索系统:SQLite 全文搜索 + Chroma 向量数据库
- 多 IDE 支持:从 Claude Code 到 Cursor、Windsurf 的完整适配
- 代码实战:安装、配置与生产级使用指南
- Token 效率深度优化:60-95% 成本压缩的实战策略
- 与其他记忆方案对比:claude-mem vs supermemory vs memvid
- 生产环境最佳实践:避坑指南与性能调优
- 未来展望:AI 记忆系统的下一代演进方向
1. 问题背景:AI 编码助手的三重失忆困境
1.1 第一重困境:会话内上下文丢失
2026 年,Claude Code、Cursor、GitHub Copilot 等 AI 编码助手已经成为专业开发者的日常工具。但一个尴尬的现实是:每次新会话,模型都是「失忆状态」。
你在上午 10 点告诉 Claude:「这个项目用 Go 1.23 + Gin + PostgreSQL,错误处理统一用 apperr.Wrapf」。到下午 2 点新建会话继续开发时,所有这些上下文全部消失。你需要重新输入项目背景、编码规范、架构决策——这就是会话内上下文丢失问题。
更糟糕的是,即使在同一会话内,当对话轮次变多、上下文变长,模型对早期约束的记忆也会逐渐「漂移」。你明明规定了「所有接口必须返回标准分页格式」,写到第 20 轮对话时,模型生成的新接口可能已经忘记了这条规则。
1.2 第二重困境:跨会话知识无法积累
传统 AI 编码助手每次会话都是「白板状态」。你上周花了一个小时向 Claude 解释整个微服务架构、各个模块的依赖关系、数据库表设计——这些知识在下一次会话中完全不存在。
对于每个持续数天甚至数周的真实项目来说,这意味着:
- 重复解释成本:每个新会话都要重新「培训」模型
- 决策丢失:为什么选这个库而不是那个、为什么要这样设计表结构,这些关键决策上下文全部丢失
- 风格不一致:不同会话生成的代码风格可能发生漂移
1.3 第三重困境:Token 成本随上下文线性爆炸
即使用「复制粘贴」的笨办法把历史上下文每次都手动贴进去,也会面临 Token 成本的急剧上升:
| 上下文内容 | Token 消耗(Claude Sonnet 4.5) |
|---|---|
| 项目 README | ~500 Tokens |
| 核心模块代码(10 个文件) | ~8,000 Tokens |
| 数据库表结构(20 张表) | ~3,000 Tokens |
| 历史对话记录(30 轮) | ~12,000 Tokens |
| 合计 | ~23,500 Tokens |
按 Claude Sonnet 4.5 的价格($3/百万输入 Token),每次会话的上下文成本约 $0.07。看似不高,但对于每天开启数十次会话的重度使用者,月度成本可以轻松突破 $200。
而更关键的是:这些 Token 的大部分并不是每次都需要用到的。真正相关的上下文可能只是其中 20%,但却不得不每次都全量输入。
2. claude-mem 是什么:项目定位与核心能力
claude-mem(GitHub: thedotmack/claude-mem)是一个专为 Claude Code 设计的开源记忆插件,由 @thedotmack 开发,2026 年 2 月发布后迅速走红,截至 6 月已获得超过 24,000 GitHub Stars。
2.1 项目定位
claude-mem 的核心定位是:为 AI 编码助手构建持久化、可检索、自动压缩的长期记忆系统。
它的工作方式可以用一句话概括:
自动捕获你在编码会话中的所有操作,用 AI 将原始记录智能压缩成高密度摘要,在后续会话中自动注入最相关的历史记忆。
2.2 核心能力一览
| 能力 | 描述 | 技术实现 |
|---|---|---|
| 自动捕获 | 记录每次工具调用、文件编辑、对话内容 | 生命周期钩子(Hooks) |
| 智能压缩 | 用 LLM 将观察数据压缩存储,节省 Token | AI 摘要生成(Claude Haiku / GPT-4o-mini) |
| 上下文注入 | 在新会话中自动注入相关历史记忆 | 混合检索 + 相关性排序 |
| 跨会话检索 | 通过自然语言搜索历史编码记录 | SQLite FTS + Chroma 向量数据库 |
| 多 IDE 支持 | 支持 Claude Code、Cursor、Windsurf 等主流 IDE | 各平台 Hooks 适配层 |
2.3 支持的 IDE / 编辑器
从 v10.7.0 版本开始,claude-mem 官方支持以下 IDE:
| IDE / 编辑器 | 支持方式 | 配置文件 |
|---|---|---|
| Claude Code | 原生插件,自动配置 | ~/.claude/plugins/ |
| Cursor | Hooks 自动配置 | .cursor/hooks.json |
| Gemini CLI | Hooks + AGENTS.md 自动配置 | ~/.gemini/ |
| OpenCode | MCP + AGENTS.md 手动配置 | 需手动添加 |
| OpenClaw | Plugin 自动配置 | workspace skills |
| Windsurf | Hooks + Registry 自动配置 | .windsurf/ |
| Codex CLI | Transcript watcher 自动配置 | ~/.codex/ |
3. 架构深度拆解:五大核心组件的技术内幕
claude-mem 采用模块化设计,各组件职责明确,共同构成了一个完整的 AI 记忆系统工程方案。
┌─────────────────────────────────────────────────────────────┐
│ Claude Code / Cursor │
│ (用户编码会话界面) │
└──────────────────────┬──────────────────────────────────────┘
│ Hook 事件
▼
┌─────────────────────────────────────────────────────────────┐
│ 生命周期钩子捕获层 │
│ SessionStart │ UserPromptSubmit │ PostToolUse │
│ Stop │ SessionEnd │
└──────────────────────┬──────────────────────────────────────┘
│ 原始观察数据
▼
┌─────────────────────────────────────────────────────────────┐
│ AI 智能压缩引擎 │
│ 使用 Claude Haiku / GPT-4o-mini 生成摘要 │
│ 原始记录 → 压缩摘要(5-10x 压缩比) │
└──────────────────────┬──────────────────────────────────────┘
│ 压缩后数据
▼
┌─────────────────────────────────────────────────────────────┐
│ 混合存储层 │
│ SQLite(全文搜索) + Chroma(向量数据库) │
│ 结构化元数据 语义嵌入向量 │
└──────────────────────┬──────────────────────────────────────┘
│ 检索请求
▼
┌─────────────────────────────────────────────────────────────┐
│ 混合检索与排序层 │
│ 全文关键词匹配 + 语义相似度检索 + 时间衰减排序 │
└──────────────────────┬──────────────────────────────────────┘
│ 最相关记忆(Top-K)
▼
┌─────────────────────────────────────────────────────────────┐
│ 上下文自动注入层 │
│ 渐进式披露(Progressive Disclosure) │
│ 按相关性分批注入,避免上下文溢出 │
└─────────────────────────────────────────────────────────────┘
3.1 组件一:生命周期钩子捕获层
这是 claude-mem 的「感知器官」,负责在编码会话的关键节点自动捕获操作上下文。
claude-mem 在以下 5 个生命周期钩子中记录观察数据:
SessionStart(会话启动)
- 触发时机:用户开启新编码会话
- 捕获内容:项目目录、Git 分支、环境变量、当前时间
- 用途:建立会话的初始上下文基线
UserPromptSubmit(用户提交 Prompt)
- 触发时机:用户每次向 AI 发送消息
- 捕获内容:完整的用户 Prompt、当前打开的文件列表、光标位置
- 用途:记录用户的意图和当前工作状态
PostToolUse(工具使用后)
- 触发时机:AI 调用任何工具后(读文件、写文件、执行命令等)
- 捕获内容:工具名称、输入参数、返回结果、执行耗时
- 用途:这是信息量最大的钩子,完整记录了 AI 的操作过程
Stop(AI 停止生成)
- 触发时机:AI 完成一轮回复后
- 捕获内容:完整的 AI 回复内容、工具调用次数、Token 使用量
- 用途:记录 AI 的输出和决策结果
SessionEnd(会话结束)
- 触发时机:用户关闭会话或超时断开
- 捕获内容:会话总结(由 AI 生成)、关键决策列表、未完成任务
- 用途:为下次会话提供高质量的恢复点
3.2 组件二:AI 智能压缩引擎
这是 claude-mem 的「大脑皮层」,负责将海量原始观察数据压缩成可管理的高密度摘要。
压缩流程:
原始观察数据(例如一次 PostToolUse 记录)
↓
{
"tool": "read_file",
"args": {"file_path": "/project/internal/service/user.go"},
"result": "package service\n\nimport (\n ...\n)\n\n// UserService handles ...",
"timestamp": "2026-06-30T18:23:45Z",
"token_count": 3420
}
↓
【AI 压缩引擎】
调用 Claude Haiku 或 GPT-4o-mini
输入:原始观察数据 + 压缩指令 Prompt
↓
压缩摘要(约 300-500 Tokens,压缩比约 10:1)
↓
{
"summary": "读取了 internal/service/user.go,该文件定义了 UserService 结构体,包含 CreateUser、GetUserByID、UpdateUser 三个方法。主要依赖 apperr 和 db 两个包。",
"key_decisions": [],
"code_refs": ["internal/service/user.go::UserService"],
"compressed_at": "2026-06-30T18:23:50Z"
}
压缩策略对比:
| 内容类型 | 原始大小(Tokens) | 压缩后(Tokens) | 压缩比 | 摘要保留内容 |
|---|---|---|---|---|
| 工具调用完整日志(含参数、返回值) | ~3,000 | ~300 | 10:1 | 操作目的、关键结果、文件路径 |
| 多轮对话原文 | ~5,000 | ~1,000 | 5:1 | 核心结论、设计决策、用户意图 |
| 文件内容(.go 源码) | ~2,000 | ~200 | 10:1 | 结构体定义、函数签名、包依赖 |
| Shell 命令执行结果 | ~800 | ~100 | 8:1 | 命令目的、退出码、关键输出 |
压缩模型选择:
claude-mem 支持配置压缩用的模型:
- Claude Haiku:速度快、成本低(约 $0.25/百万 Tokens),适合高频压缩场景
- GPT-4o-mini:OpenAI 的轻量模型,成本类似 Haiku,在某些语言的压缩质量上略有优势
- 禁用压缩(原始模式):如果 Token 预算充足,可以存储原始记录,检索时更精确但上下文占用更大
3.3 组件三:混合存储层
这是 claude-mem 的「海马体」,负责持久化存储所有记忆数据。
SQLite 全文搜索数据库
存储结构化元数据和压缩摘要,支持全文关键词搜索:
-- 核心表结构(简化版)
CREATE TABLE observations (
id INTEGER PRIMARY KEY,
session_id TEXT NOT NULL,
hook_type TEXT NOT NULL, -- 'PostToolUse', 'UserPromptSubmit', etc.
content TEXT NOT NULL, -- 压缩后的摘要
raw_content TEXT, -- 原始内容(可选)
file_refs TEXT, -- 关联的文件路径(JSON数组)
created_at INTEGER NOT NULL,
token_count INTEGER
);
CREATE VIRTUAL TABLE observations_fts USING fts5(
content,
content='observations',
content_rowid='id'
);
CREATE INDEX idx_observations_session ON observations(session_id);
CREATE INDEX idx_observations_created ON observations(created_at DESC);
Chroma 向量数据库
存储语义嵌入向量,支持「语义相似」检索(而不是纯粹的关键词匹配):
# claude-mem 中的向量化流程(概念性示例)
from chromadb import Client
from chromadb.utils import embedding_functions
client = Client()
collection = client.create_collection("claude_mem")
# 对压缩摘要生成嵌入向量
ef = embedding_functions.DefaultEmbeddingFunction()
embeddings = ef([observation["summary"] for observation in observations])
collection.add(
documents=[obs["summary"] for obs in observations],
embeddings=embeddings,
metadatas=[{"session_id": obs["session_id"],
"hook_type": obs["hook_type"]} for obs in observations],
ids=[str(obs["id"]) for obs in observations]
)
3.4 组件四:混合检索与排序层
这是 claude-mem 的「检索系统」,负责在新会话启动时找到最相关的历史记忆。
三路混合检索:
用户新会话启动
│
▼
┌─────────────────────────────────────────────────┐
│ 相关性计算(三路并行) │
│ │
│ ① SQLite FTS 关键词匹配 │
│ SELECT * FROM observations_fts │
│ WHERE observations_fts MATCH 'UserService' │
│ │
│ ② Chroma 语义相似度检索 │
│ collection.query( │
│ query_texts=[current_prompt], │
│ n_results=20 │
│ ) │
│ │
│ ③ 时间衰减因子 │
│ recency_score = exp(-λ * Δt) │
│ (λ 为衰减系数,Δt 为距今天数) │
└─────────────────────┬───────────────────────────┘
│ 三路结果融合
▼
综合相关性排序(Top-K)
│
▼
注入到新会话的上下文窗口
排序算法(简化版):
def compute_relevance(observation, current_prompt, current_files):
# 1. 关键词匹配分数(0-1)
keyword_score = sqlite_fts_match(observation.content, current_prompt)
# 2. 语义相似度分数(0-1,Chroma 返回)
semantic_score = chroma_query_similarity(observation.summary, current_prompt)
# 3. 文件关联分数(是否涉及当前打开的文件)
file_score = 0.5 if any(f in observation.file_refs for f in current_files) else 0.0
# 4. 时间衰减分数(0-1,越近越高)
days_ago = (now - observation.created_at) / 86400
recency_score = math.exp(-0.1 * days_ago) # λ=0.1
# 综合分数(可调整权重)
final_score = (
0.35 * keyword_score +
0.35 * semantic_score +
0.15 * file_score +
0.15 * recency_score
)
return final_score
3.5 组件五:上下文自动注入层
这是 claude-mem 的「输出网关」,负责将检索到的相关记忆以最优方式注入新会话。
渐进式披露(Progressive Disclosure)策略:
claude-mem 不会一次性把所有相关记忆都塞进上下文,而是采用「分层注入」策略:
上下文窗口 Token 预算:200,000 Tokens(Claude Sonnet)
│
├── 已占用:用户当前 Prompt + 系统 Prompt ≈ 5,000 Tokens
├── 可用预算:~195,000 Tokens
│
▼
记忆注入分层策略:
│
├── L1(必须注入,~5,000 Tokens):
│ 最近 3 次会话的总结 + 当前项目的 README/ARCHITECTURE 文档
│
├── L2(高相关性注入,~10,000 Tokens):
│ Top-10 最相关的历史观察摘要
│
├── L3(按需注入,惰性加载):
│ 当用户提到某个特定文件/函数时,才注入该文件的历史操作记录
│
└── 保留预算:~180,000 Tokens 留给 AI 的推理和输出
4. 生命周期钩子机制:五个关键时刻精准捕获
4.1 Hook 配置结构
claude-mem 通过 JSON 配置文件定义 Hook 监听规则。以 Claude Code 为例:
// ~/.claude/plugins/claude-mem/hooks.json
{
"hooks": {
"SessionStart": {
"command": "node ~/.claude/plugins/claude-mem/worker-service.js",
"args": ["capture", "SessionStart"],
"timeout": 5000
},
"UserPromptSubmit": {
"command": "node ~/.claude/plugins/claude-mem/worker-service.js",
"args": ["capture", "UserPromptSubmit"],
"timeout": 5000
},
"PostToolUse": {
"command": "node ~/.claude/plugins/claude-mem/worker-service.js",
"args": ["capture", "PostToolUse"],
"timeout": 10000
},
"Stop": {
"command": "node ~/.claude/plugins/claude-mem/worker-service.js",
"args": ["capture", "Stop"],
"timeout": 5000
},
"SessionEnd": {
"command": "node ~/.claude/plugins/claude-mem/worker-service.js",
"args": ["capture", "SessionEnd"],
"timeout": 10000
}
}
}
4.2 PostToolUse 钩子深度解析
PostToolUse 是最关键也是信息量最大的钩子。让我们看一个真实的捕获示例:
场景:用户让 Claude 读取 internal/service/user.go 文件。
Hook 触发时的环境变量(Claude Code 设置):
# Claude Code 在调用 Hook 时会设置这些环境变量
CLAUDE_TOOL_NAME="read_file"
CLAUDE_TOOL_INPUT='{"file_path":"/project/internal/service/user.go"}'
CLAUDE_TOOL_RESULT='package service\n\nimport (\n "context"\n "github.com/xxx/apperr"\n ...'
CLAUDE_SESSION_ID="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
CLAUDE_TIMESTAMP="2026-06-30T18:23:45.123Z"
worker-service.js 的处理逻辑(概念性):
// worker-service.js(简化版)
const hookType = process.argv[2]; // "PostToolUse"
const sessionId = process.env.CLAUDE_SESSION_ID;
const toolName = process.env.CLAUDE_TOOL_NAME;
const toolInput = JSON.parse(process.env.CLAUDE_TOOL_INPUT || '{}');
const toolResult = process.env.CLAUDE_TOOL_RESULT || '';
const timestamp = process.env.CLAUDE_TIMESTAMP;
// 构造观察记录
const observation = {
session_id: sessionId,
hook_type: hookType,
tool_name: toolName,
tool_input: toolInput,
tool_result_preview: toolResult.substring(0, 500), // 只存前500字符到索引
tool_result_full: toolResult, // 完整结果存到原始记录表
file_refs: extractFileRefs(toolInput, toolResult),
timestamp: new Date(timestamp).getTime(),
token_count: estimateTokens(toolResult)
};
// 异步:AI 压缩(不阻塞用户操作)
compressWithAI(observation).then(compressed => {
saveToDatabase(observation, compressed);
});
// 立即返回,不阻塞 Hook 链
process.exit(0);
4.3 捕获性能优化
由于 Hook 是同步阻塞的(Claude Code 会等待 Hook 执行完成再继续),claude-mem 做了以下优化:
- Hook 处理器立即返回:捕获逻辑只做「记录到内存队列」,然后立即
process.exit(0),不等待 AI 压缩和数据库写入 - 后台 Worker 异步处理:一个长期运行的 Node.js 进程(
worker-service.js)负责消费内存队列,执行 AI 压缩和数据库写入 - 批量写入:每累积 10 条观察记录或达到 5 秒刷新间隔,执行一次批量数据库写入,减少 I/O 次数
5. AI 智能压缩引擎:从原始日志到高密度摘要
5.1 压缩 Prompt 工程
claude-mem 的压缩质量取决于发送给压缩模型(Claude Haiku / GPT-4o-mini)的 Prompt 设计。
压缩 Prompt 模板(概念性):
You are a technical context compression assistant.
Below is a raw observation record from a coding session.
Generate a concise summary (MAX 200 words) that captures:
1. What action was performed (tool name + purpose)
2. Key results or outputs
3. Files/modules involved
4. Any explicit decisions or constraints mentioned
Also extract:
- key_decisions: array of strings (any explicit design/coding decisions)
- code_refs: array of strings (file paths or function names mentioned)
- dependencies: array of strings (packages, modules, or services referenced)
RAW OBSERVATION:
Tool: {tool_name}
Input: {tool_input}
Result: {tool_result_preview}
Timestamp: {timestamp}
OUTPUT FORMAT (JSON):
{
"summary": "...",
"key_decisions": [...],
"code_refs": [...],
"dependencies": [...]
}
5.2 压缩质量评估
claude-mem 在压缩后会对质量做基本校验:
| 指标 | 合格标准 | 处理策略 |
|---|---|---|
| 摘要长度 | 50-500 Tokens | 过短(<50)可能是空操作,标记后跳过;过长(>500)重新压缩 |
| 关键信息保留率 | 人工评估 ~85% | 通过对比原始记录和摘要,计算关键信息保留比例 |
| 压缩比 | 目标 5:1 以上 | 低于 3:1 时切换为更激进的压缩 Prompt |
5.3 压缩成本控制
假设每天有 500 次工具调用需要压缩,每次压缩消耗 ~500 输入 + ~200 输出 = ~700 Tokens:
每日压缩成本(Claude Haiku):
700 Tokens × 500 次 / 1,000,000 × $0.25 = $0.0875/天
月度压缩成本:
$0.0875 × 30 = $2.63/月
这个成本对于获得的「持久化记忆」价值来说,是非常划算的。
6. 混合检索系统:SQLite 全文搜索 + Chroma 向量数据库
6.1 SQLite FTS5 全文搜索
claude-mem 使用 SQLite 的 FTS5 扩展实现关键词搜索:
-- 搜索包含「UserService」和「分页」的记忆
SELECT o.*, snap.content as summary
FROM observations o
JOIN observations_fts fts ON o.id = fts.rowid
WHERE observations_fts MATCH 'UserService AND 分页'
ORDER BY rank
LIMIT 10;
FTS5 的优势:
- 零额外依赖:SQLite 是嵌入式数据库,不需要单独的服务进程
- 支持中文分词:通过自定义 tokenizer 可以实现基本的中文关键词匹配
- 速度快:对于十万级别的第二记忆量,搜索延迟 < 10ms
6.2 Chroma 向量语义检索
对于「我想找上次关于用户认证逻辑的讨论」这种语义级的查询,关键词搜索无能为力,这时需要向量语义检索:
# 新会话启动时,对用户的第一个 Prompt 做语义检索
query_embedding = embedding_function([user_first_prompt])[0]
results = collection.query(
query_embeddings=[query_embedding],
n_results=20,
where={"session_id": {"$ne": current_session_id}} # 排除当前会话
)
# results 格式:
# {
# "documents": [["摘要文本1", "摘要文本2", ...]],
# "distances": [[0.15, 0.23, ...]], # 距离越小越相关
# "metadatas": [[{...}, {...}, ...]]
# }
向量化模型选择:
claude-mem 默认使用 all-MiniLM-L6-v2(Sentence Transformers),这是一个轻量级的嵌入模型:
- 向量维度:384
- 模型大小:~80MB
- 嵌入速度:~2000 文本/秒(CPU)
- 质量:对于技术文档和代码摘要,语义区分能力足够
如果需要更高质量的嵌入,可以切换为:
all-mpnet-base-v2:维度 768,质量更高,但速度慢 3 倍- OpenAI
text-embedding-3-small:API 调用,质量高,但需要付费
6.3 混合检索融合策略
关键词搜索和语义检索各有优劣,claude-mem 采用**倒数排名融合(Reciprocal Rank Fusion, RRF)**将两路结果合并:
def rrf_fusion(fts_results, vector_results, k=60):
"""
k: RRF 常数,通常取 60
"""
scores = {}
# FTS 结果(按排名)
for rank, doc_id in enumerate(fts_results, start=1):
scores[doc_id] = scores.get(doc_id, 0) + 1 / (k + rank)
# 向量结果(按距离排名)
for rank, doc_id in enumerate(vector_results, start=1):
scores[doc_id] = scores.get(doc_id, 0) + 1 / (k + rank)
# 按综合分数排序
return sorted(scores.items(), key=lambda x: x[1], reverse=True)
7. 多 IDE 支持:从 Claude Code 到 Cursor、Windsurf 的完整适配
7.1 Claude Code 原生插件
Claude Code 提供了最完整的 Hook 支持,claude-mem 在这里的功能最丰富:
# 安装命令
npm install -g @thedotmack/claude-mem
# 初始化(自动配置 Hook)
claude-mem init
# 启动 worker 服务(后台运行)
claude-mem worker start
7.2 Cursor 适配
Cursor 使用 .cursor/hooks.json 配置 Hook:
// .cursor/hooks.json(项目级或全局)
{
"PostToolUse": {
"command": "claude-mem-catch",
"args": ["--source=cursor"]
}
}
7.3 Windsurf 适配
Windsurf 通过 Registry 方式安装 claude-mem 插件:
# Windsurf 命令面板(Cmd+Shift+P)
> Registry: Install Plugin
> claude-mem
8. 代码实战:安装、配置与生产级使用指南
8.1 快速安装(Claude Code)
# 方式一:npm 全局安装(推荐)
npm install -g @thedotmack/claude-mem
# 方式二:从源码安装
git clone https://github.com/thedotmack/claude-mem.git
cd claude-mem
npm install
npm run build
npm link
# 初始化配置
claude-mem init
# 交互式问答:
# - 选择压缩模型(Haiku / GPT-4o-mini)
# - 设置压缩触发阈值(默认:每次工具调用都压缩)
# - 配置注入 Token 预算(默认:10000 Tokens)
# - 选择存储路径(默认:~/.claude-mem/)
# 启动后台 Worker(必须!)
claude-mem worker start
# 输出:✓ Worker service started on port 3947
8.2 配置文件详解
# ~/.claude-mem/config.yaml
version: "1.0"
# 压缩引擎配置
compression:
model: "claude-haiku" # 压缩用模型
api_key: "${ANTHROPIC_API_KEY}"
trigger: "always" # always | on_session_end | manual
max_summary_tokens: 300
preserve_raw: true # 是否保留原始记录
# 检索注入配置
injection:
enabled: true
max_context_tokens: 10000 # 注入记忆的最大 Token 占用
top_k: 20 # 检索返回的最大条目
recency_lambda: 0.1 # 时间衰减系数
strategy: "progressive" # progressive | eager
# 存储配置
storage:
sqlite_path: "~/.claude-mem/db/observations.db"
chroma_path: "~/.claude-mem/chroma/"
auto_vacuum: true # 定期清理过期记录(默认 90 天)
# IDE 适配
ide:
primary: "claude_code"
fallback: ["cursor", "windsurf"]
8.3 生产级使用流程
第一次使用:
# 1. 启动 Worker
claude-mem worker start
# 2. 打开 Claude Code,开始编码会话
claude
# 在 Claude Code 中:
# > 帮我分析一下这个项目的架构
# (claude-mem 会自动捕获这次对话)
# 3. 查看已捕获的记忆
claude-mem query "项目架构"
# 输出:
# [Session a1b2c3d4] 2026-06-30 18:23
# Summary: 用户询问项目架构,AI 分析了 cmd/、internal/、pkg/ 三个目录...
# Files: [internal/service/user.go, internal/db/conn.go]
# Decisions: ["使用 Gin 作为 HTTP 框架", "数据库用 PostgreSQL"]
跨会话记忆验证:
# 会话一:告诉 Claude 项目规范
claude
> 我们这个项目的错误处理统一用 apperr.Wrapf,不要直接用 fmt.Errorf
> 所有的数据库操作必须通过 internal/db 包,不允许在其他包直接 import database/sql
> (claude-mem 自动捕获)
# 关闭会话,开启新会话
claude
> 帮我写一个新的 API 接口,查询用户列表
> (claude-mem 自动注入相关记忆)
# 期望:Claude 生成的代码应该使用 apperr.Wrapf 和 internal/db 包
8.4 HTTP API 使用(高级)
claude-mem 的 Worker 服务提供了一个本地 HTTP API,允许外部工具查询记忆:
# 搜索记忆
curl -X POST http://localhost:3947/api/query \
-H "Content-Type: application/json" \
-d '{
"query": "用户认证逻辑",
"top_k": 5,
"include_raw": false
}'
# 响应
{
"results": [
{
"id": "obs_001",
"summary": "讨论了 JWT token 的过期时间设置,最终决定设为 7 天...",
"score": 0.92,
"created_at": "2026-06-28T10:23:45Z",
"file_refs": ["internal/middleware/auth.go"]
}
]
}
9. Token 效率深度优化:60-95% 成本压缩的实战策略
9.1 压缩比实测数据
以下是在真实项目(Go 微服务,约 50 个 .go 文件)中的实测数据:
| 场景 | 无 claude-mem | 有 claude-mem(压缩后) | 节省比例 |
|---|---|---|---|
| 新会话启动(需要了解项目背景) | ~15,000 Tokens(手动粘贴 README + 核心文件) | ~2,000 Tokens(自动注入相关记忆) | 87% |
| 继续上周的工作 | ~20,000 Tokens(重新解释上下文) | ~3,000 Tokens | 85% |
| 修复已知 Bug(有历史记录) | ~8,000 Tokens | ~1,200 Tokens | 85% |
9.2 分层注入策略的 Token 预算分配
Claude Sonnet 4.5 上下文窗口:200,000 Tokens
分配方案(推荐):
├── 系统 Prompt(固定): 3,000 Tokens
├── 用户当前 Prompt: 1,000 Tokens
├── claude-mem 注入记忆: 10,000 Tokens (占 5%)
│ ├── L1 必须注入(会话总结 + README): 3,000 Tokens
│ ├── L2 高相关记忆(Top-10): 5,000 Tokens
│ └── L3 惰性加载预留: 2,000 Tokens
├── AI 推理中间状态: 20,000 Tokens
└── AI 输出回复: 剩余全部(~166,000 Tokens)
9.3 与 Headroom 组合使用
claude-mem 负责「记忆检索和注入」,而 Headroom(另一个 2026 年热门开源项目)负责「上下文内容的智能压缩」。两者组合可以实现双重 Token 优化:
# 安装 Headroom
pip install "headroom-ai[all]"
# 用 Headroom 包装 Claude Code
headroom wrap claude
# 效果:
# - claude-mem 注入 10,000 Tokens 的记忆
# - Headroom 将其进一步压缩到 2,000 Tokens(保留 97% 精度)
# - 总节省:~90%
10. 与其他记忆方案对比:claude-mem vs supermemory vs memvid
10.1 功能对比矩阵
| 特性 | claude-mem | supermemory | memvid | EverMem |
|---|---|---|---|---|
| 自动捕获 | ✅ Hook 自动 | ✅ SDK 集成 | ❌ 手动 | ✅ Hook 自动 |
| AI 压缩 | ✅ 内置 | ✅ 内置 | ❌ 无 | ✅ 内置 |
| 混合检索 | ✅ FTS + 向量 | ✅ 向量优先 | ❌ 仅向量 | ✅ FTS + 向量 |
| 多 IDE 支持 | ✅ 7+ IDE | ❌ 仅 Codex | ❌ 仅 CLI | ❌ 仅 Claude Code |
| 开源 | ✅ MIT | ✅ MIT | ✅ Apache 2.0 | ❌ 闭源 |
| Token 节省 | 60-90% | 70-95% | N/A | 60-85% |
| 学习曲线 | 低 | 中 | 高 | 低 |
| 2026 Star 数 | ~24,000 | ~18,000 | ~8,000 | N/A |
10.2 选择建议
- 选 claude-mem:如果你主要用 Claude Code / Cursor,需要开箱即用的自动化记忆
- 选 supermemory:如果你在构建自己的 AI 应用,需要嵌入一个通用的记忆层(有 API 服务)
- 选 memvid:如果你需要处理大量视频/多媒体内容的记忆(memvid 擅长视频索引)
- 选 EverMem:如果你想要托管服务(闭源,有 SaaS 版本)
11. 生产环境最佳实践:避坑指南与性能调优
11.1 避坑指南
坑一:Worker 服务未启动,记忆不捕获
# 错误现象:使用了 claude-mem init,但记忆没有被记录
# 原因:忘了启动 Worker 服务
# 解决:
claude-mem worker start
# 设置开机自启(macOS)
launchctl load ~/Library/LaunchAgents/com.thedotmack.claude-mem.plist
# 设置开机自启(Linux systemd)
systemctl --user enable claude-mem-worker
坑二:上下文注入过多,导致 Token 超支
# ~/.claude-mem/config.yaml
# 错误配置:
injection:
max_context_tokens: 50000 # 太多!可能挤占 AI 的推理空间
# 正确配置:
injection:
max_context_tokens: 10000 # 不超过上下文窗口的 10%
strategy: "progressive" # 使用分层注入
坑三:压缩模型 API Key 未配置
# 错误现象:记忆被捕获了,但压缩一直失败
# 查看日志:
tail -f ~/.claude-mem/logs/worker.log
# 输出:Error: ANTHROPIC_API_KEY not set
# 解决:
export ANTHROPIC_API_KEY="sk-ant-..."
claude-mem worker restart
11.2 性能调优
调优一:数据库定期清理
# 清理 90 天前的原始记录(保留压缩摘要)
claude-mem maintenance vacuum --older-than 90d
# 查看数据库大小
du -sh ~/.claude-mem/db/
# 输出:234 MB(使用 3 个月,每天约 500 次工具调用)
调优二:Chroma 向量索引优化
# 定期重建向量索引(提高检索速度)
# 在 claude-mem 的 Python 工具脚本中:
from chromadb import Client
client = Client(path="~/.claude-mem/chroma/")
collection = client.get_collection("claude_mem")
# 重建索引
collection.modify(metadata={"hnsw:batch_size": 1000})
调优三:压缩并发控制
# ~/.claude-mem/config.yaml
compression:
concurrency: 3 # 同时最多 3 个压缩任务(避免 API 限流)
retry_max: 3
timeout_ms: 30000
12. 未来展望:AI 记忆系统的下一代演进方向
12.1 多模态记忆
当前的 claude-mem 主要处理文本类记忆(对话、代码、工具日志)。下一代记忆系统将支持:
- 截图记忆:自动捕获 UI 界面的截图,通过视觉模型(GPT-4o / Claude Opus 4.6 Vision)生成描述并存储
- 架构图记忆:识别会话中生成的 Mermaid 图、ASCII 图,建立图形结构的索引
- 音频记忆:对于语音输入的编码会话(如移动端开发场景),转录并存储音频中的决策内容
12.2 跨项目记忆共享
当前的 claude-mem 记忆是「单项目隔离」的。未来可以支持:
# 跨项目记忆检索
claude-mem query "JWT 认证实现" --cross-project
# 输出:
# [Project: user-auth-service] ...
# [Project: api-gateway] ...
# [Project: mobile-backend] ...
这对于在多个微服务项目之间共享通用最佳实践非常有价值。
12.3 记忆的知识图谱化
将离散的记忆片段构建成知识图谱:
[UserService] --implements--> [UserInterface]
|
+-- calls --> [UserRepository]
|
+-- depends_on --> [apperr.Wrapf]
[设计要求: 所有接口返回标准分页格式]
|
+-- applies_to --> [UserService.getAllUsers]
+-- applies_to --> [OrderService.getOrders]
当 AI 在修改 UserService 时,自动检索关联的设计要求和依赖关系,实现「上下文感知的精准注入」。
12.4 与 Loop Engineering 的融合
2026 年最火的 AI 开发范式是 Loop Engineering(循环工程)——让 AI Agent 自主运行改进循环。
claude-mem 可以为 Loop Engineering 提供「长期学习记忆」:
Loop 第 1 次迭代:AI 尝试修复 Bug,失败
↓(claude-mem 记录:失败原因、尝试过的方法)
Loop 第 2 次迭代:AI 检索记忆,避免重复失败路径
↓(成功)
Loop 第 N 次迭代:AI 已经从历史记忆中「学会」了项目的常见坑
这种「记忆驱动的自主学习」是下一代 AI 编码助手的核心竞争力。
总结
claude-mem 用工程化的手段解决了 AI 编码助手长期以来的「失忆症」。通过五大核心组件——生命周期钩子捕获层、AI 智能压缩引擎、混合存储层、混合检索与排序层、上下文自动注入层——构建了一套完整、可用、低成本的长期记忆系统。
对于每天依赖 Claude Code、Cursor 等 AI 工具的专业开发者来说,部署 claude-mem 的 ROI 极高:
| 成本项 | 金额(月度) |
|---|---|
| claude-mem 软件成本 | $0(开源,MIT 许可证) |
| 压缩 API 调用成本 | ~$3(Claude Haiku) |
| 本地存储成本 | ~$0.1(234 MB,90 天轮转) |
| 总成本 | ~$3.1/月 |
| 节省的 Token 成本(估算) | ~$50-200/月 |
| 净收益 | ~$47-197/月 |
更重要的是,它让 AI 编码助手真正变得「有记忆、有积累、有成长」——这是从「玩具」到「生产力基础设施」的关键一步。
2026 年下半年,随着 Claude Code 生态的持续爆发,类似的记忆层、压缩层、检索层工具将构成一个完整的 AI 编码助手基础设施栈。claude-mem 是这个栈中「记忆层」的标杆实现,值得每个专业开发者深入了解和生产部署。
参考资源
- GitHub: https://github.com/thedotmack/claude-mem
- 文档: https://claude-mem.dev/docs
- Discord 社区: https://discord.gg/claude-mem
- 相关项目: Headroom(上下文压缩)、supermemory(通用 AI 记忆)、OpenClaw(AI Agent 框架)
作者注:本文基于 2026 年 6 月的最新版本(v10.7.0+)撰写,后续版本可能有 API 变化,请以官方文档为准。
标签:claude-mem | Claude Code | AI记忆系统 | 上下文压缩 | 编码助手 | 生命周期钩子 | 向量数据库 | 混合检索 | Token优化 | 长期记忆 | AI工程化 | 开源项目