大模型的上下文窗口并不是无限记忆;随着工具调用、文件读取、搜索结果和多轮对话不断增加,真正困难的问题不是 "能不能继续生成",而是 "哪些信息值得继续保留"

Claude Code 的上下文管理可以概括为六个部分:全局上下文窗口、渐进式加载、小模型总结、子 agent、分层压缩,以及基于磁盘的上下文恢复

全局上下文窗口:

每次请求发送给模型时,Claude Code 会构造一个全局上下文窗口,其中包含几类基础信息:

  • Claude Code 的系统提示词
  • 当前会话中的用户需求和历史消息
  • 内置工具的名称、描述和调用方式
  • 当前任务所需的运行状态和关键文件信息

这些内容共同决定了模型能够理解什么、可以调用哪些工具,以及应该遵循什么行为约束

问题在于,工具调用的结果往往比对话本身增长得更快;一次搜索可能返回大量网页内容,一次文件读取可能带来数万字源码,如果所有结果都原样保留,上下文很快就会被低价值信息占满

因此,Claude Code 并不会把所有信息都永久塞进上下文,而是将上下文看成一种需要持续调度的工作内存

渐进式加载:

对于搜索、网页抓取等容易产生大段文本的操作,Claude Code 采用渐进式加载策略

例如,联网搜索得到多页结果后,系统不会把全部页面直接插入上下文,而是先将完整结果分页保存为磁盘文件;当前上下文只保留第一页结果,以及这些结果文件的目录和位置

模型因此能够先看到最重要的摘要,并知道其余内容保存在哪里;当后续任务确实需要更多细节时,再通过工具读取对应文件

这种方式有三个好处:

  • 上下文增长速度变慢

  • 大量原始资料仍然可追溯

  • 模型可以根据任务需要决定何时加载更多内容

它的核心思想不是删除信息,而是把 "当前必须知道的信息" 和 "以后可能需要的信息" 分开

小模型总结长文本:

渐进式加载解决了原始资料过多的问题,但有些任务仍然需要理解完整文件;这时,Claude Code 会使用小模型先对长文本进行总结,再把总结结果放入主模型的上下文

例如,Web fetch 获取了一份很长的网页或技术文档,小模型可以先提取其中的主题、关键结论、接口名称和重要限制;主模型接收到的是压缩后的结构化信息,而不是整份原文

这实际上形成了一个 "模型协作" 过程:

长文本
  -> 小模型提炼
  -> 结构化摘要
  -> 主模型继续推理

小模型承担信息筛选工作,主模型保留更多上下文空间用于规划、编码和决策;当然,摘要并不等于原文,如果任务依赖精确代码、参数或上下文细节,系统仍然需要回到磁盘读取原始文件

子 agent 分担局部任务:

当一个任务需要同时分析多个模块、查阅大量源码或执行相对独立的调查时,Claude Code 可以启动子 agent

子 agent 在独立上下文中完成局部任务,例如:

  • 分析某个目录的源码结构
  • 查找某个函数的调用链
  • 研究一项技术方案
  • 检查测试覆盖情况
  • 总结某个模块的实现逻辑

子 agent 完成任务后,不会把整个过程全部复制回主上下文,而是返回一份总结;主 agent 只接收结论、证据和必要的文件位置

这相当于把一个大问题拆成多个局部问题:

主 agent
  -> 子 agent A:分析模块一
  -> 子 agent B:分析模块二
  -> 子 agent C:检查测试
  -> 汇总各个子 agent 的结论

子 agent 的价值不仅在于并行处理,更在于隔离上下文;每个子任务拥有独立的记忆空间,主上下文只保留最终结果,从而避免被大量中间推理占据

分层压缩上下文:

当上下文接近容量上限时,Claude Code 会启动压缩机制;其思路不是一次性清空历史,而是按照影响范围分层处理

第一层是局部压缩,包含 SNIP 与微压缩;系统优先裁剪冗余的工具回显、冗长命令输出、已完成的中间检索内容、重复日志与无效描述,仅将老旧工具结果替换为占位符或裁剪过期交互轮次;该层只会清理无效冗余,完整保留任务脉络、关键操作记录与当前有效上下文,几乎无损对话状态,是日常最常用的轻量化优化手段

第二层是全局压缩;当局部压缩仍然不足时,系统会对更大范围的对话历史进行总结,这属于有损压缩;通过大模型对大范围历史对话进行提炼总结,精简冗长交互过程;压缩过程中会主动舍弃细碎、重复的过程细节,但核心任务目标、关键代码改动、重要决策逻辑、当前运行状态、后续执行计划等核心信息会完整保留,保证模型依旧能衔接上下文继续推进任务;同时内置断路器保护机制,若全局压缩连续失败三次则自动终止压缩流程,避免卡死报错

可以把整个过程理解为:

原始对话与工具结果
  -> 删除重复信息
  -> 压缩局部结果
  -> 保留关键状态
  -> 必要时生成全局摘要

压缩的难点在于判断什么是 "重要信息";通常需要优先保留用户目标、已经确认的事实、修改过的文件、失败原因、待完成事项和关键约束,而不是简单按照时间删除最早的消息

把上下文状态写入磁盘:

上下文压缩并不能解决所有问题;如果终端关闭、会话中断,或者电脑重新启动,仅依赖内存中的对话历史仍然不够

Claude Code 会把任务状态、工作文件和中间结果保存到磁盘;恢复任务时,系统重新读取最新状态,并加载磁盘文件目录,让模型重新建立当前工作的整体视图

这是一种 "外部记忆" 机制:

当前上下文:负责即时推理
磁盘文件:负责长期保存
目录索引:负责快速定位
摘要信息:负责恢复任务状态

因此,长任务不必完全依赖单次会话的上下文窗口;即使中途退出,也可以通过状态文件、代码变更和结果目录恢复工作

这套设计解决了什么问题:

Claude Code 的上下文管理并不是单一的 "自动截断",而是一套组合策略:

  • 用全局上下文提供稳定的系统能力
  • 用渐进式加载控制工具结果的增长
  • 用小模型总结长文本
  • 用子 agent 隔离局部任务
  • 用局部压缩清理冗余信息
  • 用全局压缩保留长期任务状态
  • 用磁盘文件实现跨会话恢复

这些机制共同构成了一种分层记忆系统;主模型负责决策和协调,小模型负责提炼,子 agent 负责局部探索,磁盘负责长期保存,上下文窗口则只保留当前最值得关注的信息

对于 Agent 系统来说,真正重要的并不是盲目扩大上下文窗口,而是建立一套信息调度机制;只有让信息能够被分层加载、压缩、外置和恢复,Agent 才能在长时间运行、频繁调用工具和复杂代码分析中保持稳定

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐