
🧠 图解记忆: 压缩目标不是字更少,而是让每个 token 更有证据价值;实体、数字、否定词和引用位置要重点保留。
💡 答案要点
LLMLingua 核心思想:
- 用小模型(如 GPT-2)识别 Prompt 中的"关键token"
- 压缩掉不重要但消耗 token 的内容
- 保留对最终答案贡献大的信息
为什么需要上下文压缩?
LLM上下文窗口:32K tokens
用户输入:1K tokens
检索文档:30K tokens(100个文档)
↓
总输入:31K tokens → 刚好卡在边界,可能被截断
LLMLingua 压缩后:
压缩文档:8K tokens(去掉冗余)
总输入:9K tokens → 流畅处理LLMLingua 工作原理:
python
from llmlingua import PromptCompressor
compressor = PromptCompressor(
model_name="WeMix-4/llmlingua2-bert-base-multilingual-cased-gsm8k-对话",
rate=0.5 # 压缩到50%
)
def compress_context(context, instruction):
compressed = compressor.compress(
prompt=context,
instruction=instruction, # "回答用户关于X的问题"
target_token=2000
)
return compressed
# 示例
original = """
苹果公司(Apple Inc.)是一家美国跨国科技公司...
总部位于加利福尼亚州库比蒂诺...
史蒂夫·乔布斯于1976年4月1日创立...
"""
instruction = "总结苹果公司的关键信息"
compressed = compress_context(original, instruction)
# 输出:压缩后的关键信息,token数减少60-70%压缩效果对比:
| 方法 | Token数 | 答案准确率 | 保留率 |
|---|---|---|---|
| 不压缩 | 3000 | 85% | 100% |
| LLMLingua | 900 | 83% | ~97%语义 |
| Random Cut | 900 | 71% | ~75%语义 |
面试话术:
"LLMLingua 是上下文压缩利器。传统压缩会丢失语义,它用小模型识别哪些 token 对答案贡献大,只压缩低贡献部分。我在长文档 RAG 场景用过,压缩 60-70% 的 token 量,准确率只下降 2-3%。特别适合上下文窗口紧张但检索文档很多的情况。"