此存储库包含一个实际示例,介绍如何使用 GenAI AWS 服务构建能够回答与您的私人文档相关的问题的问答应用程序。
之前,我使用 Azure OpenAI GPT-4 和 Pinecone 构建了一个问答应用程序(您可以在此处找到它) 。
在此存储库中,我将构建完全相同的应用程序,但仅使用 AWS 服务(+ UI 的 Streamlit)。
更准确地说,该应用程序具有以下架构:
它使用以下技术:
该存储库包含以下应用程序:
Streamlit
应用程序,允许我们使用可用的 AWS Bedrock LLM 模型之一查询存储在 AWS Kendra 中的数据。私人文档存储在 s3 存储桶中。
Kendra Index 配置为使用 s3 连接器。 Index 每 N 分钟检查 s3 存储桶中是否有新内容。如果在存储桶中发现新内容,它会自动解析并存储到 Kendra 数据库中。
当用户通过Streamlit
应用程序运行查询时,该应用程序将执行以下步骤:
如果您不想使用Streamlit
应用程序,而是更喜欢逐步执行设置 RAG 模式的说明,那么您有一个 Jupyter 笔记本 ( /notebooks/rag-with-langchain.ipynb
) 可以准确地允许您执行此操作。
Streamlit
应用程序大量使用LangChain
库来实现 RAG 模式。如果您不想使用任何第三方库并仅使用boto3
库设置 RAG 模式,您可以使用第二个 Jupyter 笔记本 ( /notebooks/rag-with-only-boto3.ipynb
) 来执行此操作。
在/infra
文件夹中,您将找到一系列 Terraform 文件,这些文件将创建应用程序正常运行所需的所有 AWS 服务。
这些 Terraform 文件将创建以下资源:
在尝试运行该应用程序之前,您应该了解一些先决条件。
在“模型访问”部分,您可以概述您可以访问哪些法学硕士,哪些不能访问。
要充分使用此应用程序,您必须有权访问每个 AWS Bedrock 第三方 LLM 。
boto3
设置为从本地计算机上 AWS 配置文件的default
配置文件中检索 AWS 凭证。有关配置boto3
凭据的多种方法的概述,请访问以下链接:
在尝试运行应用程序之前,请阅读AWS 基础设施和先决条件部分。
存储库有一个.env
文件,其中包含应用程序成功运行所需的环境变量:
KENDRA_INDEX='<kendra-index>'
AWS_BEDROCK_REGION='<bedrock-region>'
AWS_KENDRA_REGION='<region-where-kendra-index-is-deployed>'
相应地更改值。
pip install -r requirements.txt
当您安装Streamlit
时,还会安装命令行 (CLI) 工具。该工具的目的是运行Streamlit
应用程序。
要执行该应用程序,只需运行以下命令:
streamlit run app.py
该存储库有一个
Dockerfile
以防您希望在容器上执行应用程序。
docker build -t aws-rag-app .
docker run -p 5050:5050
-e KENDRA_INDEX="<kendra-index>"
-e AWS_BEDROCK_REGION="<bedrock-region>"
-e AWS_KENDRA_REGION="<region-where-kendra-index-is-deploy>"
-e AWS_ACCESS_KEY_ID="<aws-access-key>"
-e AWS_SECRET_ACCESS_KEY="<aws-secret-access-key>"
aws-rag-app
app.py
以使其与最新的基岩更改兼容。boto3
和botocore3
轮文件。兼容 Bedrock 的boto3
终于公开了。