

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 理解 LLMs 和 RAG
<a name="understanding"></a>

要了解提高源文档质量如何提高RAG响应的质量，您必须了解法学硕士的内部运作方式。的真正力量 LLMs 在于他们能够使用自我注意力机制和变压器架构。这些先进的技术使模型能够有效地处理和关联输入序列的不同部分，无论它们在文本中的位置或距离如何。这种能力与传统的语言模型形成鲜明对比，传统语言模型经常在长期依赖关系和上下文理解方面苦苦挣扎。此外， LLMs 他们接受的训练规模是前所未有的。一些最大的模型由数万亿个参数组成，并从不同的来源摄取了数 TB 的文本数据。这种庞大的规模可以培养 LLMs对语言的丰富理解，捕捉以前对人工智能系统来说具有挑战性的细微差别、成语和情境线索。结果是一类模型可以生成连贯流畅的文本，并在问答、文本摘要甚至代码生成等任务中展示出非凡的能力。

要使用这些模型，我们可以求助于诸如 [Amazon Bedrock之类的服务，该服务允许访问来自亚马逊](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)和第三方提供商的各种基础模型，包括Anthropic、Cohere和Meta。您可以使用 Amazon Bedrock 对 state-of-the-art模型进行实验，对其进行自定义和微调，或者通过单个 API 将其整合到由人工智能驱动的生成解决方案中。

尽管它们 LLMs 擅长捕捉模式和生成连贯的文本，但他们往往无法获得 up-to-date或缺乏专业信息。RAG 将的生成功能 LLMs与检索组件相结合，该组件可以访问和整合来自外部来源的相关信息，作为具体化的 LLM 提示的一部分。外部来源的示例包括 Amazon Bedrock [知识库](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)、Ama [z](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html) on Kendra 等智能搜索系统或矢量数据库（例如[亚马逊 OpenSearch ](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html)服务）。

![基于 RAG 的应用程序如何回答用户查询的工作流程。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/writing-best-practices-rag/images/rag-workflow.png)


该图描述了以下工作流程：

1. 用户向 RAG 应用程序提交查询。

1. RAG 应用程序查询包含知识来源（例如文档、数据或媒体）的矢量数据库。

1. RAG 应用程序根据查询和存储文档之间的语义相似性从矢量数据库中检索相关信息。

1. RAG 应用程序使用检索到的上下文对原始提示进行扩展，并将其发送到 LLM 端点。

1. LLM 端点生成响应并将其返回给 RAG 应用程序。

1. RAG 应用程序将生成的响应返回给用户。

从本质上讲，RAG采用了两个阶段的流程。在第一阶段，检索模型根据输入查询识别和检索相关文档或段落。这种检索模型可以是传统的信息检索系统，也可以是密集的检索模型，也可以是两者的组合。在第二阶段，检索到的信息和原始查询作为完全实现的提示模板输入到 LLM 中。 LLMs 在很大程度上取决于检索器组件提供的源内容的质量。他们应用自我注意力机制对检索到的内容与任务的关系进行数学编码。然后，LLM 会根据查询和检索到的信息生成响应。在RAG中，控制检索到的源文档的质量是改善法学硕士对任务的内部表现形式的一种直接手段。RAG 使用相关的外部数据有效地增强了法学硕士的训练数据。这种方法使RAG能够利用两者的优势 LLMs 和检索系统，从而能够根据当前和专业知识生成更准确、更明智的回应。

## 向量和嵌入
<a name="understanding-vectors-embeddings"></a>

向量和嵌入是机器学习和自然语言处理中的基本概念。*向量*是表示同时具有大小和方向的量的数学对象。在自然语言处理 (NLP) 的背景下，单词、句子或文档通常在高维向量空间中表示为向量。另一方面，*嵌入*是一种在低维向量空间中表示单词或文档等对象的方法，其中向量之间的关系捕捉语义或句法的相似性。例如，单词嵌入允许含义相似的单词具有相似的向量表示形式。这有助于算法更有效地理解和处理语言。

## 矢量数据库
<a name="understanding-vector-databases"></a>

在生成式 AI 中，*矢量数据库*是存储和管理文档、查询或其他对象的矢量表示的数据库。它旨在有效地存储和检索向量。这支持快速且可扩展的操作，例如语义搜索和相似度匹配。向量数据库使用专门的数据结构对向量进行索引，例如分层可导航小世界 (HNSW) 图或 K-Nearest Neighbors (KNN) 算法。这些数据结构允许快速进行最近邻搜索，从而可以在数据库中快速找到相似的向量。

## 语义搜索
<a name="understanding-semantic-search"></a>

*语义搜索*是一种通过了解查询的意图和上下文（而不仅仅是匹配关键字）来提高搜索结果相关性的技术。在技术术语中，语义搜索包括比较查询的向量表示形式和数据库中的文档，以找到最相关的匹配项。语义搜索可以使用不同的检索策略，包括但不限于：
+ **HNSW** — 一种基于图形的数据结构，它以一种可以高效搜索最近邻的方式组织向量。
+ **KNN** — 一种基于距离度量（例如余弦相似度）查找最接近查询向量的 K 个向量的算法。
+ **余弦相似度** — 衡量两个非零向量之间相似度的度量，用于测量它们之间角度的余弦值。它通常用于语义搜索来比较高维空间中向量的方向。
+ **局部敏感哈希 (LSH)** — 一种以很高的概率将相似的向量与相同或附近的存储桶进行哈希处理的技术。这允许进行近似最近邻搜索，这可能比在高维空间中进行精确搜索更快。