深度拆解 Claude Code:Agent 架构与五层上下文管理机制
深度拆解 Claude Code:Agent 架构与五层上下文管理机制 🧠
近两年 AI 编程工具迭代迅猛,从最初的代码补全到如今的全流程自主编码,Claude Code 无疑是其中最具代表性的产品之一✨。作为 Anthropic 官方推出的 Agent 化编程工具,它既不是简单的聊天增强版 Claude,也不是传统 IDE 补全工具的延伸,而是一套完整的本地编程智能体系统。
很多开发者使用时会发现:刚开启会话时 Claude Code 精准高效,长时间调试后却容易"失忆"、重复犯错、忽略前置要求——这背后本质上是上下文窗口的管理逻辑在起作用📜。本文将基于 Anthropic 官方文档与开源架构分析,系统拆解 Claude Code 的核心运行原理,以及它被行业广泛借鉴的渐进式上下文管理机制。
一、先搞懂本质:Claude Code 不是聊天机器人 🤖
在谈技术细节之前,我们需要先明确一个核心定位:Claude Code 是一套运行在本地的 Agent 运行框架(Agent Harness),底层调用 Claude 大模型,上层封装了完整的自主执行循环、工具链与上下文调度系统。
普通的 Claude 对话只会返回文本或工具调用指令;而 Claude Code 负责完整的执行闭环:校验权限、执行本地工具、管理会话状态、控制上下文容量、循环驱动任务直到完成。它的核心能力不是"回答代码问题",而是"自主完成编码任务"💻。
根据 Anthropic 官方产品页描述,Claude Code 可以自主完成代码库检索、多文件修改、测试执行、Git 提交、PR 创建等全流程工作,如今 Anthropic 内部大部分代码都由 Claude Code 参与编写,工程师更多聚焦架构设计与任务编排。
二、核心引擎:单线程 Agent Loop 循环 🔁
Claude Code 的心脏是一个极简的单线程主循环(Master Loop)。不同于复杂的多 Agent 编排系统,它选择了最朴素也最可控的 while 循环架构,所有智能决策完全交给底层大模型,框架本身只负责执行与状态维护。
完整的一轮执行流程(Turn)
每一次任务迭代都遵循标准的「感知-决策-行动-观察」闭环:
- 上下文组装:将系统指令、工具定义、会话历史、已加载文件、工具返回结果合并为完整的消息队列
- 模型推理:将消息发送给 Claude 模型(Sonnet/Opus 系列),获取响应
- 分支判断:
- 若返回自然语言回答:任务结束,展示结果给用户
- 若返回工具调用(tool_use):进入执行流程
- 权限校验:根据操作风险等级,决定直接执行、静默执行还是请求用户确认🔐
- 本地执行:调用对应工具读取文件、修改代码、执行终端命令或 Git 操作
- 结果回写:将工具输出封装为工具结果消息,追加到会话历史
- 上下文预检:上下文管理器检查 Token 占用量,按需执行清理或压缩
- 进入下一轮循环,直到模型不再调用工具,或用户主动中断
这个设计的精妙之处在于:框架本身不做任何意图判断与路径规划,所有决策都由模型自主完成。每一轮工具执行的结果都会完整反馈给模型,让它可以根据实际执行情况动态调整策略,而非严格遵循预先制定的计划。
原生工具集:Agent 的手和眼 👀
Claude Code 没有采用预构建向量库的 RAG 方案,而是赋予模型一整套本地文件与终端工具,让它像人类开发者一样主动迭代检索代码库:
glob:按通配符扫描目录结构,缩小检索范围 📂grep:关键词与正则搜索,定位目标代码片段 🔍read:读取完整文件内容载入上下文 📄edit/write:精准差分修改或新建文件,避免整文件重写 ✏️bash:执行终端命令、运行测试、构建项目 ⚙️git:查看提交记录、diff 对比、分支管理 🌿
检索的天然分层逻辑(glob → grep → read)让模型只会按需加载必要的文件,从源头减少上下文的无效占用。
三、上下文窗口:Claude 的临时工作台 📋
上下文窗口是 Claude Code 最核心的资源,也是性能退化的根源。它就像一张开发者的工作台,所有当前任务相关的信息都要摆在上面才能被模型"看见"。
上下文的完整构成
每次发送给模型的请求,都包含四个部分的内容:
-
系统前缀(System Block)
- Agent 角色定义、编码规范、安全边界
- 全部工具的 Schema 定义与使用规则
- 项目 CLAUDE.md 全局配置规则
- 这部分固定不变,通常开启 Prompt 缓存优化成本,压缩策略绝对不会改动这部分内容⚡
-
会话历史(Conversation History)
- 用户的每一条提问
- 模型的每一次回复与工具调用请求
- 所有工具的返回结果(文件内容、命令输出等)
- 这是上下文膨胀的主体,也是压缩管理的核心对象
-
持久记忆注入
- Auto Memory 自动记录的用户偏好与项目规则
- 会话启动时加载的全局配置
-
输出预留空间
- 系统会预留固定 Token(默认 32K,最高可配置 64K)用于模型输出
- 这就是为什么上下文不会用到 100% 才触发压缩
目前主流 Claude 模型支持 1M Token 的上下文窗口,看似很大,但在编码场景下消耗极快⏳:一次读取上百行代码、一条命令返回几十行日志,几轮调试下来就可能消耗数十万 Token。更关键的是,根据 Anthropic 官方的上下文工程研究,上下文越满,模型对远端信息的注意力越弱,也就是常说的「上下文衰减(Context Rot)」——不是装不下,而是装太多后模型会忽略细节。
四、核心机制:五层渐进式上下文管理流水线 🛠️
Claude Code 最值得借鉴的设计,就是它的分层渐进式压缩策略:优先执行低成本、无损、可恢复的清理操作,LLM 有损摘要只作为最后兜底。整个流水线按优先级从高到低分为五层,越靠后越激进,信息损失也越大。
第一层:SnipCompact 即时轻量化裁剪 ✂️
这是每轮请求前都会执行的纯文本预处理,不调用 LLM,零额外成本:
- 删除空消息与完全重复的消息片段
- 截断超长冗余的日志输出,去除重复的报错堆栈
- 合并连续的、语义相近的助手消息
这一步几乎没有信息损失,是性价比最高的清理手段。
第二层:MicroCompact 微压缩(最常用的静默机制)📦
这是日常会话中最高频触发的压缩策略,通常在后台静默执行,用户几乎感知不到。
触发条件:上下文持续上涨,或会话闲置超过 60 分钟。
核心逻辑:
- 永远保留最近 N 轮完整对话与最新的几条工具结果
- 更早的工具返回内容(旧文件内容、历史命令输出)从上下文中移出,写入本地磁盘缓存
- 上下文中只保留简短的占位标记,提示模型旧内容已归档,需要时可重新读取
关键点在于:这是无损压缩。文件内容没有被删除,只是移出了短期工作内存;模型后续需要时可以主动重新 read 加载回来,信息完全可恢复。
第三层:Context Collapse 上下文折叠 🗂️
在任务阶段性收尾时触发,比如完成一轮代码检索分析、修复完一个 Bug 之后。
它会将一整段连续的执行流程(多次工具调用、多轮交互)折叠为一段精简的流程摘要,保留核心结论,丢弃中间的探索过程。适合任务分阶段的长会话,大幅降低历史流程的 Token 占用。
第四层:AutoCompaction 自动压缩(有损摘要分界线)⚠️
这是大多数开发者接触最多的压缩机制,也可以通过 /compact 命令手动触发。
官方默认触发阈值:上下文占用达到窗口的 78%。预留的安全缓冲区一方面用于模型输出,另一方面防止突发的大文件读取直接撑爆窗口。
执行流程:
- 绝对保留部分:系统提示词、工具定义、CLAUDE.md 配置(保护 Prompt 缓存不失效)
- 完整保留部分:最近 8~10 轮完整对话,保证近期任务细节不丢失
- 摘要替换部分:对更早的全部历史,调用轻量级 Claude 模型生成结构化摘要,包含:
- 用户原始任务目标
- 已完成的工作清单
- 修改过的文件列表
- 关键决策与约束条件
- 当前进度与待解决问题
- 自动重载:压缩完成后,自动重新加载最近编辑的 5 个文件进入上下文,减少模型"失忆"
压缩完成后,摘要会被包装为一条特殊的续会消息,引导模型基于摘要继续工作。这一步属于有损压缩,细微的变量名、边缘逻辑约束可能会在摘要中丢失。
第五层:Full Compaction 紧急全量压缩(最后防线)🚨
触发阈值:Token 占用达到 92%,濒临溢出。
这是最激进的压缩策略,会极大幅度精简历史,仅保留项目概述、当前核心目标、近期修改文件清单,丢弃几乎所有中间调试细节。一般只出现在超长时间的大型重构或连续调试会话中。
五、跨会话记忆:两层持久化机制 💾
除了单次会话内的上下文管理,Claude Code 还设计了两套跨会话的持久记忆体系,避免每次启动都从零开始。
1. CLAUDE.md:人工定义的持久规则 📜
这是项目级的配置文件,会话启动时会自动加载到系统前缀中。开发者可以在里面写入技术栈、编码规范、目录结构说明、构建命令等固定信息,让 Claude 每次会话都遵循统一规则。
它支持分层配置:项目根目录的全局规则、子目录的路径专属规则、用户级的全局规则,还可以通过 .claude/rules/ 目录拆分多个规则文件,适合团队统一规范。
2. Auto Memory:自动学习的偏好记忆 🧩
Claude Code 会自动记录用户的修正、偏好与反复强调的要求,写入本地记忆文件。比如你不喜欢某种代码风格、要求特定的注释格式,纠正几次之后它就会自动记住,下次会话无需重复说明。
用户可以通过 /memory 命令查看、编辑或清除自动记忆内容,完全可控。
六、给开发者的工程启示 💡
Claude Code 的上下文管理设计,对于所有自研 Code Agent 的团队都有极强的参考价值,核心可以总结为五点:
- 不要预加载整个代码库,采用迭代检索(glob → grep → read)的 Agentic 模式,按需加载,从源头控制上下文膨胀
- 分层处理上下文,先做零成本的文本清理与工具结果归档,LLM 摘要只作为最后兜底,兼顾成本与信息完整性
- 区分内存与磁盘,大容量工具结果支持移出上下文、持久化本地、按需重载,实现无损"换入换出"
- 结构化摘要优于自由总结,固定模板的摘要能最大程度保留关键决策与约束,减少信息丢失
- 预留安全缓冲区,不要把上下文用到 100%,既防止溢出,也避免上下文衰减导致的质量下降
结语 📝
Claude Code 的成功,从来不是因为模型本身更强,而是它在工程层面把 Agent 的执行闭环与上下文管理做到了极致。一个看似简单的循环,搭配一套分层精细的上下文流水线,就实现了可控、可靠、可长时间运行的编程智能体。
对于开发者而言,理解这套机制不只是为了用好工具,更能帮助我们在自建 Agent 系统时避开很多常见的坑——毕竟,真正决定 Agent 上限的,往往不是模型有多强,而是上下文管理做得有多精细。
📚 参考资料(附官方直达链接)
-
Anthropic 官方|Claude Code 产品概述
-
Anthropic 官方|Claude Code Memory(CLAUDE.md & Auto Memory)机制
-
Anthropic 官方|上下文窗口核心原理(本文 Context Rot、Token 容量核心依据)
-
Anthropic 官方|Context Compaction 上下文压缩
-
Anthropic 官方|Context Editing 上下文编辑原理
-
Anthropic 官方|Effective Context Engineering 上下文工程深度指南
-
arXiv 论文|Dive into Claude Code: The Design Space of Today’s and Future AI Agent Systems
更多推荐



所有评论(0)