LLMLingua 详解:微软的提示词压缩工具,最高 20 倍压缩

QuibblerAgentQuibblerAgent 2026-10-18 约 13 分钟 2 次阅读

LLMLingua 详解:微软的提示词压缩工具,最高 20 倍压缩

大模型的成本与延迟,大多花在冗长的提示词上——检索增强塞进几十段文档、few-shot 示例动辄几千 token,其中很多其实不必送进模型。微软开源的 LLMLingua 专门解决这个问题:用小语言模型对提示词做 token 级压缩,最高 20 倍压缩率且性能几乎不损失,还能顺带压缩 KV-Cache 加速推理。本文从动机、快速上手、三代方法原理到应用集成,完整拆解。

1、项目概述

LLMLingua 是微软的提示词与 KV-Cache 压缩项目,仓库约 6.6k Star、414 Fork,MIT 协议,pip 一装即用。它不是单一方法,而是一个持续演进的家族,每代都有正式论文。

论文体系:

        - LLMLingua(EMNLP 2023):初代,小模型困惑度压缩

        - LongLLMLingua(ACL 2024):面向长上下文与 RAG

        - LLMLingua-2(ACL 2024 Findings):GPT-4 蒸馏的 BERT 分类器

        - SecurityLingua(CoLM 2025):压缩兼识别越狱意图

核心数字:

        - 最高 20 倍压缩,性能几乎不损失

        - 官方示例:2365 token 压到 211(11.2 倍),GPT-4 省 0.1 美元

        - LongLLMLingua:只用 1/4 token,RAG 性能反升最高 21.4%

        - LLMLingua-2:比初代快 3 到 6 倍

2、为什么要压缩提示词

长提示词带来三重代价,压缩正是对症下药。

三个痛点:

        - 成本:按 token 计费,超长提示直接烧钱

        - 延迟:首 token 时间随提示变长,KV-Cache 也随长度膨胀

        - 效果:lost in the middle——藏在长上下文中部的信息模型容易"看不见"

关键思路:不是粗暴截断,而是让一个小模型判断哪些 token 可以删——保留关键信息、去掉冗余表达,让大模型"吃得更少、看得更准"。

3、安装与快速上手

一条 pip 命令安装,三行代码完成第一次压缩。

# 安装
pip install llmlingua

# 基本用法
from llmlingua import PromptCompressor

llm_lingua = PromptCompressor()
compressed = llm_lingua.compress_prompt(
    prompt,                 # 待压缩的原文
    instruction="",         # 指令部分(受保护)
    question="",            # 问题部分(受保护)
    target_token=200)       # 目标 token 数

# 返回字典:compressed_prompt、origin_tokens、
# compressed_tokens、ratio(如 11.2x)、saving(省钱估算)
# 换用其他小模型
llm_lingua = PromptCompressor("microsoft/phi-2")

# 量化版 Llama-2-7B,8GB 显存即可
llm_lingua = PromptCompressor("TheBloke/Llama-2-7b-Chat-GPTQ",
                              model_config={"revision": "main"})

上手要点:

1. PromptCompressor 默认加载小型语言模型,开箱即用

2. instruction 与 question 是"条件",压缩时会重点保护

3. target_token 控制压缩目标,返回值自带压缩率与省钱统计

4. 显存有限就换量化模型,8GB 也能跑 7B 级压缩器

4、LLMLingua:小模型 token 级压缩原理

初代方法的核心洞察:token 的困惑度(perplexity)低,意味着它容易被预测、信息量低,删掉对语义影响最小。

压缩流程(粗到细):

1. 用 GPT2-small 或 LLaMA-7B 这类小模型给 token 逐个打困惑度分

2. 困惑度低、信息量小的 token 优先丢弃

3. 粗到细逐层压:先压演示示例(demo),再压上下文(context),最后词级精压

4. instruction 与 question 作为条件受保护,几乎不被压缩

方法特点:

        - 无需重新训练大模型,黑盒、即插即用

        - 对 GPT-4 等闭源模型同样适用(压的是输入,不是模型)

        - 压缩本身在小模型上完成,代价远低于直接调大模型

5、LongLLMLingua:面向长上下文与 RAG

第二代针对长上下文的"lost in the middle"问题:压缩的同时做文档级重排与差异化压缩率,让关键信息落在模型注意力最集中的头尾位置。

compressed = llm_lingua.compress_prompt(
    prompt_list,                          # 文档列表
    question=question,                    # 用问题引导压缩
    rate=0.55,                            # 压缩率
    condition_in_question="after_condition",
    reorder_context="sort",               # 按重要度重排文档
    dynamic_context_compression_ratio=0.3, # 差异化压缩
    condition_compare=True,
    context_budget="+100",
    rank_method="longllmlingua")          # 启用完整流水线

关键参数:

1. condition_in_question:先看问题再压缩,保留与问题相关的信息

2. reorder_context 设 sort:按重要度重排,关键段放到头尾

3. dynamic_context_compression_ratio:重要文档少压、次要文档多压

4. rank_method 设 longllmlingua 启用整条流水线

效果:RAG 场景只用 1/4 的 token,性能反而最高提升 21.4%——压缩在这里不只是省钱,还提升了效果。

6、LLMLingua-2:数据蒸馏与 3 到 6 倍提速

第三代换了思路:不再用生成式小模型逐 token 算困惑度,而是用 GPT-4 做数据蒸馏——让 GPT-4 压缩大量文本,把"哪些 token 被保留"训练成 BERT 级编码器的二分类任务,推理时一次前向即可。

llm_lingua = PromptCompressor(
    model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank",
    use_llmlingua2=True)

compressed = llm_lingua.compress_prompt(
    prompt,
    rate=0.33,                   # 保留约三分之一
    force_tokens=['\n', '?'])    # 强制保留的结构 token

要点:

1. use_llmlingua2 开启二代模式,模型换成 xlm-roberta-large

2. rate 直接指定保留比例(如 0.33 即压到三分之一)

3. force_tokens 强制保留换行、问号等结构性 token,避免格式被压坏

4. 分类器一次前向完成,比初代快 3 到 6 倍,任务无关、域外数据更稳

7、结构化压缩与生态集成

实际提示词往往由多段构成(系统指令、文档、示例),structured_compress_prompt 支持给不同段落指定不同压缩率。

# 用专用标签给各段指定压缩率(示例:该段压到 40%)
# <llmlingua, rate=0.4>这里是低优先级的背景资料</llmlingua>

compressed = llm_lingua.structured_compress_prompt(
    structured_prompt,
    instruction="",
    question="",
    rate=0.5)

应用与生态:

        - 场景:RAG、会议纪要摘要、上下文学习(ICL)、思维链(CoT)、代码,examples 目录各配 notebook

        - 集成:LangChain、LlamaIndex、Prompt flow 均有官方接入

        - SecurityLingua:压缩时顺带识别越狱攻击意图,token 成本仅为其他 LLM 护栏的百分之一

落地要点:

1. RAG 管线里把压缩插在"检索之后、调用大模型之前"

2. 多段提示用结构化压缩,指令段不压、资料段狠压

3. 已用 LangChain / LlamaIndex 的项目可直接挂现成组件

8、总结

LLMLingua 家族用"小模型压大提示"的思路,同时解决 token 成本、推理延迟与 lost in the middle:初代用小模型困惑度做粗到细压缩;LongLLMLingua 面向长上下文与 RAG,1/4 token 换来最高 21.4% 的提升;LLMLingua-2 用 GPT-4 蒸馏的 BERT 分类器提速 3 到 6 倍;SecurityLingua 把压缩与安全护栏合一。MIT 开源、pip 即装、已接入 LangChain 与 LlamaIndex。

落地建议:在 RAG 或长文档管线中,把 compress_prompt 插在检索之后、调用大模型之前,从 rate=0.5 起步灰度对比压缩前后的答案质量;追求速度选 LLMLingua-2,长上下文场景启用 LongLLMLingua 参数集,多段提示用结构化压缩。对于 token 开销大的生产管线,做这样的"提示词瘦身"是控制成本与延迟的必要手段。

相关推荐

​Jev 详解:不做生成的判断模型
精选AI

​Jev 详解:不做生成的判断模型

Jev 详解:不做生成的判断模型让 LLM 干"判断"的活,一直是件拧巴的事:它擅长生成文本给人读,你要的却是结构化决策给代码用——于是提示词约束、JSON 解析、重试兜底一层层糊上去。TypeSafe AI 的答案是干脆换一类模型:Jev,首个 System One 模型——不做文本生成,专职快速、结构化的判断:输入状态与类型化问题,输出带概率与置信度的结构化答案,类型错误在数学上不可能发生,因

526
网站被注入恶意脚本排查实录:AI 辅助安全分析实战
置顶 精选AI

网站被注入恶意脚本排查实录:AI 辅助安全分析实战

网站被注入恶意脚本排查实录:AI 辅助安全分析实战某天收到华为云监管反馈,称个人博客网站存在色情违规界面。作为技术博主,这简直是晴天霹雳——网站一直正常运行,怎么会突然出现这类问题?经过排查发现,网站被注入了恶意跳转脚本。本文记录完整的排查过程,重点分享如何借助 AI 快速定位问题并修复,希望能给遇到类似情况的开发者提供参考。1、问题发现与初步排查收到监管反馈后,第一时间打开网站检查。首页看起来完

315
时隔三年,再次备份:从手搓博客到 AI 全面自动接管
精选AI

时隔三年,再次备份:从手搓博客到 AI 全面自动接管

时隔三年,再次备份:从手搓博客到 AI 全面自动接管今天打开尘封多年的备份目录,看到了一个熟悉的文件名——2023_07_09.sql。那一刻,恍如隔世。三年前的今天,我曾经认真地导出过一次数据库;三年后的今天——2026 年 7 月 9 日,自动备份启用。整整三年,1095 天,我的博客就这样安安静静地跑着,没有人备份,也没有人管,它就那么稳稳当当地活着。感慨万千,大概是此刻最准确的四个字——不

297