Skip to content

第六章:上下文怎样组织、压缩与复用 ​

简报已经能按反馈推进。现在扩大教学情境:助手还读了很多背景材料,用户后来补充“只收本周原公告”。下一轮输入越来越长,最新要求、旧资料和重复内容混在一起,模型可能采用了不该使用的材料。

问题不只是“模型能装多少文字”,还包括程序把哪些信息放在什么位置、怎样保留任务进度,以及省略以后还能否找回。本章会把选择、压缩、检索与缓存分别解释。

本章的产物是一份压缩前后对照:你需要指出哪些事实、条件和待办必须保留,哪些内容可以缩短,哪些应留下定位线索。

6.1 输入有容量,保存可以更长 ​

第三章已经区分磁盘材料与本轮输入。模型接口对一次请求所能处理的信息有范围,常用 token 计量。你可以把 token 理解为模型计量输入和输出的单位,它不与汉字或单词固定一一对应。

很多工具返回、长网页、历史消息和工具说明一起进入请求,会增加占用。还要考虑后续输出需要的空间;不能把窗口理解成所有位置都能留给旧正文。

图 6-1 教学示意:持久保存与当前可处理的信息范围分开。增加磁盘空间不能直接扩大模型输入窗口。 点击图解可放大
左右滑动查看图解细节
已保存的历史文件记忆经过选择进入当前模型请求,保存的材料不等于本轮全部读到的材料

图 6-1 教学示意:持久保存与当前可处理的信息范围分开。增加磁盘空间不能直接扩大模型输入窗口。

把所有资料永久塞进每次请求,简单却有三种代价:容量可能不够,重复处理会增加开销,旧内容还可能混淆当前范围。即使模型窗口更大,也仍然需要组织信息。

6.2 先选择,再考虑怎样缩短 ​

先确定下一步需要什么。在简报任务里,持续目标、本周范围、已确认事件、冲突、尚未取得的材料,分别承担不同作用。

内容应保留的东西可以缩短或移出的部分
用户新要求本周、原公告、只形成草稿重复表达的修饰语
A 的正文纯文本导出、图片限制、材料标识与本任务无关的背景介绍
A 与 B 的冲突同一事件、相反说法、采用哪项依据多次重复粘贴的相同段落
已经失败的读取失败原因、已尝试办法、当前缺口没有新信息的重复日志
旧周草稿必要时的定位线索不能当成本周事实的旧正文

选择首先是任务判断,不能用“最近的都留、早的都删”代替。最早的用户约束可能仍然关键,最新工具结果也可能只是一长段无关内容。

6.3 压缩不是删掉中间一大块 ​

压缩是把部分材料改成更紧凑的表示,同时尽量保留继续任务所需的信息。它可能使用摘要,也可能先精简过大的工具结果;不同策略的代价不一样。

图 6-2 教学示意:压缩后的材料要承接任务,摘要可能丢细节,重要原文仍需可以找回。 点击图解可放大
左右滑动查看图解细节
压缩前的重复结果、任务约束、事实来源和未解决问题,转为保留约束、事实定位线索和待办的较短材料

图 6-2 教学示意:压缩后的材料要承接任务,摘要可能丢细节,重要原文仍需可以找回。

一个坏摘要可能写:“资料已查完,接下来写三条。”它把数量不足、图片限制和冲突都丢了。一个更有用的摘要应写清:A、B 是同一事件,A 只支持纯文本;C 是第二件事;没有第三件;交付时说明不足。

摘要还要区分“取得”“判断”和“尚未完成”。若把“准备核对 B”写成“B 已核实”,后续会继承一份错误进度。压缩改变的不只是文字体积,也可能改变任务认识。

消息结构为什么不能随便切断 ​

模型提出的工具调用与相应结果有对应关系。只留下结果,丢掉它回答的是哪项请求,可能把正文归给错误来源;只留下调用,没有实际返回,又可能让程序或模型误判执行状态。

因此,压缩需要照顾消息结构和关键锚点,而不仅按字符长度截一段。最近行动、真实用户要求和可恢复的来源线索,也需要有明确保留策略。

6.4 Hermes 在什么时候整理上下文 ​

本版 Hermes 将上下文管理组织为可替换的上下文引擎,默认实现负责判断压力、执行压缩和跟踪用量。配置可以选择不同实现,但可替换不表示任意插件会自动启用。

触发也不只发生在一个固定位置:入口处积累的会话历史,与当前循环里新增加的大工具结果,是不同来源的压力。系统既要处理正常的容量管理,也要应对模型服务实际拒绝过大请求的情况。

判断压力时,服务回报的用量与本地估计各有作用;模型容量、预留输出、配置阈值、刚完成压缩的状态及失败后的保护,也会影响是否继续整理。不能用“超过某个长度就一定压缩一次”概括全部路径。

在普通主流程中,较早的材料可以被总结,关键起始信息与必要的近期材料得到保护。压缩后的表示还会保留恢复线索,以便需要时查询原历史。具体保留策略随配置与调用路径不同,不应把一张教学前后图当成唯一固定算法。

6.5 压缩失败,不能假装已经腾出空间 ​

生成摘要也可能依赖模型服务,可能超时、失败或得到不合格结果。系统需要区分“尝试过整理”和“已经提交新上下文”。

本版有针对失败、无进展和真实溢出的处理路径;部分情况保留原材料并延后重试,某些条件下可以采用确定性的降级摘要。降级意味着取舍发生了变化,不能一概宣称信息完整无损。

这里最重要的状态是:当前实际使用哪份材料,原始记录是否还在,整理有没有成功,以及哪些细节可能需要重新取得。若压缩没有完成,却按“已释放容量”继续追加内容,后续请求仍可能失败。

6.6 四种办法,各自解决什么 ​

办法主要作用需要承担的代价
保留原文直接呈现细节与条件输入体积和重复处理成本
形成摘要用较短材料承接任务可能遗漏、误写或混淆状态
按需检索需要时找回相关部分依赖检索命中、定位与核对
提示词缓存复用符合条件的重复计算依赖提供方、前缀内容与顺序

缓存不会替我们挑选材料,也不会自动扩大逻辑窗口。它可能让相同前缀的处理更省,但错误信息被重复使用仍然是错误信息。

压缩则改变本轮带入的信息,即使模型服务完全不支持缓存,也仍可能需要它。检索与压缩可以配合:摘要保留任务脉络,遇到争议再根据定位线索找回原文。这样减少常驻输入,同时增加了恢复查证的责任。

这也解释了为什么第七章要讨论会话保存。若原始过程已经不可找回,摘要丢掉的细节就很难重新核对。

6.7 为简报保留一个最小工作状态 ​

请把当前任务压成四项:目标与范围;已确认事件及条件;材料定位;未解决问题。再故意给自己一个反例:“用户现在要求解释为什么没有采信 B。”

如果摘要只写“两条草稿已完成”,无法回答这个反例。若保留 A、B 的关系、图片冲突以及原材料编号,就能决定是否直接解释或重新读取。

好的压缩不是保证以后永远不用回看,而是既能支持接下来的工作,也知道什么时候需要回看、回到哪里。

本章要点 ​

  • 当前输入容量、持久保存范围和重复计算成本是不同问题。
  • 选择材料应围绕目标、证据、进度与缺口,不能只按时间远近处理。
  • 压缩会改变任务表示,必须保护关键条件、调用对应关系和恢复线索。
  • Hermes 在不同运行位置处理上下文压力,并区分整理尝试、成功提交与失败降级。
  • 原文、摘要、检索和缓存可以配合,但没有一种办法单独解决所有问题。

理解题 ​

1. 摘要保留了“两条草稿已完成”,却没保留 A、B 的冲突,主要损失是什么?

损失了结论的范围和判断依据。后续追问为何排除 B 时,模型只知道结果,不知道原因;还可能把 B 当成未读的新事件。应保留冲突、选择理由与材料定位,必要时重新读取原文。

2. 提供方支持提示词缓存,是否就不再需要上下文压缩?

仍可能需要。缓存主要复用重复计算,逻辑输入仍然占用窗口;压缩改变带入的信息。是否需要压缩,要看容量、任务材料和运行状态,不能由缓存开关直接推断。

3. 压缩尝试失败,但原历史仍存在,下一步首先检查什么?

检查当前实际使用的上下文、失败原因和容量状态,确认新表示有没有提交。然后再按支持的恢复条件决定延后、重试、取回材料或说明限制。不能把“已尝试压缩”当作“已经成功释放空间”。

下一章:对话结束后,状态保存在哪里。

社区学习手册 · 正文与原创图解 CC BY-SA 4.0 · 代码 MIT