

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

# 自定义检索增强生成架构开启 AWS
自定义 RAG 架构

上一节介绍如何使用完全托管 AWS 服务 的检索增强生成 (RAG)。但是，某些用例需要对系统组件进行更多控制，例如检索器或 LLM（也称为*生成器*）。例如，您可能需要灵活地选择自己的矢量数据库或访问不支持的数据源。对于这些用例，您可以构建自定义 RAG 架构。

本节包含以下主题：
+ [适用于 RAG 工作流程的检索器](rag-custom-retrievers.md)
+ [用于 RAG 工作流程的生成器](rag-custom-generators.md)

有关本节中如何在检索器和生成器选项之间进行选择的更多信息，请参阅本指南[选择 “检索增强生成” 选项 AWS](choosing-option.md)中的。

# 适用于 RAG 工作流程的检索器
检索器

本节介绍如何建造寻回犬。您可以使用完全托管的语义搜索解决方案，例如 Amazon Kendra，也可以使用 AWS 矢量数据库构建自定义语义搜索。

在查看检索器选项之前，请务必了解矢量搜索过程的三个步骤：

1. 您可以将需要编制索引的文档分成较小的部分。这称为*分块*。

1. 您可以使用名为 embedd [in](https://community.aws/concepts/vector-embeddings-and-rag-demystified#embeddings) g 的过程将每个区块转换为数学向量。然后，为矢量数据库中的每个向量编制索引。您用来为文档编制索引的方法会影响搜索的速度和准确性。索引方法取决于矢量数据库及其提供的配置选项。

1. 您可以使用相同的过程将用户查询转换为向量。检索器在矢量数据库中搜索与用户查询向量相似的向量。[相似度](https://community.aws/concepts/vector-embeddings-and-rag-demystified#distance-metrics-between-embeddings)是通过使用欧几里得距离、余弦距离或点积等度量来计算的。

本指南介绍如何使用以下服务 AWS 服务 或第三方服务在上构建自定义检索层 AWS：
+ [Amazon Kendra](#rag-custom-kendra)
+ [亚马逊 OpenSearch 服务](#rag-custom-opensearch)
+ [亚马逊 Aurora PostgreSQL 和 pgvector](#rag-custom-aurora)
+ [Amazon Neptune Analytics](#rag-custom-neptune)
+ [Amazon MemoryDB](#rag-custom-memorydb)
+ [Amazon DocumentDB](#rag-custom-docdb)
+ [Pinecone](#rag-custom-pinecone)
+ [MongoDB Atlas](#rag-custom-mongodb-atlas)
+ [Weaviate](#rag-custom-weaviate)

## Amazon Kendra


[Amazon Kendra](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html) 是一项完全托管的智能搜索服务，它使用自然语言处理和高级机器学习算法，从您的数据中返回搜索问题的具体答案。Amazon Kendra 可帮助您直接从多个来源获取文档，并在文档成功同步后对其进行查询。同步过程创建了在摄取的文档上创建矢量搜索所需的必要基础架构。因此，Amazon Kendra 不需要矢量搜索过程的传统三个步骤。初始同步后，您可以使用定义的时间表来处理正在进行的摄取。

以下是使用 Amazon Kendra for RAG 的优势：
+ 您不必维护矢量数据库，因为 Amazon Kendra 负责处理整个矢量搜索过程。
+ Amazon Kendra 包含用于常用数据源的预建连接器，例如数据库、网站抓取工具、Amazon S3 存储桶、Microsoft SharePoint实例和实例。Atlassian Confluence AWS 合作伙伴开发的连接器可用，例如Box和的连接器GitLab。
+ Amazon Kendra 提供访问控制列表 (ACL) 筛选功能，仅返回最终用户有权访问的文档。
+ Amazon Kendra 可以根据元数据（例如日期或源存储库）提高响应速度。

下图显示了使用 Amazon Kendra 作为 RAG 系统的检索层的示例架构。有关更多信息，请参阅[使用 Amazon Kendra 在企业数据上快速构建高精度的生成式 AI 应用程序LangChain，以及大型语言](https://aws.amazon.com/blogs/machine-learning/quickly-build-high-accuracy-generative-ai-applications-on-enterprise-data-using-amazon-kendra-langchain-and-large-language-models/)模型AWS （博客文章）。



![\[使用 Amazon Kendra 作为 RAG 系统的检索层。 AWS\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/retrieval-augmented-generation-options/images/architecture-custom-kendra.png)


[对于基础模型，你可以使用 Amazon Bedrock 或通过 Amazon AI 部署的 LLM。 SageMaker JumpStart](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-jumpstart.html)您可以使用 AWS Lambda [https://python.langchain.com/docs/integrations/tools/awslambda/](https://python.langchain.com/docs/integrations/tools/awslambda/)来协调用户、Amazon Kendra 和 LLM 之间的流程。要构建使用 Amazon Kendra 等的 RAG 系统，请参阅 Amazon Kendra LangChain E LLMs xt [ension LangChain s 存储](https://github.com/aws-samples/amazon-kendra-langchain-extensions)库。 GitHub 

## 亚马逊 OpenSearch 服务


[Amazon S OpenSearch ervic](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) e 为 [k 最近邻 (k-nn) 搜索](https://docs.opensearch.org/latest/vector-search/vector-search-techniques/index/)提供了内置 ML 算法，以便执行向量搜索。 OpenSearch 该服务还为 [Amazon EMR Serverless 提供了矢量引擎](https://aws.amazon.com/opensearch-service/serverless-vector-engine/)。您可以使用此矢量引擎来构建具有可扩展和高性能矢量存储和搜索功能的 RAG 系统。有关如何使用无服务器构建 RAG 系统的更多信息，请参阅使用适用 OpenSearch 于 Amazon Serverless [和 Amazon Bedrock Claude 模型的矢量引擎构建可扩展的无服务器 OpenSearch RAG 工作流程](https://aws.amazon.com/blogs/big-data/build-scalable-and-serverless-rag-workflows-with-a-vector-engine-for-amazon-opensearch-serverless-and-amazon-bedrock-claude-models/)（博客文章）。AWS 

以下是使用 OpenSearch 服务进行矢量搜索的优势：
+ 它提供对矢量数据库的完全控制，包括使用 OpenSearch Serverless 构建可扩展的矢量搜索。
+ 它提供了对分块策略的控制。
+ 它使用来自[非公制空间库 (NMSLIB)、Faiss 和 A [pache Lucen](https://lucene.apache.org/) e 库的近似最近邻 (ANN)](https://github.com/nmslib/nmslib) [算法](https://github.com/facebookresearch/faiss)来支持 k-nn 搜索。您可以根据用例更改算法。有关通过 OpenSearch 服务自定义矢量搜索的选项的更多信息，请参阅 [Amazon Ser OpenSearch vice 矢量数据库功能说明](https://aws.amazon.com/blogs/big-data/amazon-opensearch-services-vector-database-capabilities-explained/)（AWS 博客文章）。
+ OpenSearch Serverless 作为向量索引与 Amazon Bedrock 知识库集成。

## 亚马逊 Aurora PostgreSQL 和 pgvector


[Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的关系数据库引擎，可帮助您设置、操作和扩展 PostgreSQL 部署。 [pgvector](https://github.com/pgvector/pgvector/) 是一个开源 PostgreSQL 扩展，它提供了向量相似度搜索功能。此扩展适用于兼容 Aurora PostgreSQL 和适用于 PostgreSQL 的亚马逊关系数据库服务 (Amazon RDS)。有关如何使用与 Aurora PostgreSQL 兼容和 pgvector 构建基于 RAG 的系统的更多信息，请参阅以下博客文章： AWS 
+ [使用 SageMaker 亚马逊 AI 和 pgvector 在 PostgreSQL 中构建人工智能驱动的搜索](https://aws.amazon.com/blogs/database/building-ai-powered-search-in-postgresql-using-amazon-sagemaker-and-pgvector/)
+ [利用 pgvector 和 Amazon Aurora PostgreSQL 进行自然语言处理、聊天机器人和情感分析](https://aws.amazon.com/blogs/database/leverage-pgvector-and-amazon-aurora-postgresql-for-natural-language-processing-chatbots-and-sentiment-analysis/)

以下是使用兼容 pgvector 且兼容 Aurora PostgreSQL 的优点：
+ 它支持精确和近似最近邻搜索。它还支持以下相似度量：L2 距离、内积和余弦距离。
+ 它支持[采用平面压缩的倒置文件 (IVFFlat)](https://github.com/pgvector/pgvector#ivfflat) 和[分层可导航小世界 (HNSW](https://github.com/pgvector/pgvector#hnsw)) 索引。
+ 您可以将向量搜索与对同一 PostgreSQL 实例中可用的特定域数据的查询相结合。
+ 与 Aurora PostgreSQL 兼容，已针对分层缓存进行了优化 I/O 并提供了分层缓存。对于超过可用实例内存的工作负载，pgvector 可以将每秒向量搜索的查询量增加[多达 8 倍](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.optimized.reads.html)。

## Amazon Neptune Analytics


[Amazon Neptune Analytics](https://docs.aws.amazon.com/neptune-analytics/latest/userguide/what-is-neptune-analytics.html) 是一款内存优化的图形数据库引擎，用于分析。它支持经过优化的图形分析算法、低延迟图形查询和图形遍历中的矢量搜索功能库。它还具有内置的向量相似度搜索功能。它提供了一个端点来创建图形、加载数据、调用查询和执行向量相似度搜索。有关如何构建使用 Neptune Analytics 的基于 RAG 的系统的更多信息，[请参阅使用知识图通过亚马逊 Bedrock 和 Amazon Neptune 构建 GraphRag 应用程序（博](https://aws.amazon.com/blogs/database/using-knowledge-graphs-to-build-graphrag-applications-with-amazon-bedrock-and-amazon-neptune/)客文章AWS ）。

以下是使用 Neptune Analytics 的优势：
+ 您可以在图形查询中存储和搜索嵌入内容。
+ 如果您将 Neptune Analytics 与集成LangChain，则此架构支持自然语言图形查询。
+ 这种架构将大型图形数据集存储在内存中。

## Amazon MemoryDB


[Amazon MemoryDB](https://docs.aws.amazon.com/memorydb/latest/devguide/what-is-memorydb.html) 是一项耐用的内存数据库服务，可提供超快的性能。您的所有数据都存储在内存中，内存支持微秒读取、个位数毫秒写入延迟和高吞吐量。M@@ [emoryDB 的矢量搜索扩展了 M](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-overview.html) emoryDB 的功能，可以与现有的 MemoryDB 功能结合使用。有关更多信息，请参阅开启的 [LLM 和 RAG 存储库中的问题解答](https://github.com/aws-samples/rag-with-amazon-bedrock-and-memorydb/tree/main)。 GitHub

下图显示了使用 MemoryDB 作为矢量数据库的示例架构。



![\[一种生成式 AI 应用程序，用于从 MemoryDB 矢量数据库中检索上下文。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/retrieval-augmented-generation-options/images/architecture-custom-memorydb.png)


以下是使用 MemoryDB 的优点：
+ 它同时支持 Flat 和 HNSW 索引算法。欲了解更多信息，请参阅 [Amazon MemoryDB 的矢量搜索现已在新闻博客](https://aws.amazon.com/blogs/aws/vector-search-for-amazon-memorydb-is-now-generally-available/)上正式推出 AWS 
+ 它也可以用作基础模型的缓冲存储器。这意味着先前回答的问题将从缓冲区中检索，而不是再次进行检索和生成过程。下图显示了此流程。  
![\[将答案存储在 MemoryDB 数据库中，以便可以从缓冲区内存中检索。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/retrieval-augmented-generation-options/images/memorydb-fm-buffer.png)
+ 由于它使用内存数据库，因此该架构为语义搜索提供了个位数毫秒的查询时间。
+ 它在95-99％的召回率下每秒最多提供33,000个查询，在召回率超过99％时每秒提供26,500个查询。欲了解更多信息，请参阅 re [AWS : Invent 2023 — 超低延迟向量搜索 Amazon Memory](https://www.youtube.com/watch?v=AaMh3rdu-p0) DB 视频。YouTube

## Amazon DocumentDB


[Amazon DocumentDB（与 MongoDB 兼容）](https://docs.aws.amazon.com/documentdb/latest/developerguide/what-is.html)是一种快速、可靠、完全托管的数据库服务。它可以轻松地在云中设置、操作和扩展MongoDB兼容的数据库。[Amazon DocumentDB 的矢量搜索](https://docs.aws.amazon.com/documentdb/latest/developerguide/vector-search.html)将基于 JSON 的文档数据库的灵活性和丰富的查询功能与矢量搜索的强大功能相结合。有关更多信息，请参阅开启的 [LLM 和 RAG 存储库中的问题解答](https://github.com/aws-samples/rag-with-amazon-bedrock-and-documentdb/tree/main)。 GitHub

下图显示了使用 Amazon DocumentDB 作为矢量数据库的示例架构。



![\[一种生成式 AI 应用程序，用于从 Amazon DocumentDB 矢量数据库中检索上下文。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/retrieval-augmented-generation-options/images/architecture-custom-documentdb.png)


下图显示了如下工作流：

1. 用户向生成式 AI 应用程序提交查询。

1. 生成式 AI 应用程序在 Amazon DocumentDB 矢量数据库中执行相似度搜索并检索相关的文档摘录。

1. 生成式 AI 应用程序使用检索到的上下文更新用户查询，并将提示提交给目标基础模型。

1. 基础模型使用上下文生成对用户问题的回应并返回响应。

1. 生成式 AI 应用程序将响应返回给用户。

以下是使用 Amazon DocumentDB 的优势：
+ 它同时支持 HNSW 和 IVFFlat 索引方法。
+ 它支持向量数据中多达 2,000 个维度，并支持欧几里得、余弦和点积距离度量。
+ 它提供了毫秒级的响应时间。

## Pinecone


[https://www.pinecone.io/](https://www.pinecone.io/)是一个完全托管的矢量数据库，可帮助您将矢量搜索添加到生产应用程序中。可通过以下方式获得[AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-xhgyscinlz4jk)。计费基于使用量，费用是通过将 pod 价格乘以 pod 数量来计算的。有关如何构建使用的 RAG 系统的更多信息Pinecone，请参阅以下 AWS 博客文章：
+ [使用Pinecone矢量数据库和 Amazon AI 的 Llama-2 通过 RAG 缓解幻觉 SageMaker JumpStart](https://aws.amazon.com/blogs/machine-learning/mitigate-hallucinations-through-retrieval-augmented-generation-using-pinecone-vector-database-llama-2-from-amazon-sagemaker-jumpstart/)
+ [使用 Amazon SageMaker AI Studio 使用 Llama 2 构建 RAG 问答解决方案LangChain，并Pinecone进行快速实验](https://aws.amazon.com/blogs/machine-learning/use-amazon-sagemaker-studio-to-build-a-rag-question-answering-solution-with-llama-2-langchain-and-pinecone-for-fast-experimentation/)

下图显示了Pinecone用作矢量数据库的示例架构。



![\[一种生成式 AI 应用程序，用于从Pinecone矢量数据库中检索上下文。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/retrieval-augmented-generation-options/images/architecture-custom-pinecone.png)


下图显示了如下工作流：

1. 用户向生成式 AI 应用程序提交查询。

1. 生成式 AI 应用程序在Pinecone矢量数据库中执行相似度搜索并检索相关的文档摘录。

1. 生成式 AI 应用程序使用检索到的上下文更新用户查询，并将提示提交给目标基础模型。

1. 基础模型使用上下文生成对用户问题的回应并返回响应。

1. 生成式 AI 应用程序将响应返回给用户。

以下是使用的优点Pinecone：
+ 它是一个完全托管的矢量数据库，可以省去管理自己的基础设施的开销。
+ 它提供了筛选、实时索引更新和关键字提升（混合搜索）等其他功能。

## MongoDB Atlas


[https://www.mongodb.com/lp/cloud/atlas/try4](https://www.mongodb.com/lp/cloud/atlas/try4)是一个完全托管的云数据库，可处理在上部署和管理部署的所有复杂性 AWS。您可以使用[矢量搜索MongoDB Atlas](https://www.mongodb.com/products/platform/atlas-vector-search)将矢量嵌入存储在MongoDB数据库中。Amazon Bedrock 知识库MongoDB Atlas支持矢量存储。有关更多信息，请参阅MongoDB文档中的 [Amazon Bedrock 知识库集成入门](https://www.mongodb.com/docs/atlas/atlas-vector-search/ai-integrations/amazon-bedrock/)。

有关如何对 RAG 使用MongoDB Atlas矢量搜索的更多信息，请参阅使用 Amazon AI [检索增强生成、LangChain Amazon A SageMaker I JumpStart 和MongoDB Atlas语义搜索](https://aws.amazon.com/blogs/machine-learning/retrieval-augmented-generation-with-langchain-amazon-sagemaker-jumpstart-and-mongodb-atlas-semantic-search/)（博客文章）。AWS 下图显示了此博客文章中详细介绍的解决方案架构。



![\[使用MongoDB Atlas向量搜索来检索基于 RAG 的生成式 AI 应用程序的上下文。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/retrieval-augmented-generation-options/images/architecture-custom-mongodb-atlas.png)


以下是使用MongoDB Atlas矢量搜索的优点：
+ 您可以使用现有的实现MongoDB Atlas来存储和搜索矢量嵌入。
+ 您可以使用[MongoDB查询 API](https://www.mongodb.com/docs/manual/query-api/) 来查询矢量嵌入。
+ 您可以独立缩放矢量搜索和数据库。
+ 向量嵌入存储在源数据（文档）附近，这提高了索引性能。

## Weaviate


[https://weaviate.io/](https://weaviate.io/)是一个流行的开源、低延迟矢量数据库，支持多模态媒体类型，例如文本和图像。该数据库存储对象和向量，将矢量搜索与结构化过滤相结合。有关使用Weaviate和 Amazon Bedrock 构建 RAG 工作流程的更多信息，请参阅[使用 Amazon Bedrock 中的 Cohere 基础模型和Weaviate矢量数据库构建企业级生成人工智能解决方案（博客](https://aws.amazon.com/blogs/machine-learning/build-enterprise-ready-generative-ai-solutions-with-cohere-foundation-models-in-amazon-bedrock-and-weaviate-vector-database-on-aws-marketplace/)文章）。 AWS MarketplaceAWS 

以下是使用的优点Weaviate：
+ 它是开源的，并由强大的社区提供支持。
+ 它专为混合搜索（矢量和关键字）而构建。
+ 您可以将其部署 AWS 为托管软件即服务 (SaaS) 产品或 Kubernetes 集群。

# 用于 RAG 工作流程的生成器
发电机

[大型语言模型 (LLMs)](https://aws.amazon.com/what-is/large-language-model/) 是基于大量数据进行预训练的非常大的[深度学习](https://aws.amazon.com/what-is/deep-learning/)模型。它们非常灵活。 LLMs 可以执行各种任务，例如回答问题、总结文档、翻译语言和完成句子。它们有可能破坏内容创作以及人们使用搜索引擎和虚拟助手的方式。虽然并不完美，但要 LLMs 表现出根据相对较小的提示或输入数量做出预测的非凡能力。

LLMs 是 RAG 解决方案的关键组成部分。对于自定义 RAG 架构，有两个 AWS 服务 可用作主要选项：
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) 是一项完全托管的服务， LLMs 由领先的人工智能公司和亚马逊提供给您通过统一的 API 供您使用。
+ [Amazon SageMaker AI JumpStart](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-jumpstart.html) 是一个机器学习中心，提供基础模型、内置算法和预构建的机器学习解决方案。借助 SageMaker AI JumpStart，您可以访问预训练模型，包括基础模型。您也可以使用自己的数据对预训练模型进行微调。

## Amazon Bedrock


Amazon Bedrock 提供来自Anthropic、、Stability AI、Meta、CohereAI21 LabsMistral AI、和亚马逊的行业领先机型。有关完整列表，请参阅 [Amazon Bedrock 中支持的基础模型](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html)。Amazon Bedrock 还允许您使用自己的数据自定义模型。

您可以[评估模型性能，](https://docs.aws.amazon.com/bedrock/latest/userguide/evaluation.html)以确定哪些模型最适合您的 RAG 用例。您可以测试最新的型号，也可以进行测试，看看哪些功能和特性可以提供最佳结果和最优惠的价格。AnthropicClaude Sonnet 模型是 RAG 应用程序的常见选择，因为它擅长执行各种任务，并且具有高度的可靠性和可预测性。

## SageMaker AI JumpStart


SageMaker AI JumpStart 为各种问题类型提供经过预训练的开源模型。在部署之前，您可以逐步训练和微调这些模型。您可以通过 A [mazon AI Studio 中的 SageMaker 人工智能 JumpStart 登录页面访问预训练模型、解决方案模板和示例，也可以使用 SageMaker A SageMaker I](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html) [Python SDK](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-use-python-sdk.html)。

SageMaker AI JumpStart 为内容编写、代码生成、问题解答、文案写作、摘要、分类、信息检索等用例提供了 state-of-the-art基础模型。使用 JumpStart 基础模型构建自己的生成式 AI 解决方案，并将自定义解决方案与其他 SageMaker AI 功能集成。有关更多信息，请参阅 [Amazon A SageMaker I 入门 JumpStart](https://aws.amazon.com/sagemaker/jumpstart/getting-started/)。

SageMaker AI JumpStart 载入并维护公开可用的基础模型，供您访问、自定义和集成到您的机器学习生命周期中。有关更多信息，请参阅[公开可用的基础模型](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-latest.html#jumpstart-foundation-models-latest-publicly-available)。 SageMaker 人工智能 JumpStart 还包括来自第三方提供商的专有基础模型。有关更多信息，请参阅[专有基础模型](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-latest.html#jumpstart-foundation-models-latest-proprietary)。