Anthropic 推出 Contextual
来自 Anthropic Engineering · 期号 2024-09-19
摘要
RAG 在编码信息时会丢失上下文,导致检索失败。 Anthropic 提出 Contextual Retrieval 方法,在将文本块转为向量前,先用 Claude 为每个块补充一段上下文说明。结合 Contextual Embeddings 与 Contextual BM25,可将检索失败率降低 49%,配合重排序可降低 67%。 知识库小于 20 万 token 时,直接全文塞进 prompt 更简单。Claude 的 prompt caching 可将延迟降低 2 倍以上、成本降低 90%。
深读
导读 传统 RAG 在将文档切块编码时会丢失上下文,导致检索失败。Anthropic 提出 Contextual Retrieval 方法,在向量化前用 Claude 为每个文本块补充一段上下文说明,可将检索失败率降低 49%,配合重排序可降低 67%。对于知识库小于 20 万 token 的场景,直接全文塞进 prompt 更简单,配合 prompt caching 可将延迟降低 2 倍以上、成本降低 90%。 关键信息 - Contextual Retrieval 包含两个子技术:Contextual Embeddings(为嵌入向量补充上下文)和 Contextual BM25(为 BM25 索引补充上下文)。 - 单独使用 Contextual Embeddings 可将 top-20-chunk 检索失败率降低 35%(从 5.7% 降至 3.7%);结合 Contextual BM25 可降低 49%(降至 2.9%);再加入重排序可降低 67%(降至 1.9%)。 - 生成上下文使用的模型是 Claude 3 Haiku,prompt 要求模型基于整篇文档为每个 chunk 生成 50–100 token 的简短上下文说明。 - 使用 prompt caching 后,假设 800 token 的 chunk、8k token 的文档,生成所有上下文的一次性成本为每百万文档 token 1.02 美元。 - 实验覆盖了代码库、小说、ArXiv 论文、科学论文等多个知识领域,使用了 Gemini Text 004 等嵌入模型和 Cohere 重排序模型。 逐节讲解 传统 RAG 的上下文丢失问题 RAG 的标准流程是将知识库切分成数百 token 的文本块,用嵌入模型转为向量存入数据库,查询时按语义相似度检索。但切块会剥离上下文:比如一份 SEC 文件中写着「公司营收较上一季度增长 3%」,单独看这个 chunk 无法知道是哪家公司、哪个季度。嵌入模型擅长语义匹配,但对「TS-999」这类精确标识符可能失效,而 BM25 通过词法匹配可以补上这个短板。传统 RAG 通常同时使用嵌入和 BM25,用 rank fusion 合并结果。 Contextual Retrieval 的核心做法 在嵌入和建立 BM25 索引之前,先用 Claude 为每个 chunk 生成一段上下文说明并拼接到 chunk 前面。以上述 SEC 文件为例,原始 chunk 被转化为:「This chunk is from an SEC filing on ACME corp's performance in Q2 2023; the previous quarter's revenue was $314 million. The company's revenue gre…