1. 传统RAG的痛点与Contextual Retrieval的诞生
在构建基于大语言模型的知识问答系统时,我们常常会遇到这样的困境:明明知识库中包含了正确答案,但系统就是无法准确检索到相关内容。这就像在一个杂乱无章的图书馆里找书——你知道书就在某个书架上,但就是找不到具体位置。
传统RAG(检索增强生成)系统通常采用以下流程:
- 将文档切分成小块(通常200-500token)
- 使用嵌入模型将每个块转化为向量
- 存储这些向量到向量数据库中
- 用户查询时,计算查询向量与存储向量的相似度
- 返回最相似的几个文本块给大模型生成答案
这种方法的致命缺陷在于:分块过程破坏了文档的上下文结构。举个例子,在金融财报分析中,我们可能会看到这样一个文本块:
"营收同比增长15%,主要得益于新产品的成功推出。"
如果没有上下文,我们无法知道:
- 这是哪家公司的财报?
- 报告的是哪个季度或年度的数据?
- "新产品"具体指什么产品?
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Contextual Retrieval的核心创新
Anthropic提出的Contextual Retrieval方案巧妙地解决了这个问题。其核心思想是:在向量化和索引前,先为每个文本块生成一段"情境说明"。
具体实现步骤:
- 对原始文档进行分块(与传统RAG相同)
- 对于每个文本块,使用LLM基于整个文档生成一段简短的情境说明
- 将情境说明拼接到原文本块前面
- 对"情境说明+原文本块"进行向量化和索引
以前面的财报例子为例,经过Contextual Retrieval处理后可能变成:
"这是ACME公司2023年Q4财报中'经营业绩'章节的部分内容,讨论的是该公司旗舰产品X系列的销售情况。营收同比增长15%,主要得益于新产品的成功推出。"
2.1 技术优势解析
这种方法带来了几个关键优势:
- 检索准确率显著提升:实验数据显示top-20检索失败率降低约49%
- 保留文档结构信息:知道文本块在文档中的位置和角色
- 兼容现有技术栈:可以与现有向量数据库和检索系统无缝集成
- 灵活可扩展:可以根据不同领域定制情境说明的生成策略
3. 关键技术实现细节
3.1 情境说明生成Prompt设计
生成高质量的情境说明是关键。Anthropic使用的Prompt模板如下:
code复制<document>
{{WHOLE_DOCUMENT}}
</document>
Here is the chunk we want to situate within the whole document:
<chunk>
{{CHUNK_CONTENT}}
</chunk>
Please give a short succinct context to situate this chunk within the overall document for the purposes of improving se
