构建全栈大语言模型驱动的聊天机器人:从非结构化文档中提取洞见

使用亚马逊云科技和开源工具构建您自己的精通汽车的 AI 助手
发布时间:2023 年 10 月 5 日
大语言模型
生成式人工智能
sagemaker-jumpstart
Langchain
教程
亚马逊云科技
Olawale Olaleye
亚马逊云科技使用经验
200 - 中级
完成所需时间
60 分钟
所需费用

约每小时 9 美元。要将亚马逊云科技免费套餐用于 (Amazon OpenSearch)等服务,请使用 t2.small.search 或 t3.small.search 实例。此外,您还可以通过使用 t5-flan small / t5-flan-xl LLM 来代替 t5-flan-xxl LLM 进行实验来进一步降低成本。

前提条件

1.您需要有一个有效的亚马逊云科技账户。如果没有,注册 / 登录亚马逊云科技账户
2.确保您在本地计算机上安装了 Amazon 命令行界面 (CLI),并且应使用必要的凭证和默认区域进行了正确配置。您可以使用 aws configure 命令对其进行配置。
3.下载并安装 Docker Engine。按照特定操作系统的安装说明进行操作。

示例代码

GitHub 上的教程中使用的代码示例

上次更新时间
2023 年 10 月 5 日

设想一下,如果能与非结构化数据对话,我们便能轻松地提取出重要信息。在当今数据驱动的环境中,从非结构化文档中提取有意义的洞见仍然是一项挑战,阻碍了决策和创新。在本教程中,我们将学习嵌入 (Embeddings),探索将 Amazon OpenSearch 用作矢量数据库,并将 Langchain 框架与大语言模型 (LLM) 无缝集成,构建具有嵌入式 NLP 聊天机器人的网站。我们将介绍 LLM 的基础知识,在开源大语言模型的帮助下,从非结构化文档中提取有意义的洞见。学完本教程,您将全面了解如何从非结构化文档中获取有意义的洞见,并运用这些技能通过类似的全栈 AI 驱动解决方案进行探索和创新。

构建内容

在此示例中,我们将模拟许多企业常面临的问题。如今,大多数数据都不是结构化的,而是以音频和视频转录稿、PDF 和 Word 文档、手册、扫描笔记、社交媒体转储等形式出现的非结构化数据。我们将使用 Flan-T5 XXL 模型作为 LLM。该模型可以从非结构化文本中生成摘要和问答响应。下图是展示了各种构建基块的架构。

从基础开始

我们将使用一种叫做上下文学习的技术,将域或特定于使用场景的“上下文”注入我们的 LLM 中。在这次案例中,我们有一个非结构化的汽车 PDF 手册,我们想将其添加为 LLM 的“上下文”,并且希望 LLM 回答有关本手册的问题。就这么简单!我们的目标是更进一步,开发一个实时 API 来接收问题并将其转发到我们的后端,并且可以通过嵌入在网站中的开源聊天机器人来访问。本教程会让我们能够构建整个用户体验,并在整个过程中深入了解各种概念和工具。

  1. 提供上下文学习的第一步是提取 PDF 文档并将其转换为文本数据块,生成这些文本数据块的矢量表示,即嵌入 (Embeddings),最后再将这些嵌入存储在矢量数据库中。

  2. 矢量数据库让我们能够对存储在其中的文本嵌入执行“相似性搜索”。

  3. Amazon SageMaker JumpStart 提供一键式可执行解决方案模板,用于为预训练的开源模型设置基础设施。我们将使用 Amazon SageMaker JumpStart 来部署嵌入模型和大语言模型。

  4. Amazon OpenSearch 是一个搜索和分析引擎,可以搜索矢量空间中点的最近邻,使其适合用作矢量数据库。

图示:从 PDF 转换为矢量数据库中的嵌入 (Embeddings)

现在,让我们深入了解本教程的第一步。在步骤 1 中,我们将使用 Amazon SageMaker JumpStart 部署 GPT-J 6B FP16 嵌入模型。该模型在 PDF 手册转换成矢量数据库的嵌入 (Embeddings) 的过程中至关重要。

步骤 1 - 使用 Amazon SageMaker JumpStart 部署 GPT-J 6B FP16 嵌入模型

按照 Amazon SageMaker 文档 - 打开并使用 JumpStart 部分 中描述的步骤,从 Amazon SageMaker Studio 的主菜单启动 Amazon SageMaker JumpStart 节点。选择 Models, notebooks, solutions(模型、笔记本、解决方案)选项,然后选择 GPT-J 6B 嵌入 FP16 嵌入模型,如下图所示。然后,点击 Deploy(部署),Amazon SageMaker JumpStart 会负责将此预训练模型部署到 SageMaker 环境中的基础设施的设置。

步骤 2 - 使用 Amazon SageMaker JumpStart 部署 Flan T5 XXL LLM

接下来,在 Amazon SageMaker JumpStart 中,选择 Flan-T5 XXL LLM,然后点击“部署”以启动基础设施的自动设置并将模型端点部署到 Amazon SageMaker 环境中。

步骤 3 - 检查部署好的模型端点的状态

我们在 Amazon SageMaker 控制台中在检查步骤 1 和步骤 2 中部署的模型端点的状态,并记下它们的端点名称,因为我们接下来将在代码中用到。下面是部署好模型端点后的控制台界面。

步骤 4 - 创建 Amazon OpenSearch 集群

Amazon OpenSearch 是一项搜索和分析服务,支持 k-Nearest Neighbors (kNN) 算法。此功能对于基于相似性的搜索非常有价值,让我们能够有效地将 OpenSearch 用作矢量数据库。要进一步探索并了解哪些版本的 Elasticsearch/OpenSearch 支持 kNN 插件,请访问以下链接:k-NN 插件文档

我们将使用 Amazon CLI 从 GitHub 位置 Infrastructure/opensearch-vectordb.yaml 部署 Amazon CloudFormation 模板文件。按如下方式执行 aws cloudformation create-stack 命令以创建 Amazon OpenSearch 集群。在执行命令之前,我们必须将 <username> 和 <password> 替换为我们自己的值。

aws cloudformation create-stack --stack-name opensearch-vectordb \
 --template-body file://opensearch-vectordb.yaml \
 --parameters ParameterKey=ClusterName,ParameterValue=opensearch-vectordb \
 ParameterKey=MasterUserName,ParameterValue=<username> \
 ParameterKey=MasterUserPassword,ParameterValue=<password> 

步骤 5 - 构建文档提取和嵌入工作流

在这一步中,我们将创建一个提取和处理管道,用于在将 PDF 文档放置在 Amazon Simple Storage Service (S3) 存储桶中时读取该文档。该管道会执行以下任务:

  1. 对 PDF 文档中的文本进行分块。
  2. 将文本数据块转换成嵌入(Embeddings 矢量表示)。
  3. 将嵌入 (Embeddings) 存储在 Amazon OpenSearch 中。

将 PDF 文件拖放到 S3 存储桶中会触发涉及 Amazon Fargate 任务的基于事件的工作流。该任务将负责将文本转换成嵌入 (Embeddings) 并将其插入到 Amazon OpenSearch 中。

图解概览

下图展示了用于将文本数据块嵌入 (Embeddings) 存储到 Amazon OpenSearch 矢量数据库中的文档提取管道:

启动脚本和文件结构

核心逻辑位于 create-embeddings-save-in-vectordb\startup_script.py 文件中。Python 脚本 startup_script.py 执行涉及文档处理、文本嵌入并插入到 Amazon OpenSearch 集群中的多项任务。该脚本从 Amazon S3 存储桶下载 PDF 文档,然后将下载好的文档拆分成更小的文本数据块。每个数据块的文本内容将发送到部署在 Amazon SageMaker 上的 GPT-J 6B FP16 嵌入模型端点(从 TEXT_EMBEDDING_MODEL_ENDPOINT_NAME 环境变量中检索)以生成文本嵌入。然后,所生成的嵌入 (Embeddings) 以及其他信息将插入到 Amazon OpenSearch 索引中。该脚本从环境变量中检索配置参数和凭证,可根据不同环境进行灵活配置。该脚本旨在在 Docker 容器中运行,从而实现执行过程的一致性。

构建并发布 Docker 镜像

在理解 startup_script.py 中的代码后,我们继续从 create-embeddings-save-in-vectordb 文件夹构建 Dockerfile,并将镜像推送到 Amazon Elastic Container Registry (Amazon ECR)。Amazon Elastic Container Registry (Amazon ECR) 是一个全托管的容器注册表,可提供高性能托管服务,因此我们在任何地方都可以对应用程序镜像和构件进行可靠部署。我们将使用 Amazon CLI 和 Docker CLI 构建 Docker 镜像并将其推送到 Amazon ECR。在以下所有命令中,将 <AWS Account Number> 替换为正确的亚马逊云科技账号。

  • 检索身份验证令牌,并在 Amazon CLI 中向注册表验证 Docker 客户端。
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <AWS Account Number>.dkr.ecr.us-east-1.amazonaws.com
  • 使用以下命令构建 Docker 镜像。
docker build -t save-embedding-vectordb .
  • 构建完成后,标记镜像,这样我们便可以将镜像推送到此存储库:
docker tag save-embedding-vectordb:latest <AWS Account Number>.dkr.ecr.us-east-1.amazonaws.com/save-embedding-vectordb:latest
  • 运行以下命令将此镜像推送到新创建的 Amazon ECR 存储库:
docker push <AWS Account Number>.dkr.ecr.us-east-1.amazonaws.com/save-embedding-vectordb:latest
将 Docker 镜像上传到 Amazon ECR 存储库后,应类似于以下镜像:

为事件驱动型 PDF 嵌入工作流构建基础设施

我们可以利用 Amazon 命令行界面 (Amazon CLI) 进而用提供的参数为基于事件的工作流创建 CloudFormation 堆栈。CloudFormation 模板位于 GitHub 存储库的 Infrastructure/fargate-embeddings-vectordb-save.yaml 中。我们需要覆盖参数来匹配亚马逊云科技环境。

以下是要在 aws cloudformation create-stack 命令中更新的关键参数:

  • BucketName:此参数表示我们要放置 PDF 文档的 Amazon S3 存储桶。
  • VpcId 和 SubnetId:这些参数指定 Fargate 任务的运行位置。
  • ImageName:这是 Amazon Elastic Container Registry (ECR) 中用于 save-embedding-vectordb 的 Docker 镜像的名称。
  • TextEmbeddingModelEndpointName:使用此参数来提供在步骤 1 中部署在 Amazon SageMaker 上的嵌入模型的名称。
  • VectorDatabaseEndpoint:输入 Amazon OpenSearch 域端点 URL。
  • VectorDatabaseUsername 和 VectorDatabasePassword:这些参数用于访问在步骤 4 中创建的 Amazon OpenSearch 集群所需的凭证。
  • VectorDatabaseIndex:在 Amazon OpenSearch 中设置将存储 PDF 文档嵌入的索引的名称。

要执行 CloudFormation 堆栈的创建,我们要在更新参数值后使用以下 Amazon CLI 命令:

aws cloudformation create-stack \
 --stack-name ecs-embeddings-vectordb \
 --template-body file://fargate-embeddings-vectordb-save.yaml \
 --parameters \
 ParameterKey=BucketName,ParameterValue=car-manuals-12345 \
 ParameterKey=VpcId,ParameterValue=vpc-123456 \
 ParameterKey=SubnetId,ParameterValue=subnet-123456,subnet-123456 \
 ParameterKey=Imagename,ParameterValue=123456.dkr.ecr.us-east-1.amazonaws.com/save-embedding-vectordb:latest \
 ParameterKey=TextEmbeddingModelEndpointName,ParameterValue=jumpstart-dft-hf-textembedding-gpt-j-6b-fp16 \
 ParameterKey=VectorDatabaseEndpoint,ParameterValue=https://search-cfnopensearch2-xxxxxxxx.us-east-1.es.amazonaws.com \
 ParameterKey=VectorDatabaseUsername,ParameterValue=master \
 ParameterKey=VectorDatabasePassword,ParameterValue=vectordbpassword \
 ParameterKey=VectorDatabaseIndex,ParameterValue=carmanual

通过创建上述 CloudFormation 堆栈,我们设置了一个 S3 存储桶并建立了触发 Lambda 函数的 S3 通知。接着,该 Lambda 函数便会启动 Fargate 任务。Fargate 任务运行一个包含 startup-script.py 文件的 Docker 容器,负责在名为 carmanual 的新 OpenSearch 索引下生成 Amazon OpenSearch 中的嵌入 (Embeddings)。

用示例 PDF 进行测试

CloudFormation 堆栈执行后,将汽车手册的 PDF 拖入 S3 存储桶中。我提前下载了一本汽车手册,您可以通过点击此处获取。在基于事件的提取管道执行完成后,Amazon OpenSearch 集群应包含具有嵌入的 carmanual 索引,如下所示。

步骤 6 - 部署具有 LLM 上下文支持的实时问答 API

现在,我们已经在由 Amazon OpenSearch 提供支持的 Vector Database 中保存了文本嵌入,让我们进行下一步。在这一步,我们将利用 T5 Flan XXL LLM 的功能来提供有关我们汽车手册的实时响应。

我们将利用矢量数据库中保存的嵌入 (Embeddings) 来为 LLM 提供上下文。这篇上下文使 LLM 能够有效理解和回答与我们的汽车手册相关的问题。为了实现这一点,我们将利用一个名为 LangChain 的框架,这个框架简化了由 LLM 提供支持的实时上下文感知问答系统所需的各种组件的编排。

存储在矢量数据库中的嵌入 (Embeddings) 会捕获词义和关系,使我们能够根据语义相似性进行计算。虽然嵌入 (Embeddings) 会创建文本数据块的矢量表示以捕获含义和关系,但 T5 Flan LLM 专门根据注入到提示和查询中的上下文生成有关上下文的响应。这样做的目标是通过为问题生成嵌入 (Embeddings),然后测量它们与存储在矢量数据库中的其他嵌入的相似性,将用户问题与文本数据块进行比较。

通过将文本数据块和用户问题表示为矢量,我们可以执行数学计算来进行上下文感知的相似性搜索。为了测量两个数据点之间的相似性,我们在多维空间中使用距离度量。

下图展示了由 LangChain 和我们的 T5 Flan LLM 提供支持的实时问答工作流。

T5-Flan-XXL LLM 实时问答支持的图解概览

构建 API

现在我们已经了解了 LangChain 和 T5 Flan LLM 工作流,让我们深入研究一下我们的 API 代码,它接收用户问题并提供上下文感知响应。这个实时问答 API 位于 GitHub 存储库的 RAG-langchain-questionanswer-t5-llm 文件夹中,核心逻辑位于 app.py 文件中。这个基于 Flask 的应用程序定义了一个用于问答的 /qa 路由。

当用户向 API 提出问题时,它会利用指向 Amazon SageMaker 端点的 TEXT_EMBEDDING_MODEL_ENDPOINT_NAME 环境变量将问题转换成名为 embeddings 的数字矢量表示。这些嵌入 (Embeddings) 能捕获文本的语义含义。

该 API 进一步利用 Amazon OpenSearch 执行上下文感知相似性搜索,使其能够根据从用户查询得出的嵌入从 OpenSearch 索引 carmanual 中获取相关文本数据块。在此步骤之后,API 将调用 T5 Flan LLM 端点,该端点由环境变量 T5FLAN_XXL_ENDPOINT_NAME指示,也部署在 Amazon SageMaker 上。该端点利用从 Amazon OpenSearch 检索到的文本数据块作为 context 来生成响应。这些从 Amazon OpenSearch 获取的文本数据块可为 T5 Flan LLM 端点提供重要的上下文信息,使其能够对用户查询生成有意义的响应。API 代码使用 LangChain 来编排所有交互。

为 API 构建和发布 Docker 镜像

在理解 app.py 中的代码后,我们继续从 RAG-langchain-questionanswer-t5-llm 文件夹构建 Dockerfile,并将镜像推送到 Amazon ECR。我们将使用 Amazon CLI 和 Docker CLI 构建 Docker 镜像并将其推送到 Amazon ECR。在以下所有命令中,将 <AWS Account Number> 替换为正确的亚马逊云科技账号。

  • 检索身份验证令牌,并在 Amazon CLI 中向注册表验证 Docker 客户端。
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <AWS Account Number>.dkr.ecr.us-east-1.amazonaws.com 
  • 使用以下命令构建 Docker 镜像。
docker build -t qa-container .
  • 构建完成后,标记镜像,这样我们便可以将镜像推送到此存储库:
docker tag qa-container:latest <AWS Account Number>.dkr.ecr.us-east-1.amazonaws.com/qa-container:latest
  • 运行以下命令将此镜像推送到新创建的 Amazon ECR 存储库:
docker push <AWS Account Number>.dkr.ecr.us-east-1.amazonaws.com/qa-container:latest
  • 将 Docker 镜像上传到 Amazon ECR 存储库后,应类似于以下镜像:

构建用于托管 API 端点的 CloudFormation 堆栈

我们使用 Amazon 命令行界面 (CLI) 为 Amazon ECS 集群创建 CloudFormation 堆栈,该集群托管 Fargate 任务以公开 API。CloudFormation 模板位于 GitHub 存储库的 Infrastructure/fargate-api-rag-llm-langchain.yaml 中。我们需要覆盖参数来匹配亚马逊云科技环境。以下是要在 aws cloudformation create-stack 命令中更新的关键参数:

  • DemoVPC:该参数指定您要运行服务的虚拟私有云 VPC。
  • PublicSubnetIds:此参数需要将要放置负载均衡器和任务的公有子网 ID 列表。
  • Imagename:在 Amazon Elastic Container Registry (ECR) 中为 qa-container 提供 Docker 镜像的名称。
  • TextEmbeddingModelEndpointName:输入步骤 1 中部署在 Amazon SageMaker 上的嵌入模型的端点名称。
  • T5FlanXXLEndpointName:输入步骤 2 中部署在 Amazon SageMaker 上的 T5-FLAN 端点的端点名称。
  • VectorDatabaseEndpoint:输入 Amazon OpenSearch 域端点 URL。
  • VectorDatabaseUsername 和 VectorDatabasePassword:这些参数用于访问在步骤 4 中创建的 OpenSearch 集群所需的凭证。
  • VectorDatabaseIndex:在 Amazon OpenSearch 中设置将存储服务数据的索引的名称。在此示例中,我们使用的索引的名称是 carmanual。

要执行 CloudFormation 堆栈的创建,我们要在更新参数值后使用以下 Amazon CLI 命令:

aws cloudformation create-stack \
 --stack-name ecs-questionanswer-llm \
 --template-body file://fargate-api-rag-llm-langchain.yaml \
 --parameters \
 ParameterKey=DemoVPC,ParameterValue=vpc-123456 \
 ParameterKey=PublicSubnetIds,ParameterValue=subnet-123456,subnet-789012 \
 ParameterKey=Imagename,ParameterValue=123456.dkr.ecr.us-east-1.amazonaws.com/qa-container:latest \
 ParameterKey=TextEmbeddingModelEndpointName,ParameterValue=jumpstart-dft-hf-textembedding-gpt-j-6b-fp16 \
 ParameterKey=T5FlanXXLEndpointName,ParameterValue=jumpstart-example-huggingface-text2text-2023-08-06-16-40-45-080 \
 ParameterKey=VectorDatabaseEndpoint,ParameterValue=https://search-cfnopensearch2-xxxxxxxx.us-east-1.es.amazonaws.com \
 ParameterKey=VectorDatabaseUsername,ParameterValue=master \
 ParameterKey=VectorDatabasePassword,ParameterValue=vectordbpassword \
 ParameterKey=VectorDatabaseIndex,ParameterValue=carmanual

成功执行上述 CloudFormation 堆栈后,导航到亚马逊云科技控制台并访问 ecs-questionanswer-llm 堆栈的“CloudFormation Outputs”选项卡。在此选项卡中,我们将找到基本信息,包括 API 端点。下面是输出结果示例:

测试 API

我们可以通过 curl 命令测试 API 端点,如下所示:-

curl -X POST -H "Content-Type: application/json" -d '{"question":"How can I clean my windshield?"}' http://quest-Publi-abc-xxxx.us-east-1.elb.amazonaws.com/qa

我们将看到如下响应

{"response":"To clean sensors and camera lenses, use a cloth moistened with a small amount of glass detergent."}

步骤 7 - 使用集成聊天机器人创建并部署网站

接下来,我们继续进行全栈管道的最后一步,即将 API 与 HTML 网站中的嵌入式聊天机器人集成。对于这个网站和嵌入式聊天机器人,我们的源代码是一个 Nodejs 应用程序,由一个 index.html 组成,它与开源 botkit.js 集成在一起作为聊天机器人。为了方便起见,我创建了一个 Dockerfile,并将其连同代码一起放在了文件夹 homegrown_website_and_bot 中。我们将使用 Amazon CLI 和 Docker CLI 构建 Docker 镜像并将其推送到前端网站的 Amazon ECR。在以下所有命令中,将 <AWS Account Number> 替换为正确的亚马逊云科技账号。

  • 检索身份验证令牌,并在 Amazon CLI 中向注册表验证 Docker 客户端。
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <AWS Account Number>.dkr.ecr.us-east-1.amazonaws.com 
  • 使用以下命令构建 Docker 镜像:
docker build -t web-chat-frontend .
  • 构建完成后,标记镜像,这样我们便可以将镜像推送到此存储库:
docker tag web-chat-frontend:latest <AWS Account Number>.dkr.ecr.us-east-1.amazonaws.com/web-chat-frontend:latest
  • 运行以下命令将此镜像推送到新创建的 Amazon ECR 存储库:
docker push <AWS Account Number>.dkr.ecr.us-east-1.amazonaws.com/web-chat-frontend:latest

将网站的 Docker 镜像推送到 ECR 存储库后,我们通过执行 Infrastructure\fargate-website-chatbot.yaml 文件为前端构建 CloudFormation 堆栈。我们需要覆盖参数来匹配亚马逊云科技环境。以下是要在 aws cloudformation create-stack 命令中更新的关键参数:

  • DemoVPC:该参数指定您要部署网站的虚拟私有云 VPC。
  • PublicSubnetIds:此参数需要将要放置网站的负载均衡器和任务的公有子网 ID 列表。
  • Imagename:在 Amazon Elastic Container Registry (ECR) 中为网站提供 Docker 镜像的名称。
  • QUESTURL:输入在步骤 6 中部署的 API 的端点 URL。其格式为 http://<DNS Name of API ALB>/qa

要执行 CloudFormation 堆栈的创建,我们要在更新参数值后使用以下 Amazon CLI 命令:

aws cloudformation create-stack \
 --stack-name ecs-website-chatbot \
 --template-body file://fargate-website-chatbot.yaml \
 --parameters \
 ParameterKey=DemoVPC,ParameterValue=vpc-12345 \
 ParameterKey=PublicSubnetIds,ParameterValue=subnet-1,subnet-2 \
 ParameterKey=Imagename,ParameterValue=123456.dkr.ecr.us-east-1.amazonaws.com/web-chat-frontend:latest \
 ParameterKey=QUESTURL,ParameterValue=http://your-api-alb-dns-name/qa

步骤 8 - 使用精通汽车的 AI 助手

成功执行上述 CloudFormation 堆栈后,打开亚马逊云科技控制台并访问 ecs-website-chatbot 堆栈的 CloudFormation Outputs 选项卡。在此选项卡中,我们将找到与前端关联的应用程序负载器 (ALB) 的 DNS 名。下面是输出结果示例:

在浏览器中调用端点 URL 以查看网站的外观。用自然语言向嵌入式聊天机器人提出问题。例如,您可以问:“应该如何清洁挡风玻璃?”“在哪里可以找到 VIN?”“应该如何报告安全缺陷?”

后续操作

以上内容希望能帮助您了解如何打造适用于生产的全栈大型语言模型 (LLM) 管道,以及如何将管道与您的前端和嵌入式 NLP 聊天机器人集成。如果您对使用开源、分析、机器学习以及 Amazon 技术的其他内容感兴趣,请告诉我们!

随着您不断深入学习,建议您更深入地研究嵌入、矢量数据库、LangChain 和其他几个 LLM。这些在 Amazon SageMaker JumpStart 以及我们在本教程中所使用的 Amazon 工具(如 Amazon OpenSearch、Docker 容器、Fargate)上都可以使用。以下是帮助您掌握这些技术的一些后续事项:

  1. Amazon SageMaker:随着您深入使用 SageMaker,不妨进一步了解其提供的其他算法。

  2. Amazon OpenSearch:熟悉 K-NN 算法和其他距离算法

  3. Langchain:LangChain 是一个框架,旨在简化使用 LLM 创建应用程序的过程。

  4. 嵌入 (Embeddings):嵌入 (Embeddings) 是一段信息的数字表示,例如文本、文档、图像、音频等。

  5. Amazon SageMaker JumpStart:SageMaker JumpStart 针对各种问题类型提供了预训练开源模型,可帮助您快速上手机器学习。

清理资源

  • 登录 Amazon CLI。确保您已将 Amazon CLI 配置正确,并具有执行这些操作所需的权限。

  • 通过执行以下命令从 Amazon S3 存储桶中删除 PDF 文件。将 your-bucket-name 替换为 Amazon S3 存储桶的实际名称,并根据需要调整 PDF 文件的路径。

aws s3 rm s3://your-bucket-name/path/to/your-pdf-file.pdf
  • 删除 CloudFormation 堆栈。将堆栈名称替换为 CloudFormation 堆栈的实际名称。

# Delete 'ecs-website-chatbot' stack
aws cloudformation delete-stack --stack-name ecs-website-chatbot

# Delete 'ecs-questionanswer-llm' stack
aws cloudformation delete-stack --stack-name ecs-questionanswer-llm

# Delete 'ecs-embeddings-vectordb' stack
aws cloudformation delete-stack --stack-name ecs-embeddings-vectordb

# Delete 'opensearch-vectordb' stack
aws cloudformation delete-stack --stack-name opensearch-vectordb
  • 删除 SageMaker 端点。将 endpoint-name-1 和 endpoint-name-2 替换为您 SageMaker 端点的名称。

# Delete SageMaker endpoint 1
aws sagemaker delete-endpoint --endpoint-name endpoint-name-1

# Delete SageMaker endpoint 2
aws sagemaker delete-endpoint --endpoint-name endpoint-name-2

结论

在本教程中,我们使用 Amazon 技术和开源工具构建了一个全栈问答聊天机器人。我们利用 Amazon OpenSearch 作为矢量数据库,集成了 GPT-J 6B FP16 嵌入模型,并将 Langchain 与 LLM 结合使用。该聊天机器人从非结构化文档中提取洞见。以下是上述步骤的简略摘要:

  • 部署 GPT-J 6B FP16 嵌入模型。
  • 部署 Flan T5 XXL LLM。
  • 创建 Amazon OpenSearch 集群。
  • 构建文档提取和嵌入工作流。
  • 部署具有 LLM 支持的实时问答 API。
  • 创建并部署一个集成了聊天机器人的网站。

本教程使你能够构建类似的 AI 驱动型解决方案并进行进一步创新。点击此处查看另一篇文章,带您了解将 LLM 集成到应用程序中的更多方法。