当前位置: 首页 > news >正文

《Claude Code工程化实践》加课5 -Context Engineering :给模型正确的上下文,而不是更多的上下文

AI编程会遇到过这种情况: 开局聊得挺好,结果越聊越不对劲——它开始忘记你十分钟前说过的约束,引用一个根本不存在的文件,或者把一个早就解决掉的 bug 又"修"了一遍。你以为是模型变笨了。其实大多数时候,不是模型笨,而是喂给它的上下文出了问题。

Karpathy 说过一句话:Agent 不缺记忆,缺的是"知道自己有记忆"。

这句话背后,是整个 AI 工程范式的切换:从 Prompt Engineering(提示词工程,1.0),走向Context Engineering(上下文工程,2.0)

这篇文章是系统研究 Claude Code 后的一次完整复盘。聊一聊:什么是上下文工程、为什么它比提示词重要 10 倍、以及 5 个可以直接抄作业的上下文管理机制。


01 | 提示词工程解决"听懂",上下文工程解决"做对"

先厘清一个最常见的误解。

Prompt Engineering 关心的是:模型能不能听懂我?

于是大家研究角色扮演、思维链、Few-shot……一句话,把话说漂亮。

Context Engineering 关心的是:模型手里有没有正确的材料?

模型再聪明,如果它打开的是错误的文件、读到的是过期的需求、记住的是无关的历史,输出必然是错的。就像你让一个顶级厨师做菜,但冰箱里只有过期食材——厨艺再好也白搭。

一个 Agent 的"上下文",其实由五部分构成:

  • 短期上下文:对话历史、当前问题、工具返回结果
  • 长期记忆:全局 CLAUDE.md、自动记忆
  • 项目记忆:项目里的 CLAUDE.md、规则目录、Skills
  • 外部上下文:MCP 工具调用、Hook 注入
  • 状态持久化:子代理报告、流水线中间结果

注意,核心命题来了:

上下文不是越多越好,而是越准越好。

塞太多 → 模型注意力被稀释,关键信息淹没在噪声里。
塞太少 → 模型无从推理,只能靠猜。

上下文工程的全部艺术,就是在这两个极端之间走钢丝。


02 | 一行代码,通过率 80%:上下文工程的"神奇瞬间"

先讲一个让我印象极深的实验,来自 Karpathy 的 Autoresearch 项目。

一个自主 Agent,连续执行多轮研究任务。前面十几个版本,团队不断优化工具、优化流程,效果始终差一口气。

第 19 个版本,突破来了。改动有多大?

一行代码。

# v19 突破(仅一行代码):ctx=f"Task #{n+1}. Memory:{mem_count}tool outputs saved."

就是在 prompt 里告诉模型一句话:“这是第 N 个任务,你已经存了 M 条工具结果在记忆里。”

结果:通过率 80%,总 token 643K(基准是 641K)——额外开销只有 0.3%。

用 0.3% 的成本,换来通过率的质变。

这一行代码做的事,本质上就是上下文工程:不是给模型更多信息,而是给模型"正确的元信息"——让它知道自己手里有什么牌。

记住这个感觉,后面所有机制都是它的延伸。


03 | 五个上下文管理机制(Claude Code 实战拆解)

机制一:CLAUDE.md 四级记忆层级

Claude Code 的记忆不是一个文件,而是一套分层的记忆系统,按优先级从低到高:

层级位置存什么
用户级~/.claude/CLAUDE.md个人偏好,跨项目生效
项目级./CLAUDE.md项目 DNA,团队共享,进 git
本地级./CLAUDE.local.md本机特有,必须加 .gitignore
规则目录./.claude/rules/*.md按主题拆分的细则

设计哲学很像操作系统的配置覆盖:越具体、越局部,优先级越高。

反面教材警告:千万别把 CLAUDE.md 写成 1000 行的"项目百科全书"。它每次对话都会占住上下文窗口——你写得越全,留给真正对话的空间就越少。记忆文件的目标是"最少必要信息",不是"应有尽有"。

机制二:Skills 渐进式披露

这是最优雅的设计。一个 Skill(技能包)分三层加载:

  1. frontmatter(约 50 tokens)——启动时全量加载,只包含名字和描述,让模型"知道它存在"
  2. SKILL.md 正文(约 2K tokens)——触发时才加载
  3. references/ 参考文件——按需加载,用多少读多少

像查字典:你先翻目录,再读词条,而不是把整本字典背下来。

怎么衡量你的 Skills 设计得好不好?三个指标:

  • 加载率= 实际加载 / 总大小,理想5–15%
  • 命中率= 实际引用 / 加载总量,理想70–90%
  • 维护成本= 一次修改要动几个文件,理想1–2 个

加载率太高说明 frontmatter 写太多,命中率太低说明加载了一堆用不上的东西——这两个数一高一低,上下文就漏了。

机制三:SubAgent 上下文隔离

子代理启动时,主对话的上下文不会被带过去(除非你显式传入)。

子代理拿到的是:自己的 system prompt + 一段任务描述。然后它自己读文件、自己推理、自己干活,最后只回传一段摘要给主对话——不是全部中间过程。

这解决了什么?主对话的上下文窗口不会被"探索过程"污染。

你让子代理去排查一个 bug,它可能读了 20 个文件、跑了 10 条命令、走了 3 条弯路——这些过程对主对话毫无价值,有价值的只是结论:“bug 在 auth.ts 第 47 行,原因是 token 过期没刷新。”

隔离的意义不在于保护子代理,在于保护主对话。

机制四:Hook 上下文压缩

Hook 是在特定事件点自动触发的脚本,两种典型用法:

  • PostToolUse 自动格式化:工具跑完自动 lint/format,避免噪声输出污染后续对话
  • SubAgentStop 验收:子代理结束时自动把报告汇总到状态文件,形成持久化沉淀

一句话:让"清理上下文"这件事自动化,不依赖人的自觉。

机制五:主动压缩与清零

长对话中,Claude Code 会自动压缩早期内容(保留关键决策、文件路径、错误信息,丢弃过程性输出),你也可以手动干预:

/compact# 摘要式压缩:保留决策和结论,丢掉过程/clear# 会话清零:只留 CLAUDE.md 和项目记忆

原则只有一句话:

任务有连续性,就别 compact;发生阶段切换,就果断 clear。

最常见的翻车场景:任务做到一半无脑/compact,压缩完 Agent 忘了刚才读过什么,一切推倒重来。


04 | Token 经济学:三个立竿见影的省钱技巧

Token 消耗有三大来源:模型推理(输出)、工具调用(输入+输出)、系统提示(每次会话固定)。我们能压的主要是前两项。

三个直接能用的技巧:

① grep 优于 Read。
想确认 30 个文件里有没有某个 pattern?一条grep -rn pattern src/搞定。别让 Agent 一个个 Read——30 次工具调用,30 份文件全文进上下文,账单和注意力一起爆炸。

② git diff 优于文件全文。
Review 改动时,你只关心 diff,未改动的部分是纯噪声。

③ 批处理优于循环。
一个 Bash 调用里跑 5 条命令,比发 5 次 Bash 调用便宜 5 倍——因为系统提示只算一次。这个差距在规模化使用时会非常惊人。


05 | 进阶视野:上下文工程之后,是什么?

上下文工程不是终点。行业前沿已经在探索下一层:

Anthropic 的 Plan-Execute-Verify(PEV)闭环,把 Agent 的每一步变成可验证的工程对象:

  • Plan as Contract:规划不只是步骤分解,而是写明文件范围、预期不变量、验证命令、回滚点的"契约"
  • Sandboxed Execution:在隔离的文件系统与权限边界中执行(Daytona、E2B、OpenHands)
  • Permissioned State Transition:多级权限模型(只读 → 沙箱编辑 → 完全访问),高风险操作必须人工确认(HITL)
  • Deterministic Verification:用 Linter、测试、静态分析这些确定性手段验证,而不是让模型自说自话

另一个有意思的方向是工具 Schema 白盒化(Hermes 范式)——在工具定义里显式声明风险等级:

exportdefaultdefineTool({name:"Read",description:"Read a file from the filesystem...",input:z.object({...}),risk:"low",// ← 显式告诉 Agent 这个工具的危险等级asyncexecute({file_path}){...}});

注意那个risk: "low"。对比 Claude Code 的隐式风控(只能靠 deny 规则硬拦),这是把安全信息前置进上下文,让 Agent 自主选工具时就能参考。

如果说上下文工程是"给模型正确的材料",那 PEV 和白盒工具就是在回答下一个问题:给了材料之后,怎么保证它不乱来?——这就是 Harness Engineering(范式 3.0)的地盘了。


06 | 四个最常见的坑(踩过的人都懂)

最后,盘点一下高频翻车现场:

  1. 上下文堆太多。什么都往对话里塞,模型注意力稀释,关键信息被淹没。记住:越准,不是越多。

  2. CLAUDE.md 写成百科全书。1000 行的记忆文件占满上下文窗口,真正对话的空间被挤光。记忆文件要做减法。

  3. 压缩时机错误。长任务做到一半/compact,Agent 瞬间"失忆",刚读过的文件全部作废。阶段切换才 clear,任务连续别 compact。

  4. 描述不够详细。Skill 和工具的描述写得太简略,Agent 不知道该什么时候触发、去哪找正确的上下文,行为开始混乱。描述就是入口,入口模糊,全盘皆输。


写在最后

回到开头那个"越聊越笨"的 AI。

现在你知道了:模型没有变笨,它只是在一个被污染、被稀释、或者干脆错误的上下文里苦苦挣扎。

Prompt Engineering 的时代,我们学习"怎么跟 AI 说话"。
Context Engineering 的时代,我们学习"怎么给 AI 搭一个好的工作台"。

而后者,才是 AI 工程真正的分水岭——因为模型能力是大家共享的,上下文质量才是你自己的护城河。

那一行让通过率飙到 80% 的代码,就是最好的注脚:

给模型正确的上下文,而不是更多的上下文。


http://www.cnnetsun.cn/news/3607835.html

相关文章:

  • 【CTF-MISC-压缩包】脚本实现批量提取压缩包数据
  • GEO优化别买排名神话:广拓时代谈AI搜索真正优化什么
  • 【CTF-MISC-流量】从HTTP流中,根据图片头标识,提取图片,放到CyberChef中解析
  • 深入解析C2000 ePWM寄存器:从原理到电机控制与数字电源实战
  • HarmonyOS应用实战-启示散页-19-空态不是一句暂无数据:给题库、收藏和历史分别设计可恢复入口
  • 技术海报/博文封面没质感?5款艺术字体+配色排版实战技巧!职场人导航还有更多惊喜!
  • C语言-字符函数和字符串函数
  • 园区除雪设备分类
  • 嵌入式系统硬件CRC控制器:原理、模式与应用实战
  • RSA非对称加密在软件授权验证中的原理与应用:以Beyond Compare为例
  • 【单片机毕业设计推荐】 基于 STM32 的智能恒温除湿消毒柜控制系统设计与实现,基于 STM32 的物联网智能柜体环境监测与调控系统设计(013003)
  • 文献综述写不下去?通义千问智能降维技巧来了,1小时生成逻辑闭环框架,导师当场点赞
  • 从零接触FastAPI框架,今日学习day04
  • mmdetection3D与NuScenes数据集实战指南
  • 易拉罐正反面识别数据集下载,支持yolo,coco json,pasical voc xml格式的标注信息,平均正确识别率为99.5%,训练集2373张图片
  • Profinet--TIAPortal V19安装与项目实战指南
  • 智能查重工具革新:从算法原理到论文降重实战
  • Llama2架构解析与工程实践优化指南
  • verilog HDLBits刷题[Counters]“Exams/ece241 ”---Counter 1000
  • 法律AI智能体架构设计与性能调优实战
  • ping和traceroute
  • 软考全科目学习资料完全免费分享
  • Cortex-M4 FPU硬件浮点单元:原理、配置与嵌入式实时系统优化实践
  • TM4C129XNCZAD实战:PWM、QEI与ADC模块协同构建高精度电机控制系统
  • 电池电量计核心术语解析:从SOC到Qmax,构建精准电池管理知识体系
  • Agentic自主进化机制:合成数据与强化学习的实践
  • 【Springboot毕设全套源码+文档】基于springboot电脑商城系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • Windows转发Linux系统的X11(二):By MobaXterm
  • 电子合同ROI深度解析:制造业年省142万,三年累计节省410万
  • 【Rust自学】14.3. 使用pub use导出方便使用的API