调研范围:LLMLingua 系列(v1 / LongLLMLingua / LLMLingua-2)项目背景、技术演进、性能数据、横向对比、工程落地
主要文献:arXiv:2310.05736(EMNLP 2023)、arXiv:2310.06839(ACL 2024)、arXiv:2403.12968(ACL Findings 2024)
一、项目背景与核心原理
1.1 动机:Prompt 膨胀是 LLM 落地的成本瓶颈
CoT、ICL、RAG 等技术的普及使 prompt 长度从几百 token 迅速膨胀到数万 token。按 GPT-4 计费标准,一次请求仅 prompt 成本就可能达 $0.3–$1+。企业级应用中,80% 的 token 开销往往集中在冗余的上下文内容里。
| 技术范式 | 对 Prompt 的影响 |
|---|---|
| In-Context Learning (ICL) | 注入多个 few-shot 示例,每个示例 300–600 token |
| Chain-of-Thought (CoT) | 完整推理链进一步增大示例体积 |
| RAG(检索增强生成) | 每次请求注入若干检索文档段落 |
| Agent / 工具调用 | System prompt + 对话历史 + 工具描述累积 |
三类影响:
- 成本:Token 按量计费,压缩 20× 可节省约 95% 的 input token 费用
- 延迟:prefill 阶段与输入长度正相关,长 prompt 直接拉高首 token 延迟(TTFT)
- 准确率:超长上下文有 “lost-in-the-middle” 问题——LLM 对中间位置的信息关注度显著低于首尾
1.2 核心洞察:用小模型 PPL 代理信息量
LLMLingua 的根本思路是:用廉价的小语言模型(GPT-2/LLaMA-7B)计算 token 的困惑度(Perplexity),以此作为信息重要性的代理。
$$\text{PPL}(x) = \exp\left(-\frac{1}{N}\sum_{i=1}^{N}\log p_\theta(x_i \mid x_{<i})\right)$$
- 低 PPL token:可预测 → 语义冗余 → 可删除
- 高 PPL token:出乎意料 → 信息量大 → 应保留
这一机制的关键优势在于:小模型对 token 重要性的判断与大模型高度相关,且完全不需要访问目标 LLM(黑盒兼容),用 GPT-2(117M)替代 GPT-4 做判断,成本可忽略。
1.3 整体框架:粗粒度 + 细粒度两阶段压缩
原始 Prompt
│
▼
[粗粒度:Budget Controller]
─ 粒度:Demo / 文档级
─ 目标:给各组件分配 token 预算,高信息量的段落分配更多空间
│
▼
[可选:Distribution Alignment]
─ 轻量 LoRA 微调,对齐小模型与目标 LLM 的词汇分布偏差
│
▼
[细粒度:Iterative Token-level Compression]
─ 按条件 PPL 迭代过滤 token,每轮删除后重新计算(避免级联误差)
│
▼
压缩后 Prompt → 目标 LLM(GPT-4 等,黑盒兼容)
二、各版本技术演进
LLMLingua 系列三个版本各自针对前一版本的核心瓶颈进行突破,并不是简单的功能叠加。
2.1 演进路线图
LLMLingua v1(EMNLP 2023)
├─ 核心贡献:提出「PPL 过滤冗余 token」的黑盒压缩范式
├─ 三阶段:Budget Controller → Iterative Token-level → Distribution Alignment
└─ 瓶颈:无 query 感知;自回归 PPL 是 O(n²),10k token 需 30-60s;中文差
│
├─── 分支 A(RAG 场景:需要 query 感知 + 位置优化)
│ ↓
│ LongLLMLingua(ACL 2024)
│ ├─ 引入对比困惑度(Contrastive PPL),把 query 信号注入 token 决策
│ ├─ 文档重排序(缓解 lost-in-middle)
│ └─ 瓶颈:仍是自回归,速度慢;强依赖 query 可用性
│
└─── 分支 B(通用场景:速度 + 泛化)
↓
LLMLingua-2(ACL Findings 2024)
├─ GPT-4 数据蒸馏 + 双向编码器 token 分类,彻底换掉 PPL 机制
├─ O(n²) → O(n),速度快 3-6×;2.1GB 显存;多语言(中文)
└─ 代价:最高压缩率降至 ~5×(v1 可达 20×)
2.2 LLMLingua v1(EMNLP 2023)
核心机制
Budget Controller(粗粒度):对每条 Demonstration 整体计算 PPL,按比例动态分配 token 预算,而非粗暴地丢弃整段 Demo:
τ_i = τ · (PPL_i / Σ PPL_j) · N_demo
三段组件的分配逻辑:
- Instruction(系统提示):低压缩率,全局语义依赖强
- Demonstrations(示例):按 PPL 比例分配,低信息量示例多压缩
- Question(用户问题):通常不压缩
Iterative Token-level Compression(细粒度):逐批删除最低条件 PPL token,每轮删除后必须重新计算剩余 token 的条件概率(因为删除 token 会改变上下文,影响其他 token 的 PPL)。这是 v1 速度慢的根本原因。
Distribution Alignment(可选):LoRA 微调小模型以对齐领域分布。消融实验显示有 vs 无对齐:GSM8K +4%,BBH +2.5%;工程场景通常可跳过。
v1 的局限
| 局限 | 具体表现 |
|---|---|
| 无 Query 感知 | 压缩决策不考虑"哪些 token 对回答有帮助" |
| Lost-in-Middle | 均匀压缩多文档,中间文档关键信息更易被删除 |
| 速度慢 | 10k token 需 30-60s(GPU,LLaMA-7B) |
| 中文支持差 | 默认小模型 GPT-2 为英文训练,中文 PPL 不准 |
2.3 LongLLMLingua(ACL 2024)
核心洞察:RAG 场景中 LLM 性能取决于关键信息的密度和位置,不只是压掉冗余,还要主动把关键信息放到 LLM 最容易注意到的位置。
四大新组件
① Question-Aware 粗粒度压缩(文档级)
用 query-document 相关性替代文档 PPL 来分配压缩预算:
相关性分数 = PPL(question | d_i) / PPL(question)
分数越低 = 文档越能解释 question = 越重要 = 分配更多 token 预算。
② Contrastive PPL(对比困惑度,Token 级)
LongLLMLingua 最关键的技术贡献,把 query 信号显式注入 token 保留决策:
传统 PPL(v1): score = PPL(x_i | 前文)
对比 PPL(Long):score = PPL(x_i | 前文) − PPL(x_i | 前文 + question)
差值越大 → 加入 question 后该 token 变得更"确定" → 与 query 高度相关 → 优先保留
③ 文档重排序(Reorder Context)
利用粗粒度的相关性分数,把高相关性文档移到首尾位置,利用 LLM 的 position bias 提升答案质量:
原始顺序:[d1(0.3), d2(0.8), d3(0.5), d4(0.9), d5(0.2)]
重排后: [d4(0.9), d2(0.8), d3(0.5), d1(0.3), d5(0.2)]
↑首部最相关 ↑尾部次要
实验:单独使用重排序(不改变压缩率)即可在多跳 QA 上提升 5-8% 准确率。
④ 后续压缩恢复(Subsequent Recovery)
压缩后对输出做局部恢复——关键实体被截断时从原文恢复其上下文窗口内的相邻 token,是后处理步骤,不影响主流程。
2.4 LLMLingua-2(ACL Findings 2024)
核心洞察:PPL 本质上是任务感知的(task-specific),泛化差;自回归计算是 O(n²),太慢。 解法是彻底换掉 PPL 机制,改用 GPT-4 数据蒸馏 + 双向编码器。
两阶段:数据蒸馏 + Token 分类
阶段 1:GPT-4 数据蒸馏
输入:MeetingBank 数据集(~200k 条会议记录)
Step 1:提示 GPT-4 对每个 token 标注 [KEEP] 或 [DROP]
GPT-4 能捕捉跨句依赖、专业术语重要性、语用意图
Step 2:数据质量过滤(验证 KEEP 集合能重建原文语义)
Step 3:构建训练集
输入:原始 token 序列
标签:0(DROP)/ 1(KEEP)
规模:约 200k 训练样本
阶段 2:双向编码器 Token 分类
基础模型:
XLM-RoBERTa-large(560M)→ 效果更好,~2.1GB 显存
mBERT-base(110M) → 更轻更快,~1.5GB 显存,多语言强
损失函数:
L = -Σ [y_i · log(p_i) + (1-y_i) · log(1-p_i)]
推理执行:
1. 单次前向传播,并行得到所有 token 的 p_preserve(O(n))
2. 按 p_preserve 降序保留前 k 个 token
3. 恢复原始相对顺序 → 输出压缩文本
为什么双向编码器是关键改变
| 维度 | v1/LongLLMLingua | LLMLingua-2 |
|---|---|---|
| 上下文方向 | 单向(只看前文) | 双向(左右均可见) |
| 计算复杂度 | O(n²),序列依赖 | O(n),单次并行前向 |
| 速度(1k token) | ~3-5s(GPU) | ~0.3-0.5s |
| 显存(推荐模型) | 13GB(LLaMA-7B) | 2.1GB |
| 任务依赖 | 任务感知(PPL 与任务相关) | 任务无关 |
| 中文 / 多语言 | ❌ | ✅(XLM-RoBERTa 100+ 语言) |
LLMLingua-2 最高压缩率为何更低
v2 最大实用压缩率约 5×,远低于 v1 的 20×。根本原因是训练目标不同:GPT-4 标注时倾向于保守——删掉 token 就必须不影响重建原文,过度删除的样本在数据过滤时被去掉。这是其"保真承诺"的副产品,而非设计缺陷。
2.5 三版本技术架构对比
| 维度 | LLMLingua v1 | LongLLMLingua | LLMLingua-2 |
|---|---|---|---|
| 发表 | EMNLP 2023 | ACL 2024 | ACL Findings 2024 |
| 压缩机制 | 自回归 PPL 过滤 | 自回归对比 PPL + 文档重排 | 双向编码器 token 分类 |
| 信息代理 | 无条件 PPL | Contrastive PPL(含 query) | GPT-4 蒸馏标注 |
| 粗粒度决策 | Demo 级 PPL 排序 | Document 级 query 相关性 | 无(纯 token 级) |
| Query 感知 | ❌ | ✅ | ❌(任务无关) |
| 文档重排序 | ❌ | ✅ | ❌ |
| 是否需预训练 | ❌ | ❌ | ✅(已有开源模型) |
| 最大实用压缩率 | ~20× | ~16× | ~5× |
| 速度(1k token) | ~1-2s(CPU) | ~2-4s | ~0.3-0.5s(GPU) |
| 显存(推荐模型) | 13GB | 13GB | 2.1GB |
| 中文支持 | ⚠️ 差 | ⚠️ 差 | ✅ |
三、压缩率、效果指标与适用场景
3.1 LLMLingua v1:极高压缩率下的惊人鲁棒性
GSM8K(数学推理,CoT)
| 压缩率 | 保留 token | EM 变化 | 对比基线(Sentence Selection) |
|---|---|---|---|
| 4× | 25% | ≈ 无损失 | — |
| 14× | ~7% | -1.44 EM | 同压缩率差 33.1 EM |
| 20× | ~5% | -1.52 EM | 同压缩率差 33.1 EM |
核心结论:20× 极高压缩下 EM 仅降 1.52 个点,说明 LLM 具备很强的"残缺 prompt 理解"能力;而对比方法(Sentence Selection)在同等压缩率下崩溃(-33.1 EM)。
BBH(Big-Bench Hard,多任务推理)
| 压缩率 | 结论 |
|---|---|
| 7× | 接近原始 |
| 14× | 轻微下降,多步推理任务更敏感 |
成本节省
- 典型 ICL prompt 2000-5000 token(含 20 个 demonstrations)
- 压缩后 100-300 token,节省 API 成本约 80-95%
3.2 LongLLMLingua:RAG 场景压缩后反超原始
NaturalQuestions(多文档 QA,20 个文档)
| 方法 | EM Score | Token 数 | 备注 |
|---|---|---|---|
| 无压缩 | 基准 | ~20k | GPT-3.5-Turbo |
| LLMLingua v1(4×) | 略低于基准 | ~5k | 无 query 感知 |
| LongLLMLingua(4×) | 基准 +21.4% | ~5k | 超过无压缩 |
MuSiQue(多跳推理)
| 方法 | F1 变化 |
|---|---|
| v1 压缩(2×) | ≈ 基准 |
| LongLLMLingua(2×) | +4.2% F1 |
LongBench 综合
- 4× 压缩 + 重排序:优于 GPT-3.5-Turbo 无压缩基线
- 端到端延迟降低 1.4x–2.6x(2–6× 压缩率)
核心发现:适度压缩(4×)+ 文档重排序 反而比不压缩效果更好。去噪(压缩低相关内容)+ 位置对齐(高相关文档移到首尾)共同消除了 lost-in-the-middle 这个 LLM 的固有缺陷。
3.3 LLMLingua-2:速度与显存的突破
MeetingBank(会议记录 QA)
| 压缩率 | LLMLingua-2 F1 | LLMLingua v1 F1 | 无压缩 F1 |
|---|---|---|---|
| 2× | 84.3 | 81.2 | 86.1 |
| 4× | 78.5 | 73.1 | 86.1 |
GSM8K 推理
| 压缩率 | LLMLingua-2 Acc | LLMLingua v1 Acc |
|---|---|---|
| 2× | 57.2 | 54.8 |
压缩器开销
| 模型 | 显存 | 速度(1k token,GPU) |
|---|---|---|
| LLaMA-2-7B(v1) | 13 GB | ~3-5s |
| xlm-roberta-large(v2) | 2.1 GB | ~0.3-0.5s |
| mBERT-base(v2) | 1.5 GB | ~0.2-0.4s(CPU) |
3.4 各版本适用场景矩阵
| 场景 | v1 | LongLLMLingua | LLMLingua-2 |
|---|---|---|---|
| ICL/Few-shot(极高压缩率 >10×) | ✅ 最优 | ✅ | ⚠️ 上限低 |
| RAG 多文档问答(有 query) | ⚠️ | ✅ 最优 | ✅ |
| 长文档(>10k token) | ❌ 太慢 | ✅ | ✅ |
| 通用 pipeline(无特定 query) | ⚠️ | ⚠️ | ✅ 最优 |
| 实时低延迟(<1s) | ❌ | ❌ | ✅ |
| 中文 / 多语言 | ❌ | ❌ | ✅ |
| 会议记录 / 对话摘要 | ✅ | ✅ | ✅ 专项训练 |
| 代码文件(需保留结构) | ⚠️ | ⚠️ | ⚠️ |
四、与其他方案横向对比
4.1 Prompt Compression 方案全景
当前主流方案可分为两大类型:Hard Prompt(token 级文本过滤/替换,黑盒兼容)和 Soft Prompt(学习连续 embedding,需要白盒访问)。
Prompt Compression
├── Hard Prompt(黑盒兼容)
│ ├── 无监督:Selective Context、LLMLingua 系列
│ └── 有监督:RECOMP(抽取/生成式)
└── Soft Prompt(白盒,需要目标 LLM 权重)
├── AutoCompressor
├── Gist Token
└── ICAE
4.2 核心属性对比矩阵
| 方案 | 压缩类型 | 需要微调 | 黑盒兼容 | Query-Aware | 输出可读 | 最高压缩率 |
|---|---|---|---|---|---|---|
| Selective Context | Hard/句子级 | ❌ | ✅ | ❌ | ✅ | ~3× |
| RECOMP(抽取) | Hard/句子级 | ✅ | ✅ | ✅ | ✅ | ~20× |
| RECOMP(生成) | Hard/生成 | ✅ | ✅ | ✅ | ✅ | ~20× |
| LLMLingua v1 | Hard/Token | ❌ | ✅ | ❌ | ✅ | ~20× |
| LongLLMLingua | Hard/Token | ❌ | ✅ | ✅ | ✅ | ~16× |
| LLMLingua-2 | Hard/Token | 已预训练 | ✅ | ❌ | ✅ | ~5× |
| AutoCompressor | Soft/向量 | ✅ | ❌ | ❌ | ❌ | ~30k token |
| Gist Token | Soft/向量 | ✅ | ❌ | ❌ | ❌ | ~26× |
| ICAE | Soft/向量 | ✅ | ❌ | ❌ | ❌ | ~32× |
4.3 压缩率 vs 性能损失
| 方案 | 典型压缩率 | 最高 | 代表数据点 |
|---|---|---|---|
| Selective Context | 2× | ~3× | BERTScore -0.023 @ 2× |
| RECOMP | 4-20× | 20× | HotpotQA -2.4% @ 9× |
| LLMLingua v1 | 4-14× | 20× | GSM8K -1.52 EM @ 20× |
| LongLLMLingua | 4× | 16× | NQ +21.4% @ 4× |
| LLMLingua-2 | 2-4× | 5× | MeetingBank F1: 84.3 @ 2× |
| AutoCompressor | 4-8× | ~30k→ | ICL ≈ 原始 demonstrations |
| Gist Token | - | 26× | FLOPs -40% |
| ICAE | 4-32× | 32× | QA ≈ 全上下文 |
4.4 深度对比分析
LLMLingua vs Selective Context
两者都是无需训练的 Hard Prompt 方案,但差距远大于表面:
| 维度 | Selective Context | LLMLingua v1 |
|---|---|---|
| 评分机制 | 绝对自信息(固定) | 条件 PPL(动态更新) |
| 压缩粒度 | 句子级(粗) | Token 级(细) |
| 压缩率上限 | ~3× | ~20× |
| 性能保持 @ 2× | BERTScore -0.023 | 接近无损 |
| 分布对齐 | ❌ | ✅ |
关键差距:LLMLingua 的迭代 token 级过滤使其压缩率上限从 3× 拉到 20×,差距 6-7 倍。
LLMLingua vs RECOMP
RECOMP 是 LLMLingua 系列最接近的竞争对手,差异在于压缩范式:
- LLMLingua(抽取式):只能从原文选 token,信息不会被改写,无幻觉风险
- RECOMP 生成式:可以重新组织、跨文档合并信息,在多跳推理(HotpotQA)等需要信息综合的场景有结构性优势——代价是需要训练压缩器且存在幻觉风险
选型建议:多文档查找型问答(RAG)用 LLMLingua;需要跨文档信息整合且有幻觉容忍的场景可考虑 RECOMP 生成式。
Hard Prompt vs Soft Prompt
| 维度 | Hard Prompt(LLMLingua 系列) | Soft Prompt(AutoCompressor/ICAE 等) |
|---|---|---|
| 黑盒 API 兼容 | ✅ | ❌ 需要白盒权重 |
| 输出可读性 | ✅ | ❌ 连续向量 |
| 模型升级成本 | 无 | 全部重训 |
| 最高压缩率 | ~20× | ~32×(ICAE) |
| 工业落地性 | ✅ 高 | ⚠️ 低 |
结论:Soft Prompt 学术指标漂亮,但绑定特定 LLM 版本、不可审计、无法用于任何 SaaS API,目前主要是研究工具。工业场景 90%+ 是黑盒 API,LLMLingua 系列是事实上的主流。
4.5 综合评分
| 方案 | 压缩率 | 性能保持 | 速度 | 工程可用性 | 综合 |
|---|---|---|---|---|---|
| LLMLingua-2 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| LongLLMLingua | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| LLMLingua v1 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| RECOMP | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| Selective Context | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| Soft Prompt(ICAE 等) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐ | ⭐⭐ |
五、工程落地建议
5.1 版本选型决策
你的场景是什么?
│
├── 需要极高压缩率(>10×)?
│ └── ICL/Few-shot 场景 → 选 LLMLingua v1(LLaMA-7B 压缩器)
│
├── RAG 多文档问答,且 query 可提前获得?
│ └── 选 LongLLMLingua + reorder_context="sort"
│
├── 中文 / 多语言场景?
│ └── 必须用 LLMLingua-2(XLM-RoBERTa / mBERT)
│
├── 通用 pipeline,query 不可提前获得?
│ └── 选 LLMLingua-2(任务无关,开箱即用)
│
└── 显存 < 4GB 或纯 CPU 环境?
├── LLMLingua-2 mBERT(~1.5GB)→ 最推荐
└── LLMLingua v1 + GPT-2(~0.5GB)→ 备选
通用首选:绝大多数工程场景首选 LLMLingua-2(xlm-roberta-large)——开箱即用,速度最快,不依赖 query,适配任何 pipeline。
5.2 安装与快速上手
# 基础安装
pip install llmlingua
# 完整安装(含 LangChain / LlamaIndex 集成)
pip install llmlingua openai langchain langchain-community
三种核心用法
from llmlingua import PromptCompressor
# ─── 用法 1:LLMLingua-2(推荐,通用首选)
llm = PromptCompressor(
"microsoft/llmlingua-2-xlm-roberta-large-meetingbank",
use_llmlingua2=True # ⚠️ 必须设置,否则走 v1 逻辑
)
result = llm.compress_prompt(prompt, rate=0.5)
# result 包含 compressed_prompt / origin_tokens / compressed_tokens / ratio / saving
# ─── 用法 2:LongLLMLingua(RAG 多文档场景)
llm = PromptCompressor()
result = llm.compress_prompt(
[doc1, doc2, doc3, ...],
question="What are the main findings?",
rate=0.4,
reorder_context="sort", # 文档重排序(强烈推荐)
dynamic_context_compression_ratio=0.3,# 高相关文档少压缩
rank_method="longllmlingua",
condition_compare=True,
)
# ─── 用法 3:精细控制(结构化压缩)
structured = """
<llmlingua, compress=False>Speaker A:</llmlingua>
<llmlingua, rate=0.3>This is a lengthy explanation that can be compressed...</llmlingua>
"""
result = llm.structured_compress_prompt(structured, rate=0.5)
5.3 LangChain 集成(三步完成)
from langchain.retrievers.contextual_compression import ContextualCompressionRetriever
from langchain_community.document_compressors import LLMLinguaCompressor
# Step 1:初始化压缩器(一次,循环外)
compressor = LLMLinguaCompressor(
model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank",
use_llmlingua2=True,
)
# Step 2:包裹现有 Retriever(不侵入已有代码)
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=your_retriever # FAISS / Chroma / Pinecone 等均可
)
# Step 3:调用方式与普通 retriever 完全一致
docs = compression_retriever.invoke("Your question here")
5.4 LlamaIndex 集成
from llama_index.postprocessor.longllmlingua import LongLLMLinguaPostprocessor
from llama_index.core.query_engine import RetrieverQueryEngine
node_postprocessor = LongLLMLinguaPostprocessor(
target_token=300, # 直接指定压缩后 token 数
rank_method="longllmlingua",
additional_compress_kwargs={
"condition_compare": True,
"reorder_context": "sort",
"dynamic_context_compression_ratio": 0.3,
},
)
query_engine = RetrieverQueryEngine.from_args(
retriever=retriever, # similarity_top_k 建议设 10-20
node_postprocessors=[node_postprocessor],
)
5.5 压缩率设置建议
| 场景 | 推荐 rate | 说明 |
|---|---|---|
| 通用对话历史 | 0.5(2×) | 保守,信息损失小 |
| RAG 多文档 | 0.3-0.4(2.5-3×) | 结合 reorder_context 效果更好 |
| Few-shot ICL | 0.1-0.2(5-10×) | v1 场景,需实验验证 |
| 中文场景 | 0.5-0.6 | 官方训练数据英文为主,适当保守 |
| 数字/日期密集 | 0.6+ 或 force_tokens | 保护关键信息 |
5.6 生产环境注意事项
① 模型缓存(必须)
首次运行会从 HuggingFace 下载模型(xlm-roberta-large ~1.1GB),生产环境必须提前缓存:
import os
os.environ["HF_HOME"] = "/path/to/model/cache" # 指定缓存目录
② 初始化在循环外
# ❌ 错误:每次循环重新加载,极慢
for doc in docs:
llm = PromptCompressor(...) # 每次重新加载几 GB 模型
# ✅ 正确:初始化一次复用
llm = PromptCompressor(...)
for doc in docs:
llm.compress_prompt(doc, rate=0.5)
③ 不适用场景
| 场景 | 原因 | 处理方式 |
|---|---|---|
| 短 prompt(< 200 token) | 压缩开销 > 节省 | 跳过,不压缩 |
| 代码文件 | 删除 token 导致语法错误 | <llmlingua, compress=False> |
| 合同/法律文档逐字分析 | 措辞精确,改变语义 | rate ≥ 0.8 或不压缩 |
| 数字/日期密集 | PPL 打分不准 | force_tokens=['数字', '日期'] |
| 实时流式(< 100ms 延迟) | 即使 v2 也需 200-500ms | 预计算或缓存压缩结果 |
④ 压缩率 vs target_token 选择
# rate:相对压缩比,适合不确定输入长度时
llm.compress_prompt(prompt, rate=0.5)
# target_token:绝对 token 数,适合有严格上下文窗口限制时
llm.compress_prompt(prompt, target_token=512)
5.7 端到端收益估算
示例:RAG 服务,检索 10 个文档共 8k token,目标 LLM 为 GPT-4o
不压缩:
[retrieval 1s] + [LLM 推理 8s @ 8k input tokens] = 9s 端到端
成本:8k × $5/1M = $0.04/次 × 日 10k 请求 = $400/天
压缩(LLMLingua-2,3×):
[retrieval 1s] + [压缩 0.5s] + [LLM 推理 3s @ ~2.7k tokens] = 4.5s 端到端
成本:2.7k × $5/1M = $0.0135/次 × 日 10k 请求 = $135/天
结果:延迟 -50%,成本 -66%(节省 $265/天)
注意:LLMLingua-2 压缩器本身在自有服务器运行,边际成本接近 0
六、信息来源
| 来源 | URL |
|---|---|
| LLMLingua v1 论文(EMNLP 2023) | https://arxiv.org/abs/2310.05736 |
| LLMLingua v1 论文(arXiv HTML) | https://arxiv.org/html/2310.05736v2 |
| LongLLMLingua 论文(ACL 2024) | https://arxiv.org/html/2310.06839v2 |
| LLMLingua-2 论文(arXiv) | https://arxiv.org/abs/2403.12968 |
| LLMLingua-2 项目页 | https://llmlingua.com/llmlingua2.html |
| Microsoft Research 项目页 | https://www.microsoft.com/en-us/research/project/llmlingua/ |
| GitHub 官方仓库 | https://github.com/microsoft/LLMLingua |
| LangChain 官方文档 | https://python.langchain.com/docs/integrations/retrievers/llmlingua/ |
| LlamaIndex 博客 | https://www.llamaindex.ai/blog/longllmlingua-bye-bye-to-middle-loss-and-save-on-your-rag-costs-via-prompt-compression-54b559b9ddf7 |
| RECOMP 论文(ICLR 2024) | https://arxiv.org/abs/2310.04408 |
| Selective Context 论文 | https://arxiv.org/abs/2310.06201 |
| AutoCompressor 论文 | https://arxiv.org/abs/2305.14788 |