本文档提供了关于检索增强生成 (RAG) 和向量数据库的技术概述,解释了它们如何协同工作以通过外部知识增强大型语言模型 (LLM)。有关与 LLM 集成函数调用的信息,请参阅函数调用集成。有关实现基本搜索应用程序的详细信息,请参阅构建搜索应用程序。
检索增强生成 (RAG) 是一种通过将大型语言模型 (LLM) 连接到外部数据源来增强其能力的架构。这种方法解决了传统 LLM 的关键局限性,传统 LLM 受限于其训练数据中嵌入的知识,无法访问最新信息。
在 RAG 系统中,当用户提交查询时,系统会从知识库中检索相关信息,并将这些信息包含在发送给 LLM 的提示中。这种对外部、可验证数据的接地有助于减少幻觉(捏造的信息)并实现更准确、更及时的响应。
来源:15-rag-and-vector-databases/README.md:46-58
RAG 系统使用编码器和解码器组件的组合来处理信息。当用户输入查询时,系统会将其编码为向量表示,从数据库中检索相似向量,并将相关信息与原始查询结合起来生成响应。
其架构包括:
存在两种主要的 RAG 实现方法
来源:15-rag-and-vector-databases/README.md:59-68, 15-rag-and-vector-databases/images/encoder-decode.png
向量数据库是一种专门设计的数据库,用于存储、管理和搜索嵌入向量——捕获语义含义的数据的数值表示。与存储原始文本的传统数据库不同,向量数据库存储这些数学表示,从而使相似性搜索更有效。
LLM 的输入有 token 限制。向量数据库允许我们
流行的向量数据库选项包括
来源:15-rag-and-vector-databases/README.md:81-94, 08-building-search-applications/translations/pl/README.md:74-76
将文本数据转换为向量嵌入是构建 RAG 系统的关键步骤。此过程通常包括
将文档分割成更小的片段,以更好地管理上下文并提高检索精度。分块可以在不同级别进行
这种分块方法会创建落在指定长度约束内的文本片段。
分块后,使用模型(如
将每个文本片段转换为向量嵌入。嵌入模型的选择取决于语言支持、输入大小容量和输出嵌入维度等因素。
来源:15-rag-and-vector-databases/README.md:97-123, 15-rag-and-vector-databases/notebook-rag-vector-databases.ipynb:93-123
当用户提交查询时,检索过程会从向量数据库中查找最相关的信息,以增强 LLM 的响应。
有几种在向量数据库中执行搜索的方法
向量相似性通常使用以下方法计算
为了执行高效的检索,会创建一个搜索索引来快速查找相似向量
来源:15-rag-and-vector-databases/README.md:126-184, 08-building-search-applications/translations/pl/README.md:78-86
RAG 管道的最后一步是将检索到的信息与 LLM 集成以生成响应。这包括
此实现演示了如何在将检索到的上下文添加到用户查询后再发送给 LLM,从而使模型能够生成更具信息性和更准确的响应。
来源:15-rag-and-vector-databases/README.md:186-225
RAG 系统的评估通常侧重于
RAG 系统适用于各种应用
一些框架简化了 RAG 的实现
来源:15-rag-and-vector-databases/README.md:229-267
要实现 RAG 系统,您需要
数据收集与处理:
嵌入生成:
检索系统:
LLM 集成:
位于15-rag-and-vector-databases/notebook-rag-vector-databases.ipynb 中的 notebook 示例演示了使用 Azure Cosmos DB 作为向量数据库以及 Azure OpenAI 服务进行嵌入和 LLM 生成的实际实现。
检索增强生成 (RAG) 将 LLM 的强大功能与访问外部、最新信息的能力相结合。通过利用向量数据库来存储和检索相关信息,RAG 系统可以提供比独立 LLM 更准确、更真实、更及时的响应。
RAG 系统的关键组成部分是
这种架构解决了常见的 LLM 局限性,如知识截止、幻觉和无法访问专业信息,使其成为创建更强大的 AI 应用程序的强大方法。
来源:15-rag-and-vector-databases/README.md