

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 人工智能与机器学习
<a name="machinelearning-pattern-list"></a>

**Topics**
+ [将一个 AWS CodeCommit 存储库 AWS 账户 与另一个账户中的 Amazon A SageMaker I Studio Classic 关联起来](associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.md)
+ [使用 Amazon Textract 从 PDF 文件中自动提取内容](automatically-extract-content-from-pdf-files-using-amazon-textract.md)
+ [在 Amazon A SageMaker I Studio Lab 中使用 Deepar 计算时间序列构建冷启动预测模型](build-a-cold-start-forecasting-model-by-using-deepar.md)
+ [使用亚马逊 A SageMaker I 和 Azure 构建 MLOps 工作流程 DevOps](build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops.md)
+ [使用在 Amazon Bedrock 中配置模型调用日志 AWS CloudFormation](configure-bedrock-invocation-logging-cloudformation.md)
+ [为 AWS Step Functions SageMaker 创建自定义 Docker 容器镜像并将其用于模型训练](create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.md)
+ [使用 Amazon Bedrock 代理，通过基于文本的提示，在 Amazon EKS 中自动创建访问条目控制](using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.md)
+ [使用 Terraform 和 Amazon AWS Bedrock 部署 RAG 用例](deploy-rag-use-case-on-aws.md)
+ [使用 Amazon 中的推理管道将预处理逻辑部署到单个终端节点的 ML 模型中 SageMaker](deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.md)
+ [使用带有 Kiro 和其他编码助手的 MCP 服务器部署实时编码安全验证](deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.md)
+ [使用 RAG 和提示开发基于人工智能聊天的高级生成式 AI 助手 ReAct](develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.md)
+ [使用 Amazon Bedrock 代理和知识库开发基于聊天的全自动助手](develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.md)
+ [使用 Amazon Bedrock 和 Amazon Transcribe 从语音输入中记录机构知识](document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.md)
+ [使用 Amazon Personalize 生成个性化和重新排名的推荐](generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.md)
+ [使用 SageMaker AI 和 Hydra 简化从本地开发到可扩展实验的机器学习工作流程](streamline-machine-learning-workflows-by-using-amazon-sagemaker.md)
+ [将自然语言翻译成查询 DSL OpenSearch 和 Elasticsearch 查询](translate-natural-language-query-dsl-opensearch-elasticsearch.md)
+ [将 Amazon Q 开发者版用作编码助手来提高工作效率](use-q-developer-as-coding-assistant-to-increase-productivity.md)
+ [使用 Processing 对 TB 级机器学习 SageMaker 数据集进行分布式特征工程](use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets.md)
+ [使用 Flask 和 AWS Elastic Beanstalk 可视化 AI/ML 模型结果 AWS Beanstalk](visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.md)
+ [更多模式](machinelearning-more-patterns-pattern-list.md)

# 将一个 AWS CodeCommit 存储库 AWS 账户 与另一个账户中的 Amazon A SageMaker I Studio Classic 关联起来
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account"></a>

*Laurens van der Maas 和 Aubrey Oosthuizen，Amazon Web Services*

## Summary
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-summary"></a>

此模式提供了有关如何将一个账户（账户 A）中的 AWS CodeCommit 存储库与另一个账户 AWS 账户 AWS 账户 （账户 B）中的 Amazon A SageMaker I Studio Classic 关联的说明和代码。要设置关联，您必须在账户 A 中创建 AWS Identity and Access Management (IAM) 策略和角色，在账户 B 中创建 IAM 内联策略。然后，使用外壳脚本将 CodeCommit 存储库从账户 A 克隆到账户 B 中的 Amazon A SageMaker I Classic

## 先决条件和限制
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-prereqs"></a>

**先决条件**
+ 第二 [AWS 账户](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/)，一个包含 CodeCommit 存储库，另一个包含带有用户的 SageMaker AI 域
+ 已配置的 [SageMaker AI 域和用户](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-onboard.html)，可以访问互联网或通过虚拟专用网络 AWS Security Token Service (VPC AWS STS) 端点访问 CodeCommit 和 ()
+ 对 [IAM](https://docs.aws.amazon.com/iam/?id=docs_gateway) 有基本的了解
+ 对 [SageMaker AI Studio 经典版](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html)的基本理解
+ 对 [Git](https://git-scm.com/) 的基本了解和 [CodeCommit ](https://docs.aws.amazon.com/codecommit/index.html)

**限制**

此模式仅适用于 SageMaker AI Studio Classic，不适用于亚马 RStudio 逊 SageMaker AI。

## 架构
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-architecture"></a>

**技术堆栈**
+ 亚马逊 SageMaker AI
+ 亚马逊 A SageMaker I Studio 经典版
+ AWS CodeCommit
+ AWS Identity and Access Management (IAM) 
+ Git

**目标架构**

下图显示了一种架构，该架构将账户 A CodeCommit 中的存储库与账户 B 中的 SageMaker AI Studio Classic 关联起来。

![\[跨账户关联架构图\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/d40df9eb-6ee2-4cb8-8257-051fa624e52a/images/abb89a66-fc8f-4e72-8f45-f0f44c2ec6ce.png)


下图显示了如下工作流：

1. 用户通过该`MyCrossAccountRepositoryContributorRole`角色在账户 A 中扮演`sts:AssumeRole`角色，而在账户 B 中使用 SageMaker AI Studio Classic 中的 SageMaker AI 执行角色。代入的角色包括克隆指定存储库并与之交互的 CodeCommit 权限。

1. 在 SageMaker AI Studio Classic 中，用户从系统终端执行 Git 命令。

**自动化和扩展**

此模式由手动步骤组成，可以使用 [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/?id=docs_gateway)、[AWS CloudFormation](https://docs.aws.amazon.com/cloudformation/?id=docs_gateway) 或 [Terraform](https://www.terraform.io/) 自动执行这些步骤。

## 工具
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-tools"></a>

**AWS 工具**
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) 是一项托管机器学习 (ML) 服务，可帮助您构建和训练机器学习模型，然后将其部署到生产就绪的托管环境中。
+ [Amazon SageMaker AI Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) 是一个基于 Web 的机器学习集成开发环境 (IDE)，允许您构建、训练、调试、部署和监控您的机器学习模型。
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) 是一项版本控制服务，可帮助您私下存储和管理 Git 存储库，而无需管理自己的源代码控制系统。

  **注意**： AWS CodeCommit 不再向新客户开放。的现有客户 AWS CodeCommit 可以继续照常使用该服务。[了解详情](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/)
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。

**其他工具**
+ [Git](https://git-scm.com/) 是分布式版本控制系统，用于追踪软件开发期间源代码的更改。

## 操作说明
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-epics"></a>

### 在账户 A 中创建 IAM policy 和 IAM 角色
<a name="create-an-iam-policy-and-iam-role-in-account-a"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在账户 A 中创建用于存储库访问的 IAM 策略。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html)最佳实践是将 IAM 策略的范围限制为使用案例所需最低权限。 | AWS DevOps | 
| 在账户 A 中创建用于存储库访问的 IAM 角色。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html) | AWS DevOps | 

### 在账户 B 中创建 IAM 内联策略
<a name="create-an-iam-inline-policy-in-account-b"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将内联策略附加到账户 B 中您的 SageMaker 域用户的执行角色。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html) | AWS DevOps | 

### 在 SageMaker AI Studio 经典版中为账户 B 克隆存储库
<a name="clone-the-repository-in-sm-studio-classic-for-account-b"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 SageMaker AI Studio Classic 中使用账户 B 创建外壳脚本 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html) | AWS DevOps | 
| 从系统终端调用 Shell 脚本。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account.html)您已在 SageMaker AI Studio 跨账户中克隆 CodeCommit 仓库。您现在可以从系统终端执行所有 Git 命令。 | AWS DevOps | 

## 附加信息
<a name="associate-an-aws-codecommit-repository-in-one-aws-account-with-sagemaker-studio-in-another-account-additional"></a>

**示例 IAM 策略**

如果您使用此示例策略，请执行以下操作：
+ `<CodeCommit_Repository_Region>`替换 AWS 区域 为存储库的。
+ 将 `<Account_A_ID>` 替换为账户 A 的账户 ID。
+ `<CodeCommit_Repository_Name>`替换为账户 A 中存储 CodeCommit 库的名称。

```
{
"Version": "2012-10-17",		 	 	 
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "codecommit:BatchGet*",
            "codecommit:Create*",
            "codecommit:DeleteBranch",
            "codecommit:Get*",
            "codecommit:List*",
            "codecommit:Describe*",
            "codecommit:Put*",
            "codecommit:Post*",
            "codecommit:Merge*",
            "codecommit:Test*",
            "codecommit:Update*",
            "codecommit:GitPull",
            "codecommit:GitPush"
        ],
        "Resource": [
            "arn:aws:codecommit:<CodeCommit_Repository_Region>:<Account_A_ID>:<CodeCommit_Repository_Name>"
        ]
    }
]
}
```

** SageMaker AI 外壳脚本示例**

如果您使用此示例脚本，请执行以下操作：
+ 将 `<Account_A_ID>`替换为账户 A 的账户 ID。
+ 将 `<Account_A_Role_Name>` 替换为您之前创建的 IAM 角色的名称。
+ `<CodeCommit_Repository_Region>`替换 AWS 区域 为存储库的。
+ `<CodeCommit_Repository_Name>`替换为账户 A 中存储 CodeCommit 库的名称。

```
#!/usr/bin/env bash
#Launch from system terminal
pip install --quiet git-remote-codecommit

mkdir -p ~/.aws
touch ~/.aws/config

echo "[profile CrossAccountAccessProfile]
region = <CodeCommit_Repository_Region>
credential_source=EcsContainer
role_arn = arn:aws:iam::<Account_A_ID>:role/<Account_A_Role_Name>
output = json" > ~/.aws/config

echo '[credential "https://git-codecommit.<CodeCommit_Repository_Region>.amazonaws.com"]
        helper = !aws codecommit credential-helper $@ --profile CrossAccountAccessProfile
        UseHttpPath = true' > ~/.gitconfig
        
git clone codecommit::<CodeCommit_Repository_Region>://CrossAccountAccessProfile@<CodeCommit_Repository_Name>
```

# 使用 Amazon Textract 从 PDF 文件中自动提取内容
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract"></a>

*Tianxia Jia，Amazon Web Services*

## Summary
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-summary"></a>

许多组织需要从上传至其业务应用程序的 PDF 文件中提取信息。例如，组织可能需要准确地从税务或医疗 PDF 文件中提取用于税务分析或医疗索赔处理的信息。

在 Amazon Web Services (AWS) Cloud 上，Amazon Textract 会自动从 PDF 文件中提取信息（例如已打印文本、表单和表格），并生成包含原始 PDF 文件信息的 JSON 格式文件。您可以在 AWS 管理控制台 中使用 Amazon Textract，也可以通过 API 调用使用。建议使用[编程 API 调用](https://aws.amazon.com/textract/faqs/)来扩展和自动处理大量 PDF 文件。

当 Amazon Textract 处理文件时，它会创建以下 `Block` 对象列表：页面、文本行和单词、表单（键值对）、表格和单元格以及选择元素。还包括其他对象信息，例如[边界框](https://docs.aws.amazon.com/textract/latest/dg/API_BoundingBox.html)、置信区间和关系。 IDsAmazon Textract 将提取字符串形式的内容信息。需要正确识别和转换数据值，以便下游应用程序更轻松的使用。 

此模式描述了使用 Amazon Textract 自动从 PDF 文件中提取内容并将其处理成干净输出 step-by-step的工作流程。此模式使用模板匹配技术正确识别必填字段、密钥名称和表，然后对每种数据类型进行后期处理更正。您可以使用此模式处理不同类型的 PDF 文件，然后可以扩展和自动化此工作流程，以处理相同格式的 PDF 文件。  

## 先决条件和限制
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户。
+ 用于存储待转换为 JPEG 格式以供 Amazon Textract 处理的 PDF 文件的现有 Amazon Simple Storage Service(Amazon S3) 存储桶。有关 S3 存储桶的更多信息，请参阅 Amazon S3 文档中的[存储桶概述](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)。
+ `Textract_PostProcessing.ipynb` Jupyter Notebook（附件），已安装并配置。有关 Jupyter 笔记本的更多信息，请参阅亚马逊文档[中的创建 Jupyter](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-prepare.html) 笔记本。 SageMaker 
+ 格式相同的现有 PDF 文件。
+ 了解 Python。

**限制**
+ 您的 PDF 文件必须质量良好、且清晰可读。建议使用原生 PDF 文件，但如果所有单词均清晰可见，则可以使用转换至 PDF 格式的扫描文档。有关这方面的更多信息，请参阅 AWS 机器学习博客上的[使用 Amazon Textract 预处理 PDF 文档：视觉效果检测和删除](https://aws.amazon.com/blogs/machine-learning/process-text-and-images-in-pdf-documents-with-amazon-textract/)。
+ 对于多页文件，您可以使用异步操作，或将 PDF 文件拆分为单个页面并使用同步操作。有关这两个选项的更多信息，请参阅 Amazon Textract 文档中的[检测和分析多页文档的文本](https://docs.aws.amazon.com/textract/latest/dg/async.html)和[检测和分析单页文档的文本](https://docs.aws.amazon.com/textract/latest/dg/sync.html)。

## 架构
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-architecture"></a>

此模式的工作流程是首先在示例 PDF 文件上运行 Amazon Textract（*首次运行*），然后在与首个 PDF 文件相同格式的 PDF 文件上运行（*重复运行*）。下图显示了*首次运行*和*重复运行*的组合工作流程，该工作流程自动重复地从相同格式的 PDF 文件中提取内容。

![\[使用 Amazon Textract 从 PDF 文件中提取内容\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2d724523-2cab-42c9-a773-65857014d9ec/images/9e20070f-3e0c-46aa-aa98-a8b1eb3395dc.png)


 

图表显示了此模式的以下工作流程：

1. 将 PDF 文件转换为 JPEG 格式，并将其存储在 S3 存储桶中。 

1. 调用 Amazon Textract API 并解析 Amazon Textract 响应 JSON 文件。 

1. 通过为每个必填字段添加正确的 `KeyName:DataType` 对编辑 JSON 文件。为*重复运行*阶段创建 `TemplateJSON` 文件。

1. 为每种数据类型（例如浮点数、整数和日期）定义后处理校正函数。

1. 准备与首个 PDF 文件格式相同的 PDF 文件。

1. 调用 Amazon Textract API 并解析 Amazon Textract 响应 JSON。

1. 将已解析 JSON 文件与 `TemplateJSON` 文件相匹配。

1. 实施后期处理校正。

最终的 JSON 输出文件包含了每个必需字段的正确 `KeyName` 和 `Value`。

**目标技术堆栈**
+ Amazon SageMaker 
+ Amazon S3 
+ Amazon Textract

**自动化和扩缩**

您可以使用 AWS Lambda 函数自动执行*重复运行*工作流程，该函数会在新的 PDF 文件添加至 Amazon S3 中时启动 Amazon Textract。然后，Amazon Textract 会运行处理脚本，并将最终输出保存至存储位置。有关这方面的更多信息，请参阅 Lambda 文档中的[使用 Amazon S3 触发器调用 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)。

## 工具
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-tools"></a>
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) 是一项完全托管的机器学习服务，可帮助您快速轻松地构建和训练机器学习模型，然后将其直接部署到可用于生产的托管环境中。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [Amazon Textract](https://docs.aws.amazon.com/textract/latest/dg/what-is.html) 可以轻松地将文档文本检测和分析添加至您的应用程序。

## 操作说明
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-epics"></a>

### 首次运行
<a name="first-time-run"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 转换 PDF 文件。 | 为首次运行准备 PDF 文件，方式为将 PDF 文件拆分为单页，并将其转换为适合 Amazon Textract [同步操作](https://docs.aws.amazon.com/textract/latest/dg/sync.html)(`Syn API`)的 JPEG 格式。对于多页 PDF 文件，您也可以使用 Amazon Textract [异步操作](https://docs.aws.amazon.com/textract/latest/dg/async.html)（`Asyn API`）。 | 数据科学家、开发人员 | 
| 解析 Amazon Textract 响应 JSON。 | 打开 `Textract_PostProcessing.ipynb` Jupyter Notebook（附件），然后使用以下代码调用 Amazon Textract API：<pre>response = textract.analyze_document(<br />Document={<br />        'S3Object': {<br />            'Bucket': BUCKET,<br />            'Name': '{}'.format(filename)<br />                    }<br />                },<br />        FeatureTypes=["TABLES", "FORMS"])</pre>使用以下代码将响应 JSON 解析为表单与表格：<pre>parseformKV=form_kv_from_JSON(response)<br />parseformTables=get_tables_fromJSON(response)</pre> | 数据科学家，开发人员 | 
| 编辑 TemplateJSON 文件。 | 对每个 `KeyName` 和对应的 `DataType` 编辑已解析的 JSON（例如：字符串、浮点、整数或日期）以及表格标题（例如 `ColumnNames` 和 `RowNames`）。此模板用于每种单独的 PDF 文件类型，这意味着该模板可重复用于相同格式的 PDF 文件。 | 数据科学家，开发人员 | 
| 定义后处理校正函数。 | Amazon Textract 对 `TemplateJSON` 文件的响应中的值为字符串。日期、浮点数、整数或货币无区别。必须将这些值转换至适合下游用例的正确数据类型。 使用以下代码根据 `TemplateJSON` 文件更正每种数据类型：<pre>finalJSON=postprocessingCorrection(parsedJSON,templateJSON)</pre> | 数据科学家，开发人员 | 

### 重复运行
<a name="repeat-run"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备 PDF 文件。 | 准备 PDF 文件，方式为将 PDF 文件拆分为单页，并将其转换为适合 Amazon Textract [同步操作](https://docs.aws.amazon.com/textract/latest/dg/sync.html) (`Syn API`) 的 JPEG 格式。对于多页 PDF 文件，您也可以使用 Amazon Textract [异步操作](https://docs.aws.amazon.com/textract/latest/dg/async.html)（`Asyn API`）。 | 数据科学家、开发人员 | 
| 调用 Amazon Textract API。 | 使用以下代码调用 Amazon Textract API：<pre>response = textract.analyze_document(<br />        Document={<br />        'S3Object': {<br />            'Bucket': BUCKET,<br />            'Name': '{}'.format(filename)<br />                    }<br />                },<br />        FeatureTypes=["TABLES", "FORMS"])</pre> | 数据科学家，开发人员 | 
| 解析 Amazon Textract 响应 JSON。 | 使用以下代码将响应 JSON 解析为表单与表格：<pre>parseformKV=form_kv_from_JSON(response)<br />parseformTables=get_tables_fromJSON(response)</pre> | 数据科学家，开发人员 | 
| 加载 templateJSON 文件并使其与已解析 JSON 匹配。 | 通过以下命令使用 `TemplateJSON` 文件提取正确的键值对和表：<pre>form_kv_corrected=form_kv_correction(parseformKV,templateJSON)<br />form_table_corrected=form_Table_correction(parseformTables, templateJSON)<br />form_kv_table_corrected_final={**form_kv_corrected , **form_table_corrected}</pre> | 数据科学家，开发人员 | 
| 后期处理校正。 | 在 `TemplateJSON` 文件和后处理功能中使用 `DataType`，以使用以下代码校正数据： <pre>finalJSON=postprocessingCorrection(form_kv_table_corrected_final,templateJSON)</pre> | 数据科学家，开发人员 | 

## 相关资源
<a name="automatically-extract-content-from-pdf-files-using-amazon-textract-resources"></a>
+ [使用 Amazon Textract 从文档中自动提取文本和结构化数据](https://aws.amazon.com/blogs/machine-learning/automatically-extract-text-and-structured-data-from-documents-with-amazon-textract/)
+ [使用 Amazon Textract 提取文本和结构化数据](https://aws.amazon.com/getting-started/hands-on/extract-text-with-amazon-textract/)
+ [Amazon Textract 资源](https://aws.amazon.com/textract/resources/?blog-posts-cards.sort-by=item.additionalFields.createdDate&blog-posts-cards.sort-order=desc)

## 附件
<a name="attachments-2d724523-2cab-42c9-a773-65857014d9ec"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/2d724523-2cab-42c9-a773-65857014d9ec/attachments/attachment.zip)

# 在 Amazon A SageMaker I Studio Lab 中使用 Deepar 计算时间序列构建冷启动预测模型
<a name="build-a-cold-start-forecasting-model-by-using-deepar"></a>

*Ivan Cui 和 Eyal Shacham，Amazon Web Services*

## Summary
<a name="build-a-cold-start-forecasting-model-by-using-deepar-summary"></a>

无论您是为了更有效地为网络流量分配资源，预测患者对人员配备需求的需求，还是预测公司产品的销售，预测都是必不可少的工具。冷启动预测可以对几乎没有历史数据的时间序列进行预测，例如刚进入零售市场的新产品。这种模式使用 Amazon SageMaker AI Deepar 预测算法来训练冷启动预测模型，并演示如何对冷启动项目进行预测。

 

[DeepAR](https://docs.aws.amazon.com/sagemaker/latest/dg/deepar.html) 是一种有监督学习算法，可使用递归神经网络（RNN）来预测标量（一维）时间序列。DeepAR 采用的方法是在相关产品的所有时间序列上，联合训练单个模型。

传统的时间序列预测方法，如自回归积分滑动平均模型（ARIMA）或指数平滑法（ETS），在很大程度上依赖单个产品各自的历史时间序列。因此，这些方法对冷启动预测无效。当您的数据集包含数百个相关的时间序列时，DeepAR 要优于标准 ARIMA 和 ETS 方法。您还可以使用训练过的模型来生成与已训练过的时间序列相似的新时间序列的预测。

## 先决条件和限制
<a name="build-a-cold-start-forecasting-model-by-using-deepar-prereqs"></a>

**先决条件**
+ 活跃 AWS 账户的.
+ 亚马逊 A SageMaker I [域名。](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-onboard.html)
+ [亚马逊 A SageMaker I Studio 实验室](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-lab.html)或 Jupiter 实验室应用程序。
+ 一个拥有读写权限的 Amazon Simple Storage Service（Amazon S3）存储桶。
+ 在 Python 编程的知识。
+ 使用 Jupyter Notebook 的知识。

**限制**
+ 在没有任何历史数据点的情况下调用预测模型将会返回错误。使用最少的历史数据点调用模型将返回高置信度但不准确的预测。此模式为解决冷启动预测的这些已知局限性提供了一种方法。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的 AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

**产品版本**
+ Python 版本 3.10 或更高版本。
+ 该模式的笔记本在 Amazon A SageMaker I Studio 中使用带有 Python 3（数据科学）内核的 ml.t3.medium 实例进行了测试。

## 架构
<a name="build-a-cold-start-forecasting-model-by-using-deepar-architecture"></a>

下图显示了此模式的工作流和架构组件。

![\[使用 SageMaker 和 Amazon S3 构建冷启动预测模型的工作流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/98d021d3-96d2-40a9-b0ce-717934652173/images/d97d66a0-8eef-4d30-ac5f-4c6c79cf6c9f.png)


该工作流执行以下任务：

1. 合成训练和测试数据的输入文件，然后将其上传到 Amazon S3 存储桶。这些数据包括具有分类和动态特征的多个时间序列以及目标值（待预测）。Jupyter Notebook 可视化数据，以更好地了解训练数据的要求和预期的预测值。

1. 创建了超参数调谐器作业，用于训练模型并根据预定义的指标找到最佳模型。

1. 输入文件将从 Amazon S3 存储桶下载到超参数调整任务的每个实例。

1. 在调谐器作业根据调谐器的预定义阈值选择最佳模型后，该模型将部署为 A SageMaker I 端点。

1. 然后，可以调用已部署的模型，并根据测试数据验证其预测。

笔记本演示了当有足够数量的历史数据点可用时，模型预测目标值的效果如何。但是，当我们使用较少的历史数据点（代表冷产品）调用模型时，即使在模型的置信度范围内，模型预测也与原始测试数据不匹配。在该模式中，为冷产品构建了一个新模型，其初始上下文长度（预测点）定义为可用历史点的数量，并在获取新数据点时迭代训练新模型。笔记本显示，只要历史数据点的数量接近其上下文长度，模型就会产生准确的预测。

## 工具
<a name="build-a-cold-start-forecasting-model-by-using-deepar-tools"></a>

**AWS 服务**
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) 是一项托管机器学习 (ML) 服务，可帮助您构建和训练机器学习模型，然后将其部署到生产就绪的托管环境中。
+ [Amazon SageMaker AI Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) 是一个基于 Web 的机器学习集成开发环境 (IDE)，允许您构建、训练、调试、部署和监控您的机器学习模型。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**其他工具**
+ [Python](https://www.python.org/) 是通用的计算机编程语言。

**代码存储库**

此模式的代码可在 GitHub [Deepar ColdProduct-](https://github.com/aws-samples/DeepAR-ColdProduct-Pattern) Pattern 存储库中找到。

## 最佳实践
<a name="build-a-cold-start-forecasting-model-by-using-deepar-best-practices"></a>
+ 在虚拟环境中训练模型，并始终使用版本控制来实现最高的可重复性。
+ 尽可能多地包含高质量的分类特征，以获得预测能力更强的模型。
+ 确保元数据包含相似的分类项目，以使模型能够充分推理出冷启动产品预测。
+ 运行超参数调整作业以获得预测能力最强的模型。
+ 在此模式中，您构建的模型的上下文长度为 24 小时，这意味着它将对接下来的 24 小时进行预测。如果您在历史数据少于 24 小时时尝试预测未来 24 小时，则模型的预测精度会根据历史数据点的数量线性下降。为了缓解此问题，请为每组历史数据点创建一个新模型，直到该数字达到所需的预测（上下文）长度。例如，从 2 小时的上下文长度模型开始，然后将模型逐渐增加到 4 小时、8 小时、16 小时和 24 小时。

## 操作说明
<a name="build-a-cold-start-forecasting-model-by-using-deepar-epics"></a>

### 启动你的 SageMaker AI Studio 经典版应用程序
<a name="start-your-sm-studio-classic-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动笔记本环境。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-a-cold-start-forecasting-model-by-using-deepar.html)有关更多信息，请参阅 AI 文档中的[启动 Amazon SageMaker A SageMaker I Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated-launch.html)。 | 数据科学家 | 

### 创建和激活笔记本
<a name="create-and-activate-the-notebook"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置模型训练的虚拟环境。 | 要设置模型训练的虚拟环境，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-a-cold-start-forecasting-model-by-using-deepar.html)有关更多信息，请参阅 AI 文档中的[将文件上传到 SageMaker AI Studio Classic](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-tasks-files.html)。 SageMaker  | 数据科学家 | 
| 创建并验证预测模型。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-a-cold-start-forecasting-model-by-using-deepar.html) | 数据科学家 | 

## 相关资源
<a name="build-a-cold-start-forecasting-model-by-using-deepar-resources"></a>
+ [Deepar 超参数](https://docs.aws.amazon.com/sagemaker/latest/dg/deepar_hyperparameters.html)
+ [使用 AWS 机器学习服务预测对推出新产品的需求](https://docs.aws.amazon.com/prescriptive-guidance/latest/forecast-demand-new-product/introduction.html)
+ [推出亚马逊 A SageMaker I Studio 经典版](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-launch.html)
+ [使用 SageMaker AI Deepar 预测算法](https://docs.aws.amazon.com/sagemaker/latest/dg/deepar.html)

# 使用亚马逊 A SageMaker I 和 Azure 构建 MLOps 工作流程 DevOps
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops"></a>

*Deepika Kumar、Sara van de Moosdijk 和 Philips Kokoh Prasetyo，Amazon Web Services*

## Summary
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-summary"></a>

机器学习操作 (MLOps) 是一组自动化和简化机器学习 (ML) 工作流程和部署的实践。 MLOps 重点是机器学习生命周期的自动化。它有助于确保不仅开发模型，还能系统地、反复地部署、监控和再训练。它为机器学习带来了 DevOps 原则。 MLOps 可以更快地部署机器学习模型，随着时间的推移提高准确性，并更有力地保证机器学习模型提供真正的商业价值。

在开始 MLOps 旅程之前，Organizations 通常会拥有现有的 DevOps 工具和数据存储解决方案。这种模式展示了如何利用微软 Azure 和 AWS. 它可以帮助你将 Azure DevOps 与 Amazon SageMaker AI 集成，从而创建 MLOps 工作流程。

该解决方案简化了 Azure 和之间的工作 AWS。你可以使用 Azure 进行开发和 AWS 机器学习。它可促进从头到尾制作机器学习模型的有效过程，包括在 AWS上进行数据处理、训练和部署。为了提高效率，你可以通过 Azure DevOps 管道管理这些流程。该解决方案适用于生成式 AI 中的基础模型操作 (FMOps) 和大型语言模型操作 (LLMOps)，其中包括微调、向量数据库和提示管理。

## 先决条件和限制
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-prereqs"></a>

**先决条件**
+ **Azure 订阅** — 访问 Azure 服务，例如 Azure DevOps，用于设置持续集成和持续部署 (CI/CD) 管道。
+ **活跃 AWS 账户** — 使用此模式中 AWS 服务 使用的账户的权限。
+ **数据** –访问用于训练机器学习模型的历史数据。
+ **熟悉 ML 概念** ‒ 了解 Python、Jupyter Notebook 和机器学习模型开发。
+ **安全配置** ‒ 在 Azure 和 AWS 上正确配置角色、策略和权限，以确保数据传输和访问的安全性。
+ **（可选）向量数据库** – 如果您对向量数据库使用检索增强生成（RAG）方法和第三方服务，则需要访问外部向量数据库。

**限制**
+ 本指南未讨论安全的跨云数据传输。有关跨云数据传输的更多信息，请参阅[适用于混合云和多云的AWS 解决方案](https://aws.amazon.com/hybrid-multicloud/)。
+ 多云解决方案可能会增加实时数据处理和模型推理的延迟。
+ 本指南提供了多账户 MLOps 架构的一个示例。需要根据您的机器学习和 AWS 策略进行调整。
+ 除了 Amazon A SageMaker I 之外，本指南并未描述其他 AI/ML 服务的使用情况。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)页面，然后选择相应服务的链接。

## 架构
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-architecture"></a>

**目标架构**

目标架构将 Azure DevOps 与 Amazon A SageMaker I 集成在一起，创建了跨云端机器学习工作流程。它使用 Azure CI/CD 处理流程，使用 SageMaker AI 进行机器学习模型训练和部署。它概述了通过模型构建和部署（从 Amazon S3、Snowflake 和 Azure 数据湖等来源）获取数据的过程。关键组件包括用于模型构建和部署、数据准备、基础设施管理的 CI/CD 管道，以及用于训练和微调、评估和部署机器学习模型的 SageMaker Amazon AI。该架构旨在跨云平台提供高效、自动化且可扩展的 ML 工作流。

![\[使用 Azure 开发运营和 SageMaker. MLOps\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/95fdf414-e561-4a93-9628-b41db39a577e/images/84ddcc36-54ef-473e-875f-154fae18cb13.png)


该架构包含以下组件：

1. 数据科学家在开发账户中执行 ML 实验，通过使用各种数据来源探索 ML 使用案例的不同方法。数据科学家进行单元测试和试验，为了跟踪他们的实验，他们可以将 Amazon AI 与 [Amazon A SageMaker I 配合](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow.html)使用 MLflow。在生成式 AI 模型开发中，数据科学家对 Amazon A SageMaker I 模型中心的基础 JumpStart 模型进行微调。模型评估后，数据科学家将代码推送并合并到托管在 Azure 上的模型生成存储库 DevOps。此存储库包含用于多步骤模型构建管道的代码。

1. 在 Azure DevOps 上，提供持续集成 (CI) 的模型生成管道可以在代码合并到主分支时自动或手动激活。在 Automation 账户中，这会激活 SageMaker AI 管道，用于数据预处理、模型训练和微调、模型评估以及基于准确性的条件模型注册。

1. 自动化账户是跨机器学习平台的中央账户，用于托管机器学习环境 (Amazon ECR)、模型 (Amazon S3)、模型元数据（SageMaker AI 模型注册表）、功能（SageMaker AI 功能存储）、自动管道（SageMaker AI 管道）和机器学习日志见解（CloudWatch）。对于生成式人工智能工作负载，您可能需要对下游应用程序中的提示进行额外评估。提示管理应用程序有助于简化和自动化该过程。此账户允许重复使用 ML 资产，并强制实施最佳实践，加快 ML 使用案例的交付。

1. 最新模型版本已添加到 SageMaker AI 模型注册表中以供审核。它跟踪模型版本和相应的构件（世系和元数据）。它还管理模型的状态（批准、拒绝或待定），并管理下游部署的版本。

1. 在模型注册表中训练过的模型通过工作室界面或 API 调用获得批准后，可以向 Amazon 发送事件 EventBridge。 EventBridge 在 Azure 上启动模型部署管道 DevOps。

1. 提供持续部署（CD）的模型部署管道从模型部署存储库中拉取源代码。该源代码中包含代码、模型部署配置和质量基准测试脚本。模型部署管道可以根据您的推理类型进行定制。

1. 完成质量控制检查后，模型部署管道会将模型部署到暂存账户。暂存账户是生产账户的副本，用于集成测试和评估。对于批量转换，模型部署管道可以自动更新批量推理过程，以使用最新批准的模型版本。对于实时、无服务器或异步推理，它会设置或更新相应的模型端点。

1. 在暂存账户中成功测试后，可以通过模型部署管道手动批准将模型以将模型部署到生产账户。该管道在**部署到生产**步骤中预调配了生产端点，包括模型监控和数据反馈机制。

1. 模型投入生产后，使用 SageMaker AI Model Monitor 和 A SageMaker I Clarify 等工具来识别偏差、检测漂移并持续监控模型的性能。

**自动化和扩展**

使用基础设施即代码（IaC）自动部署到多个账户和环境。通过实现 MLOps 工作流程设置过程的自动化，可以将从事不同项目的机器学习团队所使用的环境分开。 [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)通过将基础设施视为代码，帮助您建模、配置和管理 AWS 资源。

## 工具
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-tools"></a>

**AWS 服务**
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) 是一项托管机器学习服务，可帮助您构建和训练机器学习模型，然后将其部署到可用于生产的托管环境中。
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) 是一项完全托管式提取、转换、加载（ETL）服务。它可以帮助您在数据存储和数据流之间对数据进行可靠地分类、清理、扩充和移动。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。在这种模式中，Amazon S3 用于数据存储，并与 SageMaker AI 集成用于模型训练和模型对象。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。它只在需要时运行您的代码，并自动进行扩展，因此您只需为使用的计算时间付费。在此模式中，Lambda 用于数据预处理和后处理任务。
+ [Amazon Elastic Container Registry（Amazon ECR）](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)是一项安全、可扩展且可靠的托管容器映像注册表服务。在这种模式下，它存储 SageMaker AI 用作训练和部署环境的 Docker 容器。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 是一项无服务器事件总线服务，可帮助您将应用程序与来自各种来源的实时数据连接起来。在这种模式下， EventBridge 协调事件驱动或基于时间的工作流程，以启动自动模型再训练或部署。
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 可帮助您创建、发布、维护、监控和保护任何规模的 RES WebSocket APIs T、HTTP。 在这种模式中，它用于为 SageMaker AI 端点创建面向外部的单一入口点。
+ 对于 RAG 应用程序，您可以使用 AWS 服务诸如 [Amazon S OpenSearch ervice 和 Amazon](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) [RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) for PostgreSQL 存储向量嵌入内容，这些嵌入为 LLM 提供您的内部数据。

**其他工具**
+ [Azure DevOps](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops) 可帮助你管理 CI/CD 管道并简化代码构建、测试和部署。
+ [Azure Data Lake Storage](https://learn.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction) 或 [Snowflake](https://docs.snowflake.com/en/) 可能是 ML 模型训练数据的第三方来源。
+ [Pinecone](https://docs.pinecone.io/home)、[Milvus](https://milvus.io/docs/overview.md) 或 [ChromaDB](https://docs.trychroma.com/) 是可用于存储向量嵌入的第三方向量数据库。

## 最佳实践
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-best-practices"></a>

在实施此多云 MLOps 工作流程的任何组件之前，请完成以下活动：
+ 定义和了解机器学习工作流以及支持该工作流所需的工具。不同的使用案例需要不同的工作流和组件。例如，在个性化使用案例中，功能重用和低延迟推理可能需要特征存放区，但其他使用案例可能不需要。为了成功地自定义架构，需要了解数据科学团队的目标工作流、使用案例要求和首选协作方法。
+ 为架构的每个组件制定明确的责任分工。跨 Azure Data Lake Storage、Snowflake 和 Amazon S3 分布数据存储可能会增加复杂性和成本。如有可能，请选择一致的存储机制。同样，请避免使用 Azure 和 AWS DevOps 服务的组合，或者同时使用 Azure 和 AWS ML 服务。
+ 选择一个或多个现有模型和数据集对 MLOps 工作流程进行 end-to-end测试。测试构件应反映平台投入生产时数据科学团队开发的真实使用案例。

## 操作说明
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-epics"></a>

### 设计您的 MLOps 架构
<a name="design-your-mlops-architecture"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 识别数据来源。 | 根据当前和未来的用例、可用数据源和数据类型（例如机密数据），记录需要与 MLOps 平台集成的数据源。数据可以存储在 Amazon S3、Azure Data Lake Storage、Snowflake 或其他来源中。对于生成式人工智能工作负载，数据还可能包括为生成的响应奠定基础的知识库。这些数据以向量嵌入的形式存储在向量数据库中。制定计划，将这些资源与您的平台集成，并确保安全地访问正确的资源。 | 数据工程师、数据科学家、云架构师 | 
| 选择适用的服务。 | 根据数据科学团队所需的工作流、适用的数据来源和现有云架构，通过添加或删除服务来自定义架构。例如，数据工程师和数据科学家可以在 SageMaker AI 或 Amazon EMR 中执行数据预处理和特征工程。 AWS Glue不太可能同时需要这三种服务。 | AWS 管理员、数据工程师、数据科学家、ML 工程师 | 
| 分析安全要求。 | 收集和记录安全要求。这包括确定：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops.html)有关保护生成式 AI 工作负载的更多信息，请参阅[保护生成式 AI：生成式 AI 安全范围矩阵简介](https://aws.amazon.com/blogs/security/securing-generative-ai-an-introduction-to-the-generative-ai-security-scoping-matrix/)（AWS 博客文章）。 | AWS 管理员、云架构师 | 

### 设置 AWS Organizations
<a name="set-up-aolong"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 AWS Organizations。 | 在根 AWS Organizations 上设置 AWS 账户。这可以帮助您管理作为多账户 MLOps 策略的一部分创建的后续账户。有关详情，请参阅 [AWS Organizations 文档](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_tutorials_basic.html)。 | AWS 管理员 | 

### 设置开发环境和版本控制
<a name="set-up-the-development-environment-and-versioning"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS 开发账户。 | 创建数据工程师和数据科学家有权实验和创建机器学习模型 AWS 账户 的地方。有关说明，请参阅 AWS Organizations 文档[中的在组织中创建成员帐户](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html)。 | AWS 管理员 | 
| 创建一个模型构建存储库。 | 在 Azure 中创建 Git 存储库，数据科学家可以在实验阶段完成后推送其模型构建和部署代码。有关说明，请参阅 Azure DevOps 文档中的[设置 Git 存储库](https://learn.microsoft.com/en-us/devops/develop/git/set-up-a-git-repository)。 | DevOps 工程师、机器学习工程师 | 
| 创建一个模型部署存储库。 | 在 Azure 中创建用于存储标准部署代码和模板的 Git 存储库。它应包括组织使用的每个部署选项的代码，这些在设计阶段确定。例如，它应包括实时端点、异步端点、无服务器推理或批量转换。有关说明，请参阅 Azure DevOps 文档中的[设置 Git 存储库](https://learn.microsoft.com/en-us/devops/develop/git/set-up-a-git-repository)。 | DevOps 工程师、机器学习工程师 | 
| 创建 Amazon ECR 存储库。 | 设置一个 Amazon ECR 存储库，用于将经批准的 ML 环境存储为 Docker 映像。允许数据科学家和 ML 工程师定义新环境。有关说明，请参阅 Amazon ECR 文档中的[创建私有存储库](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)。 | 机器学习工程师 | 
| 设置 SageMaker AI 工作室。 | 根据先前定义的安全要求、首选的数据科学工具（例如）和首选的集成开发环境 (IDE MLflow)，在开发账户上设置 SageMaker AI Studio。使用生命周期配置自动安装关键功能，并为数据科学家创建统一的开发环境。有关更多信息，请参阅 [A SageMaker I 文档中的 Amazon AI Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-updated.html) 和[MLflow 跟踪服务器](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow.html)。 SageMaker  | 数据科学家、ML 工程师、提示工程师 | 

### 整合 CI/CD 管道
<a name="integrate-ci-cd-pipelines"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建自动化账户。 | 创建自动管道和作业的运行 AWS 账户 位置。您可以授予数据科学团队对此账户的读取权限。有关说明，请参阅 AWS Organizations 文档[中的在组织中创建成员帐户](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html)。 | AWS 管理员 | 
| 设置模型注册表。 | 在自动化账户中设置 SageMaker AI 模型注册表。该注册表存储 ML 模型的元数据，并帮助某些数据科学家或团队负责人批准或拒绝模型。有关更多信息，请参阅 SageMaker AI 文档中的[使用模型注册表注册和部署](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html)模型。 | 机器学习工程师 | 
| 创建一个模型构建管道。 | 在 Azure 中创建一个 CI/CD 管道，当代码推送到模型生成存储库时，该管道会手动启动或自动启动。管道应查看源代码，并在 Automation 账户中创建或更新 SageMaker AI 管道。该管道应向模型注册表中添加一个新模型。有关创建管道的更多信息，请参阅 [Azure Pipelines 文档](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines)。 | DevOps 工程师、机器学习工程师 | 

### 构建部署堆栈。
<a name="build-the-deployment-stack"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 AWS 暂存和部署帐户。 |  AWS 账户 为机器学习模型的暂存和部署而创建。这些账户应完全相同，以便在投入生产之前对试运行中的模型进行准确的测试。您可以授予数据科学团队对暂存账户的读取权限。有关说明，请参阅 AWS Organizations 文档[中的在组织中创建成员帐户](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html)。 | AWS 管理员 | 
| 设置 S3 存储桶以进行模型监控。 | 如果您要为模型部署管道创建的已部署模型启用模型监控，请完成此步骤。创建 Amazon S3 存储桶用于存储输入和输出数据。有关创建 S3 存储桶的更多信息，请参阅 Amazon S3 文档中的[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。设置跨账户权限，以便于自动模型监控作业在自动化账户中运行。有关更多信息，请参阅 SageMaker AI 文档中的[监控数据和模型质量](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor.html)。 | 机器学习工程师 | 
| 创建一个模型部署管道。 | 在 Azure 中创建一个 CI/CD 管道，当模型在模型注册表中获得批准时启动。该管道应检查源代码和模型构件，构建用于在暂存账户和生产账户中部署模型的基础设施模板，在暂存账户中部署模型，运行自动测试，等待手动批准，然后将批准的模型部署到生产账户。有关创建管道的更多信息，请参阅 [Azure Pipelines 文档](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines)。 | DevOps 工程师、机器学习工程师 | 

### （可选）自动化 ML 环境基础设施
<a name="optional-automate-ml-environment-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 构建 AWS CDK 或 CloudFormation 模板。 | 为需要自动部署的所有环境定义 AWS Cloud Development Kit (AWS CDK) 或 AWS CloudFormation 模板。这可能包括开发环境、自动化环境以及暂存和部署环境。有关更多信息，请参阅 [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html) 和 [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 文档。 | AWS DevOps | 
| 创建基础设施管道。 | 在 Azure 中创建用于基础架构部署的 CI/CD 管道。管理员可以启动此管道来创建机器学习团队所需的新环境 AWS 账户 和设置环境。 | DevOps 工程师 | 

## 问题排查
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| **监控和偏差检测不足** ‒ 监控不足可能导致错过模型性能问题或数据漂移的检测。 | 使用 Amazon CloudWatch、A SageMaker I 模型监控器和 SageMaker AI Clarify 等工具加强监控框架。配置提醒，以便对发现的问题立即采取行动。 | 
| **CI 管道触发错误** —**** 由于配置错误， DevOps 可能不会在代码合并时触发 Azure 中的 CI 管道。 | 检查 Azure DevOps 项目设置，确保 webhook 已正确设置并指向正确的 SageMaker AI 端点。 | 
| **治理** ‒** **中央自动化账户可能无法在 ML 平台上强制执行最佳实践，从而导致工作流不一致。 | 审计 Automation 账户设置，确保所有 ML 环境和模型都符合预定义的最佳实践和策略。 | 
| **模型注册表批准延迟 ‒** 这种情况发生在模型的检查和批准延迟时，要么是因为人们需要时间进行审查，要么是因为技术问题。 | 实施通知系统以提醒利益相关者注意待批准的模型，并简化审核流程。 | 
| **模型部署事件失败** ‒** **为启动模型部署管道而调度的事件可能会失败，因而导致部署延迟。 | 确认 Amazon EventBridge 拥有成功调用 Azure DevOps 管道的正确权限和事件模式。 | 
| **生产部署瓶颈** ‒** **手动批准流程可能会产生瓶颈，因而延迟模型的生产部署。 | 优化模型部署管道内的审批工作流，促进及时审核和畅通沟通渠道。 | 

## 相关资源
<a name="build-an-mlops-workflow-by-using-amazon-sagemaker-and-azure-devops-resources"></a>

**AWS 文档**
+ [亚马逊 SageMaker AI 文档](https://docs.aws.amazon.com/sagemaker/)
+ M@@ [achine Learning Lens](https://docs.aws.amazon.com/wellarchitected/latest/machine-learning-lens/machine-learning-lens.html)（架构AWS 良好的框架）
+ [为成功做好规划 MLOps](https://docs.aws.amazon.com/prescriptive-guidance/latest/ml-operations-planning/welcome.html)（AWS 规范性指导）

**其他 AWS 资源**
+ MLOps 采@@ [用 Amazon A SageMaker I 的企业的基础路线图](https://aws.amazon.com/blogs/machine-learning/mlops-foundation-roadmap-for-enterprises-with-amazon-sagemaker/)（AWS 博客文章）
+ [AWS 2022 年澳新银行峰会- End-to-end MLOps 面向建筑师](https://www.youtube.com/watch?v=UnAN35gu3Rw)（YouTube 视频）
+ [FMOps/LLMOps：将生成式 AI 和差异化付诸实践 MLOps](https://aws.amazon.com/blogs/machine-learning/fmops-llmops-operationalize-generative-ai-and-differences-with-mlops/)（AWS 博客文章）
+ 使用 [Amazon A SageMaker I Clarify 和 MLOps 服务大规模实施法学硕士评估](https://aws.amazon.com/blogs/machine-learning/operationalize-llm-evaluation-at-scale-using-amazon-sagemaker-clarify-and-mlops-services/)（AWS 博客文章）
+ [矢量数据库在生成式人工智能应用中的作用](https://aws.amazon.com/blogs/database/the-role-of-vector-datastores-in-generative-ai-applications/)（AWS 博客文章）

**Azure 文档**
+ [Azure DevOps 文档](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops)
+ [Azure Pipelines 文档](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines)

# 使用在 Amazon Bedrock 中配置模型调用日志 AWS CloudFormation
<a name="configure-bedrock-invocation-logging-cloudformation"></a>

*Vikramaditya Bhatnagar，Amazon Web Services*

## Summary
<a name="configure-bedrock-invocation-logging-cloudformation-summary"></a>

您可以配置 Amazon Bedrock 以收集在 AWS 账户中所有模型调用的调用日志、模型输入数据和模型输出数据。这是使用 Amazon Bedrock 构建强大的生成式人工智能应用程序的[最佳实践](https://aws.amazon.com/blogs/machine-learning/best-practices-for-building-robust-generative-ai-applications-with-amazon-bedrock-agents-part-2/)。您可以将模型调用日志存储在 Amazon Logs CloudWatch 日志组、亚马逊简单存储服务 (Amazon S3) Simple Service 存储桶中，或者同时存储在两者中。在日志中 CloudWatch 保存日志数据可以帮助您创建自定义指标筛选器、警报和仪表板。根据贵组织的政策，Amazon S3 非常适合跨部门复制数据 AWS 区域 或用于长期存储。

此模式提供了一个示例 AWS CloudFormation 模板，该模板使用基础设施即代码 (IaC) 方法为 Amazon Bedrock 配置模型调用日志。该模板在日志和 Amazon S3 中配置 CloudWatch 日志存储。

## 先决条件和限制
<a name="configure-bedrock-invocation-logging-cloudformation-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 具备以下权限：
  + 创建 CloudFormation 堆栈的@@ [权限](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)
  + 访问 Amazon Bedrock 的[权限](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-updates)
  + 创建和访问 Amazon S3 存储桶的 [权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html)
  + 创建和访问 CloudWatch 日志组的@@ [权限](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-identity-based-access-control-cwl.html)
  + 创建和访问 AWS Lambda 函数的@@ [权限](https://docs.aws.amazon.com/lambda/latest/dg/security-iam-awsmanpol.html)
  + 创建和访问 AWS Key Management Service (AWS KMS) 密钥的@@ [权限](https://docs.aws.amazon.com/kms/latest/developerguide/customer-managed-policies.html)

**限制**

此模式将模型调用记录到 CloudWatch 日志和 Amazon S3。它不支持只选择这两个服务中的一个。

## 架构
<a name="configure-bedrock-invocation-logging-cloudformation-architecture"></a>

**目标架构**

该 CloudFormation 模板在您的目标中预置了以下资源 AWS 账户：
+ 用于存储模型调用 CloudWatch 日志的日志日志组
+ 一个用于存储模型调用日志和相应存储桶策略的 Amazon S3 存储桶
+ 一个用于存储服务器端访问日志和相应存储桶策略的 Amazon S3 存储桶
+ 在 Amazon Bedrock 中配置日志设置的 AWS Lambda 功能
+  AWS KMS key 和相应的密钥别名
+ 亚马逊 Bedrock 的 AWS Identity and Access Management (IAM) 服务角色

下图显示了部署与此模式关联的 CloudFormation 堆栈后如何存储调用日志。当基础模型提供文本、图像、视频或嵌入数据时，Amazon Bedrock 会发布日志数据。如图所示，Amazon S3 存储桶和 CloudWatch 日志日志组使用加 AWS KMS key密。

![\[用于记录 Amazon Bedrock 基础模型调用的工作流。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/a55e7495-ec84-4d41-886e-5c37b37aac67/images/a958d52f-9072-40af-80cb-360f6c1c7fd5.png)


下图显示了如下工作流：

1. 用户向 Amazon Bedrock 中的基础模型提交查询。

1. Amazon Bedrock 代入 IAM 服务角色。

1. Amazon Bedrock 生成日志数据并将其存储在 CloudWatch 日志日志组和 Amazon S3 存储桶中。

1. 如果用户读取、上传或删除包含模型调用日志的 Amazon S3 存储桶中的任何文件，则这些活动将记录在另一个用于服务器端访问日志的 Amazon S3 存储桶中。

**自动化和扩展**

要扩展此解决方案，您可以将 CloudFormation 模板部署为多个 AWS 区域 和 AWS 账户。有关更多信息，请参阅 CloudFormation 文档中的使用[管理跨账户和区域 StackSets的堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)。

## 工具
<a name="configure-bedrock-invocation-logging-cloudformation-tools"></a>

**AWS 服务**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) 是一项完全托管的服务，它通过统一的 API 提供来自领先人工智能公司和亚马逊的高性能基础模型 (FMs) 供您使用。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)帮助您设置 AWS 资源，快速一致地配置资源，并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。
+ [Amazon CloudWatch L](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) ogs 可帮助您集中所有系统和应用程序的日志， AWS 服务 这样您就可以监控它们并安全地将其存档。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。它只在需要时运行您的代码，并自动进行扩展，因此您只需为使用的计算时间付费。
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 可帮助您创建和控制加密密钥以帮助保护您的数据。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一种对象存储服务，提供行业领先的可扩展性、数据可用性、安全性和性能。

**其他工具**
+ [Git](https://git-scm.com/docs) 是开源分布式版本控制系统。

**代码存储库**

此模式的代码可在 GitHub [enable-bedrock-logging-using-cloudformation](https://github.com/aws-samples/enable-bedrock-logging-using-cloudformation) 存储库中找到。

## 操作说明
<a name="configure-bedrock-invocation-logging-cloudformation-epics"></a>

### 创建堆 CloudFormation 栈
<a name="create-the-cfnshort-stack"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 下载 CloudFormation 模板。 | 从 GitHub 存储库下载[CloudFormation 模板](https://github.com/aws-samples/enable-bedrock-logging-using-cloudformation/blob/main/enable-bedrock-logging-using-cloudformation.yaml)。 | 云架构师 | 
| 部署 模板。 | 在您的目标账户和区域中创建堆栈。在**参数**部分中，指定模板中所定义参数的值。有关说明，请参阅 CloudFormation 文档中的[创建堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)。 | 云架构师 | 

### 测试解决方案
<a name="test-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启用模型访问权限。 | 在 Amazon Bedrock 中，添加对基础模型的访问权限。有关说明，请参阅 Amazon Bedrock 文档中的[添加或删除对 Amazon Bedrock 基础模型的访问权限](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html)。 | 云架构师 | 
| 运行示例提示。 | 在 Amazon Bedrock 交互试验区中，运行示例提示。有关说明，请参阅 Amazon Bedrock 文档中的[使用交互试验区在控制台中生成响应](https://docs.aws.amazon.com/bedrock/latest/userguide/playgrounds.html)。 | 云架构师 | 
| 查看日志记录配置。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/configure-bedrock-invocation-logging-cloudformation.html) | 云架构师 | 
| 查看 Amazon S3 存储桶。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/configure-bedrock-invocation-logging-cloudformation.html) | 云架构师 | 
| 查看日志组。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/configure-bedrock-invocation-logging-cloudformation.html) | 云架构师 | 

## 相关资源
<a name="configure-bedrock-invocation-logging-cloudformation-resources"></a>

**AWS 文档**
+ [访问 Amazon S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)（Amazon S3 文档）
+ [创建和管理堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html)（CloudFormation 文档）
+ [监控模型调用](https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html)（Amazon Bedrock 文档）
+ [使用日志组和日志流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)（CloudWatch 日志文档）

**AWS 博客文章**
+ [使用 Amazon Bedrock 和 Amazon 集成监控生成式 A CloudWatch I 应用程序](https://aws.amazon.com/blogs/mt/monitoring-generative-ai-applications-using-amazon-bedrock-and-amazon-cloudwatch-integration/)
+ [使用 Amazon Bedrock 代理构建强大的生成式人工智能应用程序的最佳实践 – 第 1 部分](https://aws.amazon.com/blogs/machine-learning/best-practices-for-building-robust-generative-ai-applications-with-amazon-bedrock-agents-part-1/)
+ [使用 Amazon Bedrock 代理构建强大的生成式人工智能应用程序的最佳实践 – 第 2 部分](https://aws.amazon.com/blogs/machine-learning/best-practices-for-building-robust-generative-ai-applications-with-amazon-bedrock-agents-part-2/)

# 为 AWS Step Functions SageMaker 创建自定义 Docker 容器镜像并将其用于模型训练
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions"></a>

*Julia Bluszcz、Aubrey Oosthuizen、Mohan Gowda Purushothama、Neha Sharma 和 Mateusz Zaremba，Amazon Web Services*

## Summary
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-summary"></a>

此模式展示了如何为[亚马逊创建 Docker 容器镜像 SageMaker并将其用于 A](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) [WS St](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) ep Functions 中的训练模型。通过将自定义算法打包到容器中，您几乎可以在 SageMaker 环境中运行任何代码，无论编程语言、框架或依赖关系如何。

在提供的示例[SageMaker 笔记本](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html)中，自定义 Docker 容器镜像存储在[亚马逊弹性容器注册表 (Amazon ECR) Cont](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ainer Registry 中。然后，Step Functions 使用存储在 Amazon ECR 中的容器为其运行 Python 处理脚本。 SageMaker然后，容器将模型导出至 [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)。

## 先决条件和限制
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+  SageMaker具有 Amazon S3 权限的 A [WS 身份和访问管理 (IAM) 角色](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)
+ [Step Functions 的 IAM 角色](https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/step_functions_mlworkflow_processing/step_functions_mlworkflow_scikit_learn_data_processing_and_model_evaluation.html#Create-an-Execution-Role-for-Step-Functions)
+ 基本熟悉 Python
+ 熟悉亚马逊 SageMaker Python 开发工具包
+ 熟悉 AWS 命令行界面（AWS CLI）
+ 熟悉适用于 Python 的 Amazon SDK (Boto3)
+ 熟悉 Amazon ECR
+ 熟悉 Docker

**产品版本**
+ AWS Step Functions Data Science SDK 版本 2.3.0
+ 亚马逊 SageMaker Python SDK 版本 2.78.0

## 架构
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-architecture"></a>

下图显示了在 Step Functions 中为其创建 Docker 容器镜像 SageMaker，然后将其用于训练模型的示例工作流程：

![\[创建 Docker 容器镜像 SageMaker 以用作 Step Functions 训练模型的工作流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/7857d57f-3077-4b06-8971-fb5846387693/images/37755e38-0bc4-4dd0-90c7-135d95b00053.png)


下图显示了如下工作流：

1. 数据科学家或 DevOps 工程师使用 Amazon SageMaker 笔记本创建自定义 Docker 容器镜像。

1. 数据科学家或 DevOps 工程师将 Docker 容器映像存储在私有注册表中的 Amazon ECR 私有存储库中。

1. 数据科学家或 DevOps 工程师使用 Docker 容器在 Step Functions 工作流程中运行 Python SageMaker 处理作业。

**自动化和扩展**

此模式中的示例 SageMaker 笔记本使用`ml.m5.xlarge`笔记本实例类型。您可以更改实例类型，以适合您的用例。有关 SageMaker 笔记本实例类型的更多信息，请参阅 [Amazon SageMaker 定价](https://aws.amazon.com/sagemaker/pricing/)。

## 工具
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-tools"></a>
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) 是一项安全、可扩展且可靠的托管容器映像注册表服务。
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) 是一项托管机器学习 (ML) 服务，可帮助您构建和训练机器学习模型，然后将其部署到生产就绪的托管环境中。
+ [Amaz SageMaker on Python 软件开发工具包](https://github.com/aws/sagemaker-python-sdk)是一个开源库，用于在上 SageMaker训练和部署机器学习模型。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 是一项无服务器编排服务，可让您搭配使用 AWS Lambda 函数和其他 Amazon Web Services 来构建业务关键型应用程序。
+ [AWS Step Functions Data Science Python SDK](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/index.html) 是一个开源库，可帮助您创建处理和发布机器学习模型的 Step Functions 工作流。

## 操作说明
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-epics"></a>

### 创建自定义 Docker 容器映像，并将其存储在 Amazon ECR 中
<a name="create-a-custom-docker-container-image-and-store-it-in-amazon-ecr"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 Amazon ECR 并新建私有注册表。 | 如果您尚未设置 Amazon ECR，请按照 *Amazon ECR 用户指南*中的[设置 Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html)进行操作。每个 Amazon Web Services account 都提供有原定设置的私有 Amazon ECR 注册表。 | DevOps 工程师 | 
| 创建 Amazon ECR 私有存储库。 | 请按照 *Amazon ECR 用户指南*中的[创建私有存储库](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)进行操作。您创建的存储库是存储自定义 Docker 容器映像的位置。 | DevOps 工程师 | 
| 创建一个 Dockerfile，其中包含运行 SageMaker 处理作业所需的规范。 | 通过配置 Dockerfile 来创建包含运行 SageMaker 处理作业所需的规格的 Dockerfile。有关说明，请参阅《*Amazon SageMaker 开发者指南》*中的[调整自己的训练容器](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)。有关 Dockerfile 的更多信息，请参阅 Docker 文档中的 [Dockerfile 参考](https://docs.docker.com/engine/reference/builder/)。**用于创建 DockerFile 的 Jupyter Notebook 代码单元格示例***单元格 1*<pre># Make docker folder<br />!mkdir -p docker</pre>*单元格 2*<pre>%%writefile docker/Dockerfile<br /><br />FROM python:3.7-slim-buster<br /><br />RUN pip3 install pandas==0.25.3 scikit-learn==0.21.3<br />ENV PYTHONUNBUFFERED=TRUE<br /><br />ENTRYPOINT ["python3"]</pre> | DevOps 工程师 | 
| 构建您的 Docker 容器映像并将其推送至 Amazon ECR。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions.html)有关更多信息，请参阅在上[构建自己的算法容器中的构建和注册](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.html#Building-and-registering-the-container)*容器* GitHub。**用于构建和注册 Docker 映像的 Jupyter Notebook 代码单元格示例**运行以下单元之前，请确认已创建一个 Dockerfile 并将其存储在名为 `docker` 的目录中。此外，请确保您已创建一个 Amazon ECR 存储库，并将第一个单元格中的 `ecr_repository` 值替换为存储库名称。*单元格 1*<pre>import boto3<br />tag = ':latest'<br />account_id = boto3.client('sts').get_caller_identity().get('Account')<br />region = boto3.Session().region_name<br />ecr_repository = 'byoc'<br /><br />image_uri = '{}.dkr.ecr.{}.amazonaws.com/{}'.format(account_id, region, ecr_repository + tag)</pre>*单元格 2*<pre># Build docker image<br />!docker build -t $image_uri docker</pre>*单元格 3*<pre># Authenticate to ECR<br />!aws ecr get-login-password --region {region} | docker login --username AWS --password-stdin {account_id}.dkr.ecr.{region}.amazonaws.com</pre>*单元格 4*<pre># Push docker image<br />!docker push $image_uri</pre>您必须[对私有注册表的 Docker 客户端进行身份验证](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html)，这样才能使用 `docker push` 和 `docker pull` 命令。这些命令将图像推送和拉出注册表中存储库。 | DevOps 工程师 | 

### 创建采用您自定义 Docker 容器映像的 Step Functions 工作流
<a name="create-a-step-functions-workflow-that-uses-your-custom-docker-container-image"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建包含自定义处理和模型训练逻辑的 Python 脚本。 | 编写将在数据处理脚本中运行的自定义处理逻辑。然后，将其另存为名为 `training.py` 的 Python 脚本。有关更多信息，请参阅在开[启 SageMaker 脚本模式的情况下自带模型](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html) GitHub。**含自定义处理和模型训练逻辑的 Python 脚本示例**<pre>%%writefile training.py<br />from numpy import empty<br />import pandas as pd<br />import os<br />from sklearn import datasets, svm<br />from joblib import dump, load<br /><br /><br />if __name__ == '__main__':<br />    digits = datasets.load_digits()<br />    #create classifier object<br />    clf = svm.SVC(gamma=0.001, C=100.)<br />    <br />    #fit the model<br />    clf.fit(digits.data[:-1], digits.target[:-1])<br />    <br />    #model output in binary format<br />    output_path = os.path.join('/opt/ml/processing/model', "model.joblib")<br />    dump(clf, output_path)</pre> | 数据科学家 | 
| 创建一个 Step Functions 工作流程，其中包含您的 SageMaker 处理作业。 | 安装并导入 [AWS Step Functions Data Science SDK](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html)，然后将 **training.py** 文件上传至 Amazon S3。然后，使用 [Amaz SageMaker on Python 开发工具包](https://github.com/aws/sagemaker-python-sdk)在 Step Functions 中定义处理步骤。请确认您已在 AWS 账户中[为 Step Functions 创建 IAM 执行角色](https://sagemaker-examples.readthedocs.io/en/latest/step-functions-data-science-sdk/step_functions_mlworkflow_processing/step_functions_mlworkflow_scikit_learn_data_processing_and_model_evaluation.html#Create-an-Execution-Role-for-Step-Functions)。**要上传至 Amazon S3 的环境设置和自定义训练脚本示例**<pre>!pip install stepfunctions<br /><br />import boto3<br />import stepfunctions<br />import sagemaker<br />import datetime<br /><br />from stepfunctions import steps<br />from stepfunctions.inputs import ExecutionInput<br />from stepfunctions.steps import (<br />    Chain<br />)<br />from stepfunctions.workflow import Workflow<br />from sagemaker.processing import ScriptProcessor, ProcessingInput, ProcessingOutput<br /><br />sagemaker_session = sagemaker.Session()<br />bucket = sagemaker_session.default_bucket() <br />role = sagemaker.get_execution_role()<br />prefix = 'byoc-training-model'<br /><br /># See prerequisites section to create this role<br />workflow_execution_role = f"arn:aws:iam::{account_id}:role/AmazonSageMaker-StepFunctionsWorkflowExecutionRole"<br /><br />execution_input = ExecutionInput(<br />    schema={<br />        "PreprocessingJobName": str})<br /><br /><br />input_code = sagemaker_session.upload_data(<br />    "training.py",<br />    bucket=bucket,<br />    key_prefix="preprocessing.py",<br />)</pre>**使用自定义 Amazon ECR 图像和 Python 脚本的 SageMaker 处理步骤定义示例**请务必使用 `execution_input` 参数指定任务名称。每次运行作业时，参数值必须是唯一的。此外，**training.py** 文件的代码作为 `input` 参数传递至 `ProcessingStep`，这意味着它将被复制到容器中。`ProcessingInput` 代码的目标与 `container_entrypoint` 内部的第二个参数相同。<pre>script_processor = ScriptProcessor(command=['python3'],<br />                image_uri=image_uri,<br />                role=role,<br />                instance_count=1,<br />                instance_type='ml.m5.xlarge')<br /><br /><br />processing_step = steps.ProcessingStep(<br />    "training-step",<br />    processor=script_processor,<br />    job_name=execution_input["PreprocessingJobName"],<br />    inputs=[<br />        ProcessingInput(<br />            source=input_code,<br />            destination="/opt/ml/processing/input/code",<br />            input_name="code",<br />        ),<br />    ],<br />    outputs=[<br />        ProcessingOutput(<br />            source='/opt/ml/processing/model', <br />            destination="s3://{}/{}".format(bucket, prefix), <br />            output_name='byoc-example')<br />    ],<br />    container_entrypoint=["python3", "/opt/ml/processing/input/code/training.py"],<br />)</pre>**运行处理作业的 Step Functions 工作 SageMaker 流程示例**此示例工作流仅包括 SageMaker 处理作业步骤，不包括完整的 Step Functions 工作流程。有关完整的工作流程示例，请参阅 AWS Step Functions 数据科学软件开发工具包文档[ SageMaker中的示例笔记本](https://aws-step-functions-data-science-sdk.readthedocs.io/en/stable/readmelink.html#example-notebooks-in-sagemaker)。<pre>workflow_graph = Chain([processing_step])<br /><br />workflow = Workflow(<br />    name="ProcessingWorkflow",<br />    definition=workflow_graph,<br />    role=workflow_execution_role<br />)<br /><br />workflow.create()<br /># Execute workflow<br />execution = workflow.execute(<br />    inputs={<br />        "PreprocessingJobName": str(datetime.datetime.now().strftime("%Y%m%d%H%M-%SS")),  # Each pre processing job (SageMaker processing job) requires a unique name,<br />    }<br />)<br />execution_output = execution.get_output(wait=True)</pre> | 数据科学家 | 

## 相关资源
<a name="create-a-custom-docker-container-image-for-sagemaker-and-use-it-for-model-training-in-aws-step-functions-resources"></a>
+ [处理数据](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html)（*Amazon SageMaker 开发者指南*）
+ [调整自己的训练容器](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html)（*Amazon SageMaker 开发者指南*）

# 使用 Amazon Bedrock 代理，通过基于文本的提示，在 Amazon EKS 中自动创建访问条目控制
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks"></a>

*Keshav Ganesh 和 Sudhanshu Saurav，Amazon Web Services*

## Summary
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-summary"></a>

当多个团队需要使用共享的 Amazon Elastic Kubernetes Service（Amazon EKS）集群时，组织在管理访问控制和资源预调配方面面临着挑战。Amazon EKS 等托管式 Kubernetes 服务简化了集群操作。然而，在管理团队访问权限和资源权限方面的管理开销仍然既复杂又耗时。

此模式显示了 Amazon Bedrock 代理如何帮助您自动执行 Amazon EKS 集群访问管理。借助这一自动化，开发团队可以专注于核心应用程序开发工作，而不是处理访问控制设置和管理任务。您可以自定义 Amazon Bedrock 代理，使其通过简单的自然语言提示，对多种任务执行操作。

通过使用 AWS Lambda 功能作为操作组，Amazon Bedrock 代理可以处理诸如创建用户访问条目和管理访问策略之类的任务。此外，Amazon Bedrock 代理可以配置容器身份关联，从而允许集群中运行的 pod 访问 AWS Identity and Access Management (IAM) 资源。使用该解决方案，各个组织可以利用基于文本的简单提示来简化 Amazon EKS 集群管理、减少手动开销，并提高整体开发效率。

## 先决条件和限制
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-prereqs"></a>

**先决条件**
+ 活跃 AWS 账户的.
+ 为部署过程建立了 IAM [角色和权限](https://docs.aws.amazon.com/bedrock/latest/userguide/security_iam_id-based-policy-examples.html)。这包括访问 Amazon Bedrock 基础模型 (FM)、创建 Lambda 函数以及跨目标的任何其他所需资源的权限。 AWS 账户
+ 在活跃状态 AWS 账户 下@@ [可以访问](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)这些 Amazon Bedrock FMs：Amazon Titan Text Embeddings V2 和 Anthropic Claude 3 Haiku。
+ AWS Command Line Interface [(AWS CLI) 版本 2.9.11 或更高版本，[已安装并配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)。](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [已安装](https://eksctl.io/installation/) eksctl 0.194.0 或更高版本。

**限制**
+ 可能需要提供培训和文档，以便帮助确保顺利地采用和有效地使用这些技术。使用亚马逊 Bedrock，亚马逊 EKS、Lambda、A OpenSearch mazon Service 和 [OpenAPI](https://www.openapis.org/what-is-openapi) 会给开发人员和团队带来重要的学习曲线。 DevOps 
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的 AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

## 架构
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-architecture"></a>

下图显示了此模式的工作流和架构组件。

![\[用于使用 Amazon Bedrock 代理，在 Amazon EKS 中创建访问控制措施的工作流和组件。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/2c52b1ba-bbad-4a46-ab1e-10e69a0a66e7/images/c7981a86-f734-4c07-a2f7-63ad38b66ab6.png)


该解决方案将执行以下步骤：

1. 用户提交一个提示或查询，以便与 Amazon Bedrock 代理进行交互，这些提示或查询将用作输入，以供代理处理和采取行动。

1. 根据提示，Amazon Bedrock 代理会检查 OpenAPI 架构，以便确定要作为目标的正确 API。如果 Amazon Bedrock 代理找到正确的 API 调用，系统会将此请求发送到与实施这些操作的 Lambda 函数相关联的操作组。

1. 如果找不到相关的 API，Amazon Bedrock 代理会查询该 OpenSearch 馆藏。该 OpenSearch 馆藏使用索引知识库内容，这些内容来自包含 Amazon *EKS 用户指南的 Amazon* S3 存储桶。

1. 该 OpenSearch 集合将相关的上下文信息返回给 Amazon Bedrock 代理。

1. 对于可操作的请求（与 API 操作匹配的那些请求），Amazon Bedrock 代理将在虚拟私有云（VPC）内执行，并触发 Lambda 函数。

1. Lambda 函数将根据用户在 Amazon EKS 集群内的输入来执行操作。

1. 用于 Lambda 代码的 Amazon S3 存储桶存储着一个构件，其中包含为 Lambda 函数编写的代码和逻辑。

## 工具
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-tools"></a>

**AWS 服务**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) 是一项完全托管的服务，它通过统一的 API 提供来自领先的人工智能初创公司和亚马逊的高性能基础模型 (FMs) 供您使用。
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)帮助您设置 AWS 资源，快速一致地配置资源，并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。
+ [亚马逊 Elastic Kubernetes Service（亚马逊](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS）可帮助你在上面运行 AWS Kubernetes，而无需安装或维护自己的 Kubernetes 控制平面或节点。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。它只在需要时运行您的代码，并自动进行扩展，因此您只需为使用的计算时间付费。
+ [Amazon OpenSearch ](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) Service 是一项托管服务，可帮助您在中部署、操作和扩展 OpenSearch 集群 AWS 云。它的集合功能可帮助您整理数据并建立全面的知识库，以供 Amazon Bedrock 代理等人工智能助手使用。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**其他工具**
+ [eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) 是一款命令行实用程序，用于在 Amazon EKS 上创建和管理 Kubernetes 集群。

**代码存储库**

此模式的代码可在 GitHub [eks-access-controls-bedrock-agent](https://github.com/aws-samples/eks-access-controls-bedrock-agent.git) 存储库中找到。

## 最佳实践
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-best-practices"></a>
+ 在实施此模式时，保持尽可能高的安全性。确保 Amazon EKS 集群是私有集群，访问权限有限，而且所有资源都位于一个虚拟私有云（VPC）内。有关详情，请参阅 Amazon EKS 文档中的[安全最佳实践](https://docs.aws.amazon.com/eks/latest/best-practices/security.html)。
+ 尽可能使用 AWS KMS [客户托管的密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)，并向其授予有限的访问权限。
+ 遵循最低权限原则，并授予执行任务所需的最低权限。有关详情，请参阅 IAM 文档中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)和[安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 操作说明
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-epics"></a>

### 设置环境
<a name="set-up-the-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆存储库。 | 要克隆此模式的存储库，请在您的本地工作站中运行如下命令：<pre>git clone https://github.com/aws-samples/eks-access-controls-bedrock-agent.git</pre> | AWS DevOps | 
| 获取 AWS 账户 身份证。 | 要获取 AWS 账户 ID，请按以下步骤操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)此命令将您的 AWS 账户 ID 存储在`AWS_ACCOUNT`变量中。 | AWS DevOps | 
| 为 Lambda 代码创建 S3 存储桶。 | 要实施该解决方案，您必须创建三个用于不同用途的 Amazon S3 存储桶，如[架构](#using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-architecture)图中所示。S3 存储桶用于存储 Lambda 代码、知识库和 OpenAPI 架构。要创建 Lambda 代码存储桶，请执行以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)package 命令创建一个包含以下内容的新 CloudFormation 模板 (`eks-access-controls-template.yaml`)：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 
| 为知识库创建 S3 存储桶。 | 要为知识库创建 Amazon S3 存储桶，请执行以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 
| 为 OpenAPI 架构创建 S3 存储桶。 | 要为 OpenAPI 架构创建 Amazon S3 存储桶，请执行以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 

### 部署堆 CloudFormation 栈
<a name="deploy-the-cfnshort-stack"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 部署 CloudFormation 堆栈。 | 要部署 CloudFormation 堆栈，请使用之前创建`eks-access-controls-template.yaml`的 CloudFormation 模板文件。有关更多详细说明，请参阅 CloudFormation 文档[中的从 CloudFormation 控制台创建堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html)。使用 CloudFormation 模板配置 OpenSearch 索引大约需要 10 分钟。创建此堆栈之后，记下 `VPC_ID` 和 `PRIVATE_SUBNET ID`。 | AWS DevOps | 
| 创建 Amazon EKS 集群。 | 要在 VPC 内创建 Amazon EKS 集群，请执行以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)预期的结果如下所示：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 

### 连接 Lambda 函数和 Amazon EKS 集群
<a name="connect-the-lam-function-and-the-eks-cluster"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 Amazon EKS 集群与 Lambda 函数之间，创建一个连接。 | 要设置网络和 IAM 权限，以便允许 Lambda 函数与 Amazon EKS 集群进行通信，请执行以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 

### 测试解决方案
<a name="test-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 测试 Amazon Bedrock 代理。 | 在测试 Amazon Bedrock 代理之前，请确保执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)要访问 Amazon Bedrock 代理，请执行以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html)您也可以要求此代理执行操作，以便建立 EKS 容器组身份关联。有关更多详细信息，请参阅 Amazon EKS 文档中的[了解 EKS 容器组身份如何向容器组（pod）授予对 AWS 服务的访问权限](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)。 | AWS DevOps | 

### 清理
<a name="clean-up"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 清理资源。 | 要清理此模式创建的资源，请执行如下过程。等待每个删除步骤都完成之后，再继续执行下一个步骤。此过程将永久删除这些堆栈创建的所有资源。在继续之前，请确保您已备份所有的重要数据。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks.html) | AWS DevOps | 

## 问题排查
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 在环境设置期间，返回了非零错误代码。 | 运行任何命令以便部署该解决方案时，请确认您正在使用正确的文件夹。有关详情，请参阅此模式的存储库中的 [FIRST\$1DEPLOY.md](https://github.com/aws-samples/eks-access-controls-bedrock-agent/blob/main/FIRST_DEPLOY.md) 文件。 | 
| Lambda 函数无法执行此任务。 | 请确保正确设置了从 Lambda 函数到 Amazon EKS 集群的连接。 | 
| 代理提示无法识别 APIs。 | 重新部署该解决方案。有关详情，请参阅此模式的存储库中的 [RE\$1DEPLOY.md](https://github.com/aws-samples/eks-access-controls-bedrock-agent/blob/main/RE_DEPLOY.md) 文件。 | 
| 删除此堆栈失败。 | 首次尝试删除此堆栈时，可能会失败。之所以出现这种故障，可能是因为为知识库编制索引的 OpenSearch 集合创建的自定义资源存在依赖性问题。要删除此堆栈，请保留自定义资源，以便重试此删除操作。 | 

## 相关资源
<a name="using-amazon-bedrock-agents-to-automate-creation-of-access-entry-controls-in-amazon-eks-resources"></a>

**AWS 博客**
+ [深入了解简化的 Amazon EKS 访问管理控制](https://aws.amazon.com/blogs/containers/a-deep-dive-into-simplified-amazon-eks-access-management-controls/) 

**Amazon Bedrock 文档**
+ [使用人工智能代理，在您的应用程序中自动执行任务](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html) 
+ [亚马逊 Bedrock Agents 的工作原理](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-how.html)
+ [测试代理行为并对其进行故障排除](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-test.html)
+ [使用操作组来定义代理要执行的操作](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-action-create.html) 

**Amazon EKS 文档**
+ [了解访问控制在 Amazon EKS 中的工作原理](https://docs.aws.amazon.com/eks/latest/userguide/cluster-auth.html)

# 使用 Terraform 和 Amazon AWS Bedrock 部署 RAG 用例
<a name="deploy-rag-use-case-on-aws"></a>

*Martin Maritsch、Nicolas Jacob Baer、Olivier Brique、Julian Ferdinand Grueber、Alice Morano 和 Nicola D Orazio，Amazon Web Services*

## Summary
<a name="deploy-rag-use-case-on-aws-summary"></a>

AWS 提供了各种选项来构建支持[检索增强生成 (RAG)](https://aws.amazon.com/what-is/retrieval-augmented-generation/) 的生成式 AI 用例。这种模式为基于矢量存储且兼容 Amazon Aurora PostgreSQL 的基于 RAG 的应用程序提供了解决方案。 LangChain 您可以使用 Terraform 将此解决方案直接部署到您的中， AWS 账户 并实现以下简单的 RAG 用例：

1. 用户将文件手动上传到 Amazon Simple Storage Service（Amazon S3）存储桶，例如 Microsoft Excel 文件或 PDF 文档。（有关支持的文件类型的更多信息，请参阅[非结构化](https://docs.unstructured.io/open-source/core-functionality/partitioning)文档。）

1. 文件内容会被提取并嵌入到基于无服务器 Aurora PostgreSQL 兼容版的知识数据库中，且该数据库支持近乎实时地将文档摄取到向量存储中。这种方法使得 RAG 模型能够访问和检索相关信息，以适用于对低延迟有严格要求的使用案例。

1. 当用户使用文本生成模型时，可通过从先前上传的文件中增强相关内容的检索，进而加强交互。

此模式使用 [Amazon Titan 文本嵌入 v2](https://docs.aws.amazon.com/bedrock/latest/userguide/titan-embedding-models.html) 作为嵌入模型，以及使用 [Anthropic Claude 3 Sonnet](https://aws.amazon.com/bedrock/claude/) 作为文本生成模型，两者在 Amazon Bedrock 上皆有提供。

## 先决条件和限制
<a name="deploy-rag-use-case-on-aws-prereqs"></a>

**先决条件**
+ 活跃 AWS 账户的.
+ AWS Command Line Interface (AWS CLI) 已安装并配置为你的 AWS 账户。有关安装说明，请参阅 AWS CLI 文档 AWS CLI中的[安装或更新到最新版本](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)的。要查看您的 AWS 凭证和对账户的访问权限，请参阅 AWS CLI 文档中的[配置和凭证文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。
+ 在您 AWS 账户的 Amazon Bedrock 控制台中为所需的大型语言模型 (LLMs) 启用的模型访问权限。此模式需要以下内容 LLMs：
  + `amazon.titan-embed-text-v2:0`
  + `anthropic.claude-3-sonnet-20240229-v1:0`

**限制**
+ 此示例架构不包括使用向量数据库进行编程问答的接口。如果您的用例需要 API，可以考虑添加带有运行检索和问答任务 AWS Lambda 功能[的 Amazon API Gat](https://docs.aws.amazon.com/apigateway/latest/developerguide) eway。 
+ 此示例架构不包括对已部署基础设施的监控功能。如果您的使用案例需要监控，请考虑添加 [AWS 监控服务](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/welcome.html)。
+ 如果您在短时间内将大量文档上传到 Amazon S3 存储桶，则 Lambda 函数可能会遇到速率限制。作为解决方案，您可以将 Lambda 函数与 Amazon Simple Queue Service（Amazon SQS）队列分开，而在此队列中，您可以控制 Lambda 调用的速率。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

**产品版本**
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 版本 2 或更高版本
+ [Docker](https://docs.docker.com/get-started/) 版本 26.0.0 或更高版本
+ [Poetry](https://pypi.org/project/poetry/) 版本 1.7.1 或更高版本
+ [Python](https://www.python.org/downloads/) 版本 3.10 或更高版本
+ [Terraform](https://developer.hashicorp.com/terraform/install) 版本 1.8.4 或更高版本

## 架构
<a name="deploy-rag-use-case-on-aws-architecture"></a>

下图显示了此模式的工作流和架构组件。

![\[使用 Aurora PostgreSQL LLMs 和亚马逊 Bedrock 创建基于 RAG 的应用程序的工作流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/8f184945-7f17-4760-8806-6d0eaeef372a/images/3771b7a0-05bd-4eb3-ad5b-199e22f86184.png)


该图阐明了以下流程：

1. 在 Amazon S3 存储桶 `bedrock-rag-template-<account_id>` 中创建对象时，[Amazon S3 通知](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html)会调用 Lambda 函数 `data-ingestion-processor`。

1. Lambda 函数 `data-ingestion-processor` 基于存储在 Amazon Elastic Container Registry（Amazon ECR）存储库 `bedrock-rag-template` 中的 Docker 映像。

   该函数使用 [LangChain S3 FileLoader](https://python.langchain.com/v0.1/docs/integrations/document_loaders/aws_s3_file/) 将文件作为[LangChain 文档](https://api.python.langchain.com/en/v0.0.339/schema/langchain.schema.document.Document.html)读取。然后，根据Amazon Titan文本嵌入V2嵌入模型的最大令牌大小，给定a `CHUNK_SIZE` 和a对每个文档进行分[LangChain RecursiveCharacterTextSplitter](https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/recursive_text_splitter/)块。`CHUNK_OVERLAP`接下来，Lambda 函数会在 Amazon Bedrock 上调用嵌入模型，将分块嵌入到数值向量表示中。最后，这些向量会存储在 Aurora PostgreSQL 数据库中。要访问数据库，Lambda 函数首先从中检索用户名和密码。 AWS Secrets Manager

1. 在 Amazon SageMaker AI [笔记本实例](https://docs.aws.amazon.com/sagemaker/latest/dg/nbi.html)上`aws-sample-bedrock-rag-template`，用户可以编写问题提示。该代码在 Amazon Bedrock 上调用 Claude 3，并将知识库信息添加到提示的上下文中。因此，Claude 3 使用文档中的信息提供回复。

此模式的联网和安全方法如下：
+ Lambda 函数 `data-ingestion-processor` 位于虚拟私有云（VPC）的私有子网中。由于 Lambda 函数具有安全组，因此不允许向公有互联网发送流量。因此，流向 Amazon S3 和 Amazon Bedrock 的流量仅可通过 VPC 端点路由。因此，流量不会遍历公有互联网，从而降低延迟，并在联网层面额外增加一层安全层。
+ 只要适用，就会使用带别名的 AWS Key Management Service (AWS KMS) 密钥对所有资源和数据进行加密`aws-sample/bedrock-rag-template`。

**自动化和扩展**

此模式使用 Terraform 将基础设施从代码库部署到 AWS 账户。

## 工具
<a name="deploy-rag-use-case-on-aws-tools"></a>

**AWS 服务**
+ [Amazon Aurora PostgreSQL 兼容版](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)是一个完全托管的、与 ACID 兼容的关系数据库引擎，可帮助您建立、运行和扩展 PostgreSQL 部署。在此模式中，Aurora PostgreSQL 兼容版使用 pgvector 插件作为向量数据库。
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) 是一项完全托管的服务，它通过统一的 API 提供来自领先的人工智能初创公司和亚马逊的高性能基础模型 (FMs) 供您使用。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一个开源工具，可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。
+ [Amazon Elastic Container Registry（Amazon ECR）](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)是一项安全、可扩展且可靠的托管容器映像注册表服务。在此模式下，Amazon ECR 会托管 `data-ingestion-processor` Lambda 函数的 Docker 映像。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 通过控制谁经过身份验证并有权使用 AWS 资源，从而帮助您安全地管理对资源的访问权限。
+ [AWS Key Management Service （AWS KMS）](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)可以创建和控制加密密钥，从而帮助保护您的数据。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。它只在需要时运行您的代码，并自动进行扩展，因此您只需为使用的计算时间付费。在此模式中，Lambda 会将数据摄取到向量存储中。
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) 是一项托管机器学习 (ML) 服务，可帮助您构建和训练机器学习模型，然后将其部署到生产就绪的托管环境中。
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 可帮助您将代码中的硬编码凭证（包括密码）替换为对 Secrets Manager 进行的 API 调用，以便以编程方式检索此密钥。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [Amazon Virtual Private Cloud（亚马逊 VPC）](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)可帮助您将 AWS 资源启动到您定义的虚拟网络中。该虚拟网络类似于您在数据中心中运行的传统网络，并具有使用 AWS的可扩展基础设施的优势。VPC 包括用于控制流量的子网和路由表。

**其他工具**
+ [Docker](https://docs.docker.com/manuals/) 是一组平台即服务（PaaS）产品，它们利用操作系统级的虚拟化技术在容器中提供软件。
+ [HashiCorp Terraform](https://www.terraform.io/docs) 是一款基础设施即代码（IaC）工具，可帮助您使用代码来预调配和管理云基础设施和资源。
+ [Poetry](https://pypi.org/project/poetry/) 是 Python 中用于管理和打包依赖项的工具。
+ [Python](https://www.python.org/) 是通用的计算机编程语言。

**代码存储库**

此模式的代码可在-ama GitHub [terraform-rag-template-usingzon-](https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock) bedrock 存储库中找到。

## 最佳实践
<a name="deploy-rag-use-case-on-aws-best-practices"></a>
+ 尽管此代码示例可以部署到任何位置 AWS 区域，但我们建议您使用美国东部（弗吉尼亚北部）`us-east-1`或美国西部（加利福尼亚北部）`us-west-1`。该建议基于此模式发布时 Amazon Bedrock 中基础模型和嵌入模型的可用性。有关 Amazon Bedrock 基础模型支持的 up-to-date列表 AWS 区域，请参阅 Amazon Bedrock 文档 AWS 区域中的[模型支持](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html)。有关将此代码示例部署到其他区域的信息，请参阅[其他信息](#deploy-rag-use-case-on-aws-additional)。
+ 此模式仅提供 proof-of-concept（PoC）或试点演示。如果您想将代码部署到生产环境，请务必使用以下最佳实践：
  + 启用 Amazon S3 服务器访问日志记录。
  + 为 Lambda 函数设置[监控和提醒](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html)。
  + 如果您的使用案例需要 API，则可以考虑添加 Amazon API Gateway，其中包含可运行检索和问答任务的 Lambda 函数。
+ 遵循最低权限原则，并授予执行任务所需的最低权限。有关详情，请参阅 IAM 文档中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)和[安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html)。

## 操作说明
<a name="deploy-rag-use-case-on-aws-epics"></a>

### 将解决方案部署在 AWS 账户
<a name="deploy-the-solution-in-an-aws-account"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆存储库。 | 要克隆此模式提供的 GitHub 存储库，请使用以下命令：<pre>git clone https://github.com/aws-samples/terraform-rag-template-using-amazon-bedrock</pre> | AWS DevOps | 
| 配置变量。 | 要配置此模式的参数，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | AWS DevOps | 
| 部署解决方案。 | 要部署该解决方案，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)基础设施部署在 VPC 内配置一个 SageMaker AI 实例，并具有访问 Aurora PostgreSQL 数据库的权限。 | AWS DevOps | 

### 测试解决方案
<a name="test-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 运行演示。 | 成功部署之前的基础设施后，使用以下步骤在 Jupyter Notebook 中运行演示：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html)Jupyter Notebook 将引导您完成以下过程：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-rag-use-case-on-aws.html) | 常规 AWS | 

### 清理基础设施
<a name="clean-up-infrastucture"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 清理基础设施。 | 要移除所有创建的不再需要的资源，请使用以下命令：<pre>terraform destroy -var-file=commons.tfvars</pre> | AWS DevOps | 

## 相关资源
<a name="deploy-rag-use-case-on-aws-resources"></a>

**AWS resources**
+ [使用 Python 构建 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [基础模型的推理参数](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ [访问 Amazon Bedrock 基础模型](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
+ [矢量数据库在生成式人工智能应用中的作用](https://aws.amazon.com/blogs/database/the-role-of-vector-datastores-in-generative-ai-applications/)（AWS 数据库博客）
+ [使用 Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)

**其他资源**
+ [pgvector 文档](https://github.com/pgvector/pgvector)

## 附加信息
<a name="deploy-rag-use-case-on-aws-additional"></a>

**实施向量数据库**

此模式使用 Aurora PostgreSQL 兼容版来为 RAG 实施向量数据库。作为 Aurora PostgreSQL 的替代品 AWS ，为 RAG 提供其他功能和服务，例如亚马逊 Bedrock 知识库和亚马逊服务。 OpenSearch 您可以选择最适合您特定要求的解决方案：
+ [Amazon Ser OpenSearch v](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) ice 提供分布式搜索和分析引擎，可用于存储和查询大量数据。
+ [Amazon Bedrock 知识库](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)旨在构建和部署知识库，并作为额外抽象来简化 RAG 的摄取和检索过程。亚马逊 Bedrock 知识库可以与 Aurora PostgreSQL 和亚马逊服务一起使用。 OpenSearch 

**部署到其他 AWS 区域**

如[架构](#deploy-rag-use-case-on-aws-architecture)中所述，我们建议您使用区域美国东部（弗吉尼亚州北部）– `us-east-1` 或美国西部（北加利福尼亚）– `us-west-1` 来部署此代码示例。但是，有两种潜在方法可以将此代码示例部署到 `us-east-1` 和 `us-west-1` 之外的其他区域。您可以在 `commons.tfvars` 文件中配置部署区域。对于跨区域基础模型访问，请考虑以下选项：
+ **遍历公有互联网** – 如果流量可以遍历公有互联网，请将互联网网关添加到 VPC。然后，调整分配给 Lambda 函数`data-ingestion-processor`和 SageMaker AI 笔记本实例的安全组，以允许公共互联网的出站流量。
+ **未遍历公共互联网** – 要将此示例部署到除 `us-east-1` 或 `us-west-1` 之外的任何区域，请执行以下操作：

1. 在 `us-east-1` 或 `us-west-1` 区域中，为 `bedrock-runtime` 创建一个额外的 VPC，包括一个 VPC 端点。

1. 使用 [VPC 对等连接](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)或通往应用程序 VPC 的[传输网关](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-peering.html)，创建对等连接。

1. 在 `us-east-1` 或 `us-west-1` 之外的任何 Lambda 函数中配置 `bedrock-runtime` boto3 客户端时，请将 `us-east-1` 或 us-west-1 中的 `bedrock-runtime` 的 VPC 端点的私有 DNS 名称作为 `endpoint_url` 传递给 boto3 客户端。

# 使用 Amazon 中的推理管道将预处理逻辑部署到单个终端节点的 ML 模型中 SageMaker
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker"></a>

*Mohan Gowda Purushothama、Gabriel Rodriguez Garcia 和 Mateusz Zaremba，Amazon Web Services*

## Summary
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-summary"></a>

此模式说明了如何使用 Amazon SageMaker 中的[推理管道在单个终端节点中部署多个管道](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html)模型对象。管道模型对象表示不同的机器学习 (ML) 工作流程阶段，例如预处理、模型推断和后期处理。为了说明串行连接的管道模型对象的部署，此模式向您展示了如何部署预处理的 [Scikit-Learn 容器和基于内置[线性](https://docs.aws.amazon.com/sagemaker/latest/dg/linear-learner.html)学习](https://docs.aws.amazon.com/sagemaker/latest/dg/sklearn.html)器算法的回归模型。 SageMaker部署托管在中的单个端点后面 SageMaker。

**注意**  
请注意：此模式使用 ml.m4.2xlarge 实例类型部署。建议使用符合您的数据大小和工作流程复杂要求的实例类型。有关更多信息，请参阅 [Amazon SageMaker 定价](https://aws.amazon.com/sagemaker/pricing/)。此模式使用了[预先构建的 Scikit-Learn Docker 映像](https://docs.aws.amazon.com/sagemaker/latest/dg/pre-built-docker-containers-scikit-learn-spark.html)，但您可以使用自己的 Docker 容器并将其集成至工作流程。

## 先决条件和限制
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ [Python 3.9](https://www.python.org/downloads/release/python-390/)
+ [亚马逊 SageMaker Python 软件开发工具包](https://sagemaker.readthedocs.io/en/stable/)和 [Boto3 库](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)
+ AWS Identity and Access Management (AWS IAM) [角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)具有基本 SageMaker [权限](https://docs.aws.amazon.com/sagemaker/latest/dg/api-permissions-reference.html)和亚马逊简单存储服务 (Amazon S3) [S](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html) ervice 权限

**产品版本**
+ [亚马逊 SageMaker Python SDK 2.49.2](https://sagemaker.readthedocs.io/en/v2.49.2/)

## 架构
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-architecture"></a>

**目标技术堆栈**
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon SageMaker
+ 亚马逊 SageMaker Studio
+ Amazon Simple Storage Service（Amazon S3）
+ [Amazon 的实时推理](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html)终端节点 SageMaker

**目标架构**

下图显示了部署 Amazon SageMaker 管道模型对象的架构。

![\[用于部署 SageMaker 管道模型对象的架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/1105d51b-752f-46d7-962c-acef1fb3399f/images/12f06715-b1c2-4de0-b277-99ce87308152.png)


下图显示了如下工作流：

1.  SageMaker 笔记本部署管道模型。

1. S3 存储桶存储模型构件。

1. Amazon ECR 从 S3 存储桶获取源容器映像。

## 工具
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-tools"></a>

**AWS 工具**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) 是一项安全、可扩展且可靠的托管容器映像注册表服务。
+ [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) 是一项托管机器学习服务，可帮助您构建和训练机器学习模型，然后将其部署到可用于生产的托管环境中。
+ [Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) 是一个基于 Web 的机器学习集成开发环境 (IDE)，允许您构建、训练、调试、部署和监控您的机器学习模型。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**代码**

此模式的代码可在[带有 Scikit-Learn 和 L GitHub inear Learner 存储库的推理管道](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-python-sdk/scikit_learn_inference_pipeline/Inference%20Pipeline%20with%20Scikit-learn%20and%20Linear%20Learner.ipynb)中找到。

## 操作说明
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-epics"></a>

### 准备数据集
<a name="prepare-the-dataset"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为回归任务准备数据集。 | 在 Amazon SageMaker Studio 中@@ [打开笔记本电脑](https://docs.aws.amazon.com/sagemaker/latest/dg/notebooks-create-open.html#notebooks-open)。若要导入所有必要的库并初始化工作环境，请在笔记本中使用以下示例代码：<pre>import sagemaker<br />from sagemaker import get_execution_role<br /><br />sagemaker_session = sagemaker.Session()<br /><br /># Get a SageMaker-compatible role used by this Notebook Instance.<br />role = get_execution_role()<br /><br /># S3 prefix<br />bucket = sagemaker_session.default_bucket()<br />prefix = "Scikit-LinearLearner-pipeline-abalone-example"</pre>若要下载示例数据集，请将以下代码添加至您的笔记本：<pre>! mkdir abalone_data<br />! aws s3 cp s3://sagemaker-sample-files/datasets/tabular/uci_abalone/abalone.csv ./abalone_data</pre>** **此模式中的示例使用 UCI 机器学习存储库中的 [Abalone 数据集](https://archive.ics.uci.edu/ml/datasets/abalone)。 | 数据科学家 | 
| 将数据集上传至 S3 存储桶。 | 在此前准备数据集的笔记本中，添加以下代码，以将示例数据上传至 S3 存储桶：<pre>WORK_DIRECTORY = "abalone_data"<br /><br />train_input = sagemaker_session.upload_data(<br />    path="{}/{}".format(WORK_DIRECTORY, "abalone.csv"),<br />    bucket=bucket,<br />    key_prefix="{}/{}".format(prefix, "train"),<br />)</pre> | 数据科学家 | 

### 使用创建数据预处理器 SKLearn
<a name="create-the-data-preprocessor-using-sklearn"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 准备 preprocessor.py 脚本。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker.html) | 数据科学家 | 
| 创建 SKLearn 预处理器对象。 | 要创建可以合并到最终推理管道中的 SKLearn 预处理器对象（名为 E SKLearn stimator），请在笔记本中运行以下代码： SageMaker <pre>from sagemaker.sklearn.estimator import SKLearn<br /><br />FRAMEWORK_VERSION = "0.23-1"<br />script_path = "sklearn_abalone_featurizer.py"<br /><br />sklearn_preprocessor = SKLearn(<br />    entry_point=script_path,<br />    role=role,<br />    framework_version=FRAMEWORK_VERSION,<br />    instance_type="ml.c4.xlarge",<br />    sagemaker_session=sagemaker_session,<br />)<br />sklearn_preprocessor.fit({"train": train_input})</pre> | 数据科学家 | 
| 测试预处理器推理。 | 要确认您的预处理器定义正确，请在 SageMaker 笔记本中输入以下代码来启动[批处理转换作业](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html)：<pre># Define a SKLearn Transformer from the trained SKLearn Estimator<br />transformer = sklearn_preprocessor.transformer(<br />    instance_count=1, instance_type="ml.m5.xlarge", assemble_with="Line", accept="text/csv"<br />)<br /><br /><br /># Preprocess training input<br />transformer.transform(train_input, content_type="text/csv")<br />print("Waiting for transform job: " + transformer.latest_transform_job.job_name)<br />transformer.wait()<br />preprocessed_train = transformer.output_path</pre> |  | 

### 验证机器学习模型
<a name="create-a-machine-learning-model"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建模型对象。 | 要基于线性学习器算法创建模型对象，请在 SageMaker 笔记本中输入以下代码：<pre>import boto3<br />from sagemaker.image_uris import retrieve<br /><br />ll_image = retrieve("linear-learner", boto3.Session().region_name)<br />s3_ll_output_key_prefix = "ll_training_output"<br />s3_ll_output_location = "s3://{}/{}/{}/{}".format(<br />    bucket, prefix, s3_ll_output_key_prefix, "ll_model"<br />)<br /><br />ll_estimator = sagemaker.estimator.Estimator(<br />    ll_image,<br />    role,<br />    instance_count=1,<br />    instance_type="ml.m4.2xlarge",<br />    volume_size=20,<br />    max_run=3600,<br />    input_mode="File",<br />    output_path=s3_ll_output_location,<br />    sagemaker_session=sagemaker_session,<br />)<br /><br />ll_estimator.set_hyperparameters(feature_dim=10, predictor_type="regressor", mini_batch_size=32)<br /><br />ll_train_data = sagemaker.inputs.TrainingInput(<br />    preprocessed_train,<br />    distribution="FullyReplicated",<br />    content_type="text/csv",<br />    s3_data_type="S3Prefix",<br />)<br /><br />data_channels = {"train": ll_train_data}<br />ll_estimator.fit(inputs=data_channels, logs=True)</pre>先前代码从公共 Amazon ECR 注册表中检索模型的相关 Amazon ECR Docker 映像，创建估算器对象，然后使用该对象训练回归模型。 | 数据科学家 | 

### 部署最终管道
<a name="deploy-the-final-pipeline"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 部署管道模型。 | 要创建管道模型对象（即预处理器对象）并部署该对象，请在 SageMaker 笔记本中输入以下代码：<pre>from sagemaker.model import Model<br />from sagemaker.pipeline import PipelineModel<br />import boto3<br />from time import gmtime, strftime<br /><br />timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime())<br /><br />scikit_learn_inferencee_model = sklearn_preprocessor.create_model()<br />linear_learner_model = ll_estimator.create_model()<br /><br />model_name = "inference-pipeline-" + timestamp_prefix<br />endpoint_name = "inference-pipeline-ep-" + timestamp_prefix<br />sm_model = PipelineModel(<br />    name=model_name, role=role, models= [scikit_learn_inferencee_model, linear_learner_model]<br />)<br /><br />sm_model.deploy(initial_instance_count=1, instance_type="ml.c4.xlarge", endpoint_name=endpoint_name)</pre>您可以调整模型对象中使用的实例类型，以满足您的需求。 | 数据科学家 | 
| 测试推理。 | 要确认端点是否正常工作，请在 SageMaker 笔记本中运行以下示例推理代码：<pre>from sagemaker.predictor import Predictor<br />from sagemaker.serializers import CSVSerializer<br /><br />payload = "M, 0.44, 0.365, 0.125, 0.516, 0.2155, 0.114, 0.155"<br />actual_rings = 10<br />predictor = Predictor(<br />    endpoint_name=endpoint_name, sagemaker_session=sagemaker_session, serializer=CSVSerializer()<br />)<br /><br />print(predictor.predict(payload))</pre> | 数据科学家 | 

## 相关资源
<a name="deploy-preprocessing-logic-into-an-ml-model-in-a-single-endpoint-using-an-inference-pipeline-in-amazon-sagemaker-resources"></a>
+ 在@@ [使用亚马逊 SageMaker 推理管道和 Scikit-Learn（AWS Machine Learning 博客）进行预测之前，对输入数据进行预处理](https://aws.amazon.com/blogs/machine-learning/preprocess-input-data-before-making-predictions-using-amazon-sagemaker-inference-pipelines-and-scikit-learn/)
+ [使用亚马逊进行端到端的 Machine Learn SageMaker ing](https://github.com/aws-samples/amazon-sagemaker-build-train-deploy) (GitHub)

# 使用带有 Kiro 和其他编码助手的 MCP 服务器部署实时编码安全验证
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants"></a>

*Ivan Girardi 和 Iker Reina Fuente，Amazon Web Services*

## Summary
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-summary"></a>

此模式描述了如何实现模型上下文协议 (MCP) 服务器，该服务器集成了三个行业标准的安全扫描工具，以提供全面的代码安全分析。该服务器使人工智能编码助手（例如 Kiro、Amazon Q Developer 和 Cline）能够自动扫描代码片段和基础设施即代码 (IaC) 配置。通过这些扫描，编码助手可以帮助识别安全漏洞、配置错误和合规违规行为。

在数百万个代码片段上训练的 AI 代码生成器会造成安全盲点——这些训练数据有多安全？ 此模式可在代码生成期间提供实时安全验证，帮助开发人员在编码时识别和了解潜在的安全问题。这种方法可以帮助开发人员解决直接漏洞和依赖关系中继承的风险。通过弥合 AI 效率和安全合规性之间的差距，这种模式有助于安全采用 AI 驱动的开发工具。

这种模式通过人工智能辅助的编码工具帮助组织增强其开发安全实践，提供跨多种编程语言和基础架构定义的持续安全扫描功能。该解决方案结合了以下工具的功能：
+ 用于扫描 IaC 文件（包括 Terraform 和 Kubernetes 清单）的 Checkov AWS CloudFormation
+ Semgrep 用于分析多种编程语言，例如 Python、 JavaScript、Java 等
+ Bandit 用于专门的 Python 安全扫描 

该解决方案的主要功能包括：
+ 对新代码段进行增量扫描，减少计算开销
+ 隔离的安全工具环境，防止交叉工具污染
+ 与人工智能编码助手（Kiro、Amazon Q Developer、Cline 等）无缝集成
+ 代码生成期间的实时安全反馈
+ 可自定义的扫描规则以实现组织合规性

该模式为具有标准化响应格式的安全扫描提供了统一的接口，从而可以更轻松地将安全检查集成到开发工作流程中。该模式使用 Python 和 MCP 框架来提供自动安全反馈。这种方法可以帮助开发人员在开发过程的早期发现和解决安全问题，同时通过详细的发现来学习安全最佳实践。

## 先决条件和限制
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-prereqs"></a>

**先决条件**
+ 如果您想使用 AWS 账户 其中任何一个编码助手，则可以使用 Kiro 或 Amazon Q Developer
+ [已安装 Python 版本 3.10 或更高版本](https://www.python.org/downloads/)
+ `uv`软件包管理器[已安装](https://docs.astral.sh/uv/getting-started/installation/)
+ 熟悉安全扫描工具和概念
+ 对 IaC 和应用程序安全的基本了解

**限制**
+ 强盗扫描仅限于 Python 文件。
+ 实时扫描可能会影响大型代码库的性能。
+ 特定于工具的限制取决于支持的文件格式和语言。
+ 需要手动审查才能验证安全调查结果。
+ 安全扫描结果需要安全专业知识才能正确解释。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

**产品版本**
+ Python 版本 3.10 或更高版本
+ Checkov 版本 3.0.0 或更高版本
+ Semgrep 版本 1.45.0 或更高版本
+ Bandit 版本 1.7.5 或更高版本
+ MCP [cli] 版本 1.11.0 或更高版本
+ Pydantic 版本 1.10.0 或更高版本
+ Loguru 版本 0.6.0 或更高版本

## 架构
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-architecture"></a>

下图显示了该解决方案的架构。

![\[AI 助手将代码发送到 MCP 安全扫描器服务器以路由到专门的扫描仪；扫描结果将发送给开发人员。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/fa623544-4d54-48af-a4e4-9b6a0624e776/images/9c881f95-76d0-40f6-983e-d987fd2097b8.png)


下图显示了如下工作流：

1. 开发者使用 AI 助手（例如 Kiro、Cline、Amazon Q Developer 或 RooCode）来生成或分析代码。AI 助手发送代码进行安全扫描。

1. MCP 安全扫描器服务器通过将请求路由到相应的专业扫描程序来处理请求：Checkov 用于 IaC 文件，Semgrep 用于多种编程语言分析，Bandit 用于特定于 Python 的安全扫描。

1. 扫描器结果以及安全发现、严重性级别、详细描述和建议的修复方法将通过 AI 助手发送给开发人员。

1. 建立了持续的反馈循环，开发人员可以在其中获得实时安全验证，通过人工智能助手实现自动修复，并在开发过程中推广安全最佳实践。

该架构可降低以下常见安全风险：
+ 命令注入
+ 及时注射
+ 路径遍历
+ 依赖攻击
+ 资源枯竭 

该架构通过实施以下最佳实践来降低这些常见的安全风险：
+ 所有用户和 AI 模型输入都写入临时文件。
+ 不向命令行界面 (CLI) 命令提供直接输入。
+ 文件系统访问权限仅限于临时目录和文件。
+ 临时文件会自动清理。
+ 扫描响应已被清理。
+ 强制执行限制进程能力的进程隔离。
+ 所有扫描活动都将被记录下来。

**自动化和扩展**

该模式通过以下功能支持自动化：
+ 与 AI 编码助手集成，实现自动扫码
+ 用于自动处理的标准化 API 响应
+ 通过 MCP 配置文件进行配置
+ Support 支持批处理多个文件
+ 跨多种编程语言和 IaC 格式的可扩展扫描

扫描过程可以通过提供的 API 端点实现自动化：
+ `scan_with_checkov`用于 IaC 扫描
+ `scan_with_semgrep`用于多语言代码扫描
+ `scan_with_bandit`用于特定于 Python 的扫描
+ `get_supported_formats`用于格式验证

扩展扫描工具时，请遵循本节前面描述的设计原则和最佳实践。另请参阅[最佳实践](#deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-best-practices)。

## 工具
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-tools"></a>

**AWS 服务**
+ [Kiro](https://aws.amazon.com/documentation-overview/kiro/) 是一项代理编码服务，它与开发人员合作，将提示转化为详细规范，然后转化为工作代码、文档和测试。Kiro 代理可帮助开发人员解决具有挑战性的问题并自动执行生成文档和单元测试等任务。
+ [Amazon Q](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html) Developer 是一款基于人工智能的生成式对话助手，可以帮助您理解、构建、扩展和操作 AWS 应用程序。

**其他工具**
+ [Bandit](https://bandit.readthedocs.io/en/latest/) 是一款专门的 Python 安全扫描工具。它可以检测常见的 Python 安全问题，例如不安全的函数、硬编码的机密和注入漏洞。Bandit 提供了详细的置信度和严重性评级。
+ [Checkov](https://github.com/bridgecrewio/checkov) 是一种静态代码分析工具，用于检查 IaC 是否存在安全性和合规性错误配置。此外，Checkov还可以检测违规行为和安全最佳实践。
+ [Cline](https://cline.bot/) 是一款由 AI 驱动的编码助手，在 VS Code 中运行。
+ [Loguru](https://loguru.readthedocs.io/en/stable/) 是一个适用于 Python 的数据验证库。
+ [模型上下文协议 (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro) 是一个用于构建 AI 辅助开发工具的开源框架。
+ [Pydantic](https://docs.pydantic.dev/latest/) 是一个适用于 Python 的数据验证库。
+ [Semgrep](https://semgrep.dev/docs/introduction) 分析源代码中是否存在安全漏洞和错误。它支持多种编程语言。Semgrep 使用以安全为重点的规则集进行全面分析。它提供了详细的置信度和严重性评级。

**代码存储库**

此模式的代码可在 GitHub [MCP 安全扫描器：AI 代码助手的实时保护](https://github.com/aws-samples/sample-mcp-security-scanner)存储库中找到。该存储库包括 MCP 服务器实现、Kiro、Amazon Q Developer、Cline 等的 MCP 配置的详细信息、配置示例和测试实用程序。

存储库结构包括：
+ `security_scanner_mcp_server/`-主服务器实现
+ `docs/`-文档和演示材料
+ `tests/`-测试文件
+ `mcp-config-example.json`-MCP 配置示例
+ `requirements.txt`-项目依赖关系

## 最佳实践
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-best-practices"></a>

**安全扫描实施**
+ 查看安全发现以验证问题并确定问题优先级。
+ 将扫描工具（Checkov、Semgrep 和 Bandit）更新到最新版本。
+ 将此模式的 MCP 安全工具与其他安全措施和工具结合使用。
+ 定期更新安全规则集和策略。

**配置管理**
+ 使用官方版本控制源中的 MCP 配置文件。
+ 记录自定义规则和配置。

**集成**
+ 在开发周期的早期就集成安全扫描。
+ 在预提交挂钩或持续集成和持续部署 (CI/CD) 管道中设置自动扫描。
+ 为您的环境配置适当的严重性阈值。
+ 制定处理安全发现的明确程序。

**运营注意事项**
+ 监控扫描性能和资源使用情况。
+ 实现正确的错误处理和日志记录。
+ 维护自定义配置的文档。
+ 建立审查和更新安全规则的流程。

此外，请记住以下最佳实践：
+ 务必在您的特定环境中验证安全发现。
+ 使安全工具和依赖项保持最新。
+ 使用多种安全工具实现全面覆盖。
+ 在开发过程中遵循安全最佳实践。

## 操作说明
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-epics"></a>

### （Kiro 用户）设置 MCP 安全扫描器服务器
<a name="kiro-users-set-up-the-mcp-security-scanner-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 MCP 设置。 | 您可以通过（选项 1）手动查找配置文件或（选项 2）使用 Kiro IDE 在 Kiro 中编辑配置文件。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html)<pre>{<br />  "mcpServers": {<br />    "security-scanner": {<br />      "command": "uvx",<br />      "args": [<br />        "--from",<br />        "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main",<br />        "security_scanner_mcp_server"<br />      ],<br />      "env": {<br />        "FASTMCP_LOG_LEVEL": "ERROR"<br />      },<br />      "disabled": false,<br />      "autoApprove": []<br />    }<br />  }<br />}</pre> | 应用程序开发人员 | 

### （Amazon Q 开发者用户）设置 MCP 安全扫描器服务器
<a name="qdevlong-users-set-up-the-mcp-security-scanner-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 MCP 设置。 | 要手动配置 MCP 设置，请使用以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html)<pre>{<br />  "mcpServers": {<br />    "security-scanner": {<br />      "command": "uvx",<br />      "args": [<br />        "--from",<br />        "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main",<br />        "security_scanner_mcp_server"<br />      ],<br />      "env": {<br />        "FASTMCP_LOG_LEVEL": "ERROR"<br />      }<br />    }<br />  }<br />}</pre> | 应用程序开发人员 | 

### （Cline 用户）设置 MCP 安全扫描器服务器
<a name="cline-users-set-up-the-mcp-security-scanner-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置 MCP 设置。 | 要手动配置 MCP 设置，请使用以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html)<pre>{<br />  "mcpServers": {<br />    "security-scanner": {<br />      "command": "uvx",<br />      "args": [<br />        "--from",<br />        "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main",<br />        "security_scanner_mcp_server"<br />      ],<br />      "env": {<br />        "FASTMCP_LOG_LEVEL": "ERROR"<br />      },<br />      "disabled": false,<br />      "autoApprove": []<br />    }<br />  }<br />}</pre> | 应用程序开发人员 | 

### 使用 Python 和 Bandit 进行代码分析的示例
<a name="example-of-code-analysis-using-python-and-bandit"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 执行代码分析。 | 要使用 Python 和 Bandit 执行代码分析，请按以下步骤操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 应用程序开发人员 | 

### 使用 Terraform 和 Checkov 进行代码分析的示例
<a name="example-of-code-analysis-using-terraform-and-checkov"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 执行代码分析。 | 要使用 Terraform 和 Checkov 执行代码分析，请使用以下步骤：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 应用程序开发人员 | 

### 高级扫描功能示例
<a name="example-of-advanced-scanning-capabilities"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 执行有针对性的扫描。 | 以下是可用于执行定向扫描的请求示例：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 应用程序开发人员 | 
| 使用安全扫描和代码生成。 | 要使用代码生成循环来解决安全问题，请使用以下步骤（此示例使用 Kiro 作为编码助手）：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 应用程序开发人员 | 

## 问题排查
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 环境设置问题 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 
| 扫描仪问题 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 
| 集成问题 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 
| 其他支持 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants.html) | 

## 相关资源
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-resources"></a>

**AWS 文档**
+ [基础架构即代码](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)（AWS 白皮书*简介*） DevOps AWS

**其他 AWS 资源**
+ [安全性、身份和合规性最佳实践](https://aws.amazon.com/architecture/security-identity-compliance/)

**其他资源**
+ [Bandit 文档](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [Checkov 文档](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [模型上下文协议 (MCP) 文档](https://aws.amazon.com/architecture/security-identity-compliance/)
+ [OWASP 安全编码实践](https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/)（OWASP 基金会网站）
+ [Semgrep 文档](https://aws.amazon.com/architecture/security-identity-compliance/)

## 附加信息
<a name="deploy-real-time-coding-security-validation-by-using-an-mcp-server-with-kiro-and-other-coding-assistants-additional"></a>

**启用了 auto 批准的 MCP 配置示例**

如果未`autoApprove`进行配置，则用户必须批准才能将代码发送到 MCP 安全服务器进行扫描。配置完成后`autoApprove`，允许代码助手在未经用户批准的情况下调用这些工具。这些工具在计算机上本地运行，不发送任何数据，只执行代码扫描。

以下配置允许自动执行所有安全扫描功能：

```
{
  "mcpServers": {
    "security-scanner": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/aws-samples/sample-mcp-security-scanner.git@main",
        "security_scanner_mcp_server"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
      },
      "disabled": false,
      "autoApprove": [
        "scan_with_checkov",
        "scan_with_semgrep", 
        "scan_with_bandit",
        "get_supported_formats"
      ]
    }
  }
}
```

要启用调试日志记录，`"FASTMCP_LOG_LEVEL"`请将设置为`"DEBUG"`。

**安全扫描工具支持的文件格式**

此解决方案中的每种安全扫描工具都支持以下文件格式：

*Checkov (IaC)*
+ Terraform — .tf、.tfvars、.tfstate
+ CloudFormation — .yaml、.yml、.json、.template
+ Kubernetes — .yaml、.yml
+ Dockerfile — Dockerfile
+ ARM — .json（Azure 资源管理器）
+ 二头肌 — .bicep
+ 无服务器 — .yml、.yaml
+ Helm — .yaml、.yml、.tpl
+ GitHub 操作 — .yml、.yaml
+ GitLab\$1ci — .yml、.yaml
+ Ansible — .yml、.yaml

*Semgrep（源代码）*
+ Python — .py
+ JavaScript — .js
+ TypeScript — .ts
+ Java — .java
+ 走 — .go
+ C — .c.
+ C\$1\$1 — .cpp
+ C\$1 — .cs
+ Ruby — .rb
+ PHP — .php
+ Scala — .scala
+ Kotlin — .kt
+ Rust — .rs

*强盗（仅限 Python）*
+ Python — .py

**演示**

要进行代码扫描，请使用 AI 助手尝试以下示例提示：
+ “扫描当前脚本并告诉我结果。”
+ “扫描 20-60 行，然后告诉我结果。”
+ “扫描这个 Amazon DynamoDB 表资源并告诉我结果。”

有关更多信息，请参阅此模式 GitHub 存储库中的此[代码扫描演示](https://github.com/aws-samples/sample-mcp-security-scanner/blob/main/docs/demo_code_scan.gif)。

要生成安全代码，请尝试以下示例提示：
+ “生成 Terraform 配置以创建启用加密的 DynamoDB 表，然后对其进行扫描以发现安全问题。”
+ “创建一个写入 DynamoDB 的 Python Lambda 函数并对其进行漏洞扫描。”
+ “为具有正确安全设置的 S3 存储桶生成 CloudFormation 模板并验证其是否通过安全检查。”
+ “编写一个 Python 脚本，通过分页查询 DynamoDB，并扫描安全最佳实践。”
+ “为具有安全强化功能的微服务创建 Kubernetes 部署清单并对其进行验证。”

有关更多信息，请参阅此模式 GitHub 存储库中的此[代码生成和安全扫描](https://github.com/aws-samples/sample-mcp-security-scanner/blob/main/docs/demo_code_generation.gif)演示。

# 使用 RAG 和提示开发基于人工智能聊天的高级生成式 AI 助手 ReAct
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting"></a>

*Praveen Kumar Jeyarajan、Shuai Cao、Noah Hamilton、Kiowa Jackson、Jundong Qiao 和 Kara Yang，Amazon Web Services*

## Summary
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-summary"></a>

一家典型的公司将其 70% 的数据存储在孤立的系统中。您可以使用生成式人工智能驱动的基于聊天的助手，通过自然语言交互来获取这些数据孤岛之间的见解和关系。为了充分利用生成式人工智能，输出必须可信、准确，并且包含可用的企业数据。成功的基于聊天的助手取决于以下几项：
+ 生成式人工智能模型（例如 Anthropic Claude 2）
+ 数据来源向量化
+ 用于提示模型的高级推理技术，例如[ReAct 框架](https://www.promptingguide.ai/techniques/react)

此模式提供了从数据来源（例如 Amazon Simple Storage Service（Amazon S3）存储桶、AWS Glue 和 Amazon Relational Database Service（Amazon RDS））检索数据的方法。通过将[检索增强生成 (RAG)](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) 与 chain-of-thought方法交织在一起，可以从这些数据中获得价值。这些结果表明，基于聊天的复杂助手对话能够利用公司存储的全部数据。

这种模式以亚马逊 SageMaker 手册和定价数据表为例，探索基于人工智能聊天的生成式助手的功能。您将构建一个基于聊天的助手，通过回答有关定价和 SageMaker 服务功能的问题来帮助客户评估服务。该解决方案使用Streamlit库来构建前端应用程序，并使用 LangChain 框架来开发由大型语言模型 (LLM) 支持的应用程序后端。

对于向基于聊天的助手提出的询问，首先会按照初始意图进行分类，然后再根据分类结果将其路由到三个可能的工作流之一。最复杂的工作流包含一般性咨询指引和复杂的定价分析。您可以根据企业、公司和工业使用案例对模式进行调整。

## 先决条件和限制
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-prereqs"></a>

**先决条件**
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)已安装并配置
+ [AWS Cloud Development Kit（AWS CDK）Toolkit 2.114.1 或更高版本](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)已安装并配置
+ 基本熟悉 Python 和 AWS CDK
+ [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) 已安装
+ [Docker](https://docs.docker.com/get-docker/) 已安装
+ [Python 3.11 或更高版本](https://www.python.org/downloads/)已安装并配置（有关更多信息，请参阅[工具](#develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-tools)部分）
+ 通过使用 [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) 引导的[活跃 AWS 账户](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-creating.html)。
+ Amazon Bedrock 服务启用了 Amazon Titan 和 Anthropic Claude [模型访问权限](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#add-model-access)
+ 在终端环境中正确配置的 [AWS 安全凭证](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)，包括 `AWS_ACCESS_KEY_ID`

**限制**
+ LangChain 不支持每个 LLM 进行直播。支持 Anthropic Claude 模型，但不支持 AI21 Labs 中的模型。
+ 此解决方案部署至单个 AWS 账户。
+ 此解决方案只能部署在提供 Amazon Bedrock 和 Amazon Kendra 的 AWS 区域。有关可用性的信息，请参阅 [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html#bedrock-regions) 和 [Amazon Kendra](https://docs.aws.amazon.com/general/latest/gr/kendra.html) 的文档。

**产品版本**
+ Python 版本 3.11 或更高版本
+ Streamlit 版本 1.30.0 或更高版本
+ Streamlit-chat 版本 0.1.1 或更高版本
+ LangChain 版本 0.1.12 或更高版本
+ AWS CDK 版本 2.132.1 或更高版本

## 架构
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-architecture"></a>

**目标技术堆栈**
+ Amazon Athena
+ Amazon Bedrock
+ Amazon Elastic Container Service（Amazon ECS）
+ AWS Glue
+ AWS Lambda
+ Amazon S3
+ Amazon Kendra
+ Elastic Load Balancing

**目标架构**

AWS CDK 代码将部署所有资源，这些资源是在 AWS 账户中设置基于聊天的助手应用程序的必要条件。下图所示的基于聊天的助手应用程序旨在回答用户的 SageMaker 相关查询。用户可通过应用程序负载均衡器连接到 VPC，而该 VPC 包含托管 Streamlit 应用程序的 Amazon ECS 集群。编排 Lambda 函数连接到应用程序。S3 存储桶数据来源通过 Amazon Kendra 和 AWS Glue 向 Lambda 函数提供数据。Lambda 函数连接到 Amazon Bedrock，用于回答基于聊天的助手用户的查询（问题）。

![\[架构示意图。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/b4df6405-76ab-4493-a722-15ceca067254/images/4e5856cf-9489-41f8-a411-e3b8d8a50748.png)


1. 编排 Lambda 函数向 Amazon Bedrock 模型（Claude 2）发送 LLM 提示请求。

1. Amazon Bedrock 将 LLM 响应发回编排 Lambda 函数。

**编排 Lambda 函数中的逻辑流**

当用户通过 Streamlit 应用程序提问时，该应用程序会直接调用编排 Lambda 函数。下图显示了调用 Lambda 函数时的逻辑流程。

![\[架构示意图。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/b4df6405-76ab-4493-a722-15ceca067254/images/70ae4736-06a6-4d3a-903a-edc5c10d78a0.png)

+ 步骤 1 – 输入 `query`（问题）分为三个意图之一：
  + 一般 SageMaker 指导问题
  + 一般 SageMaker 定价（训练/推理）问题
  + 与定价相关的 SageMaker 复杂问题
+ 步骤 2 – 输入 `query` 启动以下三项服务之一：
  + `RAG Retrieval service`，可从 [Amazon Kendra](https://aws.amazon.com/kendra/) 向量数据库中检索相关上下文，并通过 [Amazon Bedrock](https://aws.amazon.com/bedrock/) 调用 LLM，将检索到的上下文汇总为响应。
  + `Database Query service`，使用 LLM、数据库元数据和相关表中的示例行将输入 `query` 转换为 SQL 查询。数据库查询服务通过 [Amazon A](https://aws.amazon.com/athena/) thena 对 SageMaker 定价数据库运行 SQL 查询，并将查询结果汇总为响应。
  + `In-context ReACT Agent service`，会在提供响应之前将输入 `query` 分成多个步骤。代理使用 `RAG Retrieval service` 和 `Database Query service` 作为工具，在推理过程中检索相关信息。完成推理和操作过程后，代理会生成最终答案作为响应。
+ 步骤 3 – 来自编排 Lambda 函数的响应作为输出发送到 Streamlit 应用程序。

## 工具
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-tools"></a>

**Amazon Web Services**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) 是一种交互式查询服务，使您可使用标准 SQL 直接分析 Amazon Simple Storage Service（Amazon S3）中的数据。
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) 是一项完全托管的服务，它通过统一的 API 提供来自领先的人工智能初创公司和亚马逊的高性能基础模型 (FMs) 供您使用。
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) 是一个软件开发框架，可帮助您在代码中定义和预置 Amazon Web Services Cloud 基础设施。
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
+ [Amazon Elastic Container Service（Amazon ECS）](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)是一项快速、可扩展的容器管理服务，可帮助您运行、停止和管理集群上的容器。
+ [AWS Glue](https://docs.aws.amazon.com/glue/) 是一项完全托管的提取、转换、加载（ETL）服务。它可以帮助您在数据存储和数据流之间对数据进行可靠地分类、清理、扩充和移动。此模式使用 AWS Glue 爬网程序与 AWS Glue Data Catalog 表。
+ [Amazon Kendra](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html) 是一项智能搜索服务，它使用自然语言处理和高级机器学习算法，从您的数据中返回搜索问题的特定答案。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，而无需预置或管理服务器。它仅在需要时运行您的代码，并且能自动扩缩，因此您只需为使用的计算时间付费。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [弹性负载均衡（ELB）](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)将传入的应用程序或网络流量分配到多个目标。例如，您可以将流量分发到一个或多个可用区中的 Amazon Elastic Compute Cloud（Amazon EC2）实例、容器以及 IP 地址。

**代码存储库**

此模式的代码可在 GitHub [genai-bedrock-chatbot](https://github.com/awslabs/genai-bedrock-chatbot)存储库中找到。

此代码存储库包含以下文件和文件夹：
+ `assets` 文件夹 – 静态资产、架构图和公有数据集
+ `code/lambda-container` 文件夹 – 在 Lambda 函数中运行的 Python 代码
+ `code/streamlit-app` 文件夹 – 在 Amazon ECS 中作为容器映像运行的 Python 代码
+ `tests` 文件夹 – 用于对 AWS CDK 构造进行单元测试而运行的 Python 文件
+ `code/code_stack.py` – 用于创建 AWS 资源的 AWS CDK 构造 Python 文件
+ `app.py` – 用于在目标 AWS 账户中部署 AWS 资源的 AWS CDK 堆栈 Python 文件
+ `requirements.txt` – AWS CDK 必须安装的所有 Python 依赖项列表
+ `requirements-dev.txt` – AWS CDK 为运行单元测试套件而必须安装的所有 Python 依赖项列表
+ `cdk.json` — 用于提供启动资源所需值的输入文件


| 
| 
| 注意：AWS CDK 代码使用 [L3（第 3 层）构造](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)和[由 AWS 管理的 AWS Identity and Access Management（IAM）策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)来部署解决方案。 | 
| --- |

## 最佳实践
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-best-practices"></a>
+ 此处提供的代码示例仅适用于 proof-of-concept (PoC) 或试点演示。如果您想将代码部署到生产环境，请务必使用以下最佳实践：
  + [Amazon S3 访问日志已启用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)。
  + [VPC 流日志已启用](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)。
  + [Amazon Kendra 企业版索引](https://docs.aws.amazon.com/whitepapers/latest/how-aws-pricing-works/amazon-kendra.html)已启用。
+ 为 Lambda 函数设置监控和警报。有关更多信息，请参阅 [Lambda 函数监控和故障排除](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html)。有关使用 Lambda 函数时的一般最佳实践标准，请参阅 [AWS 文档](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)

## 操作说明
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-epics"></a>

### 在本地机器上设置 AWS 凭证
<a name="set-up-aws-credentials-on-your-local-machine"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 为待部署堆栈的账户和 AWS 区域导出变量。 | 要使用环境变量为 AWS CDK 提供 AWS 凭证，请运行以下命令。<pre>export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number><br />export CDK_DEFAULT_REGION=<region></pre> | DevOps 工程师，AWS DevOps | 
| 设置 AWS CLI 配置文件。 | 要为账户设置 AWS CLI 配置文件，请按 [AWS 文档](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/keys-profiles-credentials.html)中的说明进行操作。 | DevOps 工程师，AWS DevOps | 

### 设置您的环境
<a name="set-up-your-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在本地机器克隆存储库。 | 要克隆存储库，请在终端中运行以下命令。<pre>git clone https://github.com/awslabs/genai-bedrock-chatbot.git</pre> | DevOps 工程师，AWS DevOps | 
| 设置 Python 虚拟环境以及安装所需依赖项。 | 要设置 Python 虚拟环境，请运行以下命令。<pre>cd genai-bedrock-chatbot<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>要设置所需依赖项，请运行以下命令。<pre>pip3 install -r requirements.txt</pre> | DevOps 工程师，AWS DevOps | 
| 设置 AWS CDK 环境和合成 AWS CDK 代码。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html) | DevOps 工程师，AWS DevOps | 

### 配置和部署基于聊天的助手应用程序
<a name="configure-and-deploy-the-chat-based-assistant-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 预调配 Claude 模型访问权限。 | 要为您的 AWS 账户启用 Anthropic Claude 模型访问权限，请按照 [Amazon Bedrock 文档](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#add-model-access)中的说明进行操作。 | AWS DevOps | 
| 在账户中部署资源。 | 若要使用 AWS CDK 在 AWS 账户中部署资源，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)成功部署后，您可以使用 CloudFormation **输出**部分中提供的 URL 访问基于聊天的助手应用程序。 | AWS DevOps， DevOps 工程师 | 
| 运行 AWS Glue 爬网程序，并创建数据目录表。 | [AWS Glue 爬网程序](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)用于保持数据架构的动态性。该解决方案通过运行爬网程序来创建和更新 [AWS Glue Data Catalog 表](https://docs.aws.amazon.com/athena/latest/ug/querying-glue-catalog.html)中的分区。将 CSV 数据集文件复制到 S3 存储桶后，运行 AWS Glue 爬网程序，并创建用于测试的 Data Catalog 表架构：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)AWS CDK 代码将 AWS Glue 爬网程序配置为按需运行，但您也可以[安排](https://docs.aws.amazon.com/glue/latest/dg/schedule-crawler.html)其定期运行。 | DevOps 工程师，AWS DevOps | 
| 启动文档索引。 | 将文件复制到 S3 存储桶后，使用 Amazon Kendra 对其进行抓取及编制索引：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html)AWS CDK 代码将 Amazon Kendra 索引同步配置为按需运行，但您也可以使用[计划参数](https://docs.aws.amazon.com/kendra/latest/dg/data-source.html#cron)定期运行。 | AWS DevOps， DevOps 工程师 | 

### 清理解决方案中的所有 AWS 资源
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 移除 AWS 资源。 | 在测试解决方案后，清理资源：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting.html) | DevOps 工程师，AWS DevOps | 

## 问题排查
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| AWS CDK 会返回错误信息。 | 要获得有关 AWS CDK 问题的帮助，请参阅[常见 AWS CDK 问题疑难解答](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)。 | 

## 相关资源
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-resources"></a>
+ Amazon Bedrock：
  + [模型访问权限](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [基础模型的推理参数](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ [使用 Python 构建 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [AWS CDK 入门](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
+ [在 Python 中使用 AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [AWS 上的生成式人工智能应用程序构建者](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)
+ [LangChain 文档](https://python.langchain.com/docs/get_started/introduction)
+ [Streamlit 文档](https://docs.streamlit.io/)

## 附加信息
<a name="develop-advanced-generative-ai-chat-based-assistants-by-using-rag-and-react-prompting-additional"></a>

**AWS CDK 命令**

使用 AWS CDK 时，切记以下有用的命令：
+ 列出应用程序的所有堆栈

  ```
  cdk ls
  ```
+ 发出合成的 AWS 模板 CloudFormation 

  ```
  cdk synth
  ```
+ 将堆栈部署至您的默认 AWS 账户和区域

  ```
  cdk deploy
  ```
+ 将已部署的堆栈与当前状态比较

  ```
  cdk diff
  ```
+ 打开 AWS CDK 文档

  ```
  cdk docs
  ```
+ 删除 CloudFormation 堆栈并移除 AWS 部署的资源

  ```
  cdk destroy
  ```

# 使用 Amazon Bedrock 代理和知识库开发基于聊天的全自动助手
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases"></a>

*Jundong Qiao、Shuai Cao、Noah Hamilton、Kiowa Jackson、Praveen Kumar Jeyarajan 和 Kara Yang，Amazon Web Services*

## Summary
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-summary"></a>

基于聊天的助手能够编排不同的数据来源以提供全面答案，因此许多组织在创建此类助手时都面临着挑战。此模式提供了一种解决方案，可用于开发基于聊天的助理，其中该助理能够回答来自文档和数据库的查询，并且部署简单直接。

从 A [mazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) 开始，这项完全托管的生成式人工智能 (AI) 服务提供了各种高级基础模型 (FMs)。这有助于高效创建极其注重隐私和安全性的生成式人工智能应用程序。在文档检索的领域中，[检索增强生成（RAG）](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html)是一项关键功能。该功能利用[知识库](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)，通过来自外部来源的上下文相关信息来增强 FM 提示。A [mazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) 索引充当 Amazon Bedrock 知识库背后的矢量数据库。通过仔细的提示工程来增强这种集成，以最大限度地减少不准确之处，并确认以事实为依据进行响应。对于数据库查询，Amazon Bedrock 将文本查询转换为包含特定参数的结构化 SQL 查询。 FMs [这样可以从数据库管理的数据库中精确检索数据。AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/define-database.html)[Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) 可用于这些查询中。

要处理更复杂的查询，获得全面的答案，就需要获取来自文档和数据库的信息。[Amazon Bedrock 代理](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)是一项生成式人工智能功能，可帮助您构建能够理解复杂任务的自主代理，并将其分解为更简单的任务以进行编排。在 Amazon Bedrock 自主代理的推动下，整合擷取自简化任务中的见解，可以增强信息的合成，从而得出更全面、更详尽的答案。此模式演示了如何使用 Amazon Bedrock 以及自动解决方案中的相关生成式人工智能服务和功能来构建基于聊天的助手。

## 先决条件和限制
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ Docker，[已安装](https://docs.docker.com/engine/install/)
+ AWS Cloud Development Kit (AWS CDK)，[已安装](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_tools)并[引导到](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap)或 `us-east-1` `us-west-2` AWS 区域
+ AWS CDK [工具包版本 2.114.1 或更高版本，已安装](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
+ AWS Command Line Interface (AWS CLI)，[已安装](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)并[配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Python 版本 3.11 或更高版本，[已安装](https://www.python.org/downloads/)
+ 在 Amazon Bedrock 中，[允许访问](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) Claude 2、Claude 2.1、Claude Instant 和 Titan Embeddings G1 – 文本

**限制**
+ 此解决方案已部署到单个 AWS 账户。
+ 此解决方案只能部署在支持 Amazon Bedrock 和 Amazon OpenSearch Serverless AWS 区域 的地方。有关更多信息，请参阅 Amazon B [edrock 和 Amazon OpenSearch ](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-regions.html) [Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html#serverless-regions) 的文档。

**产品版本**
+ Llama-index 版本 0.10.6 或更高版本
+ Sqlalchemy 版本 2.0.23 或更高版本
+ Opensearch-py 版本 2.4.2 或更高版本
+ Requests\$1aws4auth 版本 1.2.3 或更高版本
+ 适用于 Python (Boto3) 的 AWS SDK 版本 1.34.57 或更高版本

## 架构
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-architecture"></a>

**目标技术堆栈**

[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)是一个开源软件开发框架，用于在代码中定义云基础架构并通过它进行配置 AWS CloudFormation。此模式中使用的 AWS CDK 堆栈部署以下 AWS 资源： 
+ AWS Key Management Service (AWS KMS)
+ Amazon Simple Storage Service（Amazon S3）
+ AWS Glue Data Catalog，用于 AWS Glue 数据库组件
+ AWS Lambda
+ AWS Identity and Access Management (IAM)
+ Amazon OpenSearch 无服务器
+ Amazon Elastic Container Registry（Amazon ECR） 
+ Amazon Elastic Container Service（Amazon ECS）
+ AWS Fargate
+ Amazon Virtual Private Cloud (Amazon VPC)
+ [应用程序负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 

**目标架构**

![\[使用 Amazon Bedrock 知识库和代理的架构图\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/15372718-3a5d-4918-9cfa-422c455f288d/images/ff19152e-0bb6-4758-a6dd-4f6140e55113.png)


该图显示了在单个 AWS AWS 区域云原生环境中使用多个 AWS 服务设置的全面云原生设置。基于聊天的助手的主接口是托管在 Amazon ECS 集群上的 [Streamlit](https://docs.streamlit.io/) 应用程序。[应用程序负载均衡器](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/)可管理可访问性。通过此接口进行的查询会激活 `Invocation` Lambda 函数，然后该函数可与 Amazon Bedrock 代理进行交互。该代理通过查阅 Amazon Bedrock 知识库或调用 `Agent executor` Lambda 函数来回应用户的询问。此函数会按照预定义的 API 架构触发一组与代理关联的操作。Amazon Bedrock 的知识库使用 OpenSearch 无服务器索引作为其矢量数据库的基础。此外，该`Agent executor`函数还会生成通过 Amazon Athena 对 AWS Glue 数据库执行的 SQL 查询。

## 工具
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-tools"></a>

**AWS 服务**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) 是一种交互式查询服务，可帮助您通过使用标准 SQL 直接分析 Amazon Simple Storage Service（Amazon S3）中的数据。
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) 是一项完全托管的服务，它通过统一的 API 提供来自领先的人工智能初创公司和亚马逊的高性能基础模型 (FMs) 供您使用。
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)是一个软件开发框架，可帮助您在代码中定义和配置 AWS 云基础架构。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一个开源工具，可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。
+ [Amazon Elastic Container Service（Amazon ECS）](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)是一项快速、可扩展的容器管理服务，可帮助您运行、停止和管理集群上的容器。
+ [弹性负载均衡](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)在多个目标上分配传入的应用程序或网络流量。例如您可以将流量分配到一个或多个可用区中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例、容器以及 IP 地址。
+ [AWS Glue](https://docs.aws.amazon.com/glue/) 是一项完全托管式提取、转换、加载（ETL）服务。它可以帮助您在数据存储和数据流之间对数据进行可靠地分类、清理、扩充和移动。此模式使用 AWS Glue 爬虫和 AWS Glue Data Catalog 表格。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，无需预调配或管理服务器。它只在需要时运行您的代码，并自动进行扩展，因此您只需为使用的计算时间付费。
+ [Amazon OpenSearch Server](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) less 是亚马逊 OpenSearch 服务的按需无服务器配置。在这种模式下， OpenSearch 无服务器索引充当 Amazon Bedrock 知识库的矢量数据库。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**其他工具**
+ [Streamlit](https://docs.streamlit.io/) 是一个开源 Python 框架，可用于创建数据应用程序。

**代码存储库**

此模式的代码可在 GitHub [genai-bedrock-agent-chatbot](https://github.com/awslabs/genai-bedrock-agent-chatbot/)存储库中找到。此代码存储库包含以下文件和文件夹：
+ `assets` 文件夹 – 静态资产，例如架构图和公有数据集。
+ `code/lambdas/action-lambda` 文件夹 – Lambda 函数的 Python 代码，可用于充当 Amazon Bedrock 代理的操作。
+ `code/lambdas/create-index-lambda`文件夹 — 用于创建 OpenSearch 无服务器索引的 Lambda 函数的 Python 代码。
+ `code/lambdas/invoke-lambda` 文件夹 – Lambda 函数的 Python 代码，可直接从 Streamlit 应用程序调用 Amazon Bedrock 代理。
+ `code/lambdas/update-lambda`文件夹 — Lambda 函数的 Python 代码，用于在通过部署资源后更新或删除 AWS 资源。 AWS CDK
+ `code/layers/boto3_layer`文件夹 — 用于创建所有 Lambda 函数共享的 Boto3 层的 AWS CDK 堆栈。
+ `code/layers/opensearch_layer`folder — 创建 OpenSearch 无服务器层的 AWS CDK 堆栈，该层安装所有依赖项以创建索引。
+ `code/streamlit-app`文件夹 — 在 Amazon ECS 中作为容器映像运行的 Python 代码。
+ `code/code_stack.py`— AWS CDK 构造用于创建 AWS 资源的 Python 文件。
+ `app.py`— 在目标 AWS 账户中部署 AWS 资源的 AWS CDK 堆栈 Python 文件。
+ `requirements.txt`— 必须为安装的所有 Python 依赖项的列表 AWS CDK。
+ `cdk.json` – 用于提供创建资源所需值的输入文件。此外，在 `context/config` 字段中，您可以相应地自定义解决方案。有关自定义的更多信息，请参阅[其他信息](#develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional)部分。

## 最佳实践
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-best-practices"></a>
+ 此处提供的代码示例仅用于 proof-of-concept (PoC) 或试运行目的。如果您想将代码部署到生产环境，请务必使用以下最佳实践：
  + 启用 [Amazon S3 访问日志记录](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)
  + 启用 [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)
+ 为 Lambda 函数设置监控和提醒。有关更多信息，请参阅 [Lambda 函数监控和故障排除](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html)。有关最佳实践，请参阅[使用 AWS Lambda 函数的最佳实践](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)。

## 操作说明
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-epics"></a>

### 在本地工作站上设置 AWS 凭据
<a name="set-up-aws-credentials-on-your-local-workstation"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 导出账户和区域的变量。 | 要使用环境变 AWS CDK 量为提供 AWS 凭证，请运行以下命令。<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number><br />export CDK_DEFAULT_REGION=<Region></pre> | AWS DevOps， DevOps 工程师 | 
| 设置 AWS CLI 命名的个人资料。 | 要为账户设置 AWS CLI 指定个人资料，请按照[配置和凭据文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)中的说明进行操作。 | AWS DevOps， DevOps 工程师 | 

### 设置您的环境
<a name="set-up-your-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将存储库克隆到本地工作站。 | 要克隆存储库，请在终端中运行以下命令。<pre>git clone https://github.com/awslabs/genai-bedrock-agent-chatbot.git</pre> | DevOps 工程师，AWS DevOps | 
| 设置 Python 虚拟环境。 | 要设置 Python 虚拟环境，请运行以下命令。<pre>cd genai-bedrock-agent-chatbot<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>要设置所需依赖项，请运行以下命令。<pre>pip3 install -r requirements.txt</pre> | DevOps 工程师，AWS DevOps | 
| 设置 AWS CDK 环境。 | 要将代码转换为 AWS CloudFormation 模板，请运行命令`cdk synth`。 | AWS DevOps， DevOps 工程师 | 

### 配置并部署应用程序
<a name="configure-and-deploy-the-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在账户中部署资源。 | 要使用在中 AWS 账户 部署资源 AWS CDK，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.html)成功部署后，您可以使用控制台**输出**选项卡上提供的 URL 访问基于聊天的助手应用程序。 CloudFormation  | DevOps 工程师，AWS DevOps | 

### 清理解决方案中的所有 AWS 资源
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 移除 AWS 资源。 | 在测试解决方案后，要清理资源，请执行命令 `cdk destroy`。 | AWS DevOps， DevOps 工程师 | 

## 相关资源
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-resources"></a>

**AWS 文档**
+ Amazon Bedrock 资源：
  + [模型访问权限](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [基础模型的推理参数](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
  + [Amazon Bedrock 的代理](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)
  + [Amazon Bedrock 知识库](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)
+ [使用 Python 构建 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ AWS CDK 资源：
  + [开始使用 AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
  + [常见 AWS CDK 问题疑难解答](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)
  + [AWS CDK 在 Python 中使用](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [生成式 AI 应用程序生成器已开启 AWS](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)

**其他 AWS 资源**
+ [适用于 Amazon OpenSearch 无服务器的矢量引擎](https://aws.amazon.com/opensearch-service/serverless-vector-engine/)

**其他资源**
+ [LlamaIndex 文档](https://docs.llamaindex.ai/en/stable/)
+ [Streamlit 文档](https://docs.streamlit.io/)

## 附加信息
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional"></a>

**使用您自己的数据自定义基于聊天的助手**

要集成用于部署解决方案的自定义数据，请遵循以下结构化指南。这些步骤旨在确保无缝高效的集成流程，使您能够使用定制数据有效地部署解决方案。

*用于知识库数据集成*

**数据准备**

1. 寻找 `assets/knowledgebase_data_source/` 目录。

1. 将您的数据集放置在此文件夹中。

**配置调整**

1. 打开 `cdk.json` 文件。

1. 导航到 `context/configure/paths/knowledgebase_file_name` 字段，然后对其进行相应更新。

1. 导航到 `bedrock_instructions/knowledgebase_instruction` 字段，然后对其进行更新，以准确反映新数据集的细微差别和上下文。

*用于结构数据集成*

**数据整理**

1. 在 `assets/data_query_data_source/` 目录中，创建子目录，例如 `tabular_data`。

1. 将您的结构化数据集（可接受的格式包括 CSV、JSON、ORC 和 Parquet）放置在这个新创建的子文件夹中。

1. 如果您要连接到现有数据库，请更新 `code/lambda/action-lambda/build_query_engine.py` 中的函数 `create_sql_engine()`，以连接您的数据库。

**配置和代码更新**

1. 在 `cdk.json` 文件中，更新 `context/configure/paths/athena_table_data_prefix` 字段，以使其与新的数据路径保持一致。

1. `code/lambda/action-lambda/dynamic_examples.csv`通过加入与您的数据集对应的新 text-to-SQL示例进行修改。

1. 修改 `code/lambda/action-lambda/prompt_templates.py` 以反映结构化数据集的属性。

1. 在 `cdk.json` 文件中，更新 `context/configure/bedrock_instructions/action_group_description` 字段，以解释 `Action group` Lambda 函数的目的和功能。

1. 在 `assets/agent_api_schema/artifacts_schema.json` 文件中，解释您的 `Action group` Lambda 函数的新功能。

*常规更新*

在 `cdk.json` 文件中，考虑到新集成的数据，在 `context/configure/bedrock_instructions/agent_instruction` 部分中，全面描述了 Amazon Bedrock 代理的预期功能和设计目的。

# 使用 Amazon Bedrock 和 Amazon Transcribe 从语音输入中记录机构知识
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe"></a>

*Praveen Kumar Jeyarajan、Jundong Qiao、Rajiv Upadhyay 和 Megan Wu，Amazon Web Services*

## Summary
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-summary"></a>

获取机构知识对于确保组织取得成功以及增强韧性至关重要。机构知识代表了员工随着时间的推移积累的集体智慧、见解和经验，这些知识本质上通常是隐性知识并且以非正式地传承下来。这些丰富的信息包含独特的方法、最佳实践以及针对错综复杂的问题的解决方案，而这些可能在其他地方并未做详细记录。通过正式方式这些知识记录下来，公司可以保留机构记忆，促进创新，增强决策流程，并加快新员工的学习速度。此外，它还可以促进协作，赋予个人权力，以及打造持续改进的文化。最终，利用机构知识可以帮助公司运用其最有价值的资产（员工的集体智慧）来应对挑战，推动增长，以及在瞬息万变的商业环境中保持竞争优势。

此模式解释了如何通过高级员工的录音来收集制度性知识。它使用 [Amazon Transcribe](https://docs.aws.amazon.com/transcribe/latest/dg/what-is.html) 和 [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) 进行系统的记录和验证。通过记录这些非正式知识，您可以将其保留并与未来的员工群体共享。公司在不断努力，整合通过直接经验获得的实践知识，进而为实现卓越运营提供支持以及提高培训计划的有效性。

## 先决条件和限制
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ Docker，[已安装](https://docs.docker.com/engine/install/)
+ AWS Cloud Development Kit（AWS CDK）版本 2.114.1 或更高版本，[已安装](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_tools)并[引导](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap)到 `us-east-1` 或 `us-west-2` AWS 区域
+ AWS CDK Toolkit 版本 2.114.1 或更高版本，[已安装](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)
+ AWS 命令行界面（AWS CLI），[已安装](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)并[配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Python 版本 3.12 或更高版本，[已安装](https://www.python.org/downloads/)
+ 创建 Amazon Transcribe、Amazon Bedrock、Amazon Simple Storage Service（Amazon S3）和 AWS Lambda 资源的权限

**限制**
+ 此解决方案部署至单个 AWS 账户。
+ 此解决方案只能部署在提供 Amazon Bedrock 和 Amazon Transcribe 的 AWS 区域。有关可用性的信息，请参阅 [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-regions.html) 和 [Amazon Transcribe](https://docs.aws.amazon.com/transcribe/latest/dg/what-is.html#tsc-regions) 的文档。
+ 音频文件必须采用 Amazon Transcribe 支持的格式。有关支持的格式列表，请参阅 Transcribe 文档中的[媒体格式](https://docs.aws.amazon.com/transcribe/latest/dg/how-input.html#how-input-audio)。

**产品版本**
+ 适用于 Python 的 Amazon SDK（Boto3）版本 1.34.57 或更高版本
+ LangChain 版本 0.1.12 或更高版本

## 架构
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-architecture"></a>

该架构代表了 AWS 上的无服务器工作流。[AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 编排 Lambda 函数，用于音频处理、文本分析和文档生成。下图显示了 Step Functions 工作流，也称为*状态机*。

![\[Step Functions 状态机生成文档的架构图\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/f1e0106d-b046-4adc-9718-c299efb7b436/images/e90298ca-1b7f-4c3e-97bd-311a9d5a4997.png)


状态机中的每个步骤都由一个不同的 Lambda 函数处理。以下是文档生成过程中的步骤：

1. `preprocess` Lambda 函数验证传递给 Step Functions 的输入，并列出所提供的 Amazon S3 URI 文件夹路径中的所有音频文件。工作流中的下游 Lambda 函数使用文件列表来验证、汇总和生成文档。

1. `transcribe` Lambda 函数使用 Amazon Transcribe 将音频文件转换为文本记录。此 Lambda 函数负责启动转录过程并将语音准确地转换为文本，然后将其存储起来以供后续处理。

1. `validate` Lambda 函数分析文本记录，确定回复与初始问题的相关性。通过 Amazon Bedrock 使用大语言模型（LLM），它可以识别并区分与主题相关的答案及偏离主题的回复。

1. `summarize` Lambda 函数使用 Amazon Bedrock 生成连贯而简洁的与主题相关的答案的摘要。

1. `generate` Lambda 函数将摘要汇编成结构良好的文档。它可以根据预定义的模板格式化文档，并包括任何其他必要的内容或数据。

1. 如果任何 Lambda 函数失败，您将通过 Amazon Simple Notification Service（Amazon SNS）接收电子邮件通知。

在整个过程中，AWS Step Functions 可确认每个 Lambda 函数都会按正确的顺序启动。该状态机具有并行处理能力，因此可提高效率。Amazon S3 存储桶可充当中央存储库，通过管理所涉及的各种媒体和文档格式来支持工作流。

## 工具
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-tools"></a>

**AWS 服务**
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) 是一项完全托管的服务，它通过统一的 API 提供来自领先的人工智能初创公司和亚马逊的高性能基础模型 (FMs) 供您使用。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，而无需预置或管理服务器。它仅在需要时运行您的代码，并且能自动扩缩，因此您只需为使用的计算时间付费。
+ [Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 可帮助您协调和管理发布者与客户端（包括 Web 服务器和电子邮件地址）之间的消息交换。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 是一项无服务器编排服务，可让您搭配使用 AWS Lambda 函数和其他 Amazon Web Services 来构建业务关键型应用程序。 
+ [Amazon Transcribe](https://docs.aws.amazon.com/transcribe/latest/dg/what-is.html) 是一种自动语音识别服务，它使用机器学习模型将音频转换为文本。

**其他工具**
+ [LangChain](https://python.langchain.com/docs/get_started/introduction/)是一个用于开发由大型语言模型支持的应用程序的框架 (LLMs)。

**代码存储库**

此模式的代码可在 GitHub [genai-knowledge-capture](https://github.com/aws-samples/genai-knowledge-capture)存储库中找到。

此代码存储库包含以下文件和文件夹：
+ `assets` 文件夹 – 解决方案的静态资产，例如架构图和公有数据集
+ `code/lambdas` 文件夹 – 所有 Lambda 函数的 Python 代码
  + `code/lambdas/generate` 文件夹 - 根据 S3 存储桶中的汇总数据生成文档的 Python 代码
  + `code/lambdas/preprocess` 文件夹 - 处理 Step Functions 状态机输入的 Python 代码
  + `code/lambdas/summarize` 文件夹 - 使用 Amazon Bedrock 服务汇总转录数据的 Python 代码
  + `code/lambdas/transcribe` 文件夹 - 使用 Amazon Transcribe 将语音数据（音频文件）转换为文本的 Python 代码
  + `code/lambdas/validate` 文件夹 - 验证所有答案是否都与同一主题有关的 Python 代码
+ `code/code_stack.py` – 用于创建 AWS 资源的 AWS CDK 构造 Python 文件
+ `app.py` – 用于在目标 AWS 账户中部署 AWS 资源的 AWS CDK 应用程序 Python 文件
+ `requirements.txt` – AWS CDK 必须安装的所有 Python 依赖项列表
+ `cdk.json` – 用于提供创建资源所需值的输入文件

## 最佳实践
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-best-practices"></a>

提供的代码示例仅用于 proof-of-concept (PoC) 或试运行目的。如果您想将解决方案部署到生产环境，请使用以下最佳实践：
+ 启用 [Amazon S3 访问日志记录](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)
+ 启用 [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)

## 操作说明
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-epics"></a>

### 在本地工作站上设置 AWS 凭证
<a name="set-up-aws-credentials-on-your-local-workstation"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 导出账户和 AWS 区域的变量。 | 要使用环境变量为 AWS CDK 提供 AWS 凭证，请运行以下命令。<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number><br />export CDK_DEFAULT_REGION=<Region></pre> | AWS DevOps， DevOps 工程师 | 
| 设置 AWS CLI 命名配置文件。 | 要为账户设置 AWS CLI 命名配置文件，请按照[配置和凭证文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)中的说明进行操作。 | AWS DevOps， DevOps 工程师 | 

### 设置您的环境
<a name="set-up-your-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 将存储库克隆到本地工作站。 | 要克隆[genai-knowledge-capture](https://github.com/aws-samples/genai-knowledge-capture)存储库，请在终端中运行以下命令。<pre>git clone https://github.com/aws-samples/genai-knowledge-capture</pre> | AWS DevOps， DevOps 工程师 | 
| （可选）替换音频文件。 | 要自定义示例应用程序以包含您自己的数据，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.html) | AWS DevOps， DevOps 工程师 | 
| 设置 Python 虚拟环境。 | 要设置 Python 虚拟环境，请运行以下命令。<pre>cd genai-knowledge-capture<br />python3 -m venv .venv<br />source .venv/bin/activate<br />pip install -r requirements.txt</pre> | AWS DevOps， DevOps 工程师 | 
| 合成 AWS CDK 代码。 | 要将代码转换为 AWS CloudFormation 堆栈配置，请运行以下命令。<pre>cdk synth</pre> | AWS DevOps， DevOps 工程师 | 

### 配置和部署解决方案
<a name="configure-and-deploy-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 预调配基础模型访问权限。 | 允许您的 AWS 账户访问 Anthropic Claude 3 Sonnet 模型。有关说明，请参阅 Bedrock 文档中的[添加模型访问权限](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html#model-access-add)。 | AWS DevOps | 
| 在账户中部署资源。 | 若要使用 AWS CDK 在 AWS 账户中部署资源，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.html) | AWS DevOps， DevOps 工程师 | 
| 订阅 Amazon SNS 主题。 | 要订阅 Amazon SNS 主题以接收通知，请执行以下操作：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.html) | 常规 AWS | 

### 测试解决方案
<a name="test-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 运行状态机。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.html) | 应用程序开发人员，常规 AWS | 

### 清理解决方案中的所有 AWS 资源
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 移除 AWS 资源。 | 在测试解决方案后，清理资源：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe.html) | AWS DevOps， DevOps 工程师 | 

## 相关资源
<a name="document-institutional-knowledge-from-voice-inputs-by-using-amazon-bedrock-and-amazon-transcribe-resources"></a>

**AWS 文档**
+ Amazon Bedrock 资源：
  + [模型访问权限](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [基础模型的推理参数](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
+ AWS CDK 资源：
  + [AWS CDK 入门](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
  + [在 Python 中使用 AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
  + [排查常见 AWS CDK 问题](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)
  + [Toolkit 命令](https://docs.aws.amazon.com/cdk/v2/guide/cli.html#cli-commands)
+ AWS Step Functions 资源：
  + [AWS Step Functions 入门](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html)
  + [故障排查](https://docs.aws.amazon.com/step-functions/latest/dg/troubleshooting.html)
+ [使用 Python 构建 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ [AWS 上的生成式人工智能应用程序构建者](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)

**其他资源**
+ [LangChain 文档](https://python.langchain.com/docs/get_started/introduction)

# 使用 Amazon Personalize 生成个性化和重新排名的推荐
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize"></a>

*Mason Cahill、Matthew Chasse 和 Tayo Olajide，Amazon Web Services*

## Summary
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-summary"></a>

此模式向您展示如何使用 Amazon Personalize 根据从这些用户那里摄取的实时用户互动数据，为用户生成个性化推荐（包括重新排名的推荐）。此模式中使用的示例场景基于宠物收养网站，该网站根据用户的互动（例如，用户访问的宠物）为其用户生成推荐。通过遵循示例场景，您将学习使用 Amazon Kinesis Data Streams 摄取互动数据，使用 AWS Lambda 生成建议并对建议进行重新排名，以及使用 Amazon Data Firehose 将数据存储在 Amazon Simple Storage Service（Amazon S3）存储桶中。您还将学习使用 AWS Step Functions 来构建状态机以管理生成推荐的解决方案版本（即经过训练的模型）。

## 先决条件和限制
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-prereqs"></a>

**先决条件**
+ 一个有效的 [Amazon Web Services account](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/)，其中包含已[引导的](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html) AWS Cloud Development Kit（AWS CDK）
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)，带有配置的凭证
+ [Python 3.9](https://www.python.org/downloads/release/python-390/)

**产品版本**
+ Python 3.9
+ AWS CDK 2.23.0 或更高版本
+ AWS CLI 2.7.27 或更高版本

## 架构
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-architecture"></a>

**技术堆栈**
+ Amazon Data Firehose
+ Amazon Kinesis Data Streams
+ Amazon Personalize
+ Amazon Simple Storage Service（Amazon S3）
+ AWS Cloud Development Kit (AWS CDK)
+ AWS 命令行界面（AWS CLI）
+ AWS Lambda
+ AWS Step Functions

**目标架构**

下图说明了将实时数据摄取到 Amazon Personalize 的管线。然后，该管线使用这些数据为用户生成个性化和重新排名的推荐。

![\[Amazon Personalize 的数据摄取架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/42eb193b-2347-408a-8b25-46beeb3b29ca/images/786dbd56-7d7f-41bb-90f6-d4485d73fe15.png)


下图显示了如下工作流：

1. Kinesis Data Streams 摄取实时用户数据（例如，访问过的宠物等事件），由 Lambda 和 Firehose 处理。

1. Lambda 函数处理来自 Kinesis Data Streams 的记录，并发出 API 调用，将记录中的用户互动添加到 Amazon Personalize 中的事件跟踪器中。

1. 基于时间的规则调用 Step Functions 状态机，并使用 Amazon Personalize 中事件跟踪器中的事件为推荐和重新排名模型生成新的解决方案版本。

1. Amazon Personalize [活动](https://docs.aws.amazon.com/personalize/latest/dg/campaigns.html)由状态机更新，以使用新的[解决方案版本](https://docs.aws.amazon.com/personalize/latest/dg/creating-a-solution-version.html)。

1. Lambda 通过调用 Amazon Personalize 重新排名活动对推荐项目列表进行重新排名。

1. Lambda 通过调用 Amazon Personalize 推荐活动对推荐项目列表进行检索。

1. Firehose 将事件保存到 S3 存储桶中，在存储桶中将其作为历史数据进行访问。

## 工具
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-tools"></a>

**AWS 工具**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) 是一个软件开发框架，可帮助您在代码中定义并预置 Amazon Web Services Cloud 基础设施。
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一种开源工具，它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) 可帮助您将实时[流数据](https://aws.amazon.com/streaming-data/)传输到其他 AWS 服务、自定义 HTTP 端点以及受支持的第三方服务提供商拥有的 HTTP 端点。
+ [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/introduction.html) 可帮助您实时收集和处理大型数据记录流。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 是一项计算服务，可帮助您运行代码，而无需预置或管理服务器。它仅在需要时运行您的代码，并且能自动扩缩，因此您只需为使用的计算时间付费。
+ [Amazon Personalize](https://docs.aws.amazon.com/personalize/latest/dg/what-is-personalize.html) 是一项完全托管的机器学习（ML）服务，可帮助您根据数据为用户生成项目推荐。
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 是一项无服务器编排服务，可帮助您搭配使用 Lambda 函数和其他 Amazon Web Services 来构建业务关键型应用程序。

**其他工具**
+ [pytest](https://docs.pytest.org/en/7.2.x/index.html) 是一个 Python 框架，用于编写可读的小型测试。
+ [Python](https://www.python.org/) 是通用的计算机编程语言。

**代码**

此模式的代码可在 GitHub [Animal Recormerder](https://github.com/aws-samples/personalize-pet-recommendations) 存储库中找到。您可以使用此存储库 CloudFormation 中的 AWS 模板来部署示例解决方案的资源。

**注意**  
Amazon Personalize 解决方案版本、事件跟踪器和活动由基于原生[资源的自定义资源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)（在基础设施内） CloudFormation 提供支持。

## 操作说明
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-epics"></a>

### 创建基础设施
<a name="create-the-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建一个隔离的 Python 环境。 | **Mac/Linux 安装程序**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.html)**Windows 设置**要手动创建虚拟环境，请从终端运行该 `% .venv\Scripts\activate.bat` 命令。 | DevOps 工程师 | 
| 合成 CloudFormation 模板。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/generate-personalized-and-re-ranked-recommendations-using-amazon-personalize.html)在步骤 2 中，`CDK_ENVIRONMENT` 引用 `config/{env}.yml` 文件。 | DevOps 工程师 | 
| 部署资源并创建基础设施。 | 要部署解决方案资源，请从终端运行该 `./deploy.sh` 命令。此命令安装所有必需的 Python 依赖项。Python 脚本创建 S3 存储桶和 AWS Key Management Service（AWS KMS）密钥，然后添加用于创建初始模型的种子数据。最后，该脚本运行 `cdk deploy` 以创建剩余的基础设施。初始模型训练发生在堆栈创建期间。堆栈最长可能需要两个小时才能完成创建。 | DevOps 工程师 | 

## 相关资源
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-resources"></a>
+ [动物推荐者](https://github.com/aws-samples/personalize-pet-recommendations) () GitHub
+ [AWS CDK 参考文档](https://docs.aws.amazon.com/cdk/api/v2/)
+ [Boto3 文档](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)
+ [使用 Amazon Personalize 针对您选择的业务指标优化个性化推荐](https://aws.amazon.com/blogs/machine-learning/optimize-personalized-recommendations-for-a-business-metric-of-your-choice-with-amazon-personalize/)（AWS 机器学习博客）

## 附加信息
<a name="generate-personalized-and-re-ranked-recommendations-using-amazon-personalize-additional"></a>

**有效负载和响应示例**

*推荐 Lambda 函数*

要检索推荐，请使用以下格式的有效负载向推荐 Lambda 函数提交请求：

```
{
  "userId": "3578196281679609099",
  "limit": 6
}
```

以下示例响应包含动物组列表：

```
[{"id": "1-domestic short hair-1-1"},
{"id": "1-domestic short hair-3-3"},
{"id": "1-domestic short hair-3-2"},
{"id": "1-domestic short hair-1-2"},
{"id": "1-domestic short hair-3-1"},
{"id": "2-beagle-3-3"},
```

如果省略该 `userId` 字段，则该函数将返回一般建议。

*重新排名 Lambda 函数*

要使用重新排名，请向重新排名 Lambda 函数提交请求。有效载荷包含所有 IDs 要重新排名的项目及其元数据。`userId`以下示例数据使用 Oxford Pets 类表示 `animal_species_id`（1=猫，2=狗），使用整数 1-5 表示 `animal_age_id` 和 `animal_size_id`：

```
{
   "userId":"12345",
   "itemMetadataList":[
      {
         "itemId":"1",
         "animalMetadata":{
            "animal_species_id":"2",
            "animal_primary_breed_id":"Saint_Bernard",
            "animal_size_id":"3",
            "animal_age_id":"2"
         }
      },
      {
         "itemId":"2",
         "animalMetadata":{
            "animal_species_id":"1",
            "animal_primary_breed_id":"Egyptian_Mau",
            "animal_size_id":"1",
            "animal_age_id":"1"
         }
      },
      {
         "itemId":"3",
         "animalMetadata":{
            "animal_species_id":"2",
            "animal_primary_breed_id":"Saint_Bernard",
            "animal_size_id":"3",
            "animal_age_id":"2"
         }
      }
   ]
}
```

Lambda 函数对这些商品进行重新排名，然后返回包含该商品和来自 Amazon Personalize 的直接回复的排序列表。 IDs 这是项目所属动物群及其分数的排名列表。Amazon Personalize 使用 [User-Personalization](https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-new-item-USER_PERSONALIZATION.html) 和 [Personalized-Ranking](https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-search.html) 食谱，在推荐中包含每件项目的分数。这些分数表示 Amazon Personalize 对于用户接下来将选择哪个项目的相对确定性。分数越高，意味着确定性越大。

```
{
   "ranking":[
      "1",
      "3",
      "2"
   ],
   "personalizeResponse":{
      "ResponseMetadata":{
         "RequestId":"a2ec0417-9dcd-4986-8341-a3b3d26cd694",
         "HTTPStatusCode":200,
         "HTTPHeaders":{
            "date":"Thu, 16 Jun 2022 22:23:33 GMT",
            "content-type":"application/json",
            "content-length":"243",
            "connection":"keep-alive",
            "x-amzn-requestid":"a2ec0417-9dcd-4986-8341-a3b3d26cd694"
         },
         "RetryAttempts":0
      },
      "personalizedRanking":[
         {
            "itemId":"2-Saint_Bernard-3-2",
            "score":0.8947961
         },
         {
            "itemId":"1-Siamese-1-1",
            "score":0.105204
         }
      ],
      "recommendationId":"RID-d97c7a87-bd4e-47b5-a89b-ac1d19386aec"
   }
}
```

*Amazon Kinesis 有效负载*

发送到 Amazon Kinesis 的有效负载采用以下格式：

```
{
    "Partitionkey": "randomstring",
    "Data": {
        "userId": "12345",
        "sessionId": "sessionId4545454",
        "eventType": "DetailView",
        "animalMetadata": {
            "animal_species_id": "1",
            "animal_primary_breed_id": "Russian_Blue",
            "animal_size_id": "1",
            "animal_age_id": "2"
        },
        "animal_id": "98765"
        
    }
}
```

**注意**  
对于未经身份验证的用户，将删除 `userId` 字段。

# 使用 SageMaker AI 和 Hydra 简化从本地开发到可扩展实验的机器学习工作流程
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker"></a>

*David Sauerwein、Marco Geiger 和 Julian Ferdinand Grueber，Amazon Web Services*

## Summary
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-summary"></a>

这种模式为在 Amazon A SageMaker I 上配置和运行从本地测试到生产的机器学习 (ML) 算法提供了一种统一的方法。尽管此模式以 ML 算法为核心，但该方法的适用范围可扩展至特征工程、推理以及整个 ML 管道。此模式通过示例用例演示了从本地脚本开发到 SageMaker AI 训练作业的过渡。

典型的 ML 工作流如下：在本地计算机上开发并测试解决方案，在云端运行大规模实验（例如使用不同参数的实验），然后在云端部署经批准的解决方案。然后，必须对已部署的解决方案进行监控和维护。如果该工作流缺乏统一方法，开发人员通常需要在每个阶段重构代码。如果解决方案依赖大量可能在工作流任一阶段发生变化的参数，那么保持流程的条理性和一致性就会变得愈发困难。

此模式可应对这些挑战。首先，它提供了一个统一的工作流程，无论是在本地计算机、容器中还是在人工智能上运行，都能保持一致，从而无需在环境之间进行 SageMaker 代码重构。其次，通过 Hydra 的配置系统简化参数管理，在该系统中，参数是在单独的配置文件中定义的，可轻松修改和组合，并自动记录每次运行的配置。有关此模式如何应对这些挑战的更多详细信息，请参阅[其他信息](#streamline-machine-learning-workflows-by-using-amazon-sagemaker-additional)。

## 先决条件和限制
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-prereqs"></a>

**先决条件**
+ 活跃的 AWS 账户
+ 用于部署和启动 A SageMaker I 训练作业的 AWS Identity and Access Management (IAM) [用户角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)
+ AWS Command Line Interface (AWS CLI) [已安装](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)并[配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 2.0 或更高版本
+ 已安装 [Poetry](https://python-poetry.org/) 版本 1.8 或更高版本（但低于 2.0 版本）
+ [Docker](https://www.docker.com/) 已安装
+ Python [版本 3.10.x](https://www.python.org/downloads/release/python-31011/)

**限制**
+ 该代码目前仅针对 A SageMaker I 训练作业。将其扩展到处理任务和整个 SageMaker AI 管道非常简单。
+ 对于完全生产化的 SageMaker AI 设置，需要准备其他细节。示例可以是用于计算和存储的自定义 AWS Key Management Service (AWS KMS) 密钥，也可以是网络配置。您也可通过在 `config` 文件夹的专用子文件夹中使用 Hydra，来配置这些额外选项。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然后选择相应服务的链接。

## 架构
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-architecture"></a>

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

![\[创建和运行 SageMaker AI 训练或 HPO 作业的工作流程。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/1db57484-f85c-49a6-b870-471dade02b26/images/d80e7474-a975-4d92-8f66-2d34e33053fd.png)


下图显示了如下工作流：

1. 数据科学家无需使用 Docker 或 SageMaker AI 即可在本地环境中对算法进行小规模迭代，调整参数并快速测试训练脚本。（有关更多详细信息，请参阅[操作说明](#streamline-machine-learning-workflows-by-using-amazon-sagemaker-epics)中的“在本地运行以快速测试”任务。）

1. 对算法感到满意后，数据科学家会构建 Docker 映像，并将其推送到名为 `hydra-sm-artifact` 的 Amazon Elastic Container Registry（Amazon ECR）存储库。（有关更多详细信息，请参阅 [Epics](#streamline-machine-learning-workflows-by-using-amazon-sagemaker-epics) 中的 “在 SageMaker AI 上运行工作流程”。）

1. 数据科学家使用 Python 脚本启动 SageMaker AI 训练作业或超参数优化 (HPO) 作业。对于常规训练作业，调整后的配置会写入名为 `hydra-sample-config` 的 Amazon Simple Storage Service（Amazon S3）存储桶。对于 HPO 作业，则会应用位于 `config` 文件夹中的默认配置集。

1.  SageMaker AI 训练作业提取 Docker 镜像，从 Amazon S3 存储桶读取输入数据`hydra-sample-data`，然后从 Amazon S3 存储桶获取配置`hydra-sample-config`或使用默认配置。训练完成后，该作业会将输出数据保存到 Amazon S3 存储桶 `hydra-sample-data`。

**自动化和扩展**
+ [对于自动训练、再训练或推理，您可以将 AWS CLI 代码与、或 Amazon 等[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)服务集成。[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)
+ 可通过更改实例大小的配置或为分布式训练添加配置来实现扩展。

## 工具
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-tools"></a>

**AWS 服务**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)帮助您设置 AWS 资源，快速一致地配置资源，并在和的整个 AWS 账户 生命周期中对其进行管理 AWS 区域。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一个开源工具，可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。对于这种模式， AWS CLI 对于初始资源配置和测试都很有用。
+ [Amazon Elastic Container Registry（Amazon ECR）](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)是一项安全、可扩展且可靠的托管容器映像注册表服务。
+ [Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/?id=docs_gateway) 是一项托管机器学习 (ML) 服务，可帮助您构建和训练机器学习模型，然后将其部署到生产就绪的托管环境中。 SageMaker AI Training 是 SageMaker AI 中一项完全托管的机器学习服务，支持大规模训练机器学习模型。该工具利用内置的可扩展性以及与其他 AWS 服务模型的集成，可以有效地处理训练模型的计算需求。 SageMaker AI Training 还支持自定义算法和容器，使其灵活适用于各种机器学习工作流程。
+ [Amazon Simple Storage Service（Amazon S3）](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)是一项基于云的对象存储服务，可帮助您存储、保护和检索任意数量的数据。

**其他工具**
+ [Docker](https://www.docker.com/) 是一组平台即服务（PaaS）产品，它们利用操作系统级的虚拟化技术在容器中提供软件。在此模式中，Docker 用于确保从开发到部署的各个阶段的环境保持一致，同时可靠地打包依赖项和代码。借助 Docker 的容器化技术，工作流可轻松实现扩展与版本控制。
+ [Hydra](https://hydra.cc/) 是一款配置管理工具，为处理多种配置和动态资源管理提供了灵活性。它在管理环境配置方面发挥了重要作用，支持在不同的环境间无缝部署。有关 Hydra 的更多详细信息，请参阅[其他信息](#streamline-machine-learning-workflows-by-using-amazon-sagemaker-additional)。
+ [Python](https://www.python.org/) 是一种通用的计算机编程语言。Python 用于编写机器学习代码和部署工作流。
+ [Poetry](https://python-poetry.org/) 是 Python 中用于管理和打包依赖项的工具。

**代码存储库**

此模式的代码可在-w GitHub [configuring-sagemaker-training-jobsith-h](https://github.com/aws-samples/configuring-sagemaker-training-jobs-with-hydra) ydra 存储库中找到。

## 最佳实践
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-best-practices"></a>
+ 选择一个 IAM 角色来部署和启动 SageMaker AI 训练作业，该角色遵循最低权限原则，并授予执行任务所需的最低权限。有关详情，请参阅 IAM 文档中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)和[安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
+ 在终端中使用临时凭证访问该 IAM 角色。

## 操作说明
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-epics"></a>

### 设置环境
<a name="set-up-the-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建和激活虚拟环境。 | 要创建和激活虚拟环境，请在存储库的根目录中运行以下命令：<pre>poetry install <br />poetry shell</pre> | 常规 AWS | 
| 部署基础设施。 | 要使用部署基础架构 CloudFormation，请运行以下命令：<pre>aws cloudformation deploy --template-file infra/hydra-sagemaker-setup.yaml --stack-name hydra-sagemaker-setup  --capabilities CAPABILITY_NAMED_IAM</pre> | 通用 AWS， DevOps 工程师 | 
| 下载示例数据。 | 要将输入数据从 [openml](https://www.openml.org/) 下载到本地计算机，请运行以下命令：<pre>python scripts/download_data.py</pre> | 常规 AWS | 
| 在本地运行以快速测试。 | 要在本地运行训练代码以进行测试，请运行以下命令：<pre>python mypackage/train.py data.train_data_path=data/train.csv evaluation.base_dir_path=data</pre>所有执行的日志会按执行时间存储在名为 `outputs` 的文件夹中。有关更多信息，请参阅[GitHub 存储库](https://github.com/aws-samples/configuring-sagemaker-training-jobs-with-hydra)中的 “输出” 部分。您还可以使用 `--multirun` 功能，通过不同参数并行执行多次训练。有关更多详细信息，请参阅 [Hydra 文档](https://hydra.cc/docs/tutorials/basic/running_your_app/multi-run/)。 | 数据科学家 | 

### 在 SageMaker AI 上运行工作流程
<a name="run-workflows-on-sm"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置环境变量。 | 要在 SageMaker AI 上运行作业，请设置以下环境变量，并提供您 AWS 区域 和您的 AWS 账户 ID：<pre>export ECR_REPO_NAME=hydra-sm-artifact<br />export image_tag=latest<br />export AWS_REGION="<your_aws_region>" # for instance, us-east-1<br />export ACCOUNT_ID="<your_account_id>"<br />export BUCKET_NAME_DATA=hydra-sample-data-$ACCOUNT_ID<br />export BUCKET_NAME_CONFIG=hydra-sample-config-$ACCOUNT_ID<br />export AWS_DEFAULT_REGION=$AWS_REGION<br />export ROLE_ARN=arn:aws:iam::${ACCOUNT_ID}:role/hydra-sample-sagemaker<br />export INPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/input/<br />export OUTPUT_DATA_S3_PATH=s3://$BUCKET_NAME_DATA/hydra-on-sm/output/</pre> | 常规 AWS | 
| 创建和推送 Docker 映像。 | 要创建 Docker 映像并将其推送至 Amazon ECR 存储库，请运行以下命令：<pre>chmod +x scripts/create_and_push_image.sh<br />scripts/create_and_push_image.sh $ECR_REPO_NAME $image_tag $AWS_REGION $ACCOUNT_ID</pre>此任务假设您的环境中已配置有效的凭证。Docker 映像被推送到上一个任务中环境变量中指定的 Amazon ECR 存储库，用于激活将在其中运行训练作业的 SageMaker AI 容器。 | ML 工程师，常规 AWS | 
| 将输入数据复制到 Amazon S3。 | A SageMaker I 训练作业需要获取输入数据。要将输入数据复制到 Amazon S3 存储桶以获取数据，请运行以下命令：<pre>aws s3 cp data/train.csv "${INPUT_DATA_S3_PATH}train.csv" </pre> | 数据工程师、常规 AWS | 
| 提交 SageMaker AI 训练作业。 | 为简化脚本的执行流程，请在 `default.yaml` 文件中指定默认配置参数。这种方法不仅能确保多次运行的一致性，还提供了根据需要轻松覆盖默认设置的灵活性。请参见以下示例：<pre>python scripts/start_sagemaker_training_job.py sagemaker.role_arn=$ROLE_ARN sagemaker.config_s3_bucket=$BUCKET_NAME_CONFIG sagemaker.input_data_s3_path=$INPUT_DATA_S3_PATH sagemaker.output_data_s3_path=$OUTPUT_DATA_S3_PATH</pre> | 常规 AWS、ML 工程师、数据科学家 | 
| 运行 SageMaker AI 超参数调整。 | 运行 SageMaker AI 超参数调整与提交 SageMaker AII 训练作业类似。但如 [start\$1sagemaker\$1hpo\$1job.py](https://github.com/aws-samples/configuring-sagemaker-training-jobs-with-hydra/blob/main/scripts/start_sagemaker_hpo_job.py) 文件所示，其执行脚本在一些关键方面存在差异。待调优的超参数必须通过 boto3 有效载荷传递，而非通过训练作业的通道传递。要启动超参数优化（HPO）作业，请运行以下命令：<pre>python scripts/start_sagemaker_hpo_job.py sagemaker.role_arn=$ROLE_ARN sagemaker.config_s3_bucket=$BUCKET_NAME_CONFIG sagemaker.input_data_s3_path=$INPUT_DATA_S3_PATH sagemaker.output_data_s3_path=$OUTPUT_DATA_S3_PATH</pre> | 数据科学家 | 

## 问题排查
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 令牌已过期 | 导出新的 AWS 凭证。 | 
| 缺少 IAM 权限 | 请务必导出具有部署 CloudFormation 模板和启动 A SageMaker I 训练任务所需的所有 IAM 权限的 IAM 角色的证书。 | 

## 相关资源
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-resources"></a>
+ [使用 Amazon A SageMaker I 训练模型](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html)（AWS 文档）
+ [什么是超参数调优？](https://aws.amazon.com/what-is/hyperparameter-tuning/#:~:text=Hyperparameter%20tuning%20allows%20data%20scientists,the%20model%20as%20a%20hyperparameter.)

## 附加信息
<a name="streamline-machine-learning-workflows-by-using-amazon-sagemaker-additional"></a>

此模式可应对以下挑战：

**从本地开发到大规模部署的一致性** — 通过这种模式，开发人员可以使用相同的工作流程，无论他们是在使用本地 Python 脚本、运行本地 Docker 容器、在 SageMaker AI 上进行大型实验，还是在生产中在 AI 上 SageMaker 部署。这种一致性之所以重要，原因如下：
+ **更快的迭代速度** – 支持快速开展本地实验，纵向扩展时无需进行重大调整。
+ **无需重构** — 可以无缝过渡到更大规模的 SageMaker AI 实验，无需对现有设置进行全面改革。
+ **持续改进** – 开发新功能和不断改进算法非常简单，因为在不同的环境中代码保持不变。

**配置管理** - 此模式利用配置管理工具 [Hydra](https://hydra.cc/)，提供以下好处：
+ 参数是在配置文件中定义的，与代码无关。
+ 可轻松切换或组合不同的参数集。
+ 每次运行的配置都会自动记录，简化了实验跟踪流程。
+ 云端实验可使用与本地运行相同的配置结构，确保一致性。

通过 Hydra，您能高效管理配置，并实现以下功能：
+ **划分配置** – 将项目配置拆分为更小、更易于管理的模块，每个模块可独立修改。采用这种方法，可以更轻松地处理复杂的项目。
+ **轻松调整默认值** – 快速更改基准配置，让测试新想法变得更加简单。
+ **统一 CLI 输入和配置文件** – 顺畅组合命令行输入和配置文件。这种方法可以减少混乱和混淆，使您的项目随着时间的推移更易于管理。

 

# 将自然语言翻译成查询 DSL OpenSearch 和 Elasticsearch 查询
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch"></a>

*Amazon Web Services 的 Tabby Ward、Nicholas Switzer 和 Breanne Warner*

## Summary
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-summary"></a>

此模式演示了如何使用大型语言模型 (LLMs) 将自然语言查询转换为查询域特定的语言（查询 DSL），这使用户无需对查询语言有大量了解即可更轻松地与搜索服务（例如 OpenSearch 和 Elasticsearch）进行交互。对于希望通过自然语言查询功能来增强基于搜索的应用程序，最终改善用户体验和搜索功能的开发人员和数据科学家来说，这一资源特别有用。

此模式说明了用于提示工程、迭代改进和专业知识整合的各项技术，当生成合成数据时，所有这些技术都能发挥至关重要的作用。尽管这种方法主要侧重于查询转换，但它隐式展示了在数据增强和可扩展合成数据生成方面的潜力。这一基础可以扩展到更全面的合成数据生成任务，以突出将非结构化自然语言输入与结构化、特定于应用程序的输出联系起来的力量。 LLMs 

该解决方案无需使用传统意义上的迁移或部署工具。相反，它侧重于演示通过使用将自然语言查询转换为查询 DSL 的概念验证 (PoC)。 LLMs
+ 该模式使用 Jupyter 笔记本作为设置环境和实现转换的 step-by-step指南。 text-to-query
+ 它使用 Amazon Bedrock 进行访问 LLMs，这对于解释自然语言和生成适当的查询至关重要。
+ 该解决方案专为与 Amazon OpenSearch 服务配合使用而设计。您可以遵循类似的流程来执行 Elasticsearch，还可以针对类似的搜索引擎来调整所生成的查询。

[查询 DSL](https://opensearch.org/docs/latest/query-dsl/) 是一种灵活的、基于 JSON 的搜索语言，用于在 Elasticsearch 和. OpenSearch 它能够让您在搜索操作的查询参数中指定查询，并且支持多种查询类型。DSL 查询包括叶查询和复合查询。叶查询会在某些字段中搜索特定的值，并且包括全文查询、术语级查询、地理查询、联接查询、跨度查询和专业查询。复合查询充当多个叶子句或复合子句的包装器，并合并它们的结果或者修改它们的行为。查询 DSL 支持创建复杂的搜索，从简单的完全匹配查询到可生成详细结果的复杂多子句查询，无所不包。对于需要高级搜索功能、灵活的查询构造和基于 JSON 的查询结构的那些项目来说，查询 DSL 特别有用。

此模式使用诸如少镜头提示、系统提示、结构化输出、提示链接、上下文配置和特定于任务的 DSL 转换提示等技术。 text-to-query有关这些技术的定义和示例，请参阅[其他信息](#translate-natural-language-query-dsl-opensearch-elasticsearch-additional)部分。

## 先决条件和限制
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-prereqs"></a>

**先决条件**

为了有效地使用 Jupyter Notebook 将自然语言查询转换成查询 DSL 查询，您需要：
+ **熟悉 Jupyter Notebook**。基本了解如何在 Jupyter Notebook 环境中浏览和运行代码。
+ **Python 环境**。一个有效的 Python 环境，最好是 Python 3.x，并且安装了必要的库。
+ **弹性搜索或知识。 OpenSearch **Elasticsearch 或的基础知识 OpenSearch，包括其架构和如何执行查询。
+ **AWS 账户**。 已激活 AWS 账户 访问 Amazon Bedrock 和其他相关服务。
+ **库和依赖项**。安装笔记本中提到的特定库，例如`boto3`用于 AWS 交互的库，以及 LLM 集成所需的任何其他依赖项。
+ **Amazon Bedrock 内的模型访问权限**。这个模式使用了 Anthropic 中的三个 Clau LLMs de。打开 [Amazon Bedrock 控制台](https://console.aws.amazon.com/bedrock/)，然后选择**模型访问权限**。在下一个屏幕上，选择**启用特定的模型**，然后选择下面这三个模型：
  + Claude 3 Sonnet
  + Claude 3.5 Sonnet
  + Claude 3 Haiku
+ **正确的 IAM 策略和 IAM 角色**。要在中运行笔记本 AWS 账户，您的 AWS Identity and Access Management (IAM) 角色需要`SagemakerFullAccess`策略以及 “[其他信息](#translate-natural-language-query-dsl-opensearch-elasticsearch-additional)” 部分中提供的策略，您可以命名`APGtext2querydslpolicy`。此策略包括订阅所列出的三个 Claude 模型。

具备这些先决条件可确保您在使用笔记本电脑和实现 text-to-query功能时获得流畅的体验。

**限制**
+ **概念验证状态**。此项目主要用作概念验证（PoC）。它展示了使用将自然语言查询 LLMs 转换为查询 DSL 的潜力，但它可能尚未完全优化或尚未准备好投入生产。
+ **模型限制**：

  **上下文窗口约束***。*使用 Amazon Bedrock 上提供的内容时，请注意上下文窗口的限制： LLMs 

  Claude 模型（截至 2024 年 9 月）：
  + Claude 3 Opus：20 万个词元
  + Claude 3 Sonnet：20 万个词元
  + Claude 3 Haiku：20 万个词元

  Amazon Bedrock 上的其他模型可能具有不同的上下文窗口大小。有关最新信息，请查阅最新的文档。

  **模型可用性***。*Amazon Bedrock 上的特定模型的可用性可能不尽相同。在实施该解决方案之前，请确保您可以访问所需的模型。
+ **其他限制**
  + **查询的复杂性** 自然语言对查询 DSL 转换的有效性可能不尽相同，具体情况取决于输入查询的复杂性。
  + **版本兼容性**。生成的查询 DSL 可能需要根据特定的 Elasticsearch 版本或您 OpenSearch 使用的版本进行调整。
  + **性能**。此模式实施了 PoC，因此对于大规模生产用途，可能无法实现最佳的查询生成速度和准确性。
  + **成本**。 LLMs 在 Amazon Bedrock 中使用会产生成本。请注意所选模型的定价结构。有关详情，请参阅 [Amazon Bedrock 定价](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-pricing.html)。
  + **维护**。为了跟上 LLM 技术的进展和查询 DSL 语法的变化，可能需要定期更新提示和模型选择。

**产品版本**

此解决方案已在 Amazon OpenSearch 服务中进行了测试。如果您希望使用 Elasticsearch，可能必须进行一些更改，才能复制此模式的确切功能。
+ **OpenSearch 版本兼容性**。 **OpenSearch **在主要版本中保持向后兼容性。例如：
  + OpenSearch 1.x 客户端通常与 OpenSearch 1.x 集群兼容。
  + OpenSearch 2.x 客户端通常与 OpenSearch 2.x 集群兼容。

  然而，客户端和集群最好尽量使用相同的次要版本。
+ **OpenSearch API 兼容性**。 **OpenSearch **在大多数操作中都保持 API 与 Elasticsearch OSS 7.10.2 的兼容性。但是存在一些差异，尤其是在更高的版本中。
+ **OpenSearch 升级注意事项**：
  + 不支持直接降级。如果需要，请使用快照进行回滚。
  + 升级时，请查看[兼容性矩阵和发行说明](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/supported-operations.html)，了解是否推出了任何重大更改。

**Elasticsearch 注意事项**
+ **Elasticsearch 版本**。您正在使用的 Elasticsearch 的主要版本至关重要，因为不同的主要版本之间的查询语法和功能可能会发生变化。目前，最新的稳定版本是 Elasticsearch 8.x。请确保您的查询与特定的 Elasticsearch 版本兼容。
+ **Elasticsearch 查询 DSL 库版本**。如果您正在使用 Elasticsearch 查询 DSL Python 库，请确保它的版本与您的 Elasticsearch 版本匹配。例如：
  + 对于 Elasticsearch 8.x，请使用一个高于或等于 8.0.0 但低于 9.0.0 的 `elasticsearch-dsl` 版本。
  + 对于 Elasticsearch 7.x，请使用衣蛾高于或等于 7.0.0 但低于 8.0.0 的 `elasticsearch-dsl` 版本。
+ **客户端库版本**。无论您正在使用官方的 Elasticsearch 客户端还是特定语言的客户端，都要确保它与您的 Elasticsearch 版本兼容。
+ **查询 DSL 版本**。查询 DSL 随着 Elasticsearch 版本的发展而演变。在不同的版本中，可能会弃用或引入某些查询类型或参数。
+ **映射版本**。为索引定义映射的方式会在不同的版本之间发生变化。请务必查看您的特定 Elasticsearch 版本的映射文档。
+ **分析工具版本**。如果您正在使用分析器、标记器或者其他的文本分析工具，它们的行为或可用性可能会在不同的版本之间发生变化。

## 架构
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-architecture"></a>

**目标架构**

下图说明了此模式的架构。

![\[用于在 Amazon Bedrock 中将自然语言翻译成查询 DSL 的架构。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/75296405-2893-4328-9551-9bcc6ec7fd3e/images/ffb1b893-d23c-4e1c-b679-8063b4f85a8a.png)


其中：

1. 用户输入和系统提示以及一些少样本提示示例。在此过程中，用户首先提供一个自然语言查询或者请求生成架构。

1. Amazon Bedrock。系统将输入内容发送到 Amazon Bedrock，后者将充当用于访问 Claude LLM 的接口。

1. Claude 3 Sonnet LLM。Amazon Bedrock 使用 Claude 3 系列中的 Claude 3 Sonnet LLMs 来处理输入。它解释并生成相应的 Elasticsearch 或 OpenSearch 查询 DSL。对于架构请求，它会生成合成的 Elasticsearch 或 OpenSearch 映射。

1. 生成查询 DSL。对于自然语言查询，应用程序会获取 LLM 的输出并将其格式化为有效的 Elasticsearch 或 OpenSearch 服务查询 DSL。

1. 生成合成数据。该应用程序还使用架构来创建合成的 Elasticsearch，或者将 OpenSearch 数据加载到 OpenSearch 无服务器集合中进行测试。

1. OpenSearch 或 Elasticsearch 生成的 Query DSL 将针对所有索引上的 OpenSearch 无服务器集合进行查询。JSON 输出包含位于 OpenSearch 无服务器集合中的数据的相关数据和*命*中次数。

**自动化和扩展**

此模式附带的代码完全是为了 PoC 目的而构建的。为了进一步自动化和扩展该解决方案以及将代码转移到生产环境中，如下列表提供了一些建议。此模式不包含这些增强。
+ 容器化：
  + 将应用程序 Docker 化，以便在不同的环境之间确保一致性。
  + 使用 Amazon Elastic Container Service（Amazon ECS）或 Kubernetes 等容器编排平台，进行可扩展的部署。
+ 无服务器架构：
  + 将核心功能转换为 AWS Lambda 函数。
  + 使用 Amazon API Gateway 为自然语言查询输入创建 RESTful 终端节点。
+ 异步处理：
  + 实施 Amazon Simple Queue Service（Amazon SQS），以便对传入的查询进行排队。
  +  AWS Step Functions 用于协调处理查询和生成查询 DSL 的工作流程。
+ 缓存：
  + 实施一个用于缓存提示的机制。
+ 监控和日志记录：
  + 使用 Amazon CloudWatch 进行监控和提醒。
  + 使用 Amazon L CloudWatch ogs 或 Amazon OpenSearch 服务实现集中日志记录以进行日志分析。
+ 安全增强功能：
  + 实施 IAM 角色，以便实现精细的访问控制。
  + 用于安全 AWS Secrets Manager 地存储和管理 API 密钥和证书。
+ 多区域部署：
  + 考虑跨多个部署解决方案， AWS 区域 以改善延迟和灾难恢复。
  + 使用 Amazon Route 53 进行智能请求路由。

通过实施这些建议，您可以将此 PoC 转换成一款强大、可扩展、生产就绪型的解决方案。在完全部署之前，建议您全面测试每个组件和整个系统。

## 工具
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-tools"></a>

**工具**
+ [Amazon SageMaker AI 笔记本](https://aws.amazon.com/sagemaker/notebooks/)是用于机器学习开发的完全托管的 Jupyter 笔记本电脑。这种模式使用笔记本作为交互式环境，在 Amazon A SageMaker I 中进行数据探索、模型开发和实验。笔记本电脑可与其他 SageMaker AI 功能无缝集成，并且 AWS 服务.
+ [Python](https://www.python.org/) 是一种通用的计算机编程语言。此模式将 Python 用作一种核心语言来实现该解决方案。
+ [Amazon Bedrock](https://aws.amazon.com/bedrock/) 是一项完全托管的服务，它通过统一的 API 提供来自领先的人工智能初创公司和亚马逊的高性能基础模型 (FMs) 供您使用。Amazon Bedrock 提供 LLMs 对自然语言处理的访问权限。此模式使用 Anthropic Claude 3 模型。
+ [适用于 Python (Boto3) 的 AWS SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)是一款软件开发套件，可帮助您将 Python 应用程序、库或脚本与 AWS 服务（包括 Amazon Bedrock）集成。
+ [Amazon S OpenSearch er](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html) vice 是一项托管服务，可帮助您在 AWS 云中部署、运营和扩展 OpenSearch 服务集群。此模式使用 OpenSearch 服务作为生成查询 DSL 的目标系统。

**代码存储库**

此模式的代码可在[ Text-to-QueryDSL使用 Claude 3 模型的 GitHub 提示工程](https://github.com/aws-samples/text-to-queryDSL/blob/main/text2ES_prompting_guide.ipynb)存储库中找到。此示例使用一款健康社交媒体应用程序，用于为与这款健康应用程序相关联的用户和用户配置文件创建帖子。

## 最佳实践
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-best-practices"></a>

使用该解决方案时，请考虑以下事项：
+ 需要适当的 AWS 凭证和权限才能访问 Amazon Bedrock
+ 与使用 AWS 服务 和相关的潜在成本 LLMs
+ 要对所生成的查询进行验证和潜在的修改，了解查询 DSL 非常重要

## 操作说明
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-epics"></a>

### 设置环境和准备数据
<a name="set-up-the-environment-and-prepare-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 开发环境。 | 有关此模式中此步骤以及其他步骤的详细说明和代码，请参阅[GitHub 存储库](https://github.com/aws-samples/text-to-queryDSL/blob/main/text2ES_prompting_guide.ipynb)中的综合演练。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/translate-natural-language-query-dsl-opensearch-elasticsearch.html) | Python、pip、AWS 软件开发工具包 | 
| 设置 AWS 访问权限。 | 设置 Amazon Bedrock 客户端和 SageMaker AI 会话。检索 A SageMaker I 执行角色的 Amazon 资源名称 (ARN)，以便日后在创建 OpenSearch 无服务器集合时使用。 | IAM、AWS CLI、亚马逊 Bedrock、亚马逊 SageMaker | 
| 加载健康应用程序架构。 | 从预定义的文件中，读取并解析用于健康帖子和用户配置文件的 JSON 架构。将架构转换成字符串，以便稍后在提示中使用。 | DevOps 工程师、通用 AWS、Python、JSON | 

### 生成合成数据
<a name="generate-synthetic-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建一个基于 LLM 的数据生成器。 | 执行 **generate\$1data()** 函数，以便使用 Claude 3 模型来调用 Amazon Bedrock Converse API。为 Sonnet、 IDs Sonnet 3.5 和 Haiku 设置模型：<pre>model_id_sonnet3_5 = "anthropic.claude-3-5-sonnet-20240620-v1:0" <br />model_id_sonnet = "anthropic.claude-3-sonnet-20240229-v1:0" <br />model_id_haiku = "anthropic.claude-3-haiku-20240307-v1:0"</pre> | Python、Amazon Bedrock API、LLM 提示 | 
| 创建合成健康帖子。 | 将 **generate\$1data()** 函数与一个特定的消息提示结合使用，以便根据所提供的架构来创建合成健康帖子条目。此函数调用过程类似于如下所示：<pre>health_post_data = generate_data(bedrock_rt, model_id_sonnet, system_prompt, message_healthpost, inference_config)</pre> | Python、JSON | 
| 创建合成用户配置文件。 | 将 **generate\$1data()** 函数与一个特定的消息提示结合使用，以便根据所提供的架构来创建合成用户配置文件条目。这与生成健康帖子类似，但使用了一个不同的提示。 | Python、JSON | 

### 设置 OpenSearch 和摄取数据
<a name="set-up-opensearch-and-ingest-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置 OpenSearch 无服务器集合。 | 使用 Boto3 创建具有适当加密、网络和访问策略的 OpenSearch 无服务器集合。此集合创建过程类似于如下所示：<pre>collection = aoss_client.create_collection(name=es_name, type='SEARCH')</pre> 有关 OpenSearch 无服务器的更多信息，请参阅[AWS 文档](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless.html)。 | OpenSearch 无服务器、IAM | 
| 定义 OpenSearch 索引。 | 根据预定义的架构映射，使用 OpenSearch 客户端为健康帖子和用户个人资料创建索引。此索引创建过程类似于如下所示：<pre>response_health = oss_client.indices.create(healthpost_index, body=healthpost_body)</pre> | OpenSearch，JSON | 
| 将数据加载到 OpenSearch。 | 运行 **ingest\$1data ()** 函数，将合成健康帖子和用户配置文件批量插入各自的索引中。 OpenSearch 此函数使用来自 `opensearch-py` 的批量助手：<pre>success, failed = bulk(oss_client, actions)</pre> | Python、 OpenSearch API、批量数据操作 | 

### 生成并运行查询
<a name="generate-and-run-queries"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设计一些少样本提示示例。 | 将 Claude 3 模型用作用于生成查询的少样本示例，以便生成示例查询和相应的自然语言问题。系统提示包括以下示例：<pre>system_prompt_query_generation = [{"text": f"""You are an expert query dsl generator. ... Examples: {example_prompt} ..."""}]</pre> | LLM 提示、查询 DSL | 
| 创建一个 text-to-query DSL 转换器。 | 实施此系统提示，其中包含架构、数据以及一些用于生成查询的少样本示例。使用此系统提示，将自然语言查询转换成查询 DSL。此函数调用过程类似于如下所示：<pre>query_response = generate_data(bedrock_rt, model_id, system_prompt_query_generation, query, inference_config)</pre> | Python、Amazon Bedrock API、LLM 提示 | 
| 开启测试查询 DSL。 OpenSearch | 运行 **query\$1oss ()** 函数，对 OpenSearch 无服务器集合运行生成的查询 DSL 并返回结果。该函数使用 OpenSearch 客户端的搜索方法：<pre>response = oss_client.search(index="_all", body=temp)</pre> | Python、 OpenSearch API、查询 DSL | 

### 测试和评估
<a name="test-and-evaluate"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建一个测试查询集。 | 根据合成数据和架构，使用 Claude 3 来生成另一组测试问题：<pre>test_queries = generate_data(bedrock_rt, model_id_sonnet, query_system_prompt, query_prompt, inference_config)</pre> | LLM 提示 | 
| 评估此次查询 DSL 转换的准确性。 | 通过运行查询来测试生成的查询 DSL， OpenSearch 并分析返回的结果的相关性和准确性。这包括运行查询并检查命中次数：<pre>output = query_oss(response1) print("Response after running query against Opensearch") print(output)</pre> | Python、数据分析、查询 DSL | 
| 对 Claude 3 模型执行基准测试。 | 比较用于生成查询的不同 Claude 3 模型（Haiku、Sonnet、Sonnet 3.5）的准确性和延迟性能。要进行比较，请更改您调用 **generate\$1data（）**时的 `model_id`，然后测量执行时间。 | Python、性能基准测试 | 

### 清理和记录
<a name="clean-up-and-document"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 开发一个清理流程。 | 使用后，请从 OpenSearch 无服务器集合中删除所有索引。 | Python、AWS 开发工具包、 OpenSearch API | 

## 相关资源
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-resources"></a>
+ [查询 DSL](https://opensearch.org/docs/latest/query-dsl/)（OpenSearch 文档）
+ [亚马逊 OpenSearch 服务文档](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html)
+ [OpenSearch 无服务器集合](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html)
+ [Amazon Bedrock 文档](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html)
+ [亚马逊 SageMaker AI 文档](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)
+ [适用于 Python (Boto3) 的 AWS SDK 文档](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)

## 附加信息
<a name="translate-natural-language-query-dsl-opensearch-elasticsearch-additional"></a>

**IAM 策略**

下面是此模式中使用的 IAM 角色的 `APGtext2querydslpolicy` 策略：

```
{
  "Version": "2012-10-17",		 	 	  
  "Statement": [
    { "Effect": "Allow", 
      "Action": [ 
        "bedrock:InvokeModel", 
        "bedrock:InvokeModelWithResponseStream"
      ], 
      "Resource": "*" 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "s3:GetObject", 
        "s3:PutObject", 
        "s3:ListBucket"
      ], 
      "Resource": [
        "arn:aws:s3:::sagemaker-*", 
        "arn:aws:s3:::sagemaker-*/*" 
      ] 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "logs:CreateLogGroup", 
        "logs:CreateLogStream", 
        "logs:PutLogEvents" 
      ], 
      "Resource": "arn:aws:logs:*:*:log-group:/aws/sagemaker/*" 
    }, 
    { "Effect": "Allow", 
      "Action": [
        "ec2:CreateNetworkInterface", 
        "ec2:DescribeNetworkInterfaces", 
        "ec2:DeleteNetworkInterface" 
      ], 
      "Resource": "*" 
    }, 
    { "Effect": "Allow", 
      "Action": [
        "aoss:*" 
      ], 
      "Resource": "*" 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "iam:PassRole", 
        "sagemaker:*" 
      ], 
      "Resource": [ 
        "arn:aws:iam::*:role/*", "*" 
      ], 
      "Condition": { 
        "StringEquals": { 
          "iam:PassedToService": "sagemaker.amazonaws.com" 
          } 
      } 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "codecommit:GetBranch", 
        "codecommit:GetCommit", 
        "codecommit:GetRepository", 
        "codecommit:ListBranches", 
        "codecommit:ListRepositories" 
      ], 
      "Resource": "*" 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "aws-marketplace:Subscribe" 
      ], 
      "Resource": "*", 
      "Condition": {
        "ForAnyValue:StringEquals": { 
          "aws-marketplace:ProductId": [ 
            "prod-6dw3qvchef7zy", 
            "prod-m5ilt4siql27k", 
            "prod-ozonys2hmmpeu" 
          ]
        } 
      } 
    }, 
    { "Effect": "Allow", 
      "Action": [ 
        "aws-marketplace:Unsubscribe", 
        "aws-marketplace:ViewSubscriptions" 
      ], 
      "Resource": "*" 
    }, 
    { "Effect": "Allow", 
      "Action": "iam:*", 
      "Resource": "*" 
    } 
  ] 
}
```

**Anthropic Claude 3 模型的提示技术**

此模式演示了使用 Claude 3 模型进行 text-to-query DSL 转换的以下提示技巧。
+ **少样本提示：**少样本提示是一种强大的技术，可以提高 Amazon Bedrock 上的 Claude 3 模型的性能。这种方法包括在要求模型执行类似任务之前，为模型提供少量示例，以演示所需的 input/output 行为。当您在 Amazon Bedrock 上使用 Claude 3 模型时，对于需要特定格式、推理模式或领域知识的任务，少样本提示可能特别有效。要实现这种技术，通常需要使用两个主要组件来构造提示：示例部分和实际查询。示例部分包含一对或多 input/output 对来说明任务，而查询部分则显示您想要响应的新输入。这种方法可以帮助 Claude 3 了解上下文和预期的输出格式，而且通常会得到更准确、更一致的响应。

  示例：

  ```
  "query": {
    "bool": {
      "must": [
        {"match": {"post_type": "recipe"}},
        {"range": {"likes_count": {"gte": 100}}},
        {"exists": {"field": "media_urls"}}
      ]
    }
  }
  Question: Find all recipe posts that have at least 100 likes and include media URLs.
  ```
+ **系统提示：**除了少样本提示以外，Amazon Bedrock 上的 Claude 3 模型还支持使用系统提示。系统提示可以在向模型呈现特定的用户输入之前，向模型提供整体上下文、说明或准则。在设置语气、定义模特的角色或者为整个对话建立约束等方面，它们特别有用。要在 Amazon Bedrock 上将系统提示与 Claude 3 结合使用，请将其包含在 API 请求的 `system` 参数中。系统提示与用户消息相互独立，并应用于整个互动。详细的系统提示用于设置上下文，并为模型提供准则。

  示例：

  ```
  You are an expert query dsl generator. Your task is to take an input question and generate a query dsl to answer the question. Use the schemas and data below to generate the query.
  
  Schemas: [schema details]
  Data: [sample data]
  Guidelines: 
  - Ensure the generated query adheres to DSL query syntax
  - Do not create new mappings or other items that aren't included in the provided schemas.
  ```
+ **结构化输出**：您可以指示模型以特定的格式（例如 JSON 或在 XML 标签内）提供输出。

  示例：

  ```
  Put the query in json tags
  ```
+ **提示串接**：笔记本将一个 LLM 调用操作的输出用作另一个 LLM 调用操作的输入，例如使用所生成的合成数据来创建示例问题。
+ **上下文提供**：提示中提供了相关的上下文，包括架构和样本数据。

  示例：

  ```
  Schemas: [schema details]
  Data: [sample data]
  ```
+ **特定任务的提示**：为特定的任务生成不同的提示，例如生成合成数据、创建示例问题，以及将自然语言查询转换成查询 DSL。

  用于生成测试问题的示例：

  ```
  Your task is to generate 5 example questions users can ask the health app based on provided schemas and data. Only include the questions generated in the response.
  ```

# 将 Amazon Q 开发者版用作编码助手来提高工作效率
<a name="use-q-developer-as-coding-assistant-to-increase-productivity"></a>

*Ram Kandaswamy，Amazon Web Services*

## Summary
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-summary"></a>

此模式使用 tic-tac-toe游戏来演示如何将 Amazon Q Developer 应用于一系列开发任务。它以单页应用程序 (SPA) 的形式为 tic-tac-toe游戏生成代码，增强其用户界面，并创建用于部署应用程序的脚本。 AWS

Amazon Q 开发者版充当一个编码助手，可帮助加速软件开发工作流，并提高开发人员和非开发人员的工作效率。无论您掌握了多少技术专业知识，它都可以帮助您创建架构、设计业务问题解决方案、引导您的工作环境、帮助您实现新功能，以及生成用于验证的测试案例。它使用自然语言指令和人工智能功能来确保代码的一致性和高质量，并缓解编码挑战，无论您的编程技能如何。

Amazon Q 开发者版的主要优势在于，它能够将您从重复的编码任务中解放出来。当您使用 `@workspace` 注释时，Amazon Q 开发者版会摄取集成式开发环境（IDE）中的所有代码文件、配置和项目结构并为它们编制索引，并提供量身定制的响应，以便帮助您专注于创造性地解决问题。您可以将更多的时间投入到设计创新的解决方案和增强用户体验上。如果并非技术人员，您可以使用 Amazon Q 开发者版来简化工作流，并且更有效地与开发团队进行协作。Amazon Q 开发者版的**解释代码**功能提供了详细的说明和摘要，让您能够浏览复杂的代码库。

此外，Amazon Q 开发者版还提供了一种与语言无关的方法，可帮助初级和中级开发人员扩展他们的技能。这样，您就可以专注于核心概念和业务逻辑，而不是特定于语言的语法。当您切换技术时，这样可以缩短您的学习曲线。

## 先决条件和限制
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-prereqs"></a>

**先决条件**
+ 安装了 Amazon Q Developer 插件的 IDE（例如， WebStorm 或 Visual Studio Code）。有关说明，请参阅 Amazon Q 开发者版文档中的[在 IDE 中安装 Amazon Q 开发者版扩展程序或插件](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-in-IDE-setup.html)。
+ Amazon Q Developer 的有效 AWS 账户 设置。有关说明，请参阅 Amazon Q 开发者版文档中的[入门](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/getting-started-q-dev.html)。
+ 已安装 **npm**。有关说明，请参阅 [npm 文档](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)。此模式已在 npm 版本 10.8 中接受了测试。
+ AWS Command Line Interface (AWS CLI) 已安装。有关说明，请参阅 [AWS CLI 文档](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

**限制**
+ Amazon Q 开发者版一次只能执行一项开发任务。
+ 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性，请参阅[按区域划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)页面，然后选择相应服务的链接。

## 工具
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-tools"></a>
+ 这种模式需要一个 IDE，比如 Visual Studio Code 或 WebStorm。有关支持的列表 IDEs，请参阅 [Amazon Q 开发者文档](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-in-IDE.html#supported-ides-features)。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 是一个开源工具，可帮助您 AWS 服务 通过命令行 shell 中的命令进行交互。

## 最佳实践
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-best-practices"></a>

请参阅《 AWS 规范性指南》中的 [Amazon Q 开发人员的最佳编码实践](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-code-generation/best-practices-coding.html)。此外：
+ 当您向 Amazon Q 开发者版提供提示时，请确保您的说明清晰、明确。在提示中添加代码片段和注释，例如 `@workspace`，以便为提示提供更多上下文。
+ 包括并导入相关的库，以便避免系统遇到冲突或错误猜测。
+ 如果生成的代码不准确或者不符合预期，请使用**提供反馈并重新生成**选项。尝试将提示分解成更小的说明。

## 操作说明
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-epics"></a>

### 设置工作环境
<a name="set-up-the-working-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建一个新项目。 | 要在工作环境中创建一个新项目，请运行如下命令，并为所有的问题接受默认设置：<pre>npx create-next-app@latest</pre> | 应用程序开发人员、编程人员、软件开发人员 | 
| 测试基本应用程序。 | 运行如下命令，并确认已成功将基本应用程序加载到浏览器中：<pre>npm run dev </pre> | 应用程序开发人员、编程人员、软件开发人员 | 
| 清理基本代码。 | 导航到 `src/app` 文件夹中的 `page.tsx` 文件，并删除默认内容，以便获得一个空白页面。删除之后，此文件应如下所示：<pre>export default function Home() {<br />  return (<div></div><br />      );<br />}</pre> | 应用程序开发人员、编程人员、软件开发人员 | 

### 使用 Amazon Q 开发者设计 tic-tac-toe游戏项目
<a name="use-qdevlong-to-design-a-tic-tac-toe-game-project"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 获取有关具体步骤的概述。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/use-q-developer-as-coding-assistant-to-increase-productivity.html) | 应用程序开发人员、编程人员、软件开发人员 | 
| 为生成代码 tic-tac-toe。 | 在聊天面板中，使用 `/dev` 命令和任务说明，启动一项开发任务。例如：<pre>/dev Create a React-based single-page application  written in TypeScript for a tic-tac-toe game with the following specifications:<br />1. Design an aesthetically pleasing interface with the game grid centered vertically and <br />horizontally on the page. <br />2. Include a heading and clear instructions on how to play the game.<br />3. Implement color-coding for X and O marks to distinguish them easily. </pre>Amazon Q 开发者版会根据您的说明来生成代码。 | 应用程序开发人员、编程人员、软件开发人员 | 
| 检查并接受所生成的代码。 | 目视检查代码，然后选择**接受代码**以便自动替换 `page.tsx` 文件。如果您遇到问题，请选择**提供反馈并重新生成**，然后说明您遇到的问题。 | 应用程序开发人员、编程人员、软件开发人员 | 
| 修复 lint 错误。 | 示例 tic-tac-toe游戏包括一个网格。Amazon Q 开发者版生成的代码可能使用了默认类型 `any`。您可以按如下方式提示 Amazon Q 开发者版，以便添加类型安全：<pre>/dev Ensure proper TypeScript typing for the onSquare Click event handler <br />to resolve any 'any' type issues.</pre> | 应用程序开发人员、编程人员、软件开发人员 | 
| 提高视觉吸引力。 | 您可以将原始要求分解成更小的片段。例如，在开发任务中，您可以使用以下提示来改善游戏界面。这些提示可增强层叠样式表（CSS）样式，并导出应用程序以便进行部署。<pre>/dev Debug and fix any CSS issues to correctly display the game grid and overall layout. <br /><br />Simplify the code by removing game history functionality and related components. <br /><br />Implement static file export to an 'out' directory for easy deployment. The solution <br />should be fully functional, visually appealing, and free of typing errors or layout issues. </pre> | 应用程序开发人员、编程人员、软件开发人员 | 
| 再次进行测试。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/use-q-developer-as-coding-assistant-to-increase-productivity.html) | 应用程序开发人员、编程人员、软件开发人员 | 

### 将应用程序部署到 AWS 云
<a name="deploy-the-application-to-the-aws-cloud"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建用于部署的文件夹和文件。 | 在工作环境中的项目中，创建一个部署文件夹，并在其中创建两个文件：`pushtos3.sh` 和 `cloudformation.yml`：<pre>mkdir deployment && cd deployment<br />touch pushtos3.sh && chmod +x pushtos3.sh<br />touch cloudformation.yml</pre> | 应用程序开发人员、编程人员、软件开发人员 | 
| 生成自动化代码。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/use-q-developer-as-coding-assistant-to-increase-productivity.html) | AWS 管理员、AWS DevOps、应用程序开发者 | 
| 生成脚本内容。 | 要创建部署脚本，请使用如下提示：<pre>/dev Modify the pushtos3 shell script so that it can use AWS CLI commands to create a <br />CloudFormation stack named tictactoe-stack if it does not exist already, and use <br />cloudformation.yml as the source template. Wait for the stack to complete and sync the <br />contents from the out folder to the S3 bucket. Perform invalidation of the CloudFront <br />origin.</pre> | 应用程序开发人员、编程人员、软件开发人员 | 
| 将此应用程序部署到 AWS 云。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/use-q-developer-as-coding-assistant-to-increase-productivity.html) | AWS 管理员、AWS DevOps、云架构师、应用程序开发人员 | 

## 问题排查
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 此内部版本不会创建单页应用程序，也不会将其导出到输出文件夹。 | 查看 `next.config.mjs` 文件的内容。如果代码具有如下默认配置：<pre>const nextConfig = {};</pre>按如下所示对其进行修改：<pre>const nextConfig = {<br />  output: 'export',<br />  distDir: 'out',<br />};</pre> | 

## 相关资源
<a name="use-q-developer-as-coding-assistant-to-increase-productivity-resources"></a>
+ [创建新的 React 项目](https://react.dev/learn/start-a-new-react-project)（React 文档）
+ [Amazon Q 开发者概述](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html)（AWS 文档）
+ [Amazon Q 开发者最佳实践](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-code-generation/introduction.html)（AWS 规范性指导）
+ 通过以下方式@@ [安装、配置和使用 Amazon Q Devel](https://www.youtube.com/watch?v=-iQfIhTA4J0&pp=ygUSYW1hem9uIHEgZGV2ZWxvcGVy) o YouTube p JetBrains IDEs er（视频）
+ [为命令行安装 Amazon Q](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-getting-started-installing.html)（AWS 文档）

# 使用 Processing 对 TB 级机器学习 SageMaker 数据集进行分布式特征工程
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets"></a>

*Chris Boomhower，Amazon Web Services*

## Summary
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-summary"></a>

许多 TB 级或更大的数据集通常由分层文件夹结构构成，数据集中的文件有时会共享相互依存关系。因此，机器学习 (ML) 工程师和数据科学家必须做出深思熟虑的决策，为模型训练和推理准备此类数据。此模式演示了如何将手动宏分片和微分片技术与 Amazon Processing 和虚拟 CPU (vCPU) 并行化相结合，为复杂的大数据 ML 数据集高效扩展功能工程 SageMaker 流程。 

这种模式将*宏分片*定义为在多台计算机上拆分数据目录进行处理，将*微分片*定义为将每台计算机上的数据分割至多个处理线程中。该模式通过使用 Amazon 和 [PhysioNet MIM](https://physionet.org/content/mimic3wdb/1.0/) IC-II SageMaker I 数据集中的时间序列波形记录样本来演示这些技术。通过采用这种模式技术，您可以最大限度地减少特征工程的处理时间和成本，同时最大限度地提高资源利用率和吞吐量效率。无论数据类型如何，这些优化都依赖于亚马逊弹性计算云 (Amazon EC2) 实例上的分布式 SageMaker 处理，CPUs 而对于类似的大型数据集，v 也是如此。

## 先决条件和限制
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-prereqs"></a>

**先决条件**
+ 如果您想为自己的数据集实现此模式，则可以访问 SageMaker 笔记本实例或 SageMaker Studio。如果您是首次使用亚马逊 SageMaker ，请参阅 AWS 文档 SageMaker中的[亚马逊入门](https://docs.aws.amazon.com/sagemaker/latest/dg/gs.html)。
+ SageMaker Studio，如果你想用 [PhysioNet MIMIC-III](https://physionet.org/content/mimic3wdb/1.0/) 样本数据实现这种模式。 
+ 该模式使用 SageMaker 处理，但不需要任何运行 SageMaker 处理作业的经验。

**限制**
+ 这种模式非常适合包含相互依赖文件的机器学习数据集。手动宏分片和并行运行多个单实例 Processing SageMaker 作业对这些相互依赖关系的益处最大。对于不存在此类相互依赖关系的数据集，Processing 中的`ShardedByS3Key` SageMaker 功能可能是宏分片的更好替代方案，因为它会将分片数据发送到由同一 Processing 作业管理的多个实例。但是，你可以在两种场景中实现这种模式的微分片策略，以最好地利用实例 v。CPUs

**产品版本**
+ 亚马逊 SageMaker Python 软件开发工具包版本 2

## 架构
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-architecture"></a>

**目标技术堆栈**
+ Amazon Simple Storage Service（Amazon S3）
+ Amazon SageMaker

**目标架构**

*宏分片和分布式实例 EC2 *

该架构中代表的 10 个并行进程反映了 MIMIC-III 数据集结构。（为了简化逻辑示意图，流程用省略号表示。） 当您使用手动宏分片时，类似架构适用于任何数据集。就 MIMIC-III 而言，您可以毫不费力地单独处理每个患者组文件夹，从而充分利用数据集的原始结构。下图中的记录组块出现在左侧 (1)。鉴于数据分布性质，按患者群体进行分片是有意义的。

![\[微分片和分布式实例的架构 EC2\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/e7a90b31-de8f-41fd-bb3f-c7c6100fc306/images/c19a8f87-ac59-458e-89cb-50be17ca4a0c.png)


但是，按患者组手动分片意味着每个患者组文件夹都需要单独的处理作业，如您在图 (2) 的中间部分所见，而不是具有多个 EC2 实例的单个处理作业。由于 MIMIC-III 的数据包括二进制波形文件和匹配的基于文本的头文件，并且需要依赖 [wfdb 库](https://wfdb.readthedocs.io/en/latest/)提取二进制数据，因此特定患者的所有记录都必须在同一个实例上可用。要确保每个二进制波形文件的关联头文件也存在，唯一的方法是实现手动分片，以在自己的处理作业中运行每个分片，并指定 `s3_data_distribution_type='FullyReplicated'` 何时定义处理作业输入。或者，如果所有数据都位于一个目录中，并且文件之间不存在依赖关系，则更合适的选择可能是启动具有多个 EC2 实例并`s3_data_distribution_type='ShardedByS3Key'`指定的单个处理作业。指定`ShardedByS3Key `为 Amazon S3 数据分配类型 SageMaker 可自动管理跨实例的数据分片。 

为每个文件夹启动 Processing 作业是经济高效的预处理数据的方式，因为同时运行多个实例可以节省时间。为进一步节省成本和时间，您可以在每个处理作业中使用微分片。 

*微分片和 parallel v CPUs*

在每个 Processing 作业中，对分组的数据进行进一步划分，以最大限度地利用 SageMaker 完全托管 EC2 实例CPUs 上的所有可用 v。图 (2) 中间部分的方块描述了每个主要处理任务中的情况。患者记录文件夹的内容是扁平化的，并根据实例上可用 v 的数量CPUs 进行平均分割。分割文件夹内容后，大小均匀的一组文件将分布在所有 v 中CPUs 进行处理。处理完成后，每个 vCPU 结果将合并到每个处理作业的单个数据文件中。 

在随附的代码中，这些概念在 `src/feature-engineering-pass1/preprocessing.py` 文件的下一节中进行了介绍。

```
def chunks(lst, n):
    """
    Yield successive n-sized chunks from lst.
    
    :param lst: list of elements to be divided
    :param n: number of elements per chunk
    :type lst: list
    :type n: int
    :return: generator comprising evenly sized chunks
    :rtype: class 'generator'
    """
    for i in range(0, len(lst), n):
        yield lst[i:i + n]
 
 
# Generate list of data files on machine
data_dir = input_dir
d_subs = next(os.walk(os.path.join(data_dir, '.')))[1]
file_list = []
for ds in d_subs:
    file_list.extend(os.listdir(os.path.join(data_dir, ds, '.')))
dat_list = [os.path.join(re.split('_|\.', f)[0].replace('n', ''), f[:-4]) for f in file_list if f[-4:] == '.dat']
 
# Split list of files into sub-lists
cpu_count = multiprocessing.cpu_count()
splits = int(len(dat_list) / cpu_count)
if splits == 0: splits = 1
dat_chunks = list(chunks(dat_list, splits))
 
# Parallelize processing of sub-lists across CPUs
ws_df_list = Parallel(n_jobs=-1, verbose=0)(delayed(run_process)(dc) for dc in dat_chunks)
 
# Compile and pickle patient group dataframe
ws_df_group = pd.concat(ws_df_list)
ws_df_group = ws_df_group.reset_index().rename(columns={'index': 'signal'})
ws_df_group.to_json(os.path.join(output_dir, group_data_out))
```

`chunks` 函数首先被定义为使用给定列表，方法是将其分成大小均匀的长度 `n `，然后将这些结果作为生成器返回。接下来，通过编译所有存在的二进制波形文件列表，在患者文件夹中对数据进行扁平化。完成此操作后，将获得 EC2 实例上CPUs 可用的 v 数。CPUs [通过调用，将二进制波形文件列表平均分成这些 v`chunks`，然后使用 joblib 的 Parallel 类在自己的 vCPU 上处理每个波形子列表。](https://joblib.readthedocs.io/en/latest/generated/joblib.Parallel.html)处理任务会自动将结果合并到一个数据帧列表中，然后处理任务会进一步处理， SageMaker 然后在任务完成后将其写入 Amazon S3。在此示例中，处理任务有 10 个文件写入 Amazon S3（每个任务一个）。

当所有初始处理任务完成后，辅助处理任务（如图 (3) 右侧的方块所示）将合并每个主处理任务生成的输出文件，并将合并后的输出写入 Amazon S3 (4)。

## 工具
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-tools"></a>

**工具**
+ [Python](https://www.python.org/) — 用于此模式的示例代码是 Python（版本 3）。
+ [SageMaker Stud](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html) io — Amazon SageMaker Studio 是一个用于机器学习的基于 Web 的集成开发环境 (IDE)，允许您构建、训练、调试、部署和监控您的机器学习模型。您可以在 Studio 中 SageMaker 使用 Jupyter 笔记本来运行 SageMaker 处理作业。
+ [SageMaker 处理](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html) — Amazon P SageMaker rocessing 提供了一种运行数据处理工作负载的简化方法。在这种模式中，特征工程代码是通过使用 SageMaker 处理作业大规模实现的。

**代码**

随附的 .zip 文件提供了此模式的完整代码。以下部分介绍为此模式构建架构的步骤。附件中的示例代码介绍了每个步骤。

## 操作说明
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-epics"></a>

### 设置你的 SageMaker Studio 环境
<a name="set-up-your-sagemaker-studio-environment"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 访问亚马逊 SageMaker 工作室。 | 按照[亚马逊 SageMaker 文档](https://docs.aws.amazon.com/sagemaker/latest/dg/onboard-quick-start.html)中提供的说明使用您的 AWS 账户登录 SageMaker Studio。 | 数据科学家、机器学习工程师 | 
| 安装 wget 实用程序。 | 如果您已使用新的 SageMaker Studio 配置或以前从未在 Studio 中 SageMaker 使用过这些实用程序，请安装 *wg* et。 要进行安装，请在 SageMaker Studio 控制台中打开终端窗口并运行以下命令：<pre>sudo yum install wget</pre> | 数据科学家、机器学习工程师 | 
| 下载并解压缩示例代码。 | 在*附件*部分下载 `attachments.zip` 文件。在终端窗口，导航至下载文件并提取其内容的文件夹：<pre>unzip attachment.zip</pre>导航到提取 .zip 文件的文件夹，然后提取 `Scaled-Processing.zip` 文件的内容。<pre>unzip Scaled-Processing.zip</pre> | 数据科学家、机器学习工程师 | 
| 从 physionet.org 下载示例数据集，并将其上传到 Amazon S3。 | 在包含 `get_data.ipynb` 文件的文件夹中运行 Jupyter Notebook `Scaled-Processing`。此笔记本从 p [hysionet.org](https://physionet.org) 下载示例 MIMIC-III 数据集，然后将其上传到亚马逊 S3 中的 Studio 会话存储桶 SageMaker 。 | 数据科学家、机器学习工程师 | 

### 配置第一项预处理脚本
<a name="configure-the-first-preprocessing-script"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 扁平化所有子目录的文件层次结构。 | 在 MIMIC-III 等大型数据集，文件通常分布在多个子目录中，即使在逻辑父组中也是如此。您应将脚本配置为将所有子目录中的所有组文件扁平化，如下面的代码所示。<pre># Generate list of .dat files on machine<br />data_dir = input_dir<br />d_subs = next(os.walk(os.path.join(data_dir, '.')))[1]<br />file_list = []<br />for ds in d_subs:<br />    file_list.extend(os.listdir(os.path.join(data_dir, ds, '.')))<br />dat_list = [os.path.join(re.split('_|\.', f)[0].replace('n', ''), f[:-4]) for f in file_list if f[-4:] == '.dat']</pre>    此操作说明中的示例代码片段来自于 `src/feature-engineering-pass1/preprocessing.py` 文件，附件中提供了此文件。 | 数据科学家、机器学习工程师 | 
| 根据 vCPU 数量将文件划分至子组。 | 应根据运行脚本的实例上CPUs 存在的 v 数，将文件分成大小均匀的子组或块。在此步骤中，可实现类似于以下代码的代码。<pre># Split list of files into sub-lists<br />cpu_count = multiprocessing.cpu_count()<br />splits = int(len(dat_list) / cpu_count)<br />if splits == 0: splits = 1<br />dat_chunks = list(chunks(dat_list, splits))</pre> | 数据科学家、机器学习工程师 | 
| 在 v 上并行处理子组 CPUs | 应将脚本逻辑配置为并行处理所有的子组。为此，请按如下方式使用 Joblib 库 的 `Parallel ` 类和 `delayed ` 方法。 <pre># Parallelize processing of sub-lists across CPUs<br />ws_df_list = Parallel(n_jobs=-1, verbose=0)(delayed(run_process)(dc) for dc in dat_chunks)</pre> | 数据科学家、机器学习工程师 | 
| 将单个文件组的输出保存至 Amazon S3。 | 并行 vCPU 处理完成后，应合并每个 vCPU 的结果，并将其上传到文件组的 S3 存储桶路径。在此步骤，可以使用类似于以下代码的代码。<pre># Compile and pickle patient group dataframe<br />ws_df_group = pd.concat(ws_df_list)<br />ws_df_group = ws_df_group.reset_index().rename(columns={'index': 'signal'})<br />ws_df_group.to_json(os.path.join(output_dir, group_data_out))</pre> | 数据科学家、机器学习工程师 | 

### 配置第二预处理脚本
<a name="configure-the-second-preprocessing-script"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 合并运行第一个脚本的所有 Processing 作业所生成的数据文件。 | 前面的脚本为每个 SageMaker 处理作业输出一个文件，该作业处理数据集中的一组文件。 接下来，您需要将这些输出文件合并至一个对象，并将单个输出数据集写入 Amazon S3。文件中对此进行了演示，此 `src/feature-engineering-pass1p5/preprocessing.py` 文件载于附件，如下所示。<pre>def write_parquet(wavs_df, path):<br />    """<br />    Write waveform summary dataframe to S3 in parquet format.<br />    <br />    :param wavs_df: waveform summary dataframe<br />    :param path: S3 directory prefix<br />    :type wavs_df: pandas dataframe<br />    :type path: str<br />    :return: None<br />    """<br />    extra_args = {"ServerSideEncryption": "aws:kms"}<br />    wr.s3.to_parquet(<br />        df=wavs_df,<br />        path=path,<br />        compression='snappy',<br />        s3_additional_kwargs=extra_args)<br /> <br /> <br />def combine_data():<br />    """<br />    Get combined data and write to parquet.<br />    <br />    :return: waveform summary dataframe<br />    :rtype: pandas dataframe<br />    """<br />    wavs_df = get_data()<br />    wavs_df = normalize_signal_names(wavs_df)<br />    write_parquet(wavs_df, "s3://{}/{}/{}".format(bucket_xform, dataset_prefix, pass1p5out_data))<br /> <br />    return wavs_df<br /> <br /> <br />wavs_df = combine_data()</pre> | 数据科学家、机器学习工程师 | 

### 运行处理作业
<a name="run-processing-jobs"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 运行第一项处理作业。 | 若要执行宏分片，请为每个文件组运行单独的处理作业。Microsharding 是在每个 Processing 作业中执行，因为每个作业都会运行您的第一个脚本。以下代码演示了如何为以下片段（包含在 `notebooks/FeatExtract_Pass1.ipynb`）中的每个文件组目录启动处理作业。<pre>pat_groups = list(range(30,40))<br />ts = str(int(time.time()))<br /> <br />for group in pat_groups:<br />    sklearn_processor = SKLearnProcessor(framework_version='0.20.0',<br />                                     role=role,<br />                                     instance_type='ml.m5.4xlarge',<br />                                     instance_count=1,<br />                                     volume_size_in_gb=5)<br />    sklearn_processor.run(<br />        code='../src/feature-engineering-pass1/preprocessing.py',<br />        job_name='-'.join(['scaled-processing-p1', str(group), ts]),<br />        arguments=[<br />            "input_path", "/opt/ml/processing/input",<br />            "output_path", "/opt/ml/processing/output",<br />            "group_data_out", "ws_df_group.json"<br />        ],<br />        inputs=<br />        [<br />            ProcessingInput(<br />                source=f's3://{sess.default_bucket()}/data_inputs/{group}',<br />                destination='/opt/ml/processing/input',<br />                s3_data_distribution_type='FullyReplicated'<br />            )<br />        ],<br />        outputs=<br />        [<br />            ProcessingOutput(<br />                source='/opt/ml/processing/output',<br />                destination=f's3://{sess.default_bucket()}/data_outputs/{group}'<br />            )<br />        ],<br />        wait=False<br />    )</pre> | 数据科学家、机器学习工程师 | 
| 运行第二个处理作业。 | 要合并第一组处理作业生成的输出并执行任何其他计算以进行预处理，请使用单 SageMaker 个 Processing 作业运行第二个脚本。以下代码演示了这一点（包含在`notebooks/FeatExtract_Pass1p5.ipynb`）。<pre>ts = str(int(time.time()))<br />bucket = sess.default_bucket()<br />     <br />sklearn_processor = SKLearnProcessor(framework_version='0.20.0',<br />                                 role=role,<br />                                 instance_type='ml.t3.2xlarge',<br />                                 instance_count=1,<br />                                 volume_size_in_gb=5)<br />sklearn_processor.run(<br />    code='../src/feature-engineering-pass1p5/preprocessing.py',<br />    job_name='-'.join(['scaled-processing', 'p1p5', ts]),<br />    arguments=['bucket', bucket,<br />               'pass1out_prefix', 'data_outputs',<br />               'pass1out_data', 'ws_df_group.json',<br />               'pass1p5out_data', 'waveform_summary.parquet',<br />               'statsdata_name', 'signal_stats.csv'],<br />    wait=True<br />)</pre> | 数据科学家、机器学习工程师 | 

## 相关资源
<a name="use-sagemaker-processing-for-distributed-feature-engineering-of-terabyte-scale-ml-datasets-resources"></a>
+ [使用快速入门登录 Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/onboard-quick-start.html)（SageMaker 文档）
+ [流程数据](https://docs.aws.amazon.com/sagemaker/latest/dg/processing-job.html)（SageMaker 文档） 
+ [使用 scikit-learn 进行数据处理（文档](https://docs.aws.amazon.com/sagemaker/latest/dg/use-scikit-learn-processing-container.html)）SageMaker  
+ [joblib.Parallel 文档](https://joblib.readthedocs.io/en/latest/generated/joblib.Parallel.html)
+ Moody, B., Moody, G., Villarroel, M., Clifford, G. D., & Silva, I. (2020). [MIMIC-III 波形数据库](https://doi.org/10.13026/c2607m)（版本 1.0）。 *PhysioNet*。
+ Johnson, A. E. W., Pollard, T. J., Shen, L., Lehman, L. H., Feng, M., Ghassemi, M., Moody, B., Szolovits, P., Celi, L. A., & Mark, R. G. (2016). [MIMIC-III，可免费访问的重症监护数据库](https://dx.doi.org/10.1038/sdata.2016.35)。Scientific Data, 3, 160035.
+ [MIMIC-III Waveform Database 许可证](https://physionet.org/content/mimic3wdb/1.0/LICENSE.txt)

## 附件
<a name="attachments-e7a90b31-de8f-41fd-bb3f-c7c6100fc306"></a>

要访问与此文档相关联的其他内容，请解压以下文件：[attachment.zip](samples/p-attach/e7a90b31-de8f-41fd-bb3f-c7c6100fc306/attachments/attachment.zip)

# 使用 Flask 和 AWS Elastic Beanstalk 可视化 AI/ML 模型结果 AWS Beanstalk
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk"></a>

*Chris Caudill 和 Durga Sury，Amazon Web Services*

## Summary
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-summary"></a>

可视化人工智能和机器学习 (AI/ML) 服务输出通常需要复杂的 API 调用，这些调用必须由开发人员和工程师自定义。如果您的分析师想快速探索新数据集，这可能是一个缺点。

您可以使用基于 Web 的用户界面 (UI) 增强服务的可访问性并提供更具交互性的数据分析形式，该界面使用户能够上传自己的数据并在控制面板中可视化模型结果。

这种模式使用 [Flask](https://flask.palletsprojects.com/en/2.0.x/) 和 [Plotly](https://plotly.com/)，将 Amazon Comprehend 与自定义 Web 应用程序集成，并可视化用户提供的数据中的观点和实体。该模式还提供了通过 AWS Elastic Beanstalk 部署应用程序的步骤。您可以使用 A [mazon Web Services (AWS) AI 服务](https://aws.amazon.com/machine-learning/ai-services/)或托管在终端节点（例如，[亚马逊 SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model.html)终端节点）上的自定义训练模型，来调整应用程序。

## 先决条件和限制
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-prereqs"></a>

**先决条件**
+ 一个活跃的 AWS 账户。 
+ AWS 命令行界面（AWS CLI）已在本地计算机上安装和配置。有关这方面的更多信息，请参阅 AWS CLI 文档中的[配置基础知识](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)。您也可以使用 AWS Cloud9 集成式开发环境（IDE）；有关这方面的更多信息，请参阅 AWS Cloud9 文档中的 [AWS Cloud9 的 Python 教程](https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-python.html)和[预览 AWS Cloud9 IDE 中运行的应用程序](https://docs.aws.amazon.com/cloud9/latest/user-guide/app-preview.html)。

  **注意**： AWS Cloud9 不再向新客户开放。的现有客户 AWS Cloud9 可以继续照常使用该服务。[了解详情](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
+ 了解 Flask 的 Web 应用程序框架。有关 Flask 的更多信息，请参阅 Flask 文档中的 [Quickstart](https://flask.palletsprojects.com/en/1.1.x/quickstart)。
+ Python 版本 3.6 或更高版本，已安装并已配置。您可按照 AWS Elastic Beanstalk 文档中[设置 Python 开发环境](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/python-development-environment.html)中的说明安装 Python。
+ Elastic Beanstalk 命令行界面 (EB CLI)，已安装并配置。有关这方面的更多信息，请参阅 AWS Elastic Beanstalk 文档中的[安装 EB CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) 和[配置 EB CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-configuration.html)。

**限制**
+ 此模式的 Flask 应用程序，旨在处理使用单个文本列且限制在 200 行以内的 .csv 文件。可调整应用程序代码以处理其他文件类型和数据量。
+ 该应用程序不考虑数据留存，将继续汇总上传的用户文件，直到手动删除这些文件。您可以将应用程序与 Amazon Simple Storage Service (Amazon S3) 集成以实现永久对象存储，也可以使用 Amazon DynamoDB 等数据库进行无服务器键值存储。
+ 该应用程序仅适用英文文档。但是，您可使用 Amazon Comprehend 来检测文档的主要语言。有关每个操作支持的语言的更多信息，请参见 Amazon Comprehend 文档中的 [API 参考](https://docs.aws.amazon.com/comprehend/latest/dg/API_Reference.html)。
+ *其他信息*部分提供了包含常见错误及其解决方案的故障排除列表。

## 架构
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-architecture"></a>

**Flask 应用程序架构**

Flask 是轻量级框架，用于在 Python 中开发 Web 应用程序。它旨在将 Python 的强大数据处理功能与丰富的 Web 用户界面相结合。该模式的 Flask 应用程序向您展示了如何构建 Web 应用程序，该应用程序使用户能够上传数据，将数据发送至 Amazon Comprehend 进行推理，然后将结果可视化。  应用程序具有以下结构：
+ `static`— 包含所有支持 Web UI 的静态文件（例如 JavaScript，CSS 和图像）
+ `templates` – 包含应用程序的所有 HTML 页面
+ `userData` –存储上传的用户数据
+ `application.py` – Flask 应用程序文件
+ `comprehend_helper.py` – 用于对 Amazon Comprehend 进行 API 调用的函数
+ `config.py` – 应用程序配置文件
+ `requirements.txt` – 应用程序所需 Python 依赖项

`application.py` 脚本包含 Web 应用程序的核心功能，该功能由四个 Flask 路由组成。下图显示了这些 Flask 路由。

![\[构成 Web 应用程序核心功能的四个 Flask 路由。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/03d80cf1-ec97-43f7-adb5-2746a9ec70e6/images/9ca6bad1-26e2-4262-98d0-d54c172336bf.png)


 
+ `/` 是此应用程序的根目录，可将用户定向到 `upload.html` 页面（存储在 `templates` 目录中）。
+ `/saveFile` 是在用户上传文件后调用的路由。此路由通过 HTML 表单接收 `POST` 请求，其中包含用户上传的文件。文件保存在 `userData` 目录中，路由会将用户重定向至 `/dashboard` 路由。
+ `/dashboard` 将用户发送到 `dashboard.html` 页面。在此页面的 HTML 中，它运行中的 JavaScript 代码`static/js/core.js`，从`/data`路径中读取数据，然后为该页面构建可视化效果。
+ `/data` 是 JSON API，用于显示要在控制面板中可视化的数据。此路由读取用户提供的数据，并使用 `comprehend_helper.py` 中的函数将用户数据发送到 Amazon Comprehend，用于观点分析和命名实体识别 (NER)。Amazon Comprehend 的响应已格式化，并作为 JSON 对象返回。

**部署架构**

![\[使用 Flask 和 Elastic Bean AI/ML stalk 可视化模型结果的架构图。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/03d80cf1-ec97-43f7-adb5-2746a9ec70e6/images/d691bfd2-e2ec-4830-8bff-ffa1e3a95c4a.png)


[设计注意事项](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.concepts.design.html)

 要详细了解在 AWS 云端使用 Elastic Beanstalk 部署的应用程序的设计注意事项，请 AWS Elastic Beanstalk 文档中的设计注意事项。

**技术堆栈**
+ Amazon Comprehend 
+ Elastic Beanstalk 
+ Flask 

**自动化和扩展**

系统会自动使用负载均衡器和自动扩缩组来设置 Elastic Beanstalk 部署。有关更多配置选项，请参阅 AWS Elastic Beanstalk 文档中的[配置 Elastic Beanstalk 环境](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html)。

## 工具
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-tools"></a>
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)是一款统一的工具，提供了用于与 AWS 的各个部分进行交互的一致界面。
+ [Amazon Comprehend](https://docs.aws.amazon.com/comprehend/latest/dg/comprehend-general.html) 使用自然语言处理（NLP），提取有关文档内容的洞察，而无需进行特殊的预处理。
+ [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) 可帮助您在 AWS 云端快速部署和管理应用程序，而不必了解运行这些应用程序的基础设施。
+ [Elastic Beanstalk CLI（EB CLI）](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3.html)是 AWS Elastic Beanstalk 的命令行界面，提供了一些交互式命令来简化从本地存储库创建、更新和监控环境的过程。
+ [Flask](https://flask.palletsprojects.com/en/2.0.x/) 框架使用 Python 执行数据处理和 API 调用，并利用 Plotly 提供交互式 Web 可视化。

**代码**

该模式的代码可在[使用 Flask 和 AWS Elastic Beanstalk 存储库 GitHub 的可视化 AI/ML 模型结果](https://github.com/aws-samples/aws-comprehend-elasticbeanstalk-for-flask)中找到。

## 操作说明
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-epics"></a>

### 设置 Flask 应用程序
<a name="set-up-the-flask-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆 GitHub 存储库。 | 运行以下命令，[使用 Flask 和 AWS Elastic Beanstalk 存储库从 GitHub 可视化 AI/ML 模型结果](https://github.com/aws-samples/aws-comprehend-elasticbeanstalk-for-flask)中提取应用程序代码：`git clone git@github.com:aws-samples/aws-comprehend-elasticbeanstalk-for-flask.git`确保使用配置 SSH 密钥 GitHub。 | 开发者版 | 
| 安装 Python 模块。 | 克隆存储库后，将创建新的本地 `aws-comprehend-elasticbeanstalk-for-flask` 目录。在该目录中，`requirements.txt` 文件包含运行该应用程序的 Python 模块和版本。使用以下命令安装模块：`cd aws-comprehend-elasticbeanstalk-for-flask``pip install -r requirements.txt` | Python 开发人员 | 
| 在本地测试应用程序。 | 运行以下命令以启动 Flask 服务器：`python application.py`这将返回有关正在运行的服务器的信息。您应该能够通过打开浏览器和访问 http://localhost:5000 来访问该应用程序如果在 AWS Cloud9 IDE 中运行应用程序，您需要将 `application.py` 文件中的 `application.run()` 命令替换为下面这行内容：`application.run(host=os.getenv('IP', '0.0.0.0'),port=int(os.getenv('PORT', 8080)))`在部署之前，您必须恢复此更改。 | Python 开发人员 | 

### 将应用程序部署到 Elastic Beanstalk
<a name="deploy-the-application-to-elastic-beanstalk"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 启动 Elastic Beanstalk 应用程序。 | 要将您的项目作为 Elastic Beanstalk 应用程序启动，请从应用程序的根目录运行如下命令：`eb init -p python-3.6 comprehend_flask --region us-east-1`[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.html)运行 `eb init -i` 命令，以获取更多部署配置选项。 | 架构师、开发人员 | 
| 部署 Elastic Beanstalk 环境。 | 从应用程序的根目录运行如下命令：`eb create comprehend-flask-env``comprehend-flask-env` 是 Elastic Beanstalk 环境的名称，您可以根据需求对其进行更改。此名称只能包含字母、数字和短划线。 | 架构师、开发人员 | 
| 授权部署使用 Amazon Comprehend。 | 尽管您的应用程序可能已成功部署，但您还应为部署提供访问 Amazon Comprehend 的权限。`ComprehendFullAccess` 是 AWS 托管式策略，它为已部署的应用程序提供对 Amazon Comprehend 进行 API 调用的权限。运行如下命令，以便将 `ComprehendFullAccess` 策略附加到 `aws-elasticbeanstalk-ec2-role`（此角色是自动为您的部署的 Amazon Elastic Compute Cloud（Amazon EC2）实例创建的）：`aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ComprehendFullAccess --role-name aws-elasticbeanstalk-ec2-role``aws-elasticbeanstalk-ec2-role` 是在您的应用程序部署时创建的。您必须首先完成部署过程，才能附加 AWS Identity and Access Management（IAM）策略。 | 开发人员、安全架构师 | 
| 访问您所部署的应用程序。 | 成功部署应用程序后，您可通过运行 `eb open` 命令访问。您也可以运行 `eb status` 命令来接收有关您的部署的详细信息。部署 URL 列在 `CNAME` 下面。 | 架构师、开发人员 | 

### （可选）根据您的机器学习模型自定义应用程序
<a name="optional-customize-the-application-to-your-ml-model"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 授权 Elastic Beanstalk 访问新的模型。 | 确保 Elastic Beanstalk 拥有您的新模型端点所需访问权限。例如，如果您使用 Amazon SageMaker 终端节点，则您的部署需要拥有调用该终端节点的权限。 有关这方面的更多信息，请参阅 Amazon SageMaker 文档[InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html)中的。 | 开发人员、安全架构师 | 
| 将用户数据发送至新模型。 | 若要更改此应用程序中的底层 ML 模型，必须更改以下文件：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.html) | 数据科学家 | 
| 更新控制面板可视化效果。 | 通常，合并新的机器学习模型，意味着必须更新可视化效果以反映新的结果。这些更改在以下文件中进行：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.html) | 网页开发人员 | 

### （可选）部署更新的应用程序
<a name="optional-deploy-the-updated-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 更新应用程序需求文件。 | 在向 Elastic Beanstalk 发送更改之前，请在应用程序的根目录中运行以下命令，以更新 `requirements.txt` 文件，反映任何新的 Python 模块：`pip freeze > requirements.txt` | Python 开发人员 | 
| 重新部署 Elastic Beanstalk 环境。 | 为确保您的应用程序更改反映在 Elastic Beanstalk 部署中，请导航到应用程序的根目录并运行以下命令：`eb deploy`这会将应用程序代码的最新版本发送至您现有的 Elastic Beanstalk 部署中。 | 系统管理员、架构师 | 

## 相关资源
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-resources"></a>
+ [使用 Amazon API Gateway 和 AWS Lambda 调用亚马逊 SageMaker 模型终端节点](https://aws.amazon.com/blogs/machine-learning/call-an-amazon-sagemaker-model-endpoint-using-amazon-api-gateway-and-aws-lambda/)
+ [将 Flask 应用程序部署到 Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html)
+ [EB CLI 命令参考](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-cmd-commands.html)
+ [设置 Python 开发环境](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/python-development-environment.html)

## 附加信息
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-additional"></a>

**故障排除列表**

以下是六种常见错误及其解决方法。

***错误 1 * **

```
Unable to assume role "arn:aws:iam::xxxxxxxxxx:role/aws-elasticbeanstalk-ec2-role". Verify that the role exists and is configured correctly.
```

**解决方案**：如果您在运行 `eb create` 时出现此错误，请在 Elastic Beanstalk 控制台创建一个示例应用程序，以创建默认实例配置文件。有关此内容的更多信息，请参阅 AWS Elastic Beanstalk 文档中的[创建 Elastic Beanstalk 环境](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.environments.html)。

***错误 2***

```
Your WSGIPath refers to a file that does not exist.
```

**解决方案：**部署日志中会出现此错误，因为 Elastic Beanstalk 希望将 Flask 代码命名为 `application.py`。如果您选择了其他名称，请运行`eb config`并编辑， WSGIPath 如以下代码示例所示：

```
aws:elasticbeanstalk:container:python:
     NumProcesses: '1'
     NumThreads: '15'
     StaticFiles: /static/=static/
     WSGIPath: application.py
```

务必将 `application.py` 更换为您的文件名。

您还可利用 Gunicorn 与 Procfile。有关此方法的更多信息，请参阅 AWS Elastic Beanstalk 文档中的[通过 Procfile 配置 WSGI 服务器](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/python-configuration-procfile.html)。

***错误 3***

```
Target WSGI script '/opt/python/current/app/application.py' does not contain WSGI application 'application'.
```

**解决方案：**Elastic Beanstalk 希望将代表您的 Flask 应用程序变量命名为 `application`。确保 `application.py` 文件使用 `application` 作为变量名：

```
application = Flask(__name__)
```

***错误 4***

```
The EB CLI cannot find your SSH key file for keyname
```

**解决方案：**使用 EB CLI 指定要使用的密钥对，或者为部署的 EC2 实例创建密钥对。要解决错误，请运行 `eb init -i`，其中一个选项将询问：

```
Do you want to set up SSH for your instances?
```

以 `Y`响应，创建密钥对或指定现有密钥对。

***错误 5***

*我已更新了我的代码并进行了重新部署，但是我的部署没有反映我的更改。*

**解决方案**：如果您在部署时使用 Git 存储库，请确保在重新部署之前添加并提交更改。

***错误 6***

*您正在通过 AWS Cloud9 IDE 预览 Flask 应用程序，但遇到了错误。*

**解决方案：**有关这方面的更多信息，请参阅 AWS Cloud9 文档中的[在 AWS Cloud9 IDE 中预览正在运行的应用程序](https://docs.aws.amazon.com/cloud9/latest/user-guide/app-preview.html)。

 

 

**使用 Amazon Comprehend 进行自然语言处理**

通过选择使用 Amazon Comprehend，您现在可以通过运行实时分析或异步批处理作业来检测单个文本文档中的自定义实体。Amazon Comprehend 还允许训练自定义实体识别和文本分类模型，这些模型可以通过创建端点来实时使用。

这种模式使用异步批处理作业，检测包含多个文档的输入文件中的观点和实体。此模式提供的示例应用程序旨在让用户上传包含单列且每行一个文本文档的 .csv 文件。[使用 Flask 和 AWS Elastic Beanstalk 存储库 GitHub 可视化 AI/ML 模型结果`comprehend_helper.py`](https://github.com/aws-samples/aws-comprehend-elasticbeanstalk-for-flask)的文件读取输入文件并将输入发送到 Amazon Comprehend 进行处理。

*BatchDetectEntities*

Amazon Comprehend 检查一批文档的文本以查找命名实体，并返回检测到的实体、位置、[实体类型](https://docs.aws.amazon.com/comprehend/latest/dg/how-entities.html)，以及表明 Amazon Comprehend 可信度等级的分数。一次 API 调用最多可发送 25 个文档，每个文档的大小小于 5,000 字节。您可根据使用案例筛选结果以仅显示某些实体。例如，您可以跳过 `‘quantity’` 实体类型，为检测到的实体设置阈值分数 (例如 0.75)。我们建议，您在选择阈值之前，先浏览特定使用案例的结果。有关这方面的更多信息，请参阅亚马逊 Comprehend 文档[BatchDetectEntities](https://docs.aws.amazon.com/comprehend/latest/dg/API_BatchDetectEntities.html)中的。

*BatchDetectSentiment*

Amazon Comprehend 会检查一批传入的文档，并返回每份文档的普遍观点（`POSITIVE`、`NEUTRAL`、`MIXED` 或 `NEGATIVE`）。一次 API 调用最多可发送 25 个文档，每个文档的大小小于 5,000 字节。分析观点非常简单，您可选择分数最高的观点以显示在最终结果中。有关这方面的更多信息，请参阅亚马逊 Comprehend 文档[BatchDetectSentiment](https://docs.aws.amazon.com/comprehend/latest/dg/API_BatchDetectSentiment.html)中的。

 

 

**Flask 配置处理**

Flask 服务器使用一系列[配置变量](https://flask.palletsprojects.com/en/1.1.x/config/)控制服务器的运行方式。这些变量可以包含调试输出、会话令牌或者其他应用程序设置。您还可定义在应用程序运行时访问的自定义变量。设置配置变量的方法有很多种。

在这种模式中，配置是在 `config.py` 中定义，且在 `application.py` 中继承的。
+ 
**注意**  
`config.py` 包含在应用程序启动时设置的配置变量。此应用程序中定义了一个 `DEBUG` 变量，以便指示应用程序在[调试模式](https://flask.palletsprojects.com/en/1.1.x/config/#DEBUG)下运行服务器。：在生产环境中运行应用程序时，不应使用调试模式。`UPLOAD_FOLDER` 是一个自定义变量，被定义为稍后在应用程序中引用，并告知它应将上传的用户数据存储在哪里。
+ `application.py` 将启动 Flask 应用程序，并继承 `config.py` 中定义的配置设置。这通过以下代码执行：

```
application = Flask(__name__)
application.config.from_pyfile('config.py')
```

# 更多模式
<a name="machinelearning-more-patterns-pattern-list"></a>

**Topics**
+ [MLOps 使用后台和自助服务 Amazon A SageMaker I 模板加速](accelerate-mlops-with-backstage-and-sagemaker-templates.md)
+ [使用 Amazon Bedrock 实现 AWS 基础设施运营自动化](automate-aws-infrastructure-operations-by-using-amazon-bedrock.md)
+ [通过 Terraform 在 Amazon Bedrock 上使用 CrewAI 框架部署代理式系统](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [部署 ChatOps 解决方案来管理 SAST 扫描结果，方法是在聊天应用程序中使用 Amazon Q Developer 自定义操作和 CloudFormation](deploy-chatops-solution-to-manage-sast-scan-results.md)
+ [在 Quick Sight 中使用 AWS Mainframe Modernization 和 Amazon Q 生成数据见解](generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.md)
+ [在 Quick Sight 中使用 AWS Mainframe Modernization 和 Amazon Q 生成 Db2 z/OS 数据见解](generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.md)
+ [为 SageMaker 笔记本实例提供对另一个 AWS 账户中 CodeCommit 存储库的临时访问权限](give-sagemaker-notebook-instances-temporary-access-to-a-codecommit-repository-in-another-aws-account.md)
+ [使用 AWS CodePipeline 和 Amazon Bedrock 将 AWS Organizations 政策作为代码进行管理](manage-organizations-policies-as-code.md)
+ [使用实现 CardDemo 大型机应用程序的现代化 AWS Transform](modernize-carddemo-mainframe-app.md)
+ [使用 AWS Transform 和 Terraform 实现大型机应用程序的现代化和部署](modernize-mainframe-app-transform-terraform.md)
+ [使用 Amazon Redshift ML 执行高级分析](perform-advanced-analytics-using-amazon-redshift-ml.md)
+ [借助 Amazon Bedrock 代理简化亚马逊 EC2 合规管理 AWS Config](streamline-amazon-ec2-compliance-management-with-amazon-bedrock-agents-and-aws-config.md)
+ [使用自动化工作流简化 Amazon Lex 机器人的开发和部署](streamline-amazon-lex-bot-development-and-deployment-using-an-automated-workflow.md)
+ [使用 Amazon Bedroc AWS Step Functions k 对中的状态进行故障排除](troubleshooting-states-in-aws-step-functions.md)