Claude-Mem高性能分布式AI记忆系统架构设计与调优指南

【免费下载链接】claude-mem Persistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More 【免费下载链接】claude-mem 项目地址: https://gitcode.com/GitHub_Trending/cl/claude-mem

Claude-Mem是一款面向AI辅助编程的持久化上下文记忆系统,通过捕获代理在会话期间的所有操作,利用AI进行智能压缩,并将相关上下文注入未来的会话中。该系统采用现代化分布式架构设计,支持与Claude Code、OpenClaw、Codex、Gemini、Hermes、Copilot、OpenCode等多种AI工具无缝集成,为开发者提供跨会话的智能记忆管理能力。

技术架构概述

Claude-Mem采用分层微服务架构,将核心功能解耦为独立的可扩展组件。系统基于TypeScript/Node.js技术栈,利用SQLite作为持久化存储层,Express.js提供RESTful API服务,并通过Server-Sent Events实现实时数据同步。

核心架构组件

插件钩子系统:作为Claude Code插件的生命周期管理器,包含Setup版本检查及5个核心生命周期钩子(SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、Stop),通过stdin与AI代理进行双向通信。

工作进程服务:基于Express.js的HTTP API服务,运行在用户级端口(默认37700 + (uid % 100)),负责异步处理观察数据并通过Claude Agent SDK进行AI压缩分析。

数据存储层:采用SQLite 3配合bun:sqlite原生驱动,集成FTS5全文搜索引擎,支持高效的数据查询和检索操作。

搜索工具链:提供HTTP API接口和MCP服务器,实现渐进式披露搜索机制,显著减少会话令牌消耗。

可视化界面:基于React的实时内存流查看器,通过SSE技术实现数据的实时更新和无限滚动分页。

Claude-Mem双窗口协同工作流程 Claude-Mem双窗口界面展示:左侧终端/代码编辑器与右侧网页界面的实时协同工作流程,展示CMS配置管理的技术实现

核心模块深度解析

数据库架构与优化策略

Claude-Mem的数据存储层采用SQLite 3作为核心数据库引擎,通过精心设计的表结构和索引策略确保高性能数据访问。数据库位于~/.claude-mem/claude-mem.db,采用WAL(Write-Ahead Logging)模式支持并发读写操作。

核心数据表设计

sdk_sessions表:会话跟踪表,记录活跃和已完成会话的元数据信息。通过复合索引优化查询性能:

CREATE TABLE sdk_sessions (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  sdk_session_id TEXT UNIQUE NOT NULL,
  claude_session_id TEXT,
  project TEXT NOT NULL,
  prompt_counter INTEGER DEFAULT 0,
  status TEXT NOT NULL DEFAULT 'active',
  created_at TEXT NOT NULL,
  created_at_epoch INTEGER NOT NULL,
  completed_at TEXT,
  completed_at_epoch INTEGER,
  last_activity_at TEXT,
  last_activity_epoch INTEGER
);

observations表:工具执行记录表,采用分层字段结构存储AI代理的操作历史:

CREATE TABLE observations (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  session_id TEXT NOT NULL,
  sdk_session_id TEXT NOT NULL,
  claude_session_id TEXT,
  project TEXT NOT NULL,
  prompt_number INTEGER,
  tool_name TEXT NOT NULL,
  correlation_id TEXT,
  
  -- 分层字段设计
  title TEXT,
  subtitle TEXT,
  narrative TEXT,
  text TEXT,
  facts TEXT,
  concepts TEXT,
  type TEXT,
  files_read TEXT,
  files_modified TEXT,
  
  created_at TEXT NOT NULL,
  created_at_epoch INTEGER NOT NULL,
  
  FOREIGN KEY (sdk_session_id) REFERENCES sdk_sessions(sdk_session_id)
);
FTS5全文搜索优化

系统采用SQLite FTS5虚拟表实现高性能全文搜索,通过自动同步触发器保持数据一致性:

-- 观察数据全文搜索表
CREATE VIRTUAL TABLE observations_fts USING fts5(
  title,
  subtitle,
  narrative,
  text,
  facts,
  concepts,
  content='observations',
  content_rowid='id'
);

-- 自动同步触发器
CREATE TRIGGER observations_ai AFTER INSERT ON observations BEGIN
  INSERT INTO observations_fts(rowid, title, subtitle, narrative, text, facts, concepts)
  VALUES (new.id, new.title, new.subtitle, new.narrative, new.text, new.facts, new.concepts);
END;
查询性能优化策略
  1. 复合索引设计:为所有外键和频繁查询字段创建索引,包括会话ID、项目名称、创建时间等
  2. 分区查询优化:按项目和时间范围进行数据分区,减少全表扫描
  3. 连接池管理:通过bun:sqlite原生驱动实现连接复用,减少连接开销
  4. 批量操作支持:提供批量观察数据获取API,减少网络往返次数

工作进程服务架构

工作进程服务作为系统的核心处理引擎,采用Express.js构建RESTful API,通过Bun运行时进行进程管理。服务架构设计遵循单一职责原则,每个组件都有明确的职责边界。

服务端点架构

健康检查端点:提供系统状态监控和端口发现功能

// 健康检查响应示例
{
  "status": "ok",
  "uptime": 12345,
  "port": 37742
}

数据检索端点:支持分页查询、条件过滤和批量操作

// 批量观察数据获取
POST /api/observations/batch
{
  "ids": [123, 456, 789],
  "orderBy": "date_desc",
  "limit": 10,
  "project": "my-project"
}

队列管理端点:实现异步任务处理和故障恢复机制

// 队列状态监控
GET /api/pending-queue
{
  "queue": {
    "messages": [...],
    "totalPending": 5,
    "totalProcessing": 2,
    "totalFailed": 0,
    "stuckCount": 1
  }
}
进程管理策略

自动启动机制:工作进程在SessionStart钩子触发时自动启动,无需手动干预

端口分配算法:采用用户ID哈希算法避免端口冲突

// 端口计算逻辑
const defaultPort = 37700 + (process.getuid() % 100);

优雅关闭处理:支持SIGTERM信号处理,确保数据持久化完成后再退出

内存数据处理管道

Claude-Mem的数据处理管道采用生产者-消费者模式,实现高效的内存数据流转和处理。

数据流架构
钩子输入(stdin) → 数据库存储 → 工作进程服务 → SDK处理器 → 数据库更新 → 下一会话上下文注入
  1. 输入阶段:Claude Code通过stdin发送工具执行数据到钩子
  2. 存储阶段:钩子将观察数据写入SQLite数据库
  3. 处理阶段:工作进程服务读取观察数据,通过SDK进行AI处理
  4. 输出阶段:处理后的摘要写回数据库
  5. 检索阶段:下一会话的上下文钩子从数据库读取摘要
搜索管道设计
用户查询 → MCP工具调用 → HTTP API → SessionSearch服务 → FTS5数据库 → 搜索结果 → Claude代理

系统采用三层渐进式披露策略:搜索 → 时间线 → 获取观察数据,显著减少令牌消耗(约2,250令牌/会话)。

性能调优指南

数据库性能优化

索引策略优化:为所有查询条件创建复合索引,避免全表扫描

-- 复合索引示例
CREATE INDEX idx_observations_composite ON observations 
(sdk_session_id, project, created_at_epoch DESC);

查询优化技巧

  1. 使用覆盖索引减少回表操作
  2. 合理使用分页查询避免内存溢出
  3. 预编译查询语句提升执行效率
  4. 批量操作减少事务提交次数

连接池配置

// 数据库连接池配置
const db = new Database('claude-mem.db', {
  verbose: process.env.NODE_ENV === 'development',
  timeout: 5000,
  pool: {
    max: 10,
    min: 2,
    idleTimeoutMillis: 30000
  }
});

内存管理优化

观察数据缓存策略:采用LRU缓存算法缓存频繁访问的观察数据

// 内存缓存实现
const observationCache = new Map<string, Observation>();
const MAX_CACHE_SIZE = 1000;

function getObservation(id: string): Observation | null {
  if (observationCache.has(id)) {
    const observation = observationCache.get(id)!;
    // 更新访问时间
    observationCache.delete(id);
    observationCache.set(id, observation);
    return observation;
  }
  return null;
}

批量处理优化:合并多个观察数据请求,减少数据库访问次数

// 批量处理实现
async function processBatchObservations(observations: Observation[]): Promise<void> {
  const batchSize = 50;
  for (let i = 0; i < observations.length; i += batchSize) {
    const batch = observations.slice(i, i + batchSize);
    await db.transaction(() => {
      batch.forEach(obs => insertObservation(obs));
    });
  }
}

网络性能优化

HTTP连接复用:使用keep-alive连接减少TCP握手开销

// Express.js连接复用配置
const app = express();
app.set('keepAliveTimeout', 65000);
app.set('headersTimeout', 66000);

响应压缩优化:启用gzip压缩减少网络传输量

import compression from 'compression';
app.use(compression({
  level: 6,
  threshold: 1024
}));

SSE连接管理:实现连接池管理,避免资源泄露

// SSE连接管理器
class SSEManager {
  private connections = new Map<string, Response>();
  
  addConnection(sessionId: string, res: Response): void {
    this.connections.set(sessionId, res);
  }
  
  removeConnection(sessionId: string): void {
    this.connections.delete(sessionId);
  }
  
  broadcast(event: string, data: any): void {
    this.connections.forEach(res => {
      res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
    });
  }
}

监控与运维方案

系统健康监控

进程健康检查:定期检查工作进程状态,自动重启异常进程

// 健康检查实现
class HealthMonitor {
  async checkWorkerHealth(): Promise<HealthStatus> {
    try {
      const response = await fetch(`http://127.0.0.1:${port}/health`, {
        timeout: 5000
      });
      return await response.json();
    } catch (error) {
      return { status: 'unhealthy', error: error.message };
    }
  }
  
  async restartIfUnhealthy(): Promise<void> {
    const status = await this.checkWorkerHealth();
    if (status.status !== 'ok') {
      await this.restartWorker();
    }
  }
}

队列监控告警:实时监控处理队列状态,预警积压风险

// 队列监控
class QueueMonitor {
  async getQueueMetrics(): Promise<QueueMetrics> {
    const pending = await this.getPendingCount();
    const processing = await this.getProcessingCount();
    const stuck = await this.getStuckCount();
    
    return {
      pending,
      processing,
      stuck,
      health: this.calculateHealthScore(pending, processing, stuck)
    };
  }
  
  private calculateHealthScore(pending: number, processing: number, stuck: number): number {
    // 健康评分算法
    const maxPending = 100;
    const maxProcessing = 10;
    
    const pendingScore = Math.max(0, 100 - (pending / maxPending) * 100);
    const processingScore = Math.max(0, 100 - (processing / maxProcessing) * 100);
    const stuckPenalty = stuck * 20;
    
    return Math.max(0, (pendingScore + processingScore) / 2 - stuckPenalty);
  }
}

日志与追踪系统

结构化日志记录:采用JSON格式日志,便于ELK集成分析

// 结构化日志配置
import winston from 'winston';

const logger = winston.createLogger({
  level: process.env.LOG_LEVEL || 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.File({ 
      filename: 'logs/worker-error.log', 
      level: 'error' 
    }),
    new winston.transports.File({ 
      filename: 'logs/worker-combined.log' 
    })
  ]
});

性能指标收集:收集关键性能指标用于容量规划

// 性能指标收集
class MetricsCollector {
  private metrics = {
    observationProcessingTime: new Histogram(),
    databaseQueryTime: new Histogram(),
    memoryUsage: new Gauge(),
    activeConnections: new Gauge()
  };
  
  recordObservationProcessingTime(duration: number): void {
    this.metrics.observationProcessingTime.observe(duration);
  }
  
  getMetrics(): Record<string, any> {
    return {
      observationProcessingTime: this.metrics.observationProcessingTime.get(),
      databaseQueryTime: this.metrics.databaseQueryTime.get(),
      memoryUsage: process.memoryUsage(),
      activeConnections: this.metrics.activeConnections.get()
    };
  }
}

备份与恢复策略

自动备份机制:定期备份数据库文件,支持时间点恢复

// 数据库备份服务
class DatabaseBackupService {
  async createBackup(): Promise<string> {
    const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
    const backupPath = `backups/claude-mem-${timestamp}.db`;
    
    await fs.copyFile('claude-mem.db', backupPath);
    
    // 清理旧备份
    await this.cleanupOldBackups();
    
    return backupPath;
  }
  
  private async cleanupOldBackups(): Promise<void> {
    const backups = await fs.readdir('backups');
    const sortedBackups = backups.sort();
    
    // 保留最近7天备份
    const keepCount = 7;
    if (sortedBackups.length > keepCount) {
      const toDelete = sortedBackups.slice(0, sortedBackups.length - keepCount);
      for (const backup of toDelete) {
        await fs.unlink(`backups/${backup}`);
      }
    }
  }
}

灾难恢复流程:制定完整的灾难恢复计划

  1. 数据库损坏恢复:使用SQLite的.recover命令修复损坏数据库
  2. 进程异常恢复:通过ProcessManager自动重启异常进程
  3. 数据一致性验证:定期运行完整性检查脚本

最佳实践总结

部署架构建议

生产环境配置

  • 使用专用数据库服务器分离数据存储
  • 配置负载均衡器分发API请求
  • 实施数据库读写分离策略
  • 启用HTTPS加密传输

高可用性设计

  • 部署多个工作进程实例
  • 配置数据库主从复制
  • 实现会话状态同步机制
  • 建立跨区域灾难恢复方案

性能调优要点

数据库优化

  • 定期执行VACUUM命令回收空间
  • 分析查询执行计划优化索引
  • 配置适当的WAL模式参数
  • 监控数据库文件大小增长

内存管理

  • 设置合理的观察数据缓存大小
  • 实现LRU缓存淘汰策略
  • 监控内存泄漏风险
  • 优化大对象序列化性能

网络优化

  • 启用HTTP/2协议支持
  • 配置CDN缓存静态资源
  • 优化API响应数据结构
  • 实施请求限流策略

安全加固措施

访问控制

  • 实现API密钥认证机制
  • 配置IP白名单访问限制
  • 启用请求速率限制
  • 实施SQL注入防护

数据保护

  • 加密敏感配置信息
  • 实施数据脱敏策略
  • 定期安全漏洞扫描
  • 建立安全审计日志

监控告警体系

关键指标监控

  • 系统资源使用率(CPU、内存、磁盘)
  • API响应时间和错误率
  • 数据库查询性能指标
  • 队列积压和延迟情况

告警策略

  • 设置多级告警阈值
  • 实现告警抑制机制
  • 配置多种通知渠道
  • 建立告警升级流程

通过实施上述架构设计和优化策略,Claude-Mem能够为AI辅助编程提供高性能、高可用的持久化上下文记忆服务,确保跨会话的知识连续性,显著提升开发效率。

【免费下载链接】claude-mem Persistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More 【免费下载链接】claude-mem 项目地址: https://gitcode.com/GitHub_Trending/cl/claude-mem

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐