Contextual Compression
Contextual Compression 是在注入上下文前压缩检索结果的技术,只保留与查询相关的部分,去除无关内容。
#type / concept
#status / evergreen
#tech / ai
[!info] related notes
- 所属 MOC: RAG Engineering MOC
- 相关: [[reranker|Reranker]], Context Compression
Contextual Compression
一句话定义
Contextual Compression 是在注入上下文前压缩检索结果的技术。检索到的文档块可能包含很多与查询无关的内容,压缩后只保留相关的部分。
核心原理
压缩方式
| 方式 | 原理 | 适用场景 |
|---|---|---|
| 提取式 | 只保留相关句子 | 长文档 |
| 摘要式 | LLM 生成摘要 | 复杂文档 |
| 过滤式 | 去除不相关段落 | 混合文档 |
Python 实现
class ContextualCompressor:
def __init__(self, llm):
self.llm = llm
async def compress(self, query: str, documents: list[str]) -> list[str]:
compressed = []
for doc in documents:
prompt = f"""
从以下文档中提取与查询直接相关的内容。只保留相关部分,去除无关内容。
查询: {query}
文档:
{doc}
相关部分:
"""
result = await self.llm.chat(prompt)
if result.strip():
compressed.append(result)
return compressed
与 Reranker 的关系
检索结果 (20 个)
│
▼
Reranker → 重排序 (选 5 个)
│
▼
Contextual Compression → 压缩每个文档 (只保留相关部分)
│
▼
注入上下文
常见坑
- 不做压缩: 检索结果太长浪费 token
- 压缩太狠: 丢失了关键上下文
- 压缩增加延迟: 每个文档都调用 LLM