编程 万字深度解析 claude-mem:给 Claude Code 装上「长期记忆大脑」——从生命周期钩子到 AI 智能压缩的工程化实践(2026)

2026-07-01 02:42:33 +0800 CST views 7

万字深度解析 claude-mem:给 Claude Code 装上「长期记忆大脑」——从生命周期钩子到 AI 智能压缩的工程化实践(2026)

你有没有遇到过这种情况:写到一半,模型「忘了」你刚刚的设计约束;多轮对话后,代码风格开始漂移;上下文越长,token 越贵,但效果反而变差。问题不在模型能力,而在记忆机制。2026 年 6 月,thedotmack/claude-mem 以 2.4 万 Star 成为 Claude Code 生态最热门的记忆插件——它用工程化手段彻底解决了 AI 编码助手的无记忆痛点。


目录

  1. 问题背景:AI 编码助手的三重失忆困境
  2. claude-mem 是什么:项目定位与核心能力
  3. 架构深度拆解:五大核心组件的技术内幕
  4. 生命周期钩子机制:五个关键时刻精准捕获
  5. AI 智能压缩引擎:从原始日志到高密度摘要
  6. 混合检索系统:SQLite 全文搜索 + Chroma 向量数据库
  7. 多 IDE 支持:从 Claude Code 到 Cursor、Windsurf 的完整适配
  8. 代码实战:安装、配置与生产级使用指南
  9. Token 效率深度优化:60-95% 成本压缩的实战策略
  10. 与其他记忆方案对比:claude-mem vs supermemory vs memvid
  11. 生产环境最佳实践:避坑指南与性能调优
  12. 未来展望: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 将观察数据压缩存储,节省 TokenAI 摘要生成(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/
CursorHooks 自动配置.cursor/hooks.json
Gemini CLIHooks + AGENTS.md 自动配置~/.gemini/
OpenCodeMCP + AGENTS.md 手动配置需手动添加
OpenClawPlugin 自动配置workspace skills
WindsurfHooks + Registry 自动配置.windsurf/
Codex CLITranscript 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~30010:1操作目的、关键结果、文件路径
多轮对话原文~5,000~1,0005:1核心结论、设计决策、用户意图
文件内容(.go 源码)~2,000~20010:1结构体定义、函数签名、包依赖
Shell 命令执行结果~800~1008: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 做了以下优化:

  1. Hook 处理器立即返回:捕获逻辑只做「记录到内存队列」,然后立即 process.exit(0),不等待 AI 压缩和数据库写入
  2. 后台 Worker 异步处理:一个长期运行的 Node.js 进程(worker-service.js)负责消费内存队列,执行 AI 压缩和数据库写入
  3. 批量写入:每累积 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 Tokens85%
修复已知 Bug(有历史记录)~8,000 Tokens~1,200 Tokens85%

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-memsupermemorymemvidEverMem
自动捕获✅ Hook 自动✅ SDK 集成❌ 手动✅ Hook 自动
AI 压缩✅ 内置✅ 内置❌ 无✅ 内置
混合检索✅ FTS + 向量✅ 向量优先❌ 仅向量✅ FTS + 向量
多 IDE 支持✅ 7+ IDE❌ 仅 Codex❌ 仅 CLI❌ 仅 Claude Code
开源✅ MIT✅ MIT✅ Apache 2.0❌ 闭源
Token 节省60-90%70-95%N/A60-85%
学习曲线
2026 Star 数~24,000~18,000~8,000N/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 是这个栈中「记忆层」的标杆实现,值得每个专业开发者深入了解和生产部署。


参考资源

作者注:本文基于 2026 年 6 月的最新版本(v10.7.0+)撰写,后续版本可能有 API 变化,请以官方文档为准。

标签:claude-mem | Claude Code | AI记忆系统 | 上下文压缩 | 编码助手 | 生命周期钩子 | 向量数据库 | 混合检索 | Token优化 | 长期记忆 | AI工程化 | 开源项目

推荐文章

智能视频墙
2025-02-22 11:21:29 +0800 CST
四舍五入五成双
2024-11-17 05:01:29 +0800 CST
防止 macOS 生成 .DS_Store 文件
2024-11-19 07:39:27 +0800 CST
PyMySQL - Python中非常有用的库
2024-11-18 14:43:28 +0800 CST
Vue3中的v-bind指令有什么新特性?
2024-11-18 14:58:47 +0800 CST
一键压缩图片代码
2024-11-19 00:41:25 +0800 CST
如何在 Vue 3 中使用 TypeScript?
2024-11-18 22:30:18 +0800 CST
Hypothesis是一个强大的Python测试库
2024-11-19 04:31:30 +0800 CST
测试文章
2026-06-22 03:28:39 +0800 CST
MySQL设置和开启慢查询
2024-11-19 03:09:43 +0800 CST
程序员茄子在线接单