RAG 架构与 Voyage AI 嵌入模型在 Amazon SageMaker JumpStart

Voyage AI 嵌入模型在 Amazon SageMaker 上的 RAG 架构

重点总结

RAG检索增强生成是一种强大的生成式 AI 技术,可以通过从庞大的数据库中动态提取相关数据来生成更准确和相关的输出。Voyage AI 提供的嵌入模型在 RAG 架构中起着关键作用,它们能够将大量文本转化为紧凑的数值表示,从而高效地检索信息。本文将介绍如何在 Amazon SageMaker JumpStart 上实现 Voyage AI 的嵌入模型,并与 Anthropic Claude 3 模型以及 Amazon OpenSearch 服务相结合。

本篇文章讨论了如何利用 Voyage AI 的嵌入模型构建 RAG检索增强生成架构,旨在帮助组织更有效地利用他们的数据。如今,组织掌握大量的数据,许多都是专有的,这些数据在生成式人工智能AI应用中被有效使用时,可以解锁宝贵的洞见。RAG 是一种强有力的技术,旨在充分利用这一信息源。在响应生成过程中,RAG 动态拉取相关数据,使得 AI 模型能够生成更准确、相关并且上下文丰富的输出。

嵌入模型是 RAG 架构中至关重要的组成部分,负责有效地识别和检索来自大数据集的最相关信息。这些模型将大量文本转换为紧凑的数值表示,从而允许系统以空前的精确度快速筛选和匹配与查询相关的数据。通过提高检索的效率和准确性,嵌入模型确保 RAG 的生成组件能够接收到最相关的信息。

RAG 架构与 Voyage AI 嵌入模型在 Amazon SageMaker JumpStart

在本文中,我们将概述 Voyage AI 的最先进的嵌入模型,并展示如何在 Amazon SageMaker JumpStart 上实现 RAG,结合 Anthropic 的 Claude 3 模型和 Amazon OpenSearch Service。Voyage AI 的嵌入模型是 Anthropic 的首选嵌入模型,除了通用嵌入模型外,Voyage AI 还提供根据特定领域调优的嵌入模型。

RAG 架构与嵌入模型

RAG 是企业聊天机器人的主要设计模式,检索系统从经过验证的来源和文档中提取与查询相关的信息,并将其输入到大型语言模型LLM中以生成响应。它结合了模型的生成能力与庞大数据库中的信息广度,使得模型能够提取相关的外部文档,增强其响应。这使得输出不仅上下文丰富,而且事实准确,显著提高了 LLM 在多样化应用中的可靠性和实用性。

让我们通过下图简要回顾 RAG。

RAG 系统依赖于语义搜索,使用称为“嵌入”的文档稠密向量表示。这些向量存储在向量存储中,后续可以有效检索。在查询时,查询也被转换为向量,然后用作通过 k 最近邻kNN搜索从文档向量表示中查找和检索相似文档的依据。最后,检索到的文档与查询一起用于提示生成模型,通常会导致更高质量的响应和更少的错误生成。

嵌入模型是将查询和文档转换为嵌入的神经网络模型。检索质量完全取决于数据如何表示为向量,嵌入模型的有效性则基于其检索相关信息的准确性进行评估。因此,嵌入模型的检索质量与 RAG 系统响应的质量高度相关想让你的 RAG 更成功,就应该考虑提升嵌入质量。有关更多详细解释,请查看这篇博客。

Voyage AI 的通用与特定领域嵌入模型

Voyage AI 开发了尖端的嵌入模型,具有最先进的检索准确性。voyagelarge2 是 Voyage 的最强通用嵌入模型,表现优于流行的竞争模型。Voyage 还提供 voyage2,这是一种优化了延迟和质量的基础通用嵌入模型。以下表格总结了当前在 SageMaker JumpStart 上可用的 Voyage 嵌入模型。

Voyage AI 模型SageMaker JumpStart 模型 ID描述voyage2voyage2embedding优化了成本、延迟和检索质量的通用嵌入模型voyagelarge2voyagelarge2embedding优化了检索质量的通用嵌入模型voyagecode2voyagecode2embedding专门为代码检索优化的领域特定嵌入模型比替代品提高 17 的准确性

除了通用嵌入模型,Voyage AI 还提供专门针对特定领域的嵌入模型,这些模型在巨大领域特定数据集上进行训练,使其能够深入理解和在特定领域出色表现。例如,Voyage 的代码嵌入模型voyagecode2在与代码相关的数据文档中表现优于通用嵌入模型,约提升了 15 的效率。最近,Voyage 发布了一个法律嵌入模型voyagelaw2,该模型针对法律检索进行了优化,并在 MTEB 法律检索排行榜 上名列前茅。详细信息请参见 法律专用嵌入和检索voyagelaw2。Voyage AI 计划在不久的将来继续发布其他领域特定的嵌入模型,包括金融、医疗保健和多语言。有关所有可用 Voyage AI 嵌入模型的列表,请参见嵌入。

Voyage AI 提供嵌入模型的 API 端点,使其与 RAG 堆栈的其他组件无缝集成。Voyage AI 的嵌入模型可在 AWS Marketplace 上获取,并可以在你的账户及 VPC 内作为 Amazon SageMaker 端点部署,消除安全和合规性问题。作为 SageMaker JumpStart 的一部分,你只需点击几下即可部署 Voyage AI 嵌入模型,开始在 AWS 上运行你的 RAG 堆栈。

解决方案概述

在这个 RAG 解决方案中,我们使用部署在 SageMaker JumpStart 上的 Voyage AI 嵌入模型,演示使用苹果公司 2022 年度报告SEC Form 10K作为检索的语料库。具体来说,我们部署了 Voyage 的 voyagelarge2 模型的 SageMaker 模型包。对于 LLM,我们使用 Amazon Bedrock 上的 Anthropic Claude 3 Sonnet 模型。我们使用 OpenSearch 服务作为向量存储。你还可以参考这篇 notebook。下面的图表展示了解决方案架构。

飞鸟加速器安卓下载最新版本

SageMaker JumpStart 是 SageMaker 的机器学习ML中心,提供一键访问超过 350 个开源和第三方模型。这些模型可通过 Amazon SageMaker Studio 界面或使用 SageMaker Python SDK 进行发现和部署。SageMaker JumpStart 提供笔记本以自定义和部署基础模型到你的 VPC。

Anthropic 的 Claude 3 模型是来自 Anthropic 的下一代最先进模型。对于绝大多数工作负载,Sonnet 在输入和输出时比 Anthropic 的 Claude 2 和 21 模型快,且智能水平更高。Amazon Bedrock 是一个完全托管的服务,通过 API 提供来自领先 AI 公司如 Anthropic的高性能基础模型FMs,使得构建生成式 AI 应用变得简单。请确保 申请模型访问 至 Amazon Bedrock 上的 Anthropic Claude 3 Sonnet。

Amazon OpenSearch Service 是一项托管服务,使得部署、操作和扩展 OpenSearch从 Elasticsearch 派生的流行开源分布式搜索分析套件变得简单。OpenSearch 通过 kNN 搜索 提供向量搜索能力。

前提条件

要进行下去,你需要 创建一个 OpenSearch Service 域。在本次演示中,选择 Easy create 选项即可。确保选中 Enable finegrained access control 选项。选择 Create master user 并提供用户名和密码。创建完域后,域详情中将会包含域的终结点,这些信息将用于访问你的 OpenSearch 实例,不需要担心创建索引或插入数据。我们在演示中使用 OpenSearch Python 客户端 来处理向量存储。

部署嵌入模型端点

要使用 voyagelarge2,你需在 AWS Marketplace 中订阅 SageMaker 模型包。有关说明,请见 订阅模型包。选择 SageMaker JumpStart 用户界面中的模型卡将使你转到 AWS Marketplace 上的模型列表页面。

订阅后,可以按照以下步骤初始化并部署嵌入模型作为 SageMaker 端点:

python

设置嵌入端点配置

(embeddingmodelid embeddingmodelversion embeddinginstancetype) = ( voyagelarge2embedding mlg5xlarge # 请查看 AWS Marketplace 模型包以获取支持的实例类型)

从 JumpStart 实例化嵌入模型

from sagemakerjumpstartmodel import JumpStartModel

embeddingmodel = JumpStartModel( modelid=embeddingmodelid modelversion=embeddingmodelversion instancetype=embeddinginstancetype)

部署模型作为推理端点。部署时间可能需要几分钟5 到 10 分钟

embeddingendpoint = embeddingmodeldeploy()

向量化文档

部署嵌入端点后,可以为检索编制索引文档。

转换和分块文档

要调用已部署的 voyagelarge2 模型,需要字符串列表。对于许多文档,比如我们的年度报告示例,每个字符串都是一个语义上有意义的文本块。你可以通过多种方式加载和分块文档进行向量化。此部分代码仅为一个示例;随意选择适合你的数据源和文件的方式。

在此演示中,我们使用 LangChain 的 PyPDFLoader它使用了 pypdf和 recursive character text splitter 加载和分块源 PDF 文件:

pythonfrom langchaincommunitydocumentloaders import PyPDFLoaderfrom langchaintextsplitters import RecursiveCharacterTextSplitter

loader = PyPDFLoader(apple10k2022pdf)documentchunks = loaderloadandsplit( RecursiveCharacterTextSplitter( chunksize=1000 chunkoverlap=100 lengthfunction=len isseparatorregex=False ))

在实际操作中,选择文本分块的大小和重叠需要一些试验。为高质量检索适当地分块文档有许多技术,但这超出了本文的范围。

生成文档嵌入

现在可以对文档进行向量化,或者更准确地说,是对文档块进行向量化。参见以下代码:

python

设置批量大小

BATCHSIZE = 45

分批向量化文档块

indexlist = []for i in range(0 len(chunklist) BATCHSIZE) docsplayload = { input chunklist[ii BATCHSIZE] inputtype document truncation true }

embeddocsresponse = embeddingendpointpredict(jsondumps(docsplayload))docembeddingslist = [d[embedding] for d in embeddocsresponse[data]]indexlist = [    {document document embedding embedding}     for document embedding in zip(chunklist[ii  BATCHSIZE] docembeddingslist)]

创建向量存储索引

下一步是使用 OpenSearch Python 客户端将文档嵌入填充到你的 OpenSearch 向量搜索索引中:

python

用文档、嵌入和 ID 填充索引

for id i in zip(range(0 len(indexlist)) indexlist) indexresponse = opensearchclientindex( index=INDEXNAMEOPENSEARCH body={ document i[document] embedding i[embedding] } id=id refresh=True )

检索相关文档

现在,在你的索引向量存储中,可以使用嵌入来找到与你查询相关的文档:

python

设置要检索的文档数量

TOPK = 3

设置向量搜索负载

vectorsearchpayload = { size TOPK query {knn {embedding {vector queryembedding k TOPK}}}}vectorsearchresponse = opensearchclientsearch( index=INDEXNAMEOPENSEARCH body=vectorsearchpayload)

下面是前 3 个最相关文档块的格式化语义搜索结果,标示索引 ID、相似性分数和块的前几个字符:

ID 4Score 07956404Document 根据萨班斯奥克斯利法案第404(b) 条15 USC 7262(b)的规定,由准备或发布其审计报告的注册公共会计师事务所进行。指示注册人是否为壳公司按照法令第12b2 条的定义。是 否 截至 2022 年 3 月 25 日作为最近完成的第二个财年的最后一个业务日,非关联注册人持有的投票和非投票股票的总市场价值约为 2830067000000。单独为了本披露的目的,注册人此日期的执行官和董事持有的普通股被排除,因为这些人可能被视为关联方。注册人和董事的这一确认并不一定是出于任何其他目的的最终确认。 截至 2022 年 10 月 14 日,已发行和流通的普通股为 15908118000 股。

ID 5Score 07367379Document 截至 2022 年 10 月 14 日,已发行和流通的普通股为 15908118000 股。文档被纳入引用包含注册人关于其 2023 年股东年度会议的最终代理声明的

亚马逊托管的 Apache Flink 服务现已支持 Apache Flink 版本 119 大数

Amazon托管的Apache Flink服务现已支持Apache Flink版本119作者:Francisco Morillo 和 Lorenzo Nicora 日期:2024年7月8日关键要点Am...