Claude-Mem 深度解析:59K 星背后的 AI 记忆压缩架构与跨会话上下文注入革命
一行命令
npx claude-mem install,让 Claude Code 从"短记忆天才"变成"长记忆伙伴"。这不是简单的日志存储,而是一场 AI Agent 记忆架构的范式革命。
一、背景:AI 编程助手的"失忆症"困境
1.1 当前 AI 编程工具的本质缺陷
如果你是一个重度 AI 编程工具用户,你一定经历过这样的场景:
- 每次新会话都要重新解释项目结构
- Claude 记不住你三天前定下的编码规范
- 昨天的决策今天又要重复讨论
- 长对话越用越"脏",模型推理质量下降
这不是 Claude 的错,而是当前 AI 编程工具的架构性缺陷:
┌─────────────────────────────────────────────────────────┐
│ 传统 AI 编程工具架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ Prompt + 临时上下文 (Session 内有效) │
│ ↓ │
│ Session 结束 → 上下文清空 → "失忆" │
│ │
│ 问题: │
│ ❌ 冗余指令累积 → 上下文污染 │
│ ❌ 过期决策残留 → 推理偏差 │
│ ❌ 错误假设固化 → 输出质量下降 │
│ │
└─────────────────────────────────────────────────────────┘
这种"无状态"设计带来的三个工程级问题:
- 上下文"越用越脏":长对话引入冗余指令、过期决策、错误假设残留,模型越来越不稳定
- 经验无法复用:每次都在重复解释项目结构、定义编码规范、纠正模型行为
- 成本指数上升:上下文越长,token 成本越高、推理延迟越大、质量反而下降
本质问题:现在的 Agent 更像"短期记忆 + 强推理",而不是"持续学习系统"。
1.2 为什么"记忆"比"存储"更难
很多人会说:"把对话存下来不就行了?"
但问题远没有这么简单。原始对话数据有三个致命问题:
- 体积爆炸:一个 2 小时的编码会话可能产生 50000+ tokens 的原始数据,全部注入新会话会直接撑爆上下文窗口
- 信噪比低:原始对话中充斥着试错过程、无关讨论、临时调试命令,真正有价值的决策信息不到 5%
- 检索困难:即使存了,如何在新会话中精准找到相关记忆?关键词匹配完全不够用
真正需要的不是"存储",而是"记忆压缩"和"智能检索"。
二、Claude-Mem 是什么:从"存日志"到"造记忆"的范式跃迁
2.1 项目概览
Claude-Mem 是由 Alex Newman (@thedotmack) 开发的开源项目,目前在 GitHub 上已获得 59,000+ 星,成为 Claude Code 生态中最热门的插件之一。
# 一键安装
npx claude-mem install
# 或通过 Claude Code 插件市场
/plugin marketplace add thedotmack/claude-mem
/plugin install claude-mem
核心价值定位:
Claude-Mem 让 Claude Code 从"每次重新认识你"变成"累积理解你的项目"。
它不是简单的日志记录工具,而是一套完整的记忆架构系统:
┌─────────────────────────────────────────────────────────┐
│ Claude-Mem 记忆架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ 原始会话数据 (50000+ tokens) │
│ ↓ │
│ [AI 压缩引擎] 抽取关键决策、去除冗余 │
│ ↓ │
│ 高密度记忆片段 (200 tokens) │
│ ↓ │
│ [向量索引] 语义编码 + FTS5 全文索引 │
│ ↓ │
│ [智能检索] 根据当前任务精准注入相关记忆 │
│ │
└─────────────────────────────────────────────────────────┘
2.2 核心能力拆解
Claude-Mem 实现了四个核心能力:
| 能力 | 描述 | 技术实现 |
|---|---|---|
| 全量记录 | 捕获 Claude 在编码会话中的所有行为 | PostToolUse Hook |
| AI 压缩 | 从原始对话中抽取高密度记忆片段 | Claude Agent SDK |
| 智能索引 | 语义向量化 + 全文检索双引擎 | Chroma + SQLite FTS5 |
| 精准注入 | 根据当前任务自动检索并注入相关记忆 | SessionStart Hook |
压缩比例惊人:原始上下文 5000 tokens → 压缩后记忆 200 tokens,但保留核心信息。
三、架构深度剖析:五层钩子 + 三引擎架构
3.1 整体架构图
┌─────────────────────────────────────────────────────────────────────┐
│ Claude-Mem 系统架构 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Claude Code 进程 │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ SessionStart│ │UserPrompt │ │ PostToolUse │ │ │
│ │ │ Hook │ │ Submit Hook │ │ Hook │ │ │
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │
│ │ │ │ │ │ │
│ │ ┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐ │ │
│ │ │ Stop │ │ SessionEnd │ │ (other) │ │ │
│ │ │ Hook │ │ Hook │ │ │ │ │
│ │ └──────┬──────┘ └──────┬──────┘ └─────────────┘ │ │
│ │ │ │ │ │
│ └─────────┼────────────────┼────────────────────────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Worker Service (Bun + HTTP API) │ │
│ │ Port: 37777 │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ 记忆压缩API │ │ 检索API │ │ Web Viewer │ │ │
│ │ └──────┬──────┘ └──────┬──────┘ └─────────────┘ │ │
│ └─────────┼────────────────┼───────────────────────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ SQLite 数据库 │ │ Chroma 向量库 │ │
│ │ (会话/观察/摘要)│ │ (语义索引) │ │
│ │ + FTS5 全文索引│ │ │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
3.2 五层生命周期钩子详解
Claude-Mem 通过 Claude Code 的 Hooks 机制介入会话的每个关键节点:
3.2.1 SessionStart 钩子
触发时机:新会话启动时
核心职责:从历史记忆中检索相关上下文并注入
// SessionStart Hook 伪代码
async function sessionStartHook(context: SessionContext) {
// 1. 获取最近 50 条观察记录
const recentObservations = await db.query(`
SELECT * FROM observations
ORDER BY created_at DESC
LIMIT 50
`);
// 2. 根据当前项目路径过滤
const projectObservations = recentObservations.filter(
obs => obs.project_path === context.cwd
);
// 3. 向量相似度检索(如果有当前任务提示)
if (context.initialPrompt) {
const relevantMemories = await chroma.search(
context.initialPrompt,
{ limit: 10 }
);
projectObservations.push(...relevantMemories);
}
// 4. 构建时间线格式的记忆注入
const memoryContext = formatAsTimeline(projectObservations);
// 5. 注入到会话上下文
return {
type: 'context_injection',
content: memoryContext
};
}
输出示例:
📅 Recent Session Memory (Last 7 days)
[2026-04-20 14:32] Fixed authentication bug in UserService
→ Root cause: JWT token expiration logic missing timezone handling
→ Solution: Added moment-timezone conversion in token generation
[2026-04-19 10:15] Refactored database connection pooling
→ Changed from single connection to pg-pool with 10 max connections
→ Reduced average query latency from 200ms to 45ms
[2026-04-18 16:45] Implemented rate limiting middleware
→ Using express-rate-limit with Redis backend
→ Config: 100 requests per 15 minutes per IP
3.2.2 UserPromptSubmit 钩子
触发时机:用户提交 Prompt 后、Claude 处理前
核心职责:根据用户输入实时检索相关记忆
async function userPromptSubmitHook(prompt: string) {
// 1. 语义搜索相关记忆
const relevantMemories = await chroma.search(prompt, {
limit: 5,
minScore: 0.7
});
// 2. 如果找到高相关性记忆,追加到上下文
if (relevantMemories.length > 0) {
return {
type: 'context_append',
content: formatMemories(relevantMemories)
};
}
return null; // 不追加任何内容
}
3.2.3 PostToolUse 钩子
触发时机:Claude 执行工具调用后
核心职责:捕获工具执行结果,生成观察记录
async function postToolUseHook(toolCall: ToolCall, result: ToolResult) {
// 1. 判断是否值得记录
if (!isWorthRecording(toolCall, result)) {
return;
}
// 2. 提取关键信息
const observation = {
tool: toolCall.name,
input: toolCall.input,
output: result.output,
project_path: process.cwd(),
timestamp: Date.now()
};
// 3. AI 压缩:将完整输出压缩为高密度摘要
const compressedMemory = await compressWithAI(observation);
// 4. 存储到数据库
await db.insert('observations', {
...compressedMemory,
embedding: await generateEmbedding(compressedMemory.summary)
});
}
AI 压缩示例:
原始输出(2000 tokens):
I'll analyze the authentication flow. Let me read the relevant files...
[Reading src/auth/login.ts]
[Reading src/middleware/auth.ts]
[Reading src/services/UserService.ts]
After analyzing the code, I found the issue: the JWT token generation
doesn't account for timezone differences. The server uses UTC but the
client sends local timestamps. This causes tokens to expire prematurely...
[Full analysis continues for 1500+ tokens]
压缩后(80 tokens):
🐛 Fixed JWT auth bug: timezone mismatch between server (UTC) and
client (local) caused premature token expiration. Solution: Added
moment-timezone conversion in src/services/UserService.ts:45.
3.2.4 Stop 钩子
触发时机:Claude 完成响应后
核心职责:生成会话摘要
3.2.5 SessionEnd 钩子
触发时机:会话结束时
核心职责:持久化会话元数据,清理临时状态
3.3 Worker 服务架构
Worker 服务是 Claude-Mem 的核心引擎,运行在独立进程中(由 Bun 管理):
// Worker 服务架构
interface WorkerService {
port: 37777; // 默认端口
endpoints: {
// 记忆管理
'POST /api/observation': createObservation;
'GET /api/observation/:id': getObservation;
'GET /api/observations': listObservations;
// 搜索接口
'POST /api/search': searchMemory;
'POST /api/search/timeline': timelineSearch;
'POST /api/search/similar': similarSearch;
// 压缩接口
'POST /api/compress': compressObservation;
// 管理接口
'GET /api/status': getStatus;
'GET /api/settings': getSettings;
'PUT /api/settings': updateSettings;
};
webViewer: 'http://localhost:37777'; // 实时记忆流 Web UI
}
Worker 进程管理:
# 查看 Worker 状态
curl http://localhost:37777/api/status
# 输出示例
{
"status": "running",
"uptime": "72h 34m",
"observations": 12847,
"sessions": 156,
"dbSize": "45MB",
"vectorSize": "128MB"
}
3.4 存储引擎:SQLite + Chroma 双引擎
Claude-Mem 采用混合存储策略:
SQLite(结构化数据 + 全文索引)
-- 数据库 Schema
CREATE TABLE sessions (
id INTEGER PRIMARY KEY,
project_path TEXT,
started_at DATETIME,
ended_at DATETIME,
summary TEXT
);
CREATE TABLE observations (
id INTEGER PRIMARY KEY,
session_id INTEGER,
type TEXT, -- bugfix, feature, refactor, decision, etc.
summary TEXT,
details TEXT,
tool_name TEXT,
file_paths TEXT, -- JSON array
tags TEXT, -- JSON array
created_at DATETIME,
FOREIGN KEY (session_id) REFERENCES sessions(id)
);
-- FTS5 全文索引
CREATE VIRTUAL TABLE observations_fts USING fts5(
summary, details, tags,
content='observations',
tokenize='porter unicode61'
);
Chroma(向量索引)
# Chroma 集合配置
collection = chroma_client.create_collection(
name="claude_mem_observations",
metadata={"hnsw:space": "cosine"}
)
# 向量化配置
embedding_function = embedding_functions.SentenceTransformerEmbeddingFunction(
model_name="all-MiniLM-L6-v2" # 快速且高质量
)
混合检索策略:
┌─────────────────────────────────────────────────────────┐
│ 混合检索流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ 用户查询: "之前的 JWT 认证 bug 怎么解决的?" │
│ ↓ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 并行执行: │ │
│ │ 1. FTS5 全文搜索 "JWT" "认证" "bug" │ │
│ │ 2. Chroma 向量相似度搜索 │ │
│ └─────────────────────────────────────────────────┘ │
│ ↓ │
│ 结果融合 + 排序 │
│ ↓ │
│ 返回 Top 10 相关记忆 │
│ │
└─────────────────────────────────────────────────────────┘
四、MCP 搜索工具:三层工作流的 Token 效率革命
4.1 为什么需要三层工作流?
直接检索完整观察记录的问题:每条记录可能 500-1000 tokens,返回 10 条就是 5000-10000 tokens,严重浪费。
Claude-Mem 的解决方案:渐进式披露(Progressive Disclosure)
┌─────────────────────────────────────────────────────────┐
│ 三层工作流 │
├─────────────────────────────────────────────────────────┤
│ │
│ Layer 1: search │
│ ├── 输出:紧凑索引 + ID(~50-100 tokens/条) │
│ └── 目的:快速筛选相关记忆 │
│ │
│ Layer 2: timeline │
│ ├── 输出:时间线上下文(~200-300 tokens) │
│ └── 目的:了解记忆发生的前后背景 │
│ │
│ Layer 3: get_observations │
│ ├── 输出:完整详情(~500-1000 tokens/条) │
│ └── 目的:仅在确认需要时获取 │
│ │
│ Token 节省:约 10x │
│ │
└─────────────────────────────────────────────────────────┘
4.2 MCP 工具详解
4.2.1 search 工具
// 搜索记忆索引
interface SearchParams {
query: string; // 自然语言查询
type?: string; // 过滤类型:bugfix, feature, refactor, decision
project?: string; // 过滤项目路径
fromDate?: string; // 时间范围
toDate?: string;
limit?: number; // 默认 10
}
// 返回示例
{
"results": [
{
"id": 12345,
"summary": "Fixed JWT auth timezone bug",
"type": "bugfix",
"date": "2026-04-20",
"score": 0.92
},
{
"id": 12346,
"summary": "Refactored database connection pooling",
"type": "refactor",
"date": "2026-04-19",
"score": 0.78
}
],
"tokenCost": "~100 tokens" // 仅索引信息
}
4.2.2 timeline 工具
// 获取时间线上下文
interface TimelineParams {
observationId?: number; // 围绕特定观察
query?: string; // 或围绕查询结果
before?: number; // 前后各取几条
after?: number;
}
// 返回示例
{
"timeline": [
{ "time": "14:30", "event": "Started debugging auth issue" },
{ "time": "14:45", "event": "Found JWT token expiration bug" },
{ "time": "15:00", "event": "Applied timezone fix" },
{ "time": "15:15", "event": "Verified fix in production" }
],
"tokenCost": "~200 tokens"
}
4.2.3 get_observations 工具
// 批量获取完整观察记录
interface GetObservationsParams {
ids: number[]; // 批量获取
}
// 使用示例
const observations = await get_observations({
ids: [12345, 12346, 12347]
});
// 返回完整详情,包含代码片段、决策依据等
4.3 实战案例
场景:用户在新会话中问"上次那个认证 bug 怎么解决的?"
Step 1: search(query="认证 bug", type="bugfix", limit=10)
Token cost: ~100 tokens
结果:找到 3 条相关记忆,ID: 123, 456, 789
Step 2: 用户查看摘要,确认 ID 123 最相关
Step 3: get_observations(ids=[123])
Token cost: ~600 tokens
结果:获取完整的解决方案,包含代码修改
Total: ~700 tokens
vs 直接检索 3 条完整记录: ~1800 tokens
节省: 61%
五、隐私控制与配置系统
5.1 隐私标签系统
Claude-Mem 提供细粒度的隐私控制:
// ~/.claude-mem/settings.json
{
"excludePatterns": [
"**/.env",
"**/secrets/**",
"**/credentials.json"
],
"excludeTags": [
"sensitive",
"private",
"secret"
],
"redactPatterns": [
"password\\s*=\\s*['\"][^'\"]+['\"]",
"api_key\\s*=\\s*['\"][^'\"]+['\"]"
]
}
使用方式:
用户:查看一下 .env 文件的内容
Claude:[内部检测到 .env 匹配排除模式,不记录此交互]
5.2 上下文注入配置
{
"contextInjection": {
"maxObservations": 50, // 最多注入 50 条
"maxTokens": 4000, // 最多 4000 tokens
"recencyWeight": 0.7, // 近期记忆权重
"relevanceWeight": 0.3 // 相关性权重
},
"compressionModel": {
"provider": "anthropic",
"model": "claude-3-haiku", // 快速压缩
"maxOutputTokens": 200
}
}
5.3 多语言模式
Claude-Mem 支持多种语言模式,通过 CLAUDE_MEM_MODE 配置:
{
"CLAUDE_MEM_MODE": "code--zh" // 简体中文模式
}
可用模式:
| 模式 | 描述 |
|---|---|
code | 默认英文模式 |
code--zh | 简体中文 |
code--ja | 日语 |
code--es | 西班牙语 |
code--de | 德语 |
六、Web Viewer 与实时监控
6.1 Web Viewer 功能
访问 http://localhost:37777 可以看到:
┌─────────────────────────────────────────────────────────┐
│ Claude-Mem Web Viewer │
├─────────────────────────────────────────────────────────┤
│ │
│ 📊 统计面板 │
│ ├── 总观察记录: 12,847 │
│ ├── 总会话数: 156 │
│ ├── 数据库大小: 45MB │
│ └── 运行时间: 72h 34m │
│ │
│ 📝 实时记忆流 │
│ ├── [14:32] Fixed authentication bug... │
│ ├── [14:30] Analyzed login flow... │
│ └── [14:28] Started new session... │
│ │
│ 🔍 搜索面板 │
│ └── [输入框] 搜索历史记忆... │
│ │
│ ⚙️ 设置面板 │
│ ├── 模式切换: code / code--zh │
│ ├── Beta 频道: Endless Mode │
│ └── 数据导出: JSON / Markdown │
│ │
└─────────────────────────────────────────────────────────┘
6.2 实时观察 API
# 获取单个观察记录
curl http://localhost:37777/api/observation/12345
# 搜索记忆
curl -X POST http://localhost:37777/api/search \
-H "Content-Type: application/json" \
-d '{"query": "authentication bug", "limit": 5}'
# 导出所有数据
curl http://localhost:37777/api/export > claude-mem-backup.json
七、高级特性:Endless Mode 与 Beta 频道
7.1 Endless Mode:仿生记忆架构
Endless Mode 是 Claude-Mem 的实验性功能,采用仿生记忆架构:
┌─────────────────────────────────────────────────────────┐
│ Endless Mode 记忆模型 │
├─────────────────────────────────────────────────────────┤
│ │
│ 灵感来源:人类大脑的记忆系统 │
│ │
│ ┌───────────────┐ ┌───────────────┐ │
│ │ 短期记忆 │ → │ 工作记忆 │ │
│ │ (瞬时感知) │ │ (当前任务) │ │
│ └───────────────┘ └───────┬───────┘ │
│ │ │
│ ↓ │
│ ┌───────────────┐ ┌───────────────┐ │
│ │ 情景记忆 │ ← │ 语义记忆 │ │
│ │ (具体事件) │ │ (抽象知识) │ │
│ └───────────────┘ └───────────────┘ │
│ │
│ 特点: │
│ • 无限会话长度 │
│ • 自动记忆分层 │
│ • 梦境压缩(后台整理) │
│ │
└─────────────────────────────────────────────────────────┘
启用方式:
在 Web Viewer 的设置面板中切换到 Beta 频道,或在 settings.json 中:
{
"channel": "beta",
"endlessMode": true
}
7.2 梦境压缩
Endless Mode 的核心创新是"梦境压缩"——在会话间隙后台运行的记忆整理过程:
// 梦境压缩伪代码
async function dreamCompression() {
// 1. 收集未压缩的原始观察
const rawObservations = await db.query(`
SELECT * FROM observations
WHERE compressed = false
ORDER BY created_at ASC
`);
// 2. 主题聚类
const clusters = await clusterByTopic(rawObservations);
// 3. 提取共性知识
for (const cluster of clusters) {
const semanticMemory = await extractSemanticKnowledge(cluster);
await db.insert('semantic_memories', semanticMemory);
}
// 4. 标记为已压缩
await db.update('observations',
{ compressed: true },
{ id: rawObservations.map(o => o.id) }
);
}
八、OpenClaw 集成与企业级部署
8.1 OpenClaw 网关集成
Claude-Mem 官方支持 OpenClaw 网关部署:
# 一键安装到 OpenClaw 网关
curl -fsSL https://install.cmem.ai/openclaw.sh | bash
集成特性:
- 自动配置 AI 提供商
- Worker 服务自动启动
- 可选实时观察推送到 Telegram / Discord / Slack
8.2 企业级部署架构
┌─────────────────────────────────────────────────────────────┐
│ 企业级 Claude-Mem 部署架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 负载均衡层 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────┼───────────────┐ │
│ ↓ ↓ ↓ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Worker 节点1│ │ Worker 节点2│ │ Worker 节点N│ │
│ │ (Bun) │ │ (Bun) │ │ (Bun) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────────┼────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 共享存储层 │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ PostgreSQL │ │ Qdrant/Milvus│ │ │
│ │ │ (SQLite 替代)│ │ (Chroma 替代)│ │ │
│ │ └─────────────┘ └─────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
九、与其他记忆方案对比
9.1 Claude-Mem vs cognee
| 维度 | Claude-Mem | cognee |
|---|---|---|
| 定位 | Claude Code 插件 | 通用知识引擎 |
| 安装复杂度 | 一行命令 | 需要 6 行代码集成 |
| 记忆类型 | 会话观察 | 知识图谱 |
| 压缩方式 | AI 摘要 | 图结构提取 |
| 检索方式 | 向量 + FTS | 图遍历 + 向量 |
| 适用场景 | 单用户开发 | 多 Agent 系统 |
9.2 Claude-Mem vs 传统 RAG
| 维度 | Claude-Mem | 传统 RAG |
|---|---|---|
| 数据来源 | 自动捕获 | 手动导入 |
| 更新频率 | 实时 | 批量 |
| 压缩 | AI 原生 | 无/简单分块 |
| Token 效率 | 渐进式披露 | 一次性返回 |
| 上下文感知 | 项目/会话级别 | 全局 |
十、实战应用场景
10.1 场景一:长期项目维护
痛点:一个项目维护了 6 个月,每次新会话都要重新解释架构。
Claude-Mem 解决方案:
Day 1:
- Claude-Mem 自动记录:项目架构、技术栈、编码规范
Day 90:
- 新会话启动
- Claude-Mem 自动注入:
"📅 Project Context (Last 90 days)
- Architecture: Monorepo with 3 packages
- Tech stack: TypeScript + React + Node.js
- Key decisions: Using PostgreSQL over MongoDB for..."
- Claude 立即理解项目背景,无需重复解释
10.2 场景二:Bug 修复记忆
痛点:之前解决过类似的 bug,但不记得具体方案。
Claude-Mem 解决方案:
用户:这个数据库连接超时的问题之前遇到过吗?
Claude:[自动检索记忆]
是的,我们在 2026-04-15 遇到过类似问题。当时的解决方案是:
1. 根本原因:连接池配置过小(只有 5 个连接)
2. 解决方案:将 pg-pool 的 max 从 5 调整到 20
3. 相关文件:src/config/database.ts
需要我帮你检查当前配置吗?
10.3 场景三:代码审查连续性
痛点:每次代码审查都要重新说明审查标准。
Claude-Mem 解决方案:
Day 1: 定义代码审查标准
- Claude-Mem 记录:命名规范、架构约束、性能要求
Day 30: 新的 PR 审查
- Claude-Mem 自动注入之前的审查标准
- Claude 按照既定标准进行审查,保持一致性
十一、性能优化与最佳实践
11.1 Token 消耗优化
// 优化配置示例
{
"compressionModel": {
"model": "claude-3-haiku", // 使用快速模型压缩
"maxOutputTokens": 150 // 限制压缩输出
},
"contextInjection": {
"maxTokens": 3000, // 限制注入总量
"strategy": "progressive" // 渐进式披露
},
"searchDefaults": {
"limit": 5, // 默认返回 5 条
"minScore": 0.6 // 过滤低相关性结果
}
}
11.2 存储优化
-- 定期清理旧数据
DELETE FROM observations
WHERE created_at < datetime('now', '-90 days')
AND type NOT IN ('decision', 'architecture');
-- 压缩数据库
VACUUM;
-- 重建 FTS 索引
INSERT INTO observations_fts(observations_fts) VALUES('optimize');
11.3 最佳实践清单
- 定期导出备份:
curl http://localhost:37777/api/export > backup.json - 设置隐私标签:排除敏感文件和目录
- 调整压缩频率:根据会话活跃度调整
- 监控存储大小:定期清理过期记忆
- 使用正确的模式:中文用户选择
code--zh
十二、总结与展望
12.1 Claude-Mem 的核心价值
Claude-Mem 通过三个关键创新解决了 AI 编程助手的记忆问题:
- AI 压缩:从"存日志"变成"造记忆",25 倍压缩率
- 混合检索:向量 + 全文双引擎,精准定位相关记忆
- 渐进式披露:三层工作流,10 倍 Token 节省
12.2 技术启示
Claude-Mem 的成功给我们带来几个重要启示:
- 记忆比存储更重要:AI Agent 需要的不是数据库,而是认知系统
- 压缩是核心能力:只有压缩后的记忆才能高效利用
- 上下文是稀缺资源:Token 效率决定 Agent 实用性
12.3 未来展望
随着 AI Agent 的普及,记忆系统将成为基础设施的核心组件。Claude-Mem 的架构为这个方向提供了重要参考:
- 跨 Agent 记忆共享:团队级别的知识复用
- 记忆联邦学习:在保护隐私的前提下共享抽象知识
- 情感与偏好建模:不只是记住"做了什么",还要记住"喜欢怎么做"
附录:快速上手
安装
# 方式一:一键安装
npx claude-mem install
# 方式二:Claude Code 插件市场
/plugin marketplace add thedotmack/claude-mem
/plugin install claude-mem
# 方式三:OpenClaw 网关
curl -fsSL https://install.cmem.ai/openclaw.sh | bash
验证安装
# 查看 Worker 状态
curl http://localhost:37777/api/status
# 打开 Web Viewer
open http://localhost:37777
常用命令
# 搜索记忆
curl -X POST http://localhost:37777/api/search \
-H "Content-Type: application/json" \
-d '{"query": "bug", "limit": 5}'
# 导出数据
curl http://localhost:37777/api/export > backup.json
# 查看配置
cat ~/.claude-mem/settings.json
项目地址:https://github.com/thedotmack/claude-mem
官方文档:https://docs.claude-mem.ai/
许可证:AGPL-3.0
Claude-Mem:让 AI 从"短记忆天才"变成"长记忆伙伴"。