《Agent原理,架构与实践》
第3讲:上下文是稀缺资源
准备起一个新的系列《Agent原理,架构与实践》。目标不贪心:
1. 希望每篇文章有1-2个点能让大家有收获;
2. 希望不被骂;
本期第三讲,咱们开始。
上一篇,我们聊了大模型幻觉:幻觉是大模型设计的机制,而不是bug。这一篇,我们聊聊咱们的Agent上下文设计:系统提示词、工具定义、聊天记录、检索结果,全都挤在同一个上下文窗口(context window)里抢预算。Agent的上下文预算,到底够用吗?
【1】上下文窗口那么大,为什么不能随便塞?
现在主流模型的上下文窗口,已经做到了200K token,甚至1M token。那既然上下文窗口这么大,那还有什么好省的?
第一个原因:注意力。
在Transformer架构里,每个token都要"关注"其他所有token。n个token,就是n²对关系:
1万token → 1亿对关系;
10万token → 100亿对关系;
100万token → 1万亿对关系。
token涨10倍,注意力就要摊薄100倍。
画外音:房间越大,东西越不能乱扔,找东西的时间是平方级涨的。大扫除过的人都懂。
上下文大小对模型效果的影响,是渐变曲线,不是到达窗口才断崖式下降。模型不会一到某个长度突然崩溃,但检索精度和长程推理,会一直打折。
第二个原因:钱。
每一次调用,我们都要把全部上下文重新发一遍。塞10万token进上下文,Agent跑20轮,就是20倍的重复付费。具体原理,之前的内容聊过《大模型没有记忆(1/12)》。
画外音:不是你和Agent聊20轮,是你和Agent聊一轮,Agent可能要和大模型交互20轮。
【2】那Agent的上下文,到底应该喂些什么?
Anthropic官方指南里,上下文工程(context engineering)的总原则是:
Finding the smallest possible set of high-signal tokens that maximize the likelihood of some desired outcome.
翻译过来:找到能让目标达成的、信号最强的、最小token集合。
三个关键词,咱们挨个看。
1. 最小:不是"够用就行",而是"能少一个是一个"。每个token都在消耗注意力预算和钱;
2. 信号最强:对当前这一步任务有直接帮助的信息才进入上下文。无关信息不是无害的冗余,是有害的稀释;
3. 目标达成:判断标准是任务成功率,而不是"信息全不全"。
举个栗子:咱们的sdd-site-agent生成代码时,需要知道架构规范里的目录结构约定?以及三个月前某次评审的决策纪要吗?
不需要。塞进去的结果,不是"更保险",而是"更分心"。
画外音:任何脱离任务的上下文堆积,都是耍流氓。
【3】具体放什么呢?一直常驻,还是按需加载?
知道放”信号最强的最小集合”的信息,只是第一步。真正动手时会碰到一个选择:一条信息,每轮都塞,还是用到再取?
这里有一个二分法,非常好用。
永远在线(常驻上下文)的放什么内容?
每一轮、每个任务都要用的东西,例如:Agent 的角色定义、输出格式约定、当前任务的直接指令。
我们的判断标准是:删掉它,每一步都会出错。
按需加载(用时再取)的放什么内容?
只在特定任务、特定步骤才用的东西,例如:某张表的字段说明、某个规范的细则、历史决策记录。
我们的判断标准是:大部分时间用不上,用的时候能取出来就行。
按需加载的官方叫法是:just-in-time检索:上下文里只放轻量的"指针":文件路径、索引、关键词。Agent需要时,再通过工具把内容取进来。
有同学惊呼,这不就是skill直播课讲的三层加载嘛?元数据常驻、正文触发才载、资源按需才载。没错,三层加载,就是今天内容的特例。
画外音:skill直播课资料,PPT见星球。
【4】落到咱们要开发的sdd-site-agent,要怎么分层呢?
sdd场景的mini-agent,它有三类规范:需求规范、原型规范、架构规范。我们把他们全部塞进系统提示词吗?
答案是否定的。
1. 需求规范:只有"写需求"这一步用,可以按需加载;
2. 原型规范:只有"画原型"这一步用,可以按需加载;
3. 架构规范:只有"出方案、写代码"用:按需加载;
4. 输出格式约定:每一步都要守,常驻上下文;
5. 当前任务描述:每一轮都要参考,常驻上下文。
这张表,是为了后续做mini-agent,我们今天最重要的产出,未来我们是要把这些策略实现到我们的代码里的。
画外音:任何脱离任务的上下文堆积,都是耍流氓。
【5】简单总结
1. 窗口大不等于信息用得上:注意力是平方级摊薄的;
2. 上下文只喂信号最强的最小集合;
3. 常驻还是按需?看"删掉它,每一步会不会出错"。
补充阅读:《AI agent高效上下文工程》
https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
还有一个没解决的问题:任务跑长了,上下文迟早写满,到时候怎么办?扔掉,压缩,还是搬出去?下一讲,我们聊聊AI agent里的长任务的记忆。
知其然,知其所以然。
思路比结论更重要。
===全文完==
PS:公众号只能贴静态图文,无法用js实时互动,在线版设计了课后习题与实操演练,欢迎阅读原文体验。