上下文工程四成分与预算 · context engineering
2025 年,"上下文工程"从"提示词工程"里分化成一个独立术语,到 2025~2026 年长成一门有框架、有工具、有评测的学科。它只回答一个问题:
什么信息、以什么顺序、什么形态进入模型窗口?
提示词工程关心"怎么把一句话说清楚",上下文工程关心"整个窗口里该有什么、不该有什么、装不下时先丢什么"。前者是写一句话,后者是装一辆车。
一个让很多人意外的实测结论(Liu et al.《Lost in the Middle》, TACL 2023):同一个模型、同一个任务,只改窗口里的内容组成与顺序,产出质量能差出一个档位。所以——
整门学科就一张图:模型窗口是固定预算,里面装四样东西,每一轮都必须装得下。记住这个恒等式,你已学会一半:
四成分按"谁产生 / 多久有效 / 谁负责裁剪"分类。前三个常驻(每轮都在),素材按需(这一轮才进),输出预留是给模型回答留的位子——很多人忘了留,模型回答被截断就是这个原因。
系统提示、角色、规则、输出格式。你写的,每轮不变,占常驻税。
会话内历史、跨会话偏好、知识库召回。越滚越长,是最常超预算的成分。
每个工具的 schema 都占 token。工具加到 20 个,模型选错率上升。
这一轮才检索进来的文档片段、代码、数据。just-in-time 供给。
下面这个计算器让你直观感受"窗口是预算"——拖动滑块分配四成分,看你的 Agent 是否超窗、超在哪一块。
就算窗口没塞满,放的位置不同,模型记不记得也不同。Liu et al. 用多个模型实测发现一条 U 型曲线:放在开头和结尾的信息,被准确召回的概率高;放在中间的,召回率显著下降——这就是"Lost in the Middle"。
这直接推翻一个直觉:"反正窗口还大,全塞进去就行"。塞是塞进去了,但模型"看不见"中间那段。点下面任意一句,看它在 U 型曲线上的召回率。
工程上的三个推论:
窗口总会满。问题不是"要不要丢",是"按什么顺序丢"。一个可用的驱逐优先级:
更彻底的做法是分层记忆:会话内(短期,全量)→ 跨会话(中期,摘要)→ 知识库(长期,按需召回)。三层各管各的预算,互不挤占。
指令+记忆+工具+素材+输出预留=窗口,先算账再喂。