无限上下文窗口是个神话:别再往里塞东西了
关联
来自 AWS 的 Elizabeth Fuentes Leone(开场时她还纠正了议程上的名字错误)做了一场快节奏的演讲,主题是:智能体应用(agent)为什么经常越跑越糊涂?
答案不是更大的上下文窗口,而是更好地管理窗口里的内容。她把这叫作上下文工程(context engineering)。
为什么窗口越大,智能体反而越笨?
一个典型的场景:你有一个智能体,负责监控某个应用,每次都去拉取日志。
每次拉取,数据都堆进上下文窗口,窗口越滚越大,因为智能体就是靠窗口来记住事情的 。
一年前流行答案是:加 token,换更大的窗口。
但现在我们知道这不管用——因为存在注意力 U 型曲线:数据太多时,模型会忘掉中间的部分,只记得开头和结尾 。
更糟的是,窗口里的信息还可能毒害智能体——比如混进提示注入攻击 。
所以上下文工程的定义很简单:在模型需要的时候,给它需要的信息,而不是一股脑全给它。
四个策略:外置、筛选、压缩、隔离
Elizabeth 把应对手段归为四类。
外置(externalize):把大数据挪到持久化存储里,窗口里只留一个记忆指针。筛选(select):只取相关的内容。压缩(compress):做摘要、压缩信息。
隔离(isolate):不同智能体各用各的上下文,不互相污染 。
具体怎么落地?她用了 strands——AWS 维护的开源框架,完全免费,而且不绑定任何模型,想换 OpenAI、Anthropic 的模型,加一行代码就行 。
对话越聊越长怎么办?
最简单的办法是框架内置的对话管理器,3 种策略:滑动窗口只保留最近的消息;摘要式管理器把旧消息总结掉、保留近几条;
也可以两者结合 。
比如摘要策略只需一行配置:保留最近 4 条消息,其余 50% 做摘要。每次会话都自动这样管理窗口 。
记忆分三种,别全塞进一个窗口
短期记忆就是最近的对话历史。但新会话开始时怎么办?
可以建长期记忆,用向量数据库存过去的对话,用不同的提示词决定存什么 。
还有关系型记忆,用实体图(她推荐去 Neo4j 的展台了解)来表达事物之间的关联。三种可以组合使用。
海量日志的正确处理方式
回到那个日志爆炸的例子。正确做法是:工具拉回日志后,另一个工具把日志存到存储里,只返回一个存储 ID 留在窗口里。
再由一个工具去理解日志,直接告诉智能体「日志没问题,你不用看原文」。真需要原文时,再凭 ID 去取 。
多智能体协作,更要少共享
应用复杂到一个智能体不够时,就要上多智能体(她展示了 strands 的 swarm 模式)。
她的警告很直白:在智能体之间共享整个上下文窗口,等于「往别的智能体里倒垃圾」,因为不是每个智能体都需要全部信息 。
做法还是记忆指针——通过共享的调用状态传 ID,而不是传数据本身。
智能体死循环怎么办?
有的智能体会陷入死循环,反复调用同一个工具,永不停止。
解决办法是给工具设调用上限,比如某个搜索工具最多调 3 次,循环自然终止 。
另外,工具的返回要有清晰明确的响应,模糊的返回也是循环的诱因。
外部接口太慢,就用异步
调用外部 API 或 MCP 工具时,如果对方迟迟不响应,同步等待会把整个应用拖死。
改用异步:先发起任务(比如用 FastAPI 写两个工具,一个启动任务、一个查询状态),下一次调用时再取回结果。
她实测后说效果差别很大 。
最后的四条反模式
不要上下文塞满(context stuffing)——不需要把整个厨房都搬进窗口。慎用摘要,因为摘要过程可能丢掉智能体真正需要的信息。
不要把所有东西都传给引擎。
工具返回大数据时,外置、筛选、用记忆指针;多个智能体需要同一大数据时,共享指针不共享数据。
本集带走
- 上下文窗口越大不等于效果越好:数据太多时模型会忘掉中间,只记得头尾。
- 上下文工程的核心:在需要的时刻,给模型需要的信息。
- 四大策略:外置到存储、筛选相关内容、压缩摘要、按智能体隔离上下文。
- 大文件(日志、数据库结果)用记忆指针代替原文,多智能体间也只共享指针。
- 给工具设调用上限防止死循环,慢接口改异步处理。
无限的上下文窗口是一个神话。
The infinite content window is a myth.
—— Elizabeth Fuentes Leone · [00:34]
我们有大量数据,但如果数据超级超级大,智能体会忘记曲线中间的部分。
We have a lot of data, but if the data is super, super big, the agent is going to forget the middle in the curve.
—— Elizabeth Fuentes Leone · [02:19]
上下文工程就是在模型需要的时候,给它所需要的信息。
But content engineering is giving the model information it needs when it needs it.
—— Elizabeth Fuentes Leone · [02:43]
有时候内容窗口在毒害智能体,因为你的内容窗口里可能有提示词注入。
Sometimes the content window is poisoning the agent because you can have a prominent injection inside your content window.
—— Elizabeth Fuentes Leone · [02:54]
在智能体之间共享上下文窗口,就像是给其他智能体添加垃圾,因为并不是所有智能体都需要彼此之间的信息。
You share the context window between agents is like add garbage to the other agents because no all the agents need the information between them.
—— Elizabeth Fuentes Leone · [09:59]
顺着「智能体」挖下去
- 当几十亿个AI智能体冲向你的数据库同公司:Neo4j · 同概念:MCP、向量数据库 (vector database)、智能体 (agent)
- Anthropic 平台负责人:Claude 平台的「三层蛋糕」与给 token 分工的「策略」同概念:MCP、上下文工程 (context engineering)、智能体 (agent)
- 用 Markdown 组建一支军队:Y Combinator 掌门人的 AI 原生公司蓝图同概念:上下文工程 (context engineering)、上下文窗口 (context window)、智能体 (agent)
换个口味
- 一封邮件睡出一万七千美金:Every 的 Builder Pack 内幕同概念:MCP、智能体 (agent)
- 速度病:当团队 10 倍速写代码却推不出产品,怎么治同概念:上下文工程 (context engineering)、智能体 (agent)
- AI 写代码翻倍之后:Honeycomb 的审查、信任与主人翁意识同概念:MCP、智能体 (agent)
