对于任何一个与大型语言模型(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 {
邀请