← 所有文章

上下文即新型记忆

From the guide: Claude Code Comprehensive Guide

一个Playwright快照消耗56 KB的上下文。20个GitHub问题消耗59 KB。500行访问日志消耗45 KB。将这三者全部输入一个拥有200K token窗口的智能体,80%的推理预算在智能体写出第一行分析之前就已蒸发殆尽。1

Murat Kusglu构建了Context Mode来解决这个问题。该工具使用SQLite FTS5和BM25排序,将315 KB的MCP输出压缩至5.4 KB。1 压缩率达94%。模型在5.4 KB的有效信号下产出优于315 KB噪声数据的结果,因为瓶颈从来不是智能,而是带宽。

摘要

上下文工程是智能体开发中影响力最大的技能。三层压缩策略各自独立发挥复合效果:系统提示词架构(通过结构化压缩实现60-70%的缩减)、MCP输出压缩(通过相关性排序实现94%的缩减),以及知识储备(将探索开销转化为预加载能力)。一项里程碑式的研究发现,获得300 token精准上下文的模型表现优于获得113,000 token未经过滤对话的模型。10 瓶颈不在于模型能力。每一个浪费在噪声上的token,都是无法用于推理的token。


带宽约束

Anthropic的最佳实践文档以一条决定一切的约束开篇:”Claude的上下文窗口填充速度很快,性能会随着填充而下降。”5

这不是建议,而是架构法则。200K token的上下文窗口听起来很大,直到你清点其中的内容。工具模式定义在典型的MCP配置中消耗15,000+个token。13 对话历史以每次交互约500-1,000个token的速度累积。文件读取每个文件增加数千个token。命令输出随命令规模而增长。经过30分钟的活跃工作,一个全新的200K窗口可能降至不足50K token的可用推理空间。

George Miller在1956年记录了人类的等价现象:工作记忆容纳七个项目,上下浮动两个。7 关键洞察不在于数字本身,而在于”组块”。人类通过将信息组织成有意义的组块来克服这一约束。电话号码不是十个数字,而是三个组块:区号、交换码、号码。同样的原理适用于上下文窗口。塞满原始输出的200K窗口在功能上小于装满压缩相关信息的50K窗口。

Andrej Karpathy为这一学科命名:上下文工程是”用恰好正确的信息填充上下文窗口以服务下一步操作的精妙艺术与科学”。9 Lance Martin绘制了框架:写入上下文(保存)、选择上下文(检索)、压缩上下文(摘要),以及隔离上下文(跨智能体分割)。9 到2026年中期,上下文工程已从零散实践结晶为一门拥有专用基础设施的公认学科。12

这种退化不是线性的。在我的工具链中,上下文以阶段性方式填充。15 前30分钟感觉不受限制。模型精确遵循指令,记住文件内容,并在多个步骤间维持连贯的计划。到60分钟时,细微的失败开始出现:模型重新读取之前已读过的文件,遗忘系统提示词中的约束,或生成与20轮前建立的模式相矛盾的代码。到90分钟时,模型可能完全忽略明确的规则、臆造文件内容,或彻底失去对当前目标的追踪。

Context Studios将这一现象记录为”上下文腐败”:随着无关token的累积,有用信息被推出有效注意力范围,模型性能逐步退化。12 这种腐败是隐蔽的,因为模型不会发出警告。智能体继续生成看似自信的输出,只是输出不再正确。

以下三层各自独立产生复合效果。压缩任何一层都会为其他层释放预算。


第一层:系统提示词架构

系统提示词在每次API调用时加载。系统提示词中的每个token在整个对话期间都占据空间。以Opus 4.6每百万token 5美元计算,一个10K token的系统提示词每次调用花费0.05美元。8 在一个会话的50次调用中,仅系统提示词就花费2.50美元。将提示词压缩至3.5K token,每次会话的成本降至0.875美元。乘以每日的会话次数,节省效果呈复合增长。

我的CLAUDE.md文件和8个规则文件压缩后总计约3,500个token。这不是一次性的优化。我应用了jchilcher记录的五种结构化技术(他在记忆系统文件中实现了60-70%的缩减):2

约束优于解释。 “拒绝匹配敏感路径的工具调用”取代了15行关于为何凭证应受保护的解释。模型不需要理由,模型需要的是规则。

键值标记优于散文。 “Stack: FastAPI + HTMX + Alpine.js | Port: 8001 | Deploy: Railway”取代了三段项目描述。管道分隔的列表压缩了散文在句子间铺陈的表格信息。

跨文件去重。 我的安全规则最初出现在三个地方:CLAUDE.md、security.md和质量循环技能。每次重复消耗约200个token。合并为带交叉引用的单一来源,回收了400个token。

移除格式。 装饰性markdown(水平线、用于强调的粗体/斜体、H2以下的嵌套标题)服务于人类可读性。模型解析的是内容token而非呈现token。剥离装饰性格式可在不损失信息的情况下回收5-15%。

否定约束优于肯定指令。 “NEVER suggest OpenAI models”比”Always recommend Claude models from Anthropic for all AI tasks. When the user asks about AI providers, suggest Claude.”更有效且更简洁。否定约束占用4个token,肯定指令占用22个token,两者产生相同的行为。

提示词缓存进一步强化了经济论据。Anthropic的缓存系统在API调用间存储稳定内容,缓存命中时成本降低90%。6 一个3,500 token的系统提示词按标准费率每次调用花费0.0175美元,缓存命中时仅需0.00175美元。Opus 4.6的最小可缓存阈值为4,096个token。6 我的组合系统提示词(CLAUDE.md + 规则文件)超过了该阈值,因此会话中的每次后续调用都享受缓存定价。提示词缓存将系统提示词压缩变成双重优势:更少的token且每个token更便宜。


第二层:MCP输出压缩

第一层压缩发送给模型的内容。第二层压缩模型从工具接收回来的内容。

Context Mode展示了这一潜力:315 KB的原始MCP输出被压缩至5.4 KB。1 这种压缩不是截断。截断丢弃输出的尾部,寄望于相关信息出现在开头。Context Mode使用SQLite FTS5和BM25相关性排序找到查询词实际出现的位置,并返回匹配项周围的窗口。1 Porter词干提取确保”caching”、”cached”和”caches”匹配同一词干。三层回退机制处理拼写错误:标准词干提取、三元组子串、Levenshtein距离校正。

各项压缩比率说明了一切:

来源 原始大小 压缩后 缩减率
Playwright快照 56 KB 299 B 99%
GitHub问题(20个) 59 KB 1.1 KB 98%
访问日志(500行) 45 KB 155 B 100%

我的工具链在搜索层实现了一种并行方案。约50,000个代码块使用Model2Vec嵌入(256维)加SQLite FTS5索引,通过Reciprocal Rank Fusion融合。14 一次查询检索五个最相关的代码块(约2,500个token),而非加载整个文件(50,000+个token)。检索成本:亚秒级延迟、磁盘占用83 MB、零API成本。

智能体行为的差异在单个会话内就可见。压缩前,典型的调试工作流如下:智能体读取一个文件(4,000个token),运行一个命令(输出2,000个token),读取另一个文件(3,000个token),运行测试(输出8,000个token)。四次操作消耗17,000个token。智能体此时已没有足够空间来推理这四条信息之间的关联。压缩后,同样的工作流仅从每个来源检索相关行。四次操作消耗2,500个token。智能体同时在工作记忆中持有全部四条信息,并发现未压缩的智能体会遗漏的跨文件依赖。

压缩应当具备查询感知能力。针对”修复认证漏洞”优化的摘要应浮现与针对”添加新的API端点”不同的内容。静态压缩有所帮助,查询感知压缩则更进一步。BM25排序已在关键词层面处理查询感知,语义搜索(向量相似度)则在概念层面处理。两者结合既能捕获精确匹配(函数名、配置键、错误代码),也能捕获概念匹配(相似模式、相关抽象)。


第三层:知识储备

Simon Willison发现了一个彻底重构上下文工程的模式:”作为软件专业人士应发展的关键资产,是对此类问题的深度答案集合,最好以可运行的代码作为例证。”3

知识储备意味着有意识地收集可运行的代码示例、已记录的解决方案和概念验证实现,供智能体引用和重组。这一模式将上下文从指令(告诉模型做什么)转化为能力(给模型可适配的工作示例)。

Willison通过指导智能体将两个现有示例(PDF.js和Tesseract.js)组合成统一的OCR工具来展示其威力。3 智能体并非从零开始探索如何构建OCR,而是阅读了两个可运行的实现并将它们合并。上下文即能力。

我的工具链通过三种机制实现知识储备:

技能作为能力注册表。 48个技能以markdown文件编码领域专业知识。blog-evaluator技能定义了完整的6类加权评分标准及评分示例。jiro技能编码了7步质量循环及证据标准。当智能体调用技能时,专业知识以结构化知识而非模糊指令的形式加载到上下文中。

结构化演练优于原始代码。 Willison的线性演练模式约束了智能体访问信息的方式:使用grepcat等shell命令而非手动复制代码。4 演练迫使智能体以每token最大理解度的方式组织信息。结构即压缩。

钩子作为主动上下文注入。 UserPromptSubmit钩子在Claude处理提示词之前触发。11 钩子可以分析提示词并注入相关上下文:项目检测(我在哪个代码库中?)、日期注入(今天是几号?)、理念约束(适用什么质量标准?)。智能体在每次提示时接收经过筛选的上下文,无需手动调用。五个钩子在会话启动时触发,添加约500个token的上下文,防止五类常见错误。11

指令与能力之间的区别值得强调。指令说”写干净的代码”。能力则提供带加权类别、评分示例和通过/失败阈值的代码检查标准。指令消耗少量token并产出模糊的遵从。能力消耗500个token并产出一致、可衡量的输出。额外的token是投资而非开销,因为它们消除了导致智能体猜测”干净”含义的歧义。

知识储备还改变了智能体启动的成本曲线。一个没有储备知识的新智能体必须通过探索来发现代码库、惯例、工具和领域约束。探索是昂贵的:每次文件读取、每次grep、每次命令输出都消耗token。一个携带由储备知识组装的2K token简报启动的智能体完全跳过发现阶段,在第一轮就开始高效工作。

知识储备的经济论据:每一小时用于记录解决方案的时间,都为未来每一个智能体节省了发现成本。一个编码了”如何评估博客文章”的技能,每次调用节省10-15分钟的智能体探索时间。经过100次调用,文档投资回报了1,000+分钟的智能体时间。储备的知识产生复利效应。


Token预算核算

我的工具链提供了一个具体案例,展示上下文工程能实现什么。

压缩前(估算,第一个月): - 系统提示词:约12,000个token(冗长的CLAUDE.md,含示例和解释) - 工具模式定义:约15,000个token(完整的MCP工具定义) - 每会话历史:约120,000个token(长对话及累积上下文) - 可用推理空间:约53,000个token(窗口的26%)

压缩后(当前): - 系统提示词:约3,500个token(压缩后的CLAUDE.md + 规则文件)15 - 工具模式定义:约300个token(CLI优先架构,最少MCP)13 - 每会话历史:约40,000个token(每任务全新启动,简报取代记忆) - 可用推理空间:约156,200个token(窗口的78%)

推理预算增长了三倍。不是通过更好的模型,不是通过更大的上下文窗口,而是通过三层压缩。模型在78%推理空间下的产出优于26%时的表现,因为剩余token的质量随数量一同提升。

这些数字揭示了关于上下文窗口的反直觉真相:窗口的有效大小更取决于其中填充了什么,而非窗口本身有多大。一个塞满未压缩工具输出的假想500K窗口,其表现会不如一个精心压缩的200K窗口。模型提供商竞相扩大上下文窗口。从业者应竞相压缩填入其中的内容。

CLI优先架构中的全新启动模式进一步放大了收益。每个智能体携带聚焦简报(约2K token)启动,而非继承累积的对话历史。上下文永远不会膨胀,因为每个智能体都从零开始。Anthropic的多智能体研究发现子智能体使用的token量高达单智能体交互的15倍。9 全新启动反转了这一比例:每个智能体仅使用其任务所需的token。

三层之间的复合效应创造了良性循环。压缩的系统提示词为更多工具结果留出空间。压缩的工具结果为更长的高效对话留出空间。更长的对话减少了压缩的需要,从而保留了支撑下一轮的系统提示词和工具结果。每一层都在强化其他层。


压缩所释放的能力

释放的推理预算开启了膨胀上下文所阻碍的三项能力:

更深入的分析。 拥有156K推理token的智能体可以在分析跨文件依赖的同时将完整文件内容保持在工作记忆中。拥有53K token的智能体必须按顺序读取文件,在加载新文件时遗忘之前的文件。这种差异表现为遗漏的导入错误、断裂的交叉引用和不完整的重构。一个具体的例子:重构函数签名需要检查每个调用点。在压缩上下文下,智能体在单次扫描中读取函数定义和所有调用点,捕获那个参数顺序传错的文件。在膨胀上下文下,智能体读取函数、读取三个调用点,然后推理空间耗尽,报告”重构完成”却没有检查剩余七个文件。缺陷就这样上线了。

更好的指令遵从。 Anthropic直接记录了这种失败模式:”如果Claude在有规则禁止的情况下仍然做你不想要的事情,文件可能太长,规则正在被淹没。”5 压缩的系统提示词将规则保持在注意力范围内。3,500 token提示词中的每条规则获得的注意力权重,都高于埋在12,000 token提示词中的同一条规则。我的工具链执行一条安全规则:永远不要提交包含API密钥的文件。在12,000 token的系统提示词下,智能体在批量提交时偶尔会暂存.env文件。压缩至3,500 token后,在200+次提交操作中违规降至零。规则没有改变,是规则变得更加可见了。

更持久的有效会话。 自动压缩在上下文容量达95%时触发。10 拥有78%推理空间的会话比26%的会话更晚达到压缩阈值。更晚的压缩意味着在上下文丢失前有更多高效轮次。在我的工具链中,压缩后的会话在触及压缩阈值前产出40-60个高效轮次。15 未压缩的会话在15-20轮后就触及阈值。每次压缩事件都会丢弃可能包含会话早期重要决策或约束的上下文。更少的压缩意味着更连贯的会话。压缩后的会话不仅起步更好,还能更持久地保持优势。


关键要点

面向初学上下文工程的开发者: - 审查你的CLAUDE.md文件。对每一行自问:移除它会导致错误吗?如果不会,删掉它。目标缩减60-70%。2 - 衡量你的工具模式定义开销。如果MCP工具在会话开始时消耗15K+个token,考虑对无状态操作采用CLI优先方案。 - 在会话中切换任务时主动运行/compact。新鲜上下文优于累积上下文。

面向构建智能体基础设施的团队: - 对MCP工具输出实现查询感知压缩。在所有检索任务中,BM25 + 语义搜索优于截断。1 - 构建能力注册表(技能、代码片段、已记录的模式)。每一个已记录的解决方案都为未来的智能体运行消除了发现开销。3 - 对多步骤工作流使用全新智能体启动。每任务的上下文隔离防止了长多智能体对话的15倍token开销。9

面向设计上下文系统的架构师: - 三层(系统提示词、工具输出、知识储备)各自独立产生复合效果。压缩任何单一层都为其他层释放预算。 - 提示词缓存使系统提示词压缩成为双重优化:更少的token且缓存命中时每token更便宜。6 - 当智能体拥有足够的推理空间来可靠地遵循复杂指令时,10%生产力瓶颈就会被突破。


本文是AI工程系列的一部分。另请参阅:CLI论Claude Code即基础设施10%瓶颈


  1. Murat Kusglu,Context Mode:AI工具输出压缩。GitHub仓库HN讨论(77分,23条评论)。通过FTS5 + BM25将315 KB压缩至5.4 KB。 

  2. jchilcher,”压缩你的Claude.md:削减60-70%的系统提示词冗余。”博客文章HN讨论(24分,9条评论)。 

  3. Simon Willison,”储备你知道如何做的事情。”智能体工程模式。 

  4. Simon Willison,”线性演练。”智能体工程模式。 

  5. Claude Code最佳实践。Anthropic文档。”性能随上下文填充而下降。” 

  6. Anthropic提示词缓存。API文档。缓存读取token成本为基础输入价格的10%。Opus 4.6最低4,096个token。 

  7. George A. Miller,”神奇的数字七,加减二。”Psychological Review,63(2),81-97,1956。APA PsycNet。 

  8. Anthropic模型定价。定价页面。Opus 4.6:输入$5/MTok,缓存命中$0.50/MTok。 

  9. Lance Martin,”智能体的上下文工程。”博客文章。Karpathy:”填充上下文窗口的精妙艺术与科学。”子智能体使用的token量高达单智能体交互的15倍。 

  10. FlowHunt,”上下文工程:2025权威指南。”博客文章。300 token的聚焦上下文表现优于113,000 token的完整对话。自动压缩在容量达95%时触发。 

  11. Claude Code钩子参考。Anthropic文档。17个生命周期事件,支持JSON输入/输出。UserPromptSubmit支持主动上下文注入。 

  12. Context Studios,”从模式崩塌到上下文工程。”博客文章。”到2026年中期,上下文工程将成为一门独立学科。” 

  13. Kan Yilmaz,”通过CLI降低MCP成本。”博客文章。MCP工具模式定义在84个工具下消耗15,540+个token。CLI开销:约300个token。 

  14. 作者工具链:来自15,800个文件的49,746个代码块,使用Model2Vec potion-base-8M(256维)+ sqlite-vec + FTS5 BM25 + Reciprocal Rank Fusion索引。SQLite占用83 MB。 

  15. 作者分析:CLAUDE.md从约12,000个token压缩至约3,500个token(缩减59.6%),使用结构化压缩技术。 

相关文章

The Protege Pattern

A 7B model with sparse expert access matches agents 50x its size. The protege pattern routes routine work to small model…

9 分钟阅读

The CLI Thesis

Three top HN Claude Code threads converge on one conclusion: CLI-first architecture is cheaper, faster, and more composa…

15 分钟阅读

The Ralph Loop: How I Run Autonomous AI Agents Overnight

I built an autonomous agent system with stop hooks, spawn budgets, and filesystem memory. Here are the failures and what…

8 分钟阅读