Loading...

案例中心

使用 Amazon SageMaker Studio 构建一个结合 Llama 2、LangChai

使用 Amazon SageMaker Studio 构建 RAG 问答解决方案

关键要点

本文介绍如何使用 Amazon SageMaker Studio 构建 RAG检索增强生成问答解决方案。解决方案结合了 Llama 2、LangChain 和 Pinecone,来实现快速实验和高效问答。通过采集 Extrnal 知识源的数据,模型能够提供准确且上下文相关的回答。

Retrieval Augmented Generation (RAG) 使得大型语言模型 (LLM) 能够访问外部知识源数据,如文档、数据库和 API,而无需进行微调。在使用 生成式 AI 进行问答时,RAG 使 LLM 能够基于最新信息回答问题,并可选地引用数据源以进行验证。

一个典型的 RAG 解决方案会使用嵌入模型将数据源的数据转换为嵌入,并将这些嵌入存储在向量数据库中。当用户询问问题时,它会在向量数据库中搜索,与用户查询最相似的文档。然后,将检索到的文档和用户的查询结合在一起,以生成一个增强提示,发送给 LLM 进行文本生成。

使用 Amazon SageMaker Studio 构建一个结合 Llama 2、LangChai

在本篇文章中,我们演示了如何使用 Amazon SageMaker Studio 构建 RAG 问答解决方案。

使用笔记本进行基于 RAG 的问答

实现 RAG 通常涉及到尝试不同的嵌入模型、向量数据库、文本生成模型和提示,同时调试代码,直到达到一个功能原型。Amazon SageMaker 提供的管理型 Jupyter 笔记本配备 GPU 实例,使得在初始阶段快速进行实验成为可能,而无需额外配置基础设施。在 SageMaker 中使用笔记本有两个选项。第一个是通过 SageMaker Studio 快速启动的 notebooks。在 SageMaker Studio 中,专为机器学习构建的集成开发环境 (IDE) 可以启动在不同实例类型和配置下运行的笔记本,和同事进行协作,访问为 ML 设计的额外功能。第二种选择是使用 SageMaker 笔记本实例,这是一种完全管理的 ML 计算实例,运行 Jupyter Notebook 应用。

在本篇文章中,我们展示了一种 RAG 解决方案,用额外的外部知识源数据来增强模型的知识,以提供特定于自定义领域的更精准的回答。我们使用一台 mlg52xlarge 实例上的 SageMaker Studio 笔记本和 Llama 2 7b chat hf,这是一个经过微调的 Llama 2 7b 版本,专为 Hugging Face Hub 的对话用例进行了优化。我们选取了两篇 AWS 媒体与娱乐博客作为样本外部数据,并将其转换为使用 BAAI/bgesmallenv15 嵌入的嵌入向量。我们将这些嵌入存储在 Pinecone,这是一个提供高性能搜索和相似性匹配的向量数据库。我们还讨论了如何将实验从笔记本转移到将模型部署到 SageMaker 端点,进行实时推理,以完成原型设计。相同的方法也可以用于不同的模型和向量数据库。

解决方案概览

下图展示了解决方案架构。

实现解决方案包括两大高层次步骤:使用 SageMaker Studio 笔记本开发解决方案,以及为推理部署模型。

使用 SageMaker Studio 笔记本开发解决方案

完成以下步骤以开始开发解决方案:

在笔记本中从 Hugging Face Hub 加载 Llama2 7b chat 模型。使用 LangChain 创建一个 PromptTemplate,并根据你的用例创建 prompts。对于 12 个示例 prompt,从外部文档添加相关的静态文本作为提示上下文,并评估响应质量是否有所提升。假设质量提升,实施 RAG 问答工作流:收集可以帮助模型更好回答问题的外部文档。加载 BGE 嵌入模型并用它生成文档的嵌入。将这些嵌入存储到 Pinecone 中。当用户提问时,在 Pinecone 中执行相似性搜索,并将最相似文档的内容添加到 prompt 的上下文中。

将模型部署到 SageMaker 进行大规模推理

当你达成性能目标时,可以将模型部署到 SageMaker,以便被生成式 AI 应用使用:

将 Llama2 7b chat 模型部署到 SageMaker 实时端点。将 BAAI/bgesmallenv15 嵌入模型部署到 SageMaker 实时端点。在问答生成式 AI 应用中使用部署的模型。

在接下来的几节中,我们将带你逐步实现此解决方案。

前提条件

要按照本篇文章中的步骤进行,你需要拥有一个 AWS 账户,并且有一个 AWS 身份与访问管理IAM角色,拥有创建和访问解决方案资源的权限。如果你是 AWS 新用户,可以参考 创建独立 AWS 账户。

要在你的 AWS 账户中使用 SageMaker Studio 笔记本,你需要有一个 SageMaker 域,并且用户配置文件具有启动 SageMaker Studio 应用的权限。如果你对 SageMaker Studio 不熟悉,可以参考 快速设置 Studio,这是最简单的入门方式。通过单击,SageMaker 将设置带有默认预设的 SageMaker 域,包括设置用户配置文件、IAM 角色、IAM 认证和公共互联网访问。本篇假设使用 mlg52xlarge 实例类型。要查看或增加你的配额,请打开 AWS 服务配额控制台,选择导航窗格中的 AWS 服务,并查阅 mlg52xlarge 实例上运行的 Studio KernelGateway 应用的价值。

在确认配额后,你需要完成依赖项以使用 Llama 2 7b chat。

clash for abdroid

Llama 2 7b chat 在 Llama 2 许可协议 下可用。要在 Hugging Face 上访问 Llama 2,你需要首先完成以下步骤:

如果你没有 Hugging Face 账户,请创建一个。在 Meta 网站 上填写“请求访问下一个版本的 Llama”表格。请求访问 Llama 2 7b chat 在 Hugging Face 上。

获得访问权限后,你可以创建一个新的访问令牌以访问模型。要创建访问令牌,请转到 Hugging Face 网站上的 设置 页面。

要将 Pinecone 作为向量数据库使用,你需要拥有一个 Pinecone 账户。Pinecone 通过 AWS Marketplace 在 AWS 上提供。Pinecone 网站还提供创建 免费账户 的选项,该账户具有创建单个索引的权限,足以满足本篇文章的需求。要检索你的 Pinecone 密钥,打开 Pinecone 控制台 并选择 API Keys。

设置笔记本和环境

要跟随本文中的代码,请打开 SageMaker Studio,并克隆以下 GitHub 仓库。接下来,打开笔记本 studiolocalgenai/rag/RAGwithLlama2onStudioipynb,选择 PyTorch 200 Python 310 GPU 优化映像,Python 3 内核,以及 mlg52xlarge 作为实例类型。如果这是你第一次使用 SageMaker Studio 笔记本,参见 创建或打开 Amazon SageMaker Studio 笔记本。

要设置开发环境,你需要安装必要的 Python 库,如下所示:

pythonwritefile requirementstxtsagemakergt=21750transformers==4330accelerate==0210datasets==2130langchain==00297pypdfgt=3163pineconeclientsentencetransformerssafetensorsgt=033

python!pip install U r requirementstxt

加载预训练模型和分词器

在导入所需库后,可以从 Hugging Face 加载 Llama2 7b chat 模型及其对应的分词器。这些加载的模型工件存储在 SageMaker Studio 的本地目录中。这使你能够在之后需恢复工作时快速重新加载它们到内存中。

pythonimport torch

from transformers import ( AutoTokenizer LlamaTokenizer LlamaForCausalLM GenerationConfig AutoModelForCausalLM)import transformers

tgmodelid = metallama/Llama27bchathf #在 Hugging Face 中的模型 IDtgmodelpath = f/tgmodel/{tgmodelid} #模型将保存到的本地目录

tgmodel = AutoModelForCausalLMfrompretrained(tgmodelid token=hfaccesstoken dosample=True usesafetensors=True devicemap=auto torchdtype=torchfloat16)tgtokenizer = AutoTokenizerfrompretrained(tgmodelid token=hfaccesstoken)

tgmodelsavepretrained(savedirectory=tgmodelpath frompt=True)tgtokenizersavepretrained(savedirectory=tgmodelpath frompt=True)

提问以获取最新信息

现在可以开始使用模型并提出问题。Llama2 聊天模型期望提示遵循以下格式:

pythonltsgt[INST] ltltSYSgtgtsystempromptltltSYSgtgt{{ usermessage }} [/INST]

您可以使用 LangChain 的 PromptTemplate 创建基于提示格式的配方,以便轻松生成后续提示:

pythonfrom langchain import PromptTemplate

template = [INST] ltgtnYou are an assistant for questionanswering tasks You are helpful and friendly Use the following pieces of retrieved context to answer the query If you dont know the answer you just say I dont know Use three sentences maximum and keep the answer conciseltgtn{context}n{question} [/INST]prompttemplate = PromptTemplate(template=template inputvariables=[context question])

让我们问模型一个需要 2023 年最近信息的问题。你可以使用 LangChain 中的 LLMChain 类型的链,传递 LLM、之前创建的提示模板和问题作为参数:

pythonquestion = When can I visit the AWS MampE Customer Experience Center in New York City

tgtokenizeraddspecialtokens({padtoken [PAD]})tgtokenizerpaddingside = left

tgpipe = transformerspipeline(task=textgeneration model=tgmodel tokenizer=tgtokenizer numreturnsequences=1 eostokenid=tgtokenizereostokenid padtokenid=tgtokenizereostokenid maxnewtokens=400 temperature=07)

from langchainchains import LLMChainfrom langchainllms import HuggingFacePipeline

llm = HuggingFacePipeline(pipeline=tgpipe modelkwargs={temperature 07})llmchain = LLMChain(llm=llm prompt=prompttemplate)nocontextresponse = llmchainpredict(context= question=question)print(nocontextresponse)

我们得到了以下生成的答案:

感谢您的联系!AWS MampE 客户体验中心目前因 COVID19 大流行而关闭,无法进行参观。但是,您可以查看他们的官方网站或社交媒体账户,了解中心何时重新开放的更新。同时,您可以浏览他们提供的虚拟游览和在线资源。

通过为提示添加上下文来改善答案

我们生成的答案并不完全准确。让我们看看能否通过提供一些上下文来改进它。可以添加来自 AWS 宣布新 MampE 客户体验中心在纽约 的帖子中的摘录,该帖子包含2023年相关主题的更新信息:

pythoncontext = 媒体和娱乐MampE客户在生产更多内容、更快地将其分发到越来越多端点的挑战中不断面临困难。亚马逊网络服务AWS及其合作伙伴已在 NAB 展国家广播商协会和 IBC 展国际广播大会等行业活动中展示了 MampE 解决方案的快速演变。到目前为止,AWS 为 MampE 的技术演示仅限于每年几周的时间。客户比以往任何时候都更投入;他们希望进行更高质量的对话,讨论用户体验和媒体工具。这些对话最好通过有互联的解决方案架构来支持。MampE 客户体验中心的参观安排将从 11 月 13 日开始,请发送电子邮件至 AWSMediaEntCXC@amazoncom 以安排访问。

使用 LLMChain 再次传递前述文本作为上下文:

pythoncontext

©  - All Rights Reserved clash for abdroid .