11.1 过度压缩与信息丢失

11.1.1 现象描述

为了节省 Token 或适应上下文窗口限制,对输入信息进行过度压缩或粗暴截断,导致关键约束、实体名称、数值条件等被丢弃。模型在缺失这些关键信息的情况下生成回答,表面上流畅,实际上与事实或需求严重偏离。

11.1.2 反模式示例

案例一:客服对话摘要丢失关键限制

原始对话(多轮):

  • 用户:“我想退货,订单号 A20250301。”

  • 客服:“好的,请问商品是否已拆封?”

  • 用户:“已拆封,但有质量问题,屏幕左上角有坏点。”

  • 客服:“了解,质量问题可以退货。注意:必须在 7 天内寄回,且需附上 质检报告照片。”

过度压缩后的摘要:“用户要退货,客服同意了。”

后续模型回答:“您可以随时将商品寄回,我们会尽快处理退款。”

后果:摘要丢失了 3 项关键信息——订单号、7 天时限、需要质检报告照片。模型基于缺失的上下文给出了错误指引,可能导致用户退货失败并产生投诉。

案例二:代码上下文过度精简

原始上下文

def process_payment(amount: float, currency: str = "USD",
                    max_retry: int = 3,
                    idempotency_key: str = None) -> PaymentResult:
    “”“处理支付。amount 必须 > 0<= 10000
    currency 仅支持 USD/EUR/CNY
    必须提供 idempotency_key 以防重复扣款。“”“

过度压缩后:“有一个 process_payment 函数用于处理支付。”

模型生成的调用代码process_payment(-50, "GBP")

后果:函数签名、参数约束(金额范围、支持的币种)和幂等性要求全部丢失,模型生成了违反约束的调用代码,可能触发运行时错误甚至重复扣款。

案例三:医疗问答摘要遗漏禁忌症

原始知识库片段: “阿司匹林适用于轻度疼痛和退热。禁忌:活动性消化道溃疡患者、对水杨酸类药物过敏者、妊娠晚期 禁用。与华法林联用时需监测凝血指标。”

过度压缩后:“阿司匹林可用于止痛退热。”

模型回答(用户询问孕妇能否服用阿司匹林):“阿司匹林是常见的止痛退热药物,可以服用。”

后果:妊娠晚期禁用这一关键安全约束被压缩掉了,模型回答可能对用户健康造成严重风险。

11.1.3 后果总结

  • 约束违背:压缩掉的规则和限制条件不会消失——它们只是从模型的“视野”中消失了,模型会在不知情的状态下违反这些约束。

  • 幻觉加剧:当关键事实被移除,模型倾向于用自身参数知识填补空白,而这些“填补”往往与实际情况不符。

  • 安全风险:在医疗、金融、法律等高风险场景,丢失禁忌症、合规要求或免责条款可能造成严重后果。

  • 调试困难:输出错误的根因在压缩环节,而非模型本身,排查时容易被误导。

11.1.4 修正方案

  • 分层压缩:区分“必须保留”和“可以压缩”的信息层级。关键约束(如禁忌、限额、截止日期)放入“不可压缩层”,背景描述和过渡性语句放入“可压缩层”。

  • 关键约束锚定:用显式结构(如 XML 标签、JSON 字段或特殊标记)标记必须保留的约束项。压缩流程跳过这些锚定内容,确保它们始终存在于上下文中。

  • 任务导向摘要:摘要时明确指定保留目标——“请保留所有时间限制、数值约束和禁止事项”,而非简单地说“请总结”。

  • 渐进式压缩:不要一步压缩到极致。先移除明显冗余(重复段落、寒暄),评估效果后再决定是否进一步压缩。每一步都验证关键信息是否保留。

11.1.5 检测方法

  1. 关键信息保留率测试:定义一组“必须出现在摘要中的关键信息点”(如实体、数值、约束条件),压缩后检查这些信息点的覆盖率。

  2. 压缩前后效果对比:在相同的测试集上,分别使用压缩前和压缩后的上下文运行任务,对比输出质量。如果质量下降超过阈值,说明压缩过度。

  3. 边界约束验证:专门构造包含禁止条件、数值范围、时间限制的测试用例,检查压缩后模型是否仍能正确遵守这些约束。

  4. 人工抽样审查:定期抽取压缩结果,由领域专家判断是否丢失了业务关键信息。

11.1.6 预防清单

  • 为每一类重要约束(时间、金额、禁忌、权限等)定义“不可压缩”标签,压缩流程中自动保留

  • 摘要提示词中显式要求保留数值、实体和限制条件

  • 设置压缩率上限,避免一次性压缩超过 60%-70%

  • 压缩后自动运行关键信息保留率检查,低于阈值时告警

  • 在高风险场景(医疗、金融、法律)中,使用原文引用模式替代纯摘要模式

最后更新于