上下文熵增与 Claude Code 架构拆解¶
Agent 在长线任务中"变笨"不是模型降级,而是缺乏上下文治理。本文拆解上下文熵增的三种污染机制,并以 Claude Code 为例解析工业级的上下文工程架构,适合关注 AI 编程工具设计和 Agent 系统工程的开发者。
目录¶
核心矛盾:上下文不是仓库,是工作台¶
上下文熵增(Context Entropy)¶
在一个缺乏状态管理的线性对话流中,随着信息堆叠,有效指令的权重会被迅速稀释。这就是「上下文熵增」。
关键认知:上下文的本质更像 CPU 高速缓存(L1 Cache),而不是底层机械硬盘。
上下文的本质
误以为:上下文 = 仓库(越大越好,能存多少存多少)
实际上:上下文 = 工作台(面积再大,堆满杂物也一样干不了活)
高速缓存的衡量标准从来不是容量
而是「命中率」——核心指令能否被高效检索
| 类比 | 仓库模式(错误) | 工作台模式(正确) |
|---|---|---|
| 核心指标 | 容量大小 | 命中率(Hit Rate) |
| 管理方式 | 无限堆叠 | 主动清理、分区 |
| 失败模式 | 空间不够 | 噪音淹没信号 |
| 扩容效果 | 线性提升 | 边际递减 |
为什么大窗口不是免死金牌¶
Anthropic 官方指南的核心原则:
"找到最小可能的高信噪比 token 集合,最大化期望结果的出现概率。"
Transformers 的自注意力(Self-Attention)机制决定了:每增加一个 token,都在消耗模型的「注意力预算」。上下文是有限资源,边际收益递减。
上海交大论文的实证数据:当上下文窗口填充率超过 50% 时,AI 性能就会下降。
上下文熵增的三种污染机制¶
1. 指令权重衰减(Instruction Authority Decay)¶
对话线性增长时,最初定下的核心约束和项目边界会被中间交互层覆盖。模型的注意力机制有天然衰减上限,指令的有效权重一旦掉到决策基准以下,基准就开始漂移。
对话轮次: 1 10 20 50 100
指令权重: ████████ ████░░░░ ██░░░░░░ █░░░░░░░ ░░░░░░░░
↑
核心约束(如"只用 TypeScript")权重持续衰减
2. 工具输出熵增(Tool Output Entropy)¶
让 AI 调工具、跑脚本、查日志,返回结果动辄几千上万。如果系统不具备流量控制和摘要过滤,主线上下文瞬间被冗长数据和报错淹没,信噪比急剧下降。
3. 缓存结构失效(Cache Structure Invalidation)¶
推理引擎依赖前缀缓存(Prefix Cache)来降本提效,这要求开头部分保持稳定。在纯聊天场景里,新指令不断往后堆,旧的上下文可能被动态截断或重组——好不容易攒下的缓存命中率直接归零。
前缀缓存依赖稳定的 token 前缀
理想情况:
[System Prompt ──────][稳定的对话开头 ──────][新内容]
↑ 缓存命中区域 ↑ 变化区域
实际情况(无治理):
[新指令插入][旧上下文被截断][系统重排 ────────]
↑ 缓存全部失效!算力成本飙升
三种机制的叠加效应¶
| 污染机制 | 直接后果 | 根因 |
|---|---|---|
| 指令权重衰减 | Agent 偏离核心目标 | 注意力机制衰减上限 |
| 工具输出膨胀 | 信噪比暴跌 | 缺乏流量控制 |
| 缓存结构失效 | 算力成本灾难 | 前缀被破坏 |
所谓的「AI 幻觉」或「逻辑断层」,放到工程视角下就是一场典型的分布式系统事故。
Claude Code 的三大治理机制¶
Claude Code(~512K 行 TypeScript,1,884 文件)的架构分析揭示:约 1.6% 是 AI 决策逻辑,98.4% 是工程约束体系。13 条设计原则围绕一个核心:上下文是最稀缺的资源。
机制一:CLAUDE.md — 不可变原指令注入¶
建立一套不可变的前缀指令注入机制。不管对话链条拉到多长,项目的核心依赖、目录结构和编码规范都会作为高优先级前缀强制注入。
Claude Code 上下文装配
┌─────────────────────────────────────┐
│ CLAUDE.md(不可变前缀) │ ← 始终在窗口顶部
│ - 项目依赖、目录结构、编码规范 │
│ - 编码约定、测试命令 │
├─────────────────────────────────────┤
│ Skills(按需加载) │ ← 匹配时注入
│ - 领域知识、工具使用流程 │
├─────────────────────────────────────┤
│ 对话历史(可控衰减) │ ← Compact 压缩
├─────────────────────────────────────┤
│ 工具输出(摘要返回) │ ← 子代理隔离
└─────────────────────────────────────┘
本质:给 Agent 设一个「认知底座」,防止在海量交互中发生方向性漂移。
机制二:子代理(Subagent)— 物理层隔离¶
子代理(Subagent)拥有独立的上下文窗口和执行循环,主线 Agent 只接收处理完的高纯度结论,而不必亲自跳进垃圾堆里检索。
子代理的信息隔离模型
主线 Agent(干净的上下文) 子代理(承受噪音)
┌──────────────┐ ┌──────────────────┐
│ 核心目标清晰 │ ← 摘要返回 ← │ 翻日志、查源码 │
│ 高信噪比 │ │ 跑测试、读大量文件 │
│ 缓存稳定 │ │ 噪音被隔离在此层 │
└──────────────┘ └──────────────────┘
对比:
❌ 无隔离:主线上下文 = 工具输出 10,000 行 → 信号被淹没
✅ 有隔离:主线上下文 += 摘要 50 行 → 信号清晰
子代理 vs 自定义 Slash Command 的选择框架:
| 选子代理 | 选 Slash Command |
|---|---|
| 生成的内容与当前对话不相关 | 生成的内容应该在当前对话中 |
| 不需要洞察执行过程 | 需要可见的执行过程 |
| 上下文昂贵的任务 | 轻量操作 |
机制三:Compact — 有损压缩与状态快照¶
当对话过长时,系统对当前任务状态进行重建而非简单截断:
Compact 的状态重建逻辑
输入(膨胀的对话历史) 输出(结构化状态快照)
┌────────────────────┐ ┌─────────────────────┐
│ 100+ 轮对话 │ │ 当前目标是什么? │
│ 大量工具输出 │ → │ 已验证的路径是什么? │
│ 重复的报错 │ │ 失败的路线是什么? │
│ 无关讨论 │ │ 关键文件列表(最近5个) │
└────────────────────┘ └─────────────────────┘
这不仅是解决上下文拥挤——更重要的是通过固定关键指令的前缀结构,优化了缓存命中概率。在生产级场景里,算力延迟和推理成本才是系统持续运转的关键。
三大机制 vs 三种污染的对应关系¶
| 污染机制 | Claude Code 解法 | 设计原则 |
|---|---|---|
| 指令权重衰减 | CLAUDE.md 不可变前缀注入 | Context as scarce resource |
| 工具输出熵增 | 子代理物理隔离 + 摘要返回 | Isolated subagent boundaries |
| 缓存结构失效 | Compact 状态快照 + 前缀稳定化 | Append-only durable state |
读取密集 vs 写入密集:大窗口的适用边界¶
大窗口在特定领域确实是刚需,但需要区分两种截然不同的场景:
场景选择决策树
大窗口适合你吗?
│
├─ 你的任务是?
│ ├─ "一次读取几万行源码做全量审查" → 读取密集型
│ │ ✅ 大窗口 = 救命稻草,全塞进内存提升全局理解
│ │
│ └─ "真实开发,边读边写" → 写入密集型
│ ⚠️ 窗口越大 × 无治理 = 噪音越多
│ ✅ 大窗口只是入场券,不是免死金牌
| 维度 | 读取密集型 | 写入密集型 |
|---|---|---|
| 典型场景 | 代码审查、合同分析 | 日常开发、系统迁移 |
| 信息流向 | 单向(读入) | 双向(读 + 写 + 错误) |
| 上下文增长 | 可控 | 指数级膨胀 |
| 大窗口效果 | 显著提升 | 无治理反而更差 |
| 关键需求 | 容量 | 治理机制 |
行业判断:上下文工程决定 Agent 上限¶
从 Prompt Engineering 到 Context Engineering¶
AI 能力演进路径
Prompt Engineering(选对词) → 一个 turn 内的准确率
Context Engineering(管好信息) → 连续 100 次 turn 的稳定率
State Management(维护状态) → Agent 长期运行的可靠性
核心转变:
"AI 不再是陪你扯淡的秘书,而是一个需要被精密管理的独立进程"
决胜点判断¶
- 模型能力决定他能答对一轮题
- 上下文工程决定他能连续稳定运行 100 次接口调用
- 未来被淘汰的绝对不是笨模型,而是只懂往上下文塞 token,不懂清理和分区的产品
最佳实践清单¶
- ✅ 用 CLAUDE.md / 项目规范文件建立不可变的认知底座
- ✅ 高噪音任务(翻日志、跑测试)通过子代理隔离
- ✅ 定期 Compact,保持上下文高信噪比
- ✅ 工具返回结果做摘要过滤,不全量灌入
- ❌ 把大窗口当仓库,无限堆叠信息
- ❌ 混用不同场景:读取密集和写入密集需要不同策略
- ❌ 期待子代理纠正不清晰的目标(先明确再委托)
参考资料¶
- Dive into Claude Code: The Design Space of Today's and Future AI Agentic Coding Tools (arXiv)
- Effective Context Engineering for AI Agents - Anthropic
- Context Management with Subagents in Claude Code - Rich Snapp
- Extend Claude Code - Official Docs
- 从 Claude Code、Manus 和 Kiro 看提示工程到上下文工程的转变 - 阿里云
相关笔记¶
- [[Claude Code]]
- [[AI Agent]]
- [[上下文工程]]