Context Compression

Context Compression 是在不丢失关键信息的前提下,减少上下文 token 消耗的技术,包括文本压缩、摘要、去重和结构化。

#type / concept #status / evergreen #tech / ai

[!info] related notes

Context Compression

一句话定义

Context Compression 是在不丢失关键信息的前提下,减少上下文 token 消耗的技术。检索到的文档可能很长,工具返回的结果可能很大,需要压缩后再注入上下文。

核心原理

压缩技术

技术原理适用场景
摘要LLM 压缩文本长文档
提取只保留相关段落检索结果
去重移除重复信息多源检索
结构化转成表格/列表自由文本

检索结果压缩

class ContextualCompressor:
    def __init__(self, llm):
        self.llm = llm

    async def compress(self, query: str, documents: list[str], max_tokens: int = 2000) -> str:
        """压缩检索结果,只保留与查询相关的部分"""
        prompt = f"""
从以下文档中提取与问题相关的关键信息。只保留直接相关的内容。

问题: {query}

文档:
{chr(10).join(documents)}

提取的关键信息:
"""
        return await self.llm.chat(prompt)

工具结果压缩

def compress_tool_result(result: any, max_length: int = 1000) -> str:
    """压缩工具返回结果"""
    text = json.dumps(result) if not isinstance(result, str) else result

    if len(text) <= max_length:
        return text

    # 截断并添加省略号
    return text[:max_length] + "\n... (结果已截断)"

常见设计模式

1. 按查询压缩

根据用户问题,只保留相关的部分。

2. 分层压缩

重要信息保留原文,次要信息用摘要。

3. 渐进式压缩

先用原文,token 不够时再压缩。

常见坑

  1. 压缩太狠: 丢失关键信息
  2. 不做压缩: 检索结果太长浪费 token
  3. 压缩增加延迟: 每次都调用 LLM 压缩

参考资料

创建于 2026/6/30 更新于 2026/7/15