别只盯着 Prompt 了!我亲手给 Agent 装上了“大脑皮层”,彻底悟透了上下文工程的真谛
如果你还在为 Agent “聊着聊着就忘了自己是谁”而抓狂,或者被塞满几万 Token 的 Prompt 搞得晕头转向,那么这篇实战复盘就是为你准备的。
之前我们聊过了 ReAct、记忆系统和 RAG,但这些都是“零件”。真正的工程化难题在于:如何把这些零件组装成一个能长期稳定工作的系统? 这就是第九章的核心——上下文工程(Context Engineering)。
为什么你的 Agent 总是“脑子不够用”?
很多人有一个误区:觉得模型支持的 Context Window 越大越好,100K、200K 随便塞。
但现实很骨感:LLM 也有“注意力预算”。
在第九章里,我看到了一个扎心的概念:上下文腐蚀(Context Rot)。
就像人脑一样,当信息量超过某个临界点,模型的检索精度和逻辑推理能力会断崖式下跌。你塞进去的越多,它“走神”的概率就越大。
所以,上下文工程的核心不是“怎么塞更多”,而是“怎么塞得更精”。
我们要做的,是在有限的 Token 预算内,实现信号密度的最大化。
第一部分:从“提示工程”到“上下文工程”的思维跃迁
以前我们搞 Prompt Engineering,像是在写“说明书”,琢磨怎么把指令写清楚。
现在搞 Context Engineering,更像是在做“导演剪辑”。
1. 什么是 GSSC 流水线?
HelloAgents 框架里实现了一个 ContextBuilder,它把上下文构建拆解成了四个步骤,这个设计非常工业级:
- Gather(汇集):从记忆、RAG、历史对话、文件系统里把所有可能相关的信息捞出来。
- Select(选择):这是最核心的!不是所有信息都有用。它通过“相关性 + 新近性”的双重评分,把垃圾信息过滤掉。
- Structure(结构化):把选中的信息按
[Role],[Task],[Evidence],[Context]分区摆放。这不仅是给模型看,更是为了调试方便。 - Compress(压缩):如果还是超限,那就得“断舍离”。保留核心骨架,砍掉冗余细节。
2. 我的思考:为什么“结构化”这么重要?
在实战中我发现,如果把一堆乱七八糟的文本扔给 LLM,它很容易“迷路”。
但如果你告诉它:
[Evidence]
这里是检索到的事实...
[Context]
这里是之前的对话...
模型的处理效率会显著提升。清晰的边界,就是高效的推理。
第二部分:NoteTool —— 给 Agent 一本“随身笔记本”
第八章的记忆系统更像是“潜意识”,而第九章的 NoteTool 则是 Agent 的“显意识笔记”。
1. 为什么要用 Markdown + YAML?
很多框架喜欢把状态存在数据库里,但 HelloAgents 选择了文件化。
每个笔记都是一个 .md 文件,头部带 YAML 元数据:
---
id: note_001
type: blocker
tags: [refactoring, urgent]
---
这种设计太妙了:
- 人类可读:我可以直接打开文件看 Agent 在想什么。
- Git 友好:笔记的变化可以版本控制,方便回溯。
- 低耦合:不需要复杂的数据库连接,纯文本操作,稳得一匹。
2. 实战场景:长程任务的“救命稻草”
想象一个重构代码库的任务,可能要跑好几天。
如果没有 NoteTool,Agent 每次重启都失忆。
有了 NoteTool,它可以记录:
task_state:当前进度到哪了?blocker:遇到了什么坑?action:下一步该干嘛?
这种“持久化状态”的能力,才是 Agent 从“玩具”走向“工具”的关键。
第三部分:TerminalTool —— 拒绝“预加载”,拥抱“即时探索”
这是本章最让我兴奋的部分。
传统的 RAG 是把所有文档预先切分、向量化。但在代码库维护这种场景下,预加载成本高且容易过时。
TerminalTool 让 Agent 拥有了“即时探索”的能力。
它就像一个熟练的开发者,不会先把整个项目背下来,而是:
ls看看目录结构。grep搜一下关键函数。head瞥一眼文件头。cat仔细看具体实现。
1. 安全是底线
允许 Agent 执行命令是很危险的。HelloAgents 做了四层防护:
- 白名单:只允许
ls,cat,grep等只读命令,rm,sudo想都别想。 - 沙箱:限制在工作目录下,防止
cd ../../etc这种逃逸。 - 超时:防止死循环卡死系统。
- 截断:输出太大直接砍掉,保护内存。
2. JIT 上下文的威力
这种 Just-in-time (JIT) 的模式,完美解决了“上下文腐蚀”问题。
Agent 只在需要的时候加载需要的信息,永远保持轻装上阵。
第四部分:实战复盘——构建一个“代码库维护助手”
我把这三个组件串起来,做了一个 CodebaseMaintainer。
它的工作流是这样的:
- 探索阶段:用
TerminalTool扫描项目结构,生成初步印象。 - 分析阶段:用
grep找 TODO 和复杂函数,把发现的问题记入NoteTool(标记为blocker)。 - 规划阶段:读取笔记,结合
ContextBuilder整理的历史,制定下一步计划。 - 执行阶段:每走一步,更新笔记状态。
最爽的时刻:
当我第二天再运行它时,它居然说:“昨天我们发现 order_service.py 嵌套太深,今天我们来重构它。”
那一刻,我感觉它真的“活”了。
第五部分:深度思考与避坑指南
1. 别迷信“大窗口”
我在测试中发现,即使模型支持 128K,一旦上下文超过 20K,它的指令遵循能力就开始下降。
结论:能用 ContextBuilder 压缩到 5K 解决的,绝不要用到 10K。少即是多。
2. 笔记不是越多越好
一开始我让 Agent 疯狂记笔记,结果检索时全是噪音。
优化:给笔记加权重。blocker > action > conclusion。在构建上下文时,优先加载高权重的笔记。
3. 人机协作的边界
NoteTool 的文件化设计,让人类介入变得异常简单。
我可以手动修改笔记,纠正 Agent 的错误判断。
这才是 AI 辅助开发的正确姿势:AI 跑腿,人类把关。
结语:上下文工程,是 Agent 的“内功心法”
如果说 LLM 是引擎,RAG 是燃油,那么上下文工程就是传动系统。
它决定了动力能否高效、精准地传递到车轮上。
HelloAgents 第九章展示的这套组合拳(ContextBuilder + NoteTool + TerminalTool),不仅是一套代码,更是一种工程哲学:
- 分层管理:即时、短期、长期记忆各司其职。
- 按需加载:拒绝暴力堆砌,追求精准打击。
- 透明可控:让人类看得懂、改得了、信得过。
下一步,我打算在这个基础上,尝试加入“子代理架构”,让主代理负责指挥,子代理负责深挖。毕竟,一个人的精力有限,一个团队的力量才是无穷的。
👋 互动时间:
你在开发 Agent 时,遇到过最头疼的“上下文溢出”或“失忆”问题是什么?你是怎么解决的?欢迎在评论区留言,我们一起聊聊“调教”Agent 的那些坑!如果觉得这篇文章帮你打开了新思路,欢迎点赞、收藏、转发!你的支持是我继续死磕底层原理的最大动力。
更多推荐


所有评论(0)