项目简介
此示例应用程序允许您针对上传的任何 PDF 文档提出自然语言问题。它将 LLM 的文本生成和分析功能与文档内容的矢量搜索相结合。该解决方案使用无服务器服务(例如 Amazon Bedrock 来访问基础模型、AWS Lambda 来运行 LangChain 以及 Amazon DynamoDB 来存储会话内存)。
请参阅 AWS 无服务器博客上随附的博客文章了解详细说明,并按照下面的部署说明开始操作。
警告 此应用程序尚未准备好用于生产使用。它是为了演示和教育目的而编写的。在部署此堆栈之前,请查看本自述文件的安全部分并咨询您的安全团队。本示例中不暗示任何保证。
注意 此架构创建的资源具有与其相关的成本。请参阅 AWS 定价页面了解详细信息,并确保在部署此堆栈之前了解成本。
主要特征
-
用于无服务器嵌入和推理的 Amazon Bedrock
-
LangChain将编排问答LLM链
-
FAISS vector store FAISS矢量商店
-
用于无服务器会话内存的 Amazon DynamoDB
-
用于无服务器计算的 AWS Lambda
-
前端采用 React、TypeScript、TailwindCSS 和 Vite 构建。
-
本地运行或部署到 AWS Amplify 托管
-
用于身份验证的 Amazon Cognito
应用程序如何运作
-
用户通过静态 Web 应用程序前端将 PDF 文档上传到 Amazon S3 存储桶。
-
此上传会触发元数据提取和文档嵌入过程。该过程将文档中的文本转换为向量。这些向量被加载到向量索引中并存储在 S3 中以供以后使用。
-
当用户与 PDF 文档聊天并向后端发送提示时,Lambda 函数会从 S3 检索索引并搜索与提示相关的信息。
-
然后,LLM 使用此矢量搜索的结果、对话中的先前消息及其通用功能来制定对用户的响应。
部署说明
先决条件
-
AWS SAM CLI
-
Python 3.11 或更高版本
克隆此存储库:
Amazon Bedrock安装
此应用程序可通过 Amazon Bedrock 与各种 LLMs 一起使用。有关完整列表,请参阅 Amazon Bedrock 中支持的型号。
默认情况下,此应用程序使用 Titan Embeddings G1 - Text 生成嵌入,并使用 Anthropic 的 Claude v2 模型进行响应。
重要信息 在您可以将这些模型与此应用程序一起使用之前,您必须在 Amazon Bedrock 控制台中请求访问权限。有关详细说明,请参阅《基岩用户指南》的模型访问部分。默认情况下,此应用程序配置为在
us-east-1
区域中使用 Amazon Bedrock,请确保您请求该区域中的模型访问权限(该区域不必与您将此堆栈部署到的区域相同)。
如果您想更改默认模型或基岩区域,请编辑 backend/src/generate_response/main.py 和 backend/src/generate_embeddings/main.py 中的 Bedrock 和 BedrockEmbeddings :
Bedrock(
model_id="anthropic.claude-v2", #adjust to use different model
region_name="us-east-1", #adjust if not using us-east-1
)
如果您选择默认模型以外的模型,则还必须调整 AWS SAM 模板中 GenerateEmbeddingsFunction 和 GenerateResponseFunction 资源的 IAM 权限:
GenerateResponseFunction:
Type: AWS::Serverless::Function
Properties:
# other properties
Policies:
# other policies
- Statement:
- Sid: "BedrockScopedAccess"
Effect: "Allow"
Action: "bedrock:InvokeModel"
Resource:
- "arn:aws:bedrock:*::foundation-model/anthropic.claude-v2" # adjust with different model
- "arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v1" # adjust with different model