30 秒快速回答:Contextual Retrieval(上下文检索)是 Anthropic 提出的 RAG 优化技术——在向量化之前,先用 LLM 给每个文本块生成一段「上下文描述」(它来自哪份文档、讲的是什么),再把「描述 + 原文」一起嵌入向量库。这样每个片段不再是孤立的字符串,而是带着语境的语义单元,检索时更容易被用户问题命中。核心价值:不用换模型、不用改架构,只靠一条预处理流程就能让 RAG 检索失败率平均降低 35%,配合混合检索 + 重排序最高达 49%,是目前性价比最高的检索质量提升手段。

一、为什么要给文本块加上下文?

RAG(检索增强生成)的经典流程是:把文档切块(chunk)→ 向量化 → 存入向量库 → 查询时检索 Top-K → 交给大模型生成答案。

问题出在「切块」这一步。一个 chunk 被硬生生从原文里切出来后,常常丢失了语境。比如下面这句:

第 4 季度环比增长 12%,超出预期。

单独嵌入这条文本时,模型并不知道「这说的是哪家公司、哪个指标、出自哪份财报」。当用户问「苹果上一季度营收表现如何」时,这条 chunk 的向量距离可能匹配不上,检索召回就失败了——再强的生成模型也救不回来。

这正是 2026 年 RAG 实践反复遇到的「嵌入式失忆」问题:切块切断了语义上下文,向量化保留了字面却丢了出处。

二、Contextual Retrieval 的原理

Anthropic 的解法非常直观:在嵌入之前,先让 LLM 为每个 chunk 生成一小段上下文描述,然后把「描述 + 原文」拼接后一起嵌入。

官方建议的 Prompt 模板(要点):

<document>(整份文档原文)</document>
这里是上述文档中的文本块,请给出简短的上下文描述:
指出这段文本的主题、说话人、前文关系等关键信息,
控制在 50-100 个词内,并保留关键实体与数字。
<chunk>(当前文本块)</chunk>

处理流程变成:

文档 → 切块 → LLM 生成每块上下文描述 → 拼接描述+chunk → 嵌入 → 存入向量库

检索阶段完全不变:用户问题 → 向量化 → Top-K 检索 → 生成。改变的只是入库前的数据形态——每一条向量现在都携带了「出处 + 主题 + 邻近内容」三重语境。

官方实测:Contextual Retrieval 让 Top-20 检索失败率降低 35%;再叠加混合检索(向量 + BM25)与重排序(Reranker),失败率总计降低 49%。

三、实用代码示例

以下是基于 Anthropic 官方思路的 Python 实现(伪代码级别可直接改造):

import anthropic

client = anthropic.Anthropic()

def contextualize_chunk(document: str, chunk: str) -> str:
    """为单个文本块生成上下文描述并拼接"""
    resp = client.messages.create(
        model="claude-sonnet-4-5",
        max_tokens=300,
        messages=[{
            "role": "user",
            "content": f"""<document>{document}</document>
这里是上述文档中的文本块,请用 50-100 个词给出
简短上下文描述(主题、说话人、与前文关系,保留关键实体数字):
<chunk>{chunk}</chunk>"""
        }]
    )
    context = resp.content[0].text
    return f"{context}\n\n{chunk}"  # 描述 + 原文一起嵌入

# 批量处理:对每个 chunk 生成上下文后写入向量库
for chunk in chunks:
    contextual_chunk = contextualize_chunk(document, chunk)
    vector_store.add(embed(contextual_chunk))

生产环境三条优化建议:

  1. 用 Prompt Caching:整份 document 是重复前缀,缓存后上下文生成的 token 成本可下降约 90%;
  2. 分层生成:只对「与 query 相关性不确定」的中等 chunk 生成上下文,高价值与低价值块跳过,控制成本;
  3. 必须叠加混合检索 + 重排:Contextual Retrieval 与 Reranker 是乘法关系,叠加后提升最大。

四、对比与选型:什么时候该用?

维度 朴素 RAG Contextual Retrieval + 混合检索 & 重排
检索失败率(Top-20) 基线 降 35% 降 49%
额外成本 无 token 成本约翻倍(可缓存缓解) 再加重排计算
实现难度 低 中(一条预处理流水线) 中高
适用场景 快速 Demo、短文档 长文档、多文档库、问答准确率敏感 生产级知识库系统

结论:文档很长、chunk 之间相互依赖(如财报、论文、合同)、检索召回明显不准的场景,Contextual Retrieval 是第一优先级的低成本改造;如果只是几十页的短文档、查询命中率已经很高,则没必要为它付出翻倍 token 成本。

总结与延伸阅读

要点回顾:

  1. RAG 检索失败的根源之一是「切块切断语境」,Contextual Retrieval 用 LLM 生成上下文描述补齐语境;
  2. 实现只需在入库前加一道「描述 + 原文」预处理,检索链路零改动;
  3. 官方数据:检索失败率降 35%,叠加混合检索 + 重排最高降 49%;
  4. 成本可接受:配合 Prompt Caching 与分层生成,能把 token 开销控制在合理范围。

延伸阅读建议:

  • 本系列《什么是混合检索与重排序?》了解与它配合的检索链路;
  • 本系列《什么是 Agentic RAG?》学习检索之上的自主决策;
  • Anthropic 官方博客《Introducing Contextual Retrieval》与 Anthropic Cookbook 的完整代码仓库。