介绍
先决条件
目标技术栈
部署
有用的 CDK 命令
代码结构
使用您自己的数据自定义聊天机器人
此 GenAI ChatBot 应用程序是使用 Amazon Bedrock 构建的,其中包括知识库、代理和其他 AWS 无服务器 GenAI 解决方案。提供的解决方案展示了一个聊天机器人,该机器人利用其对 EC2 实例和 EC2 实例定价的理解。该聊天机器人展示了 Amazon Bedrock 将自然语言转换为 Amazon Athena 查询以及处理和利用复杂数据集的功能。 LLamaIndex 等开源工具用于增强系统的数据处理和检索功能。该解决方案还强调了多种AWS资源的整合。这些资源包括用于存储的 Amazon S3、用于促进检索增强生成 (RAG) 的 Amazon Bedrock KnowledgeBase、用于跨数据源执行多步骤任务的 Amazon Bedrock 代理、用于准备数据的 AWS Glue、用于执行高效查询的 Amazon Athena、用于执行高效查询的 Amazon Lambda管理容器,Amazon ECS 监督容器。这些资源的综合利用使聊天机器人能够高效地检索和管理数据库和文档中的内容,从而展示了 Amazon Bedrock 在开发高级聊天机器人应用程序方面的能力。
码头工人
AWS CDK Toolkit 2.114.1+,已安装并配置。有关更多信息,请参阅 AWS CDK 文档中的 AWS CDK 入门。
Python 3.11+,已安装并配置。有关更多信息,请参阅 Python 文档中的初学者指南/下载。
活跃的 AWS 账户
使用 us-east-1 或 us-west-2 中的 AWS CDK 引导的 AWS 账户。在 Bedrock 服务中启用 Claude 模型和 Titan Embedding 模型访问。
亚马逊基岩
亚马逊 OpenSearch 无服务器
亚马逊ECS
AWS胶水
AWS Lambda
亚马逊S3
亚马逊雅典娜
弹性负载均衡器
要在本地运行应用程序,请首先将 .env 文件添加到包含以下内容的“code/streamlit-app”文件夹
ACCOUNT_ID = <您的账户 ID>AWS_REGION = <您的区域>LAMBDA_FUNCTION_NAME = invokeAgentLambda # 设置 Streamlit 为响应调用的 lambda 函数的选择名称。当前正在调用代理。
cdk.json
文件告诉 CDK Toolkit 如何执行您的应用程序。
该项目的设置类似于标准 Python 项目。初始化过程还会在此项目中创建一个 virtualenv,存储在.venv
目录下。要创建 virtualenv,它假设您的路径中有一个可以访问venv
包的python3
(或 Windows 的python
)可执行文件。如果由于任何原因自动创建 virtualenv 失败,您可以手动创建 virtualenv。
要在 MacOS 和 Linux 上手动创建 virtualenv:
$ python3 -m venv .venv
初始化过程完成并创建 virtualenv 后,您可以使用以下步骤激活 virtualenv。
$ 源 .venv/bin/activate
如果你是Windows平台,你可以像这样激活virtualenv:
% .venvScriptsactivate.bat
激活 virtualenv 后,您可以安装所需的依赖项。
$ pip install -r 要求.txt
要添加其他依赖项(例如其他 CDK 库),只需将它们添加到setup.py
文件并重新运行pip install -r requirements.txt
命令。
此时,您现在可以为此代码合成 CloudFormation 模板。
$ cdk 合成器
要添加其他依赖项(例如其他 CDK 库),只需将它们添加到setup.py
文件并重新运行pip install -r requirements.txt
命令。
如果这是您第一次在特定帐户和区域运行 cdk,则需要引导它。
$ cdk 引导程序
一旦引导完成,您就可以继续部署 cdk。
$ cdk 部署
如果这是您第一次部署它,则在 ECS(Amazon Elastic Container Service)中构建多个 Docker 映像的过程可能需要大约 30-45 分钟。请耐心等待直至完成。之后,它将开始部署聊天机器人堆栈,通常需要大约 5-8 分钟。
部署过程完成后,您将在终端中看到 cdk 的输出,并且您还可以在 CloudFormation 控制台中验证状态。
您可以在 AWS 控制台中测试代理,也可以通过 CloudFormation 中聊天机器人堆栈的输出中列出的 Streamlit 应用程序 URL 来测试代理。
如果您想在使用完 cdk 后将其删除,以免产生后续费用,您可以通过控制台删除它,也可以在终端中执行以下命令。
$ cdk 销毁
您可能还需要手动删除 cdk 生成的 S3 存储桶。请确保删除所有生成的资源,以避免产生费用。
cdk ls
列出应用程序中的所有堆栈
cdk synth
发出合成的 CloudFormation 模板
cdk deploy
将此堆栈部署到您的默认AWS帐户/区域
cdk diff
将部署的堆栈与当前状态进行比较
cdk docs
打开 CDK 文档
cdk destroy
dstroys 一个或多个指定的堆栈
code # Root folder for code for this solution ├── lambdas # Root folder for all lambda functions │ ├── action-lambda # Lambda function that acts as an action for the Amazon Bedrock Agent │ ├── create-index-lambda # Lambda function that create Amazon Opensearch serverless index as Amazon Bedrock Knowlege base's vector database │ ├── invoke-lambda # Lambda function that invokes Amazon Bedrock Agent, which is called diretly from the streamlit app │ └── update-lambda # Lambda function that update/delete resources after AWS resources deployed via AWS CDK. ├── layers # Root folder for all lambda layers │ ├── boto3_layer # Boto3 layer that is shared across all lambdas │ └── opensearch_layer # opensearh layer that installs all dependencies for create Amazon Opensearch serverless index. ├── streamlit-app # Steamlit app that interacts with the Amazon Bedrock Agent └── code_stack.py # Amazon CDK stack that deploys all AWS resources
要集成您的自定义数据以部署解决方案,请遵循以下根据您的要求定制的结构化指南:
找到assets/knowledgebase_data_source/
目录。
将您的数据集放入此文件夹中。
访问cdk.json
文件。
导航到context/configure/paths/knowledgebase_file_name
字段并相应地更新它。
此外,修改cdk.json
文件中的bedrock_instructions/knowledgebase_instruction
字段,以准确反映新数据集的细微差别和上下文。
在assets/data_query_data_source/
目录中,创建一个子目录,例如 tabular_data。
将您的结构化数据集(可接受的格式包括CSV 、 JSON 、 ORC和Parquet )存放到这个新创建的子文件夹中。
如果您要连接到现有数据库,请更新code/lambda/action-lambda/build_query_engine.py
中的函数create_sql_engine()
以连接到您的数据库。
更新cdk.json
文件的context/configure/paths/athena_table_data_prefix
字段以与新数据路径保持一致。
通过将新文本合并到与您的数据集对应的 SQL 示例中来修改code/lambda/action-lambda/dynamic_examples.csv
。
修改code/lambda/action-lambda/prompt_templates.py
以反映新表格数据的属性。
修改cdk.json
文件的context/configure/bedrock_instructions/action_group_description
字段以阐明为您的数据集定制的操作 lambda 的用途和功能。
在assets/agent_api_schema/artifacts_schema.json
文件中反映操作 lambda 的新功能。
在cdk.json
文件的context/configure/bedrock_instructions/agent_instruction section
下,提供 Amazon Bedrock Agent 的预期功能和设计目的的全面描述,同时考虑到新集成的数据。
这些步骤旨在确保无缝且高效的集成过程,使您能够使用定制数据有效部署解决方案。