三十六:长上下文提示压缩¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484450&idx=1&sn=669b9171a8d8d7ee316303d93f9054ee&chksm=f01eb75bc7693e4d6d2fcb30f4b784e5b86777b170c1f2169957b7cf82fd9e5356c1d9475248#rd
1. 学习范围¶
本日主题是提示压缩,重点是 LongLLMLingua。前几天讨论了扩大上下文窗口和分割上下文窗口;今天讨论另一条更工程化的路线:在送入大模型之前,先压缩 prompt,减少 token 数、降低成本、缓解 lost-in-the-middle,并尽量保留回答问题所需的信息。 需要掌握: - 提示压缩解决什么问题。
-
Selective Context、LLMLingua、LongLLMLingua 的区别。
-
信息量、困惑度、条件困惑度和 token importance 的直觉。
-
粗粒度到细粒度压缩流程。
-
question-aware compression 为什么重要。
-
LongLLMLingua 如何缓解长上下文中的信息稀释。
-
压缩比、答案质量、忠实性和延迟的评估方法。
2. 参考资料¶
-
提示词压缩技术综述:https://blog.csdn.net/Baihai_IDP/article/details/140060389
-
Selective Context 论文:https://arxiv.org/abs/2310.06201
-
LLMLingua 论文:https://arxiv.org/abs/2310.05736
-
LongLLMLingua 论文:https://arxiv.org/abs/2310.06839
-
LLMLingua 项目:https://github.com/microsoft/LLMLingua
3. 提示压缩的问题定义¶
长上下文不只是“模型能收多少 token”的问题。即使模型支持 32k、128k,上下文过长仍会带来: - 推理成本高。
-
延迟高。
-
无关信息干扰。
-
lost-in-the-middle。
-
prompt 中关键约束被稀释。
-
RAG 检索片段过多导致证据噪声。
提示压缩的目标:
它不是简单摘要。摘要会改写内容,而压缩可以保留原文 token 或短片段,减少模型误解和事实漂移。4. 提示压缩和摘要、RAG 的区别¶
技术 核心操作 优点 风险 RAG(检索增强生成) 向量库检索相关文档片段,拼接至 Prompt 再生成 过滤海量无关素材,降低长文本噪声,可控外部知识 检索召回偏差会丢失关键信息;检索粒度差易上下文断裂 文本摘要 大模型对原始长文浓缩改写输出精简内容 输出逻辑通顺、可读性强,大幅缩减输入长度 易产生事实幻觉;压缩过程丢失小众关键细节、数据 提示词压缩 规则 / 模型筛选删除低价值句子、冗余 Token,原文语句保留 完全依托原文证据无改写失真,显著节约上下文窗口 算法误判易删减核心约束、限定条件、关键论据 原生长上下文大模型 不做预处理,完整输入全部原始文本直接推理 流程最简,无中间步骤信息损耗,无需额外检索 / 压缩模块 推理算力、Token 成本高昂;全文冗余噪声干扰模型判断 提示压缩常和 RAG 组合:
5. Selective Context¶
Selective Context 的核心思想是:上下文中不同 token 或句子的“信息量”不同,可以删除低信息量内容,保留高信息量内容。 常见直觉: - 功能词、套话、冗余表达信息量低。
-
实体、数字、关系、条件、结论信息量高。
-
对语言模型来说越不可预测的 token,通常越有信息。
它使用语言模型估计 token 的自信息或困惑度相关指标:
信息量低的内容可以优先删除,从而压缩上下文。 Selective Context 的优点: - 思路简单。-
不需要目标大模型参与。
-
适合做内容级筛选。
局限: - 不一定 question-aware。
-
高自信息不一定等于对当前问题有用。
-
可能保留罕见但无关内容,删除常见但关键的否定词或约束。
6. LLMLingua¶
LLMLingua 的目标是用小语言模型压缩 prompt,让大模型以更少 token 完成任务。它强调“用小模型做 compressor,用大模型做 target LLM”。 核心模块:
prompt
-> budget controller(设定 Token 压缩上限)
-> coarse-grained compression(段落 / 句子级筛选)
-> token-level iterative compression(逐 Token 评估权重删减)
-> compressed prompt
-> target LLM
-
根据预算控制压缩比例。
-
逐步删除低重要性 token。
-
尽量保持压缩 prompt 对目标大模型仍可理解。
LLMLingua 的价值: - 降低 target LLM 输入 token。
-
减少推理延迟和成本。
-
对长 prompt、few-shot 示例和 RAG 上下文都有应用空间。
LLMLingua 的风险: - 小模型和目标大模型的偏好不完全一致。
-
过度压缩会破坏语法和任务指令。
-
对表格、代码、数学、法律条款要非常谨慎。
7. LongLLMLingua¶
LongLLMLingua 面向长上下文场景,重点不只是压缩 token,而是提升长上下文信息利用效率。它关注一个实际问题:
LongLLMLingua 的核心是 question-aware compression: - 当前问题是什么?-
哪些文档、句子、token 对回答这个问题最有用?
-
哪些内容虽然信息量高,但和当前问题无关?
高层流程:
question + long context
-> coarse document / sentence filtering
-> question-aware importance estimation
-> token-level compression
-> optional reorder / highlight important context
-> compressed prompt
-> target LLM
-
LongLLMLingua 更关注长上下文问答和关键证据保留。
-
LongLLMLingua 更强调 query/question 与 context 的关系。
8. Coarse-to-Fine 压缩¶
长上下文太长时,不适合一上来对所有 token 做精细评分。更高效的做法是 coarse-to-fine:
文档级:
判断哪些文档最相关。
段落/句子级:
判断哪些段落或句子可能包含答案。
token 级:
删除低价值 token,保留实体、数字、关系、否定和条件。
retrieved docs top-20
-> rerank top-10
-> LongLLMLingua compress to budget
-> final prompt
9. Question-Aware Importance¶
通用文本信息量衡量方式(如基于词频、稀有度、全局熵)仅评估 Token 在全文内部的固有稀缺程度,只判断一段文字本身信息多不多,完全忽略用户当前查询意图。 例如问题:
上下文中: 金额可能很显眼,但对“终止日期”不一定有用。Question-aware compression 会把问题作为条件,优先保留和问题相关的片段。 直觉形式: 工程上可用小模型困惑度、条件困惑度、相关性打分、reranker 分数或启发式规则组合估计: - 条件困惑度(Conditional Perplexity)固定 Question,移除某段 Token 后计算模型困惑度涨幅;困惑度上升越多,代表该 Token 对回答问题越关键。-
轻量小模型困惑度打分用小型 LM 快速评估:带该 Token 和去掉该 Token,回答问题的生成难度差异,低成本衡量 Token 价值。
-
交叉重排模型(Reranker)相关分数将 query + 句子送入 Cross-Encoder,输出相关性得分,作为句子、Token 层重要度依据。
-
启发式规则补充匹配问题实体、数字、时间、否定、条件连词、关键词同义项,强制提升对应 Token 权重。
10. 压缩比与预算控制¶
压缩比:
也可用保留率: 预算控制需要考虑: - 系统提示和安全约束不能被删。-
用户问题必须完整保留。
-
输出格式要求必须完整保留。
-
证据引用 ID、标题、页码等元数据最好保留。
-
RAG 片段之间的分隔符要保留,避免上下文混淆。
常见策略:
固定预算:
最终 prompt 不超过 8k tokens。
动态预算:
根据 query 难度、检索数量、模型窗口和成本自动分配。
分区预算:
instruction 0 压缩,question 0 压缩,evidence 高压缩,examples 中压缩。
11. 提示压缩的常见失败模式¶
删除否定词:
这类词短但关键。 删除实体或数字: 压缩后答案可能引用错误对象或错误数值。 破坏表格结构: 列名和单元格错位,模型无法理解。 破坏代码: 删除括号、缩进、变量名会使代码语义改变。 删除约束和输出格式: 模型可能答非所问或不按格式输出。 小模型错估重要性: compressor 认为不重要的内容,target LLM 实际需要。 过度压缩导致语法碎片化: 模型能省 token,但上下文变得难读,答案质量下降。12. 评估方法¶
提示压缩要同时看: - 压缩比。
-
输入 token 节省。
-
端到端延迟。
-
成本下降。
-
QA exact match / F1。
-
答案忠实性。
-
引用正确率。
-
关键信息保留率。
-
过度压缩失败率。
推荐实验:
baseline:
原始 long prompt -> target LLM
variant A:
Selective Context -> target LLM
variant B:
LLMLingua -> target LLM
variant C:
LongLLMLingua question-aware compression -> target LLM
比较:
token reduction
latency / cost
answer quality
citation accuracy
failure cases
13. 实战建议¶
优先不压缩: - system prompt。
-
安全规则。
-
用户问题。
-
输出格式。
-
工具调用 schema。
谨慎压缩: - 法律条款。
-
医疗说明。
-
数字密集文本。
-
表格。
-
代码。
-
数学推导。
适合压缩: - RAG 返回的冗余上下文。
-
长对话历史中的寒暄和重复内容。
-
多篇文档中的背景说明。
-
few-shot 示例中非关键解释。
推荐 pipeline:
query
-> retrieve top-n
-> rerank top-k
-> preserve metadata and citation ids
-> LongLLMLingua question-aware compression
-> final answer with citations
14. 面试表达模板¶
可以这样回答 LongLLMLingua:
LongLLMLingua 是面向长上下文场景的提示压缩方法。普通长上下文直接喂给 LLM 会带来高成本、信息稀释和 lost-in-the-middle。LLMLingua 用小模型估计 token 重要性并按预算压缩 prompt;LongLLMLingua 在此基础上更强调 question-aware,也就是根据当前问题判断哪些文档、句子和 token 真正有助于回答。它通常采用 coarse-to-fine 流程:先粗粒度筛文档或句子,再做 token 级压缩,并尽量保留问题、指令、实体、数字、否定、引用 ID 和关键证据。
它的价值是减少 token、降低延迟成本,并提升模型在长上下文中的信息利用效率。风险是过度压缩会删掉关键约束或破坏表格、代码、数字,因此必须用答案质量、忠实性和引用正确率一起评估。
15. 紧凑总结¶
-
提示压缩通过删除低价值内容降低 token 成本和上下文噪声。
-
Selective Context 依据信息量筛选上下文。
-
LLMLingua 用小模型作为 compressor,做预算控制和 token 级压缩。
-
LongLLMLingua 强调 question-aware compression,适合长上下文 QA。
-
压缩不是摘要,最好保留关键原文证据和引用元数据。
-
评估要同时看压缩率、答案质量、忠实性、引用正确率和延迟成本。
预览时标签不可点<div class="