https://www.anthropic.com/news/contextual-retrieval
这篇文章介绍了一种名为“Contextual Retrieval”的新方法,用于改进基于检索增强生成(Retrieval-Augmented Generation, RAG)的信息检索系统。以下是文章的主要内容概述:
背景
在许多应用场景中,AI模型需要访问特定的背景知识,例如客户支持需要了解业务信息,法律分析需要了解大量案例数据。RAG 是一种常用的方法,通过从知识库中检索相关信息并将其附加到用户的输入中,从而增强模型的响应能力。然而,传统的 RAG 方法在编码信息时可能会丢失上下文,导致检索失败。
Contextual Retrieval 方法
Contextual Retrieval 通过两种子技术改进了 RAG 的检索步骤:
1. Contextual Embeddings(上下文嵌入):在对知识库中的文本块进行嵌入之前,为每个块添加上下文描述。
2. Contextual BM25:在 BM25 索引中加入上下文信息,BM25 是一种基于词频和逆文档频率(TF-IDF)的精确匹配技术。
这种方法显著减少了检索失败率:
- 仅使用 Contextual Embeddings,检索失败率减少了 35%。
- 结合 Contextual Embeddings 和 Contextual BM25,检索失败率减少了 49%。
实现方法
实现 Contextual Retrieval 的关键步骤包括:
1. 将文档分割为小块(chunk),并为每个块生成上下文描述。
2. 使用模型(如 Claude)生成上下文描述,通过特定的提示语(prompt)指导模型为每个块生成简洁的上下文。
3. 将上下文描述添加到块中,再进行嵌入和 BM25 索引的创建。
文章还提供了一个具体的提示语示例,用于生成上下文描述。
性能提升
实验表明,Contextual Retrieval 方法在多个领域(如代码库、学术论文等)中均显著提升了检索性能。此外,结合重新排序(Reranking)技术进一步优化了检索结果:
- 使用 Cohere 的重新排序模型,结合 Contextual Retrieval,检索失败率减少了 67%。
成本与效率
文章还提到,通过 Claude 的提示缓存(Prompt Caching)功能,可以显著降低实现 Contextual Retrieval 的成本。例如,处理 100 万个文档的成本仅为 1.02 美元。
结论
文章总结了几种提升检索性能的方法,并建议开发者结合使用以下技术:
1. 上下文嵌入(Contextual Embeddings)。
2. 上下文 BM25(Contextual BM25)。
3. 重新排序(Reranking)。
4. 增加检索的块数量(如从 10 增加到 20)。
这些方法可以叠加使用,最大化检索性能的提升。
相关资源
文章还提供了一个代码示例,帮助开发者快速部署 Contextual Retrieval 方法。
如果你想了解更多详细内容,可以访问文章的原文:Introducing Contextual Retrieval。
这里提取上下文的prompt在原文中有展示:
<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 search retrieval of the chunk. Answer only with the succinct context and nothing else.
利用prompt cache,可以节省前面输入的整个文档,让llm直接基于整个文档去生成chunk的上下文。
把相关上下文和chunk拼接到一起,做后面的embedding或者倒排索引
延伸点,一些chunk的操作都可以利用这个方法来增强上下文,比如提取实体的时候,把整个文档输入进来。或者是先基于文档提取实体,然后把实体list作为上下文
这里可能瓶颈主要在于,原始文档过长的时候,模型限制,这里限制包括上下文的硬限制,以及模型自身能力,比如出现幻觉,无法比较好的处理instruction等。
文章评论