信息密度 是指单位 Token 中包含的有效信息量。高密度意味着用更少的 Token 传达更多有价值的内容。
信息密度 = 有效信息量 / Token 数量
信息密度对上下文工程的影响:
- 容量利用:高密度上下文能在有限窗口中容纳更多内容
- 成本效率:更少的 Token 意味着更低的 API 费用
- 处理效率:更短的上下文带来更快的响应
上下文中的低效内容主要来自两方面:
冗余信息
- 重复表达相同含义
- 过渡性词汇和填充语
- 不必要的修饰和解释
噪声信息
- 与任务无关的背景内容
- 过时或错误的信息
- 格式化符号和无意义标记
graph TB
subgraph "压缩原则"
A["保真性"]
B["相关性"]
C["可理解性"]
end
A --> D["压缩后信息准确"]
B --> E["保留任务相关内容"]
C --> F["模型仍能理解使用"]
图 6-1:压缩基本原则
原则一:信息保真
压缩不应该损失关键信息。压缩是提炼精华,而非简单截断。
原则二:任务导向
根据当前任务决定保留什么。对某个任务重要的信息对另一个可能不重要。
原则三:可理解性
压缩结果应该保持连贯,让模型能够正确理解和使用。
| 类型 | 方法 | 特点 |
|---|---|---|
| 抽取式 | 选择原文中的关键句段 | 保持原文表述 |
| 生成式 | 生成新的精简表述 | 更灵活、更精炼 |
| 结构化 | 转换为结构化格式 | 格式紧凑、易解析 |
| 层次化 | 分级别保留细节 | 按需展开 |
压缩必然涉及信息的取舍,需要在多个维度上做权衡:
压缩率 vs 信息完整性
- 高压缩率:节省空间但可能丢失细节
- 低压缩率:保留更多但占用更多上下文
通用性 vs 针对性
- 通用压缩:一次压缩多处复用
- 针对性压缩:针对具体任务定制
成本 vs 效果
- 简单压缩(如截断):成本低但效果有限
- 高级压缩(如 LLM 摘要):效果好但需要额外成本
以下场景应考虑压缩:
1. 上下文接近容量上限
需要为新内容腾出空间。当任务进展到一定程度,历史信息堆积,接近模型的最大上下文窗口时,必须进行压缩。否则,新的输入将被截断,或者模型性能急剧下降。这是一个硬性技术约束。
2. 成本敏感场景
Token 费用是主要顾虑。对于高频调用的生产级应用,Token 消耗直接决定了商业模式的盈利能力。通过压缩输入,可以在不显著牺牲效果的前提下,大幅降低每次调用的成本。长期来看,哪怕 20% 的压缩率也能带来显著的节省。
3. 延迟敏感场景
需要快速响应。上下文越长,Time to First Token (TTFT) 越长,总生成时间也可能增加。在实时对话、语音交互等对延迟高度敏感的场景中,保持精简的上下文是低延迟的关键。
4. 对话历史过长
多轮对话积累了大量历史。在长会话中,早期的闲聊或已解决的任务细节往往不再重要。保留这些冗余信息不仅浪费 Token,还可能对现在的任务产生噪声干扰。
5. 检索结果过多
检索返回了过多内容。RAG 系统检索到的相关文档片段可能很多,如果全部塞入上下文,可能会淹没关键信息。早期研究将这种位置利用不稳定称为 “Lost in the Middle” 现象1;现代长上下文模型在简单单针查找上已有明显改进,但多证据聚合、冲突证据和噪声干扰仍会让过多检索结果降低质量。此时需要对检索结果进行摘要或提取,只保留最核心的证据。
压缩率越高,信息损失风险越大。下图展示了不同压缩比对问答准确率影响的 示意趋势(实际曲线强烈依赖任务类型、压缩方法、评测集与提示词设计):
xychart-beta
title "压缩比 vs 问答准确率(示意)"
x-axis ["0%(无压缩)", "20%", "40%", "60%", "80%"]
y-axis "准确率(%)" 50 --> 100
line [95, 94, 91, 82, 65]
图 6-2:压缩比与准确率曲线示意
数据说明:示意趋势,不应被视为 LongBench 的通用结论。
一种常见的经验现象是:在中等压缩率区间,去除冗余可能带来一定“去噪效应”;但当压缩过度时,关键信息更容易丢失,从而导致性能下降。具体拐点需要通过评估集与线上数据验证。
评估压缩效果需要考虑:
直接指标
- 压缩率:压缩后大小 / 原始大小
- Token 减少量:压缩前后 Token 数量差异
间接指标
- 任务效果:压缩后任务完成质量
- 信息保留率:关键信息的覆盖程度
理想的压缩应该在显著降低 Token 数量的同时,保持或只轻微影响任务效果。
Footnotes
-
Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., & Liang, P. (2023). Lost in the Middle: How Language Models Use Long Contexts. arXiv preprint arXiv:2307.03172. ↩