大型语言模型(LLM)功能强大,但它们存在两个关键限制:
  • 有限上下文:它们无法一次性处理整个文档库。
  • 静态知识:它们的训练数据冻结在某个时间点。
检索通过在查询时获取相关的外部知识来解决这些问题。这是**检索增强生成(RAG)**的基础,它通过提供与上下文相关的信息来增强LLM的回答。

构建知识库

知识库是一个在检索过程中使用的文档或结构化数据的存储库。 如果你需要一个自定义的知识库,可以使用 LangChain 的文档加载器和向量存储,基于你自己的数据来构建一个。
如果你已经有了一个知识库(例如SQL数据库、文档数据库、CRM或内部文档系统),你不需要重建它。你可以:
  • 将其连接为 Agentic RAG 中一个智能体的工具。
  • 查询它,并将检索到的内容作为上下文提供给LLM (两步RAG)。
更多信息,请参阅以下教程,了解如何构建一个可搜索的知识库和一个最小的RAG工作流:

教程:语义搜索

学习如何使用 LangChain 的文档加载器、嵌入模型和向量存储,基于你自己的数据创建一个可搜索的知识库。 在本教程中,你将构建一个针对PDF的搜索引擎,实现检索与查询相关的段落。你还将在此引擎之上实现一个最小的RAG工作流,以了解如何将外部知识集成到LLM的推理过程中。

从检索到RAG

检索允许LLM在运行时访问相关的上下文。但大多数现实世界的应用会更进一步:它们将检索与生成集成,以产生基于事实、感知上下文的答案。 这是**检索增强生成(RAG)**背后的核心思想。检索管道成为了一个更广泛系统的基础,该系统将搜索与生成相结合。

检索管道

一个典型的工作流如下所示: 每个组件都是模块化的:你可以替换加载器、分割器、嵌入模型或向量存储,而无需重写应用程序的逻辑。

构建块

文档加载器

从外部来源(Google Drive、Slack、Notion 等)摄取数据,返回标准化的 Document 对象。

文本分割器

将大型文档拆分为更小的块,这些块可以单独检索并适合模型的上下文窗口。

嵌入模型

嵌入模型将文本转换为数字向量,使得含义相似的文本在该向量空间中位置接近。

向量存储

用于存储和搜索嵌入的专用数据库。

检索器

检索器是一个接口,它根据非结构化查询返回文档。

RAG 架构

RAG 可以根据你的系统需求以多种方式实现。我们在下面的章节中概述每种类型。
延迟:在两步RAG中,延迟通常更可预测,因为LLM调用的最大次数是已知且有限的。这种可预测性假设LLM推理时间是主导因素。然而,现实世界的延迟也可能受检索步骤性能的影响,例如API响应时间、网络延迟或数据库查询,这些可能因所使用的工具和基础设施而异。

两步 RAG

在两步RAG中,检索步骤总是在生成步骤之前执行。这种架构简单且可预测,适用于许多应用程序,其中检索相关文档是生成答案的明确前提。

教程:语义搜索

使用文档加载器、嵌入模型和向量存储构建一个可搜索的知识库,然后在其上运行一个最小的“先检索后生成”的RAG工作流。

教程:评估RAG应用

构建一个简单的“先检索后生成”的RAG应用,并使用LangSmith衡量答案的正确性、相关性、事实依据和检索质量。

Agentic RAG

智能体检索增强生成(RAG) 将检索增强生成的优势与基于智能体的推理相结合。与先检索文档再回答问题不同,一个智能体(由LLM驱动)会逐步推理,并在交互过程中决定何时以及如何检索信息。
智能体要启用RAG行为,唯一需要的就是访问一个或多个可以获取外部知识的工具,例如文档加载器、Web API或数据库查询。

教程:使用 Deep Agents 的 RAG

构建一个文档问答智能体,它在查询时检索相关块,将它们卸载到文件系统,并将分析委托给子智能体。

混合式 RAG

混合式 RAG 结合了两步RAG和Agentic RAG的特点。它引入了诸如查询预处理、检索验证和生成后检查等中间步骤。这些系统在保持对执行过程一定控制的同时,比固定管道提供了更多的灵活性。 典型的组件包括:
  • 查询增强:修改输入问题以提高检索质量。这可能涉及重写不清晰的查询、生成多个变体或使用额外上下文扩展查询。
  • 检索验证:评估检索到的文档是否相关且充分。如果不充分,系统可能会优化查询并重新检索。
  • 答案验证:检查生成的答案是否准确、完整并与源内容一致。如果需要,系统可以重新生成或修订答案。
该架构通常支持这些步骤之间的多次迭代: 这种架构适用于:
  • 查询模糊或不明确的应用程序
  • 需要验证或质量控制步骤的系统
  • 涉及多个来源或迭代优化的工作流

教程:带有自校正功能的 Agentic RAG

一个混合式RAG的示例,它将智能体推理与检索和自校正相结合。