Claude Code长期记忆:优雅的上下文管理

2025-8-5 12:50

对于任何一个与大型语言模型(LLM)打过交道的开发者来说,上下文(Context)管理都是一个绕不开的核心问题。它不仅决定了 AI 的智能程度,也直接关系到系统的性能和成本。一个天然的、不断累加对话历史的方案,很快 ...

对于任何一个与大型语言模型(LLM)打过交道的开发者来说,上下文(Context)管理都是一个绕不开的核心问题。它不仅决定了 AI 的智能程度,也直接关系到系统的性能和成本。一个天然的、不断累加对话历史的方案,很快就会在 Token 限制和高昂的 API 调用费用面前碰壁。


Claude Code 的工程师显然深谙此道。他们没有选择暴力堆砌,而是设计了一套精巧的、多层级的上下文管理系统,堪称“优雅”的典范。

这套系统不仅实现了“过目不忘”的长期记忆,还引入了“适度遗忘”的艺术,在信息保真度与性能开销之间找到了一个绝佳的平衡点。

本文将深入剖析 Claude Code 的“数字记忆宫殿”,重点解读其三层记忆架构、核心的 wU2 压缩器以及那个神秘的“92%魔法阈值”,希望能为正在构建 AI 应用的你提供一些有价值的参考和启发。

🏛️ 三层记忆架构:从瞬时到永恒

Claude Code 的上下文管理系统并非铁板一块,而是借鉴了认知科学中的记忆模型,构建了一个由短期、中期和长期记忆协同工作的三层式(3-Tier)架构。


第1层:短期记忆(Short-Term Memory)- 高速工作区

短期记忆层就像是 CPU 的 L1 缓存,为当前对话提供了一个高速、低延迟的“工作台”。它存储了最近的、未经处理的对话消息。

  • 实现方式:一个简单的消息队列(Message Queue),保证对最新消息的 O(1) 访问效率。
  • 核心功能:实时追踪当前对话的 Token 使用量,为后续的压缩决策提供依据。

为了提升性能,Token 使用量的检查并非从头遍历整个队列。Claude Code 的 VE 函数采用了一个非常聪明的策略:反向遍历。因为 Token 的使用情况统计通常包含在最新的 assistant 回复中,从后往前查找能以 O(k) 的时间复杂度(k 通常远小于 n)快速定位,极大地优化了效率

HY5 函数:智能过滤的三重检查机制

在反向遍历过程中,VE 函数调用 HY5 函数来确保获取的 Token 使用信息是有效和准确的。HY5 函数实现了一套严格的三重检查机制:

// Claude Code 短期记忆核心逻辑class ShortTermMemory {
  constructor() {
    this.messages = []; // O(1) 访问的消息队列this.maxTokens = 200000; // 动态Token限制this.compressionThreshold = 0.92; // 92% 压缩触发阈值
  }

  // VE函数的核心:从最新消息反向查找Token使用情况getCurrentUsage() {
    console.log('🔍 Checking memory usage...');
    let totalTokens = 0;
    // 从后往前遍历,因为usage信息通常在最近的AI回复里for (let i = this.messages.length - 1; i >= 0; i--) {
      const message = this.messages[i];
      if (message.usage) {
        totalTokens += this.calculateTotalTokens(message.usage);
        break; // 找到即停止,避免不必要的遍历
      }
    }
    return {
      used: totalTokens,
      total: this.maxTokens,
      percentage: totalTokens / this.maxTokens
    };
  }

  // yW5函数:检查是否需要启动压缩needsCompression() {
    const usage = this.getCurrentUsage();
    if (usage.percentage >= this.compressionThreshold) {
      console.log(`🚨 Memory usage at ${Math.round(usage.percentage * 100)}%, triggering compression!`);
      return true;
    }
    return false;
  }

  // zY5函数:精确的Token计算calculateTotalTokens(usage) {
    return usage.input_tokens +
           (usage.cache_creation_input_tokens || 0) +
           (usage.cache_read_input_tokens || 0) +
           usage.output_tokens;
  }
}
// Claude Code 短期记忆核心逻辑class ShortTermMemory {
constructor() {
    this.messages = []; // O(1) 访问的消息队列this.maxTokens = 200000; // 动态Token限制this.compressionThreshold = 0.92; // 92% 压缩触发阈值
  }

// VE函数的核心:从最新消息反向查找Token使用情况getCurrentUsage() {
    console.log('🔍 Checking memory usage...');
    let totalTokens = 0;
    // 从后往前遍历,因为usage信息通常在最近的AI回复里for (let i = this.messages.length - 1; i >= 0; i--) {
      const message = this.messages[i];
      if (message.usage) {
        totalTokens += this.calculateTotalTokens(message.usage);
        break// 找到即停止,避免不必要的遍历
      }
    }
    return {
邀请

路过

雷人

握手

鲜花

鸡蛋

全部回复(0)