裁剪、摘要、压缩与缓存

本节目标

按风险选择裁剪、抽取、摘要或缓存,并建立保真检查与失效策略。

五种手段解决不同问题

  • 裁剪:删除确认无关或重复的内容,最便宜,但需要可靠选择规则。
  • 抽取:保留原文中的关键句、表格行或字段,来源清楚,但可能失去周边条件。
  • 摘要:重写为更短表述,压缩率高,却可能引入遗漏和解释偏差。
  • 供应商 compaction:由 API 或 SDK 把长会话转换成可继续使用的较小状态;格式、可读性和支持范围属于供应商特性。
  • 缓存:复用满足供应商规则的重复前缀,减少部分重复处理成本或延迟;它通常不减少模型窗口里计入的语义内容,也不保证输出确定。

优先做确定性去重与字段抽取,再对低风险叙述摘要。法律、医疗、安全限制、金额、日期和用户明确拒绝项不应只留自由文本摘要;保留结构化原值与来源。

摘要合同

要求摘要输出:

{
  "facts": [{"text": "……", "source_ids": ["s1"]}],
  "constraints": [{"key": "budget_cny", "value": 3000, "source_id": "u7"}],
  "open_questions": ["……"],
  "omitted_sections": ["……"]
}

字段阅读(为了让这段 JSON 可直接交给解析器,行内解释放在代码块外):

  • facts 保存可追溯的事实摘要;每条都带 source_ids,使后续系统能回到原文核验。
  • constraints 保存不能因压缩而丢失的结构化限制;key、value 与 source_id 分别说明限制名称、值和证据来源。
  • open_questions 显式保留尚未解决的问题,避免摘要把“未知”压缩成貌似确定的结论。
  • omitted_sections 记录主动未带入的内容,为后续补载、人工审计和失败定位留下线索。

程序验证每个引用存在,并将摘要与关键原文做回归测试。摘要还要有输入版本和生成版本;原文变化时应失效。

摘要与 compaction 不可混用概念

人工可读摘要应能审计事实、来源和遗漏项。供应商 compaction 可能返回不供人解释的机器状态。以 OpenAI 当前 compaction 指南为例,服务端阈值触发或独立 compact 端点可返回包含加密、opaque compaction item 的新窗口;独立端点返回的窗口应作为下一次调用的规范输入原样传递,而不是当普通摘要解析或自行删改。这是 OpenAI 当前 API 语义,不能推广成所有供应商的统一格式。

无论哪种方式,都要测试关键约束、未决问题、工具结果和引用是否在压缩后仍可恢复。压缩是在旧窗口仍能处理时提前做的容量管理,不是超限后的万能补救。

缓存策略

把稳定策略、工具定义和固定参考材料置于前缀,把用户输入、当前时间和动态检索结果放后面。监控缓存读写与命中,但不要硬编码跨供应商通用阈值、有效期或字段。OpenAI 当前使用重复前缀匹配并提供缓存 usage;Google 当前不同 API 对 implicit/explicit caching 的支持并不相同;Anthropic 也有自己的断点与计数语义。每个实现都要回到所用 API 的当前页面。

失败模式

  • 摘要把“用户尚未确认”写成“已确认”。
  • 抽取只保留结论,漏掉“仅限某地区”的条件。
  • 缓存未随权限或文档版本失效,向错误用户复用内容。
  • 压缩后仍用原 token 估算,导致预算判断漂移。
  • 把 opaque compaction item 当成人类摘要修改,破坏供应商要求的连续状态。

练习与自测

从一页退款政策中抽取金额、期限、例外和生效日期,为每项保留原文 ID。设计一个文档更新后的缓存失效键。自测:若摘要器完全出错,原始证据是否仍可追溯,关键动作是否会被程序规则阻止?

掌握检查

  • 我能分别说明裁剪、抽取、摘要、compaction 和缓存解决的问题与风险。
  • 金额、日期、授权、用户拒绝和安全规则保留结构化原值与来源,不只剩自由文本摘要。
  • 压缩前后有关键事实、未决状态、引用和工具连续性的回归测试。
  • 我知道缓存命中不扩大上下文窗口,也不修复错误或过期内容。
  • 使用供应商 compaction 时,我遵守其当前输出处理、存储与隐私语义。

下一步

进入 长上下文失效模式与评测。

参考资料