上下文工程
选择、压缩、外置、恢复和保真验证
沿着对象与状态理解本章
压缩最危险的不是少一句背景,而是把“未执行”写成“已完成”,把“禁止”写成“准备做”。先对照本图保留命题、版本、否定与未决状态,再考虑缩短多少Token。
下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。
压缩要保留行动所依赖的事实
把一百轮历史压成几句话,最容易丢什么?
像交班给另一位同事:对方最需要目标、禁止事项、已经做完的事、还没核实的事,以及到哪里看原证据。原始日志可以外置,但决定下一步动作的区别不能抹平。摘要也不是执行数据库,不应凭它判定不可重复动作是否已完成。
输入与适用条件:构造的exclude修复场景;有意保留“集成测试尚未运行”这一否定状态。错误摘要只作为反例,禁止当作推荐模板。
1 / 5 · 原历史有很多噪声
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
工具输出、失败尝试和重复讨论可以很长。压缩的目标是减少历史占用,不是美化成“进度不错”。
可恢复快照默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
有限窗口无法一直保留全部原始对话,但任务需要连续推进。
怎样实现
保留必要状态与引用,压缩后核对,再从原始来源恢复细节。
可能的代价与误解
摘要重写可能把猜测变结论,多轮摘要还可能累计偏移。
如何判断是否做对
比较压缩前后允许的下一步动作是否一致,而不只是文本相似度。
每一轮的信息供给
上下文工程关心整个可见集合:规则、目标、状态、证据、工具定义和必要历史。Prompt工程是其中表达指令的一部分。检索、渐进披露、压缩、笔记和子Agent都可能改变本轮可见内容。[S084]
C(t) = 必要指令 + 任务目标 + 有效工作状态
+ 下一步需要的证据 + 工具信息 + 必要历史
这是教学分析式,不是实际序列化格式。优化目标是充分且相关,而不是机械最大或最小。整个旧仓库可能包含过期实现,只给一个新函数又可能丢失兼容性约束。
标称窗口与有效能力
Lost in the Middle研究位置影响;LongBench和RULER从多任务考察长上下文能力。接受某个长度不代表所有任务都能可靠完成,针找回与综合多处约束也不同。结论依赖模型、任务和干扰内容。[S085][S087][S088]
原创实验把同一兼容性条件放在不同位置,逐渐加入无关日志,随机化布局并重复运行。检查实际补丁是否保留旧行为,而不是只问模型“你记住了吗”。
五种内容管理操作
选择是不加载无关内容;裁剪是删除重复或旧输出;摘要是重新表达;外置是保存原始材料并留引用;重检索是在需要时取回。缓存是计算复用,不属于内容压缩。[S084][S092][S094]
选择可能漏证据,裁剪可能删未来线索,摘要可能误写确定性,外置依赖有效引用,重检索需要足够线索和权限。常见实用组合是小型任务状态加外置原始证据,而不是只留一段无法回溯的总结。
Compaction到底保存什么
不同产品没有统一压缩算法。OpenAI接口可返回不供人直接阅读的专用压缩状态;Claude提供摘要、阈值和上下文编辑等机制。应使用正式返回结构,不伪造或随意拆分不透明状态。[S089][S090][S091][S093]
压缩可以理解为选择候选历史、提取状态、生成较短表示、继续调用。看得到摘要不等于验证全部内部状态,看不到内部过程也不代表无损。远短于原文的任务摘要通常不能保证回答任意未来细节问题。
对需要审计的工作,应另存原始事件、文件版本与日志。压缩更像有损交接,而不是文件ZIP的无损还原。专用表示也不应被宣称能恢复全部原始内容。
保真检查要检查命题状态
目标:修复嵌套路径exclude
不变条件:保持旧配置格式和顶层行为
已确认:比较双方路径基准不同
证据:文件版本、代码范围、测试ID
已排除:配置未加载
已修改:尚无
已验证:最小复现失败
未解决:Windows分隔符是否相关
下一步:读取规范化函数
这是原创交接示例。最容易失真的是否定结论、禁止条件和不确定性。“可能与Windows有关”变成“根因就是Windows”会误导后续工作。仅匹配关键词不能发现这种错误。
压缩前后问:不能改什么?什么已排除?哪个测试运行过?什么仍是假设?再继续真实任务。信息恢复与任务成功必须同时评价,摘要完整却让Agent重复工作也有成本。
缓存、压缩与重置的权衡
压缩可能改变可共享前缀,影响缓存,但影响范围依服务规则和改动位置而定,不能简单说必然全部失效或必然省钱。比较应包含压缩调用、后续输入节省、重读证据和错误返工。[S092][S039]
重置上下文可能移除旧假设,也会产生交接损失。长任务研究使用过不同组合,且随模型能力变化调整,不能把定时重置当永恒规则。[S130][S131]
证据外置必须可定位
“见之前日志”不是可靠引用。至少保存位置、版本、范围与运行命令。旧补丁通过测试后再次修改,应把状态改为“旧版本通过,新版本待验证”,而不是继续沿用绿色结论。
自检:大窗口能否代替长期记忆?不能完全代替,跨会话持久化、版本和权限仍存在。摘要有所有关键词就保真吗?不一定,真假、时间和确定性可能已变。
逐项中文讲义
保留拓展阅读目录编号与A/B/C优先级;每项包括机制解释、边界与原创练习。
A7.1 · 有效的上下文工程
对应资料:Effective Context Engineering
上下文工程关注本轮模型需要的整个信息集合,而不仅是Prompt措辞。相关方法包括按需获取、渐进披露、压缩、笔记与子Agent,但不要求每次同时使用全部机制。
有限注意与有限窗口意味着信息需要选择。更多内容可能提供证据,也可能引入过期结论和噪声;更少内容节省成本,也可能漏掉约束。
相关信息不是越多越好
输入与条件。目标定位一个断言失败,候选有失败函数20行和全库日志10000行。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1优先 | 读断言、被测函数和必要调用方 | 形成最小证据链。 |
| 2缺口 | 仍无法解释时定向扩大 | 而非一次性全部堆入。 |
| 3反馈 | 记录为何扩展到某文件 | 便于判断检索是否失焦。 |
把过程连起来。按需获取是围绕任务的信息决策,不等于越短越好。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:把一项代码任务的输入分成常驻规则、当前证据、可重新获取历史三组,说明每组何时进入上下文。再用任务成功而非Token最少评价方案。
完成标准是能解释每段输入为何在本轮有用,不把上下文工程简化成“写一个更长的系统Prompt”。
拓展阅读目录事实依据 [S084] · 练习与工程推导为本书独立编写。
A7.2 · 长上下文中的位置效应
对应资料:Lost in the Middle
Lost in the Middle研究相关信息在长输入中的位置如何影响模型表现。其结论来自特定模型与任务,不能写成所有新模型在中间位置必然失败。
位置效应只是长上下文风险之一。干扰信息、多个证据组合、否定条件和版本冲突也会影响工程任务。
位置效应实验只移动目标证据
输入与条件。同一段正确事实分别放在长文开头、中间、末尾。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1控制 | 总长度和事实内容相同 | 只改变位置。 |
| 2提问 | 相同问题,多次运行 | 比较正确恢复率。 |
| 3解释 | 结果差异依模型任务与干扰内容 | 不能把一篇研究概括成所有模型永远怕中间。 |
把过程连起来。这是实验设计,不是已测得的位置收益数字。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:将同一兼容性约束放在不同位置,加入不同长度的无关日志,多次运行同一修复任务。检查行为和约束遵循,而不仅是能否复述句子。
实验应固定其他条件并报告变异。一次成功不能证明长窗口可靠,一次失败也不足以概括所有任务。
拓展阅读目录事实依据 [S085] · 练习与工程推导为本书独立编写。
A7.3 · 上下文容量与状态
对应资料:Claude Context Windows
上下文窗口文档说明模型可处理的信息范围及相关Token使用方式。窗口、输出预算、推理消耗和产品自动管理是不同概念,具体计算口径需要按接口核对。
不能把用户可见聊天字数直接当作全部输入,工具定义、结果与内部状态也可能占用相关预算。
窗口能装下不代表能准确使用
输入与条件。输入含100条规则,其中两条版本冲突。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1容量 | 总Token未超限 | 只通过长度检查。 |
| 2选择 | 需要识别目标版本对应规则 | 不由容量检查决定。 |
| 3验证 | 问关键条件并要求证据 | 衡量有效利用而非仅请求成功。 |
把过程连起来。可接收长度和可可靠完成任务的长度不是同一个指标。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:列出一次工具任务里除用户文本之外的全部内容来源,估计哪些可稳定复用、哪些每轮增长,再用实际接口统计核对。
完成标准是理解预算组成与限制,不记忆一个可能很快变化的最大Token数字作为全部能力说明。
拓展阅读目录事实依据 [S086] · 练习与工程推导为本书独立编写。
B7.4 · 长上下文多任务评测
对应资料:LongBench
LongBench通过多任务、长输入设置评价长上下文理解。不同任务可能要求检索、总结或综合信息,不能用单一任务分数代表所有长任务能力。
评测长度、语言、数据来源和评分方式都影响解释。模型能处理长文章问答,不等于能在多轮代码修改中保持执行状态。
长上下文不同任务不能只看找一句话
输入与条件。同一长文包含三段相互关联的订单记录。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1检索题 | 找某订单日期 | 只需单点命中。 |
| 2聚合题 | 三段合计金额 | 需要整合多处。 |
| 3推理题 | 比较条件判断异常 | 还需正确逻辑,单点召回高不保证通过。 |
把过程连起来。长上下文评测应覆盖实际要做的操作。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:为同一长材料设计事实定位、跨段推断和约束遵循三个问题,比较所需信息与评分方法。明确哪些答案可以确定性验证。
阅读基准的价值是学习如何构造有区分力的任务,而不是只记录某模型当时排名。
拓展阅读目录事实依据 [S087] · 练习与工程推导为本书独立编写。
B7.5 · 标称窗口与有效能力
对应资料:RULER
RULER关注标称上下文长度与实际有效能力之间的差异,通过不同任务与长度测试模型。它提醒我们,接口接受输入只是能力评价的起点。
简单找回单条信息与进行多步组合推理不同;长度增加时的失败也可能来自干扰和任务复杂度,而非单纯容量不足。
干扰增加时有效窗口怎样测试
输入与条件。目标事实不变,背景从100段扩到1000段。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1基准 | 短输入测成功率 | 建立起点。 |
| 2扩展 | 只增加声明的干扰 | 重复同类问题。 |
| 3结果 | 同时记录正确率与延迟 | 不把标称最大长度当稳定使用建议。 |
把过程连起来。没有实测数据时只能给测试方案,不能编造有效窗口阈值。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:逐步增加必须共同满足的约束数量,同时固定总输入长度,观察是否出现与单条检索不同的退化。
不要把某个合成基准结果直接换算成实际仓库可处理的最大文件数。真实工程仍需自己的端到端验证。
拓展阅读目录事实依据 [S088] · 练习与工程推导为本书独立编写。
A7.6 · 不透明压缩状态与连续执行
对应资料:OpenAI Compaction
OpenAI Compaction提供专用压缩状态,使长交互能够在有限上下文中继续。部分返回内容是不透明或加密表示,不应假设它等同于一段可编辑的人类摘要。
应用应按正式接口保存和传递这些状态,不能自行伪造字段或声称能恢复所有原始内容。完整审计仍需要独立保留原始证据。
不透明压缩项需要按原样续接
输入与条件。服务返回压缩对象C,它不是人类可读摘要。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1保存 | 保留类型和负载 | 不把二进制/加密字符串改写成普通文字。 |
| 2续接 | 按接口规定传回C与后续新消息 | 服务解释它的语义。 |
| 3事实审计 | 独立保留可读任务目标、证据和状态 | 不能从C外观证明事实已保真。 |
把过程连起来。不透明状态与公开文本摘要要分清;不能猜内部编码。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:比较“只保存压缩结果”与“保存任务状态加原始日志引用”两种恢复方案,检查精确错误码和历史限制能否重获。
压缩是否有用取决于后续任务质量与总成本,不只是压缩比。看不到内部表示也不能当作无损保证。
拓展阅读目录事实依据 [S089] · 练习与工程推导为本书独立编写。
A7.7 · 摘要型压缩概览
对应资料:Claude Compaction Overview
Claude的压缩机制用于在会话增长后保留任务连续性。摘要式管理会改变历史的表示,具体接口、触发条件和保留范围需要按当前文档理解。
摘要必须处理目标、已完成步骤、证据与不确定性。最常见的风险不是漏掉关键词,而是把“可能”改成“确认”或把“待验证”改成“通过”。
摘要必须保留否定与未完成
输入与条件。原文“不要部署;测试还未运行”。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1坏摘要 | “部署,测试” | 主题词存在却反转行动含义。 |
| 2好摘要 | “禁止部署;测试未执行” | 状态与否定都清楚。 |
| 3恢复 | 后继系统仍先补验证,不执行部署 | 用行为检查摘要影响。 |
把过程连起来。保留名词不等于保留原意。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:准备含否定结论、禁止条件与旧版本结果的历史,压缩后逐条提问,并继续执行任务验证。
完成标准是保留有用语义与可恢复证据,不把摘要长度下降等同于长任务可靠性上升。
拓展阅读目录事实依据 [S090] · 练习与工程推导为本书独立编写。
A7.8 · 主动压缩与阶段边界
对应资料:Compaction on Demand
按需压缩允许在需要时主动整理上下文,而不是仅等待容量触发。任务阶段可能是有价值的边界,例如完成调查后进入实现,但不是所有阶段结束都必须压缩。
主动操作会增加一次处理,并可能影响缓存与信息保真。临近结束的任务未必值得支付这笔成本。
阶段结束压缩比正在写入时容易一致
输入与条件。任务刚完成读取,下一阶段准备修改。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1阶段边界 | 当前没有未完成写工具 | 快照较稳定。 |
| 2保存 | 目标、发现、来源、禁止项与下一步 | 减少重复探索。 |
| 3继续 | 新阶段重核目标版本 | 不能因边界清晰就省掉版本检查。 |
把过程连起来。时机可降低状态复杂度,但不是任何阶段结束都必须调用摘要模型。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:比较固定间隔压缩、阶段结束压缩和不压缩三种策略,记录后续重复读取、约束遗漏与总耗时。
不要预设主动压缩优于自动压缩。真正问题是何时有足够冗余可清理,以及未来步骤还需要什么证据。
拓展阅读目录事实依据 [S091] · 练习与工程推导为本书独立编写。
A7.9 · 工具结果清理
对应资料:Context Editing
Context Editing针对历史内容进行清理,例如处理旧工具结果。它与把全部历史重写成摘要不同,二者对信息保留和缓存的影响也可能不同。
日志删除后,后续模型可能只知道动作发生过,却不知道精确返回。因此需要为重要证据保留可重新读取的引用。
删除大日志前先保留可恢复位置
输入与条件。测试返回5000行,关键错误在431行。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1提取 | 错误、命令、退出码、版本、行范围 | 形成必要状态。 |
| 2外置 | 完整日志保存在可访问路径 | 摘要附稳定引用。 |
| 3后续 | 需要上下文时补读420—445行 | 不是把删掉内容假装永远不重要。 |
把过程连起来。输出清理要兼顾信息密度与恢复能力。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:删除一次失败测试的长输出,仅留下命令、退出码、相关错误和完整日志路径,检查能否继续正确排查。
清理策略应按内容价值而非年龄独立决定。旧约束可能仍重要,最新的大段重复日志也可能没有价值。
拓展阅读目录事实依据 [S092] · 练习与工程推导为本书独立编写。
B7.10 · 按阈值触发压缩
对应资料:Compaction at a Token Threshold
阈值触发压缩根据Token等预算条件自动启动整理。阈值是资源控制手段,不等于模型理解了当前任务是否适合交接。
若恰好在关键证据尚未整理时触发,摘要更容易丢状态;阈值太晚又可能没有足够空间完成后续调用。
压缩阈值不能等到窗口已经用满
输入与条件。输入当前850,窗口1000,下一个工具预计200。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1预测 | 850+200=1050 | 还未收到就可预见超限。 |
| 2预留 | 给工具结果与最终响应留空间 | 按接口口径计算。 |
| 3动作 | 适当裁剪、外置或提前压缩 | 而非等待请求报错再随机删最早内容。 |
把过程连起来。阈值是工程预算策略,不是统一固定百分比。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:在同一长任务的不同位置触发压缩,比较保留的未完成步骤与证据。把触发点、输入长度和后续成功分别记录。
不能只调一个阈值解决所有问题。任务状态结构、输出控制、工具结果粒度与原始证据外置同样重要。
拓展阅读目录事实依据 [S093] · 练习与工程推导为本书独立编写。
B7.11 · 缓存与压缩的相互作用
对应资料:Claude Prompt Caching
Prompt缓存复用符合条件的相同前缀计算,压缩与编辑则改变内容。二者可能互相影响,但影响范围取决于实际修改位置和产品规则。
稳定前缀有利于复用,冗长无关前缀却可能损害上下文质量。缓存命中率高不代表业务收益高。
压缩后Token少了但缓存前缀变了
输入与条件。原历史H长600,摘要M长100;已有缓存匹配H。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1长度变化 | 减少500逻辑Token | 容量收益明确。 |
| 2缓存变化 | M不等于H前缀 | 原命中不能直接沿用。 |
| 3总评估 | 比较实际计费、延迟与继续执行 | 不只报告压缩比83.3%。 |
把过程连起来。压缩与缓存可互相影响,需测最终任务效果。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:计算一次压缩调用、之后重新预填充、输入减少和证据重读的总成本,比较短剩余任务与长剩余任务。
完成标准是用成功任务成本与质量判断方案,不把缓存、记忆和压缩作为同一个功能讨论。
拓展阅读目录事实依据 [S094] · 练习与工程推导为本书独立编写。