使用 Step Functions 调用和自定义 Amazon Bedrock 模型 - AWS Step Functions

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

使用 Step Functions 调用和自定义 Amazon Bedrock 模型

可以将 Step Functions 与 Amazon Bedrock 集成,以调用指定的 Amazon Bedrock 模型并创建微调任务来自定义模型。本页列出了经过优化的 Amazon Bedrock, APIs 并提供了提取模型调用结果的示例Task状态。

要了解如何在 Step Functions 中与 AWS 服务集成,请参阅集成 服务在 Step Functions 中将参数传递给服务 API

提示

要部署与 Amazon Bedrock 集成的示例工作流程,请参阅使用 Amazon Bedrock 执行 AI 提示串接

Amazon Bedrock服务集成 APIs

要AWS Step Functions与集成Amazon Bedrock,您可以使用以下方法 APIs。除了 APIs 有其他请求字段外 Amazon Bedrock APIs,它们InvokeModel与相应字段类似。

亚马逊 Bedrock API-CreateModelCustomizationJob

创建微调作业以自定义基础模型。你可以使用请求响应调用 Step Functions 集成 CreateModelCustomizationJobAPI,也可以使用 CreateModelCustomizationJob.sync 来调用 Run a Job (.sync) 集成模式。API 调用的字段没有区别。

亚马逊 Bedrock API-InvokeModel

使用您在请求正文中提供的输入,调用指定的 Amazon Bedrock 模型来运行推理。您可以使用 InvokeModel 对文本模型、图像模型和嵌入模型运行推理。

的Amazon Bedrock服务集成 API 请求正文InvokeModel包括以下附加参数。

  • Body:以 Content-Type 请求标头中指定的格式指定输入数据。Body 包含特定于目标模型的参数。

    如果您使用 InvokeModel API,则必须指定 Body 参数。Step Functions 不会验证您在 Body 中提供的输入。

    Body使用Amazon Bedrock优化的集成进行指定时,您可以指定最大 256 KiB 的有效负载。如果您的负载超过 256 KiB,我们建议您使用。Input

  • Input:指定要从中检索输入数据的源。此可选字段专门用于 Amazon Bedrock 与 Step Functions 的优化集成。在此字段中,您可以指定 S3Uri

    您可以在参数中指定 Body 或指定 Input,但不能同时指定两者。

    如果指定 Input 但未指定 ContentType,输入数据来源的内容类型将变为 ContentType 的值。

  • Output:指定写入 API 响应的目的地。此可选字段专门用于 Amazon Bedrock 与 Step Functions 的优化集成。在此字段中,您可以指定 S3Uri

    如果您指定此字段,API 响应正文将替换为对原始输出的 Amazon S3 位置的引用。

以下示例显示了用于Amazon Bedrock集成 InvokeModel API 的语法。

{ "ModelId": String, // required "Accept": String, // default: application/json "ContentType": String, // default: application/json "Input": { // not from Bedrock API "S3Uri": String }, "Output": { // not from Bedrock API "S3Uri": String } }

Amazon Bedrock 集成的 Task 状态定义

以下 Task 状态定义显示了如何在状态机中与 Amazon Bedrock 集成。此示例显示了一个 Task 状态,它提取了路径指定的模型调用的完整结果,result_one。这基于基础模型的推理参数。此示例使用 Cohere Command 大型语言模型 (LLM)。

{ "Type": "Task", "Resource": "arn:aws:states:::bedrock:invokeModel", "Arguments": { "ModelId": "cohere.command-text-v14", "Body": { "prompt": "{% states.input.prompt_one %}", "max_tokens": 20 }, "ContentType": "application/json", "Accept": "*/*" }, "End": true }

IAM policies for calling Amazon Bedrock

使用控制台创建状态机时,Step Functions 会自动为状态机创建一个具有所需最低权限的执行角色。这些自动生成的IAM角色对 AWS 区域 您在其中创建状态机的角色有效。

我们建议您在创建 IAM 策略时,不要在策略中包含通配符。作为安全最佳实操,应尽可能缩小策略范围。只有在运行时不知道某些输入参数时,才应使用动态策略。

以下示例模板展示了如何根据状态机定义中的资源 AWS Step Functions 生成 IAM 策略。有关更多信息,请参阅Step Functions 如何为集成服务生成 IAM 策略探索 Step Functions 中的服务集成模式

Amazon Bedrock 集成的 IAM 策略示例

以下部分根据您用于特定基础或预置模型的 Amazon Bedrock API 说明了您需要的 IAM 权限。本部分还包含授予完全访问权限的策略示例。

请记住用您的资源特定信息替换italicized文本。

IAM使用访问特定基础模型的策略示例 InvokeModel

以下是访问amazon.titan-text-express-v1使用 InvokeModelAPI 操作命名的特定基础模型的状态机的IAM策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "InvokeModel1", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:region::foundation-model/amazon.titan-text-express-v1" ] } ] }

IAM使用访问特定预配置模型的策略示例 InvokeModel

以下是访问c2oi931ulksx使用 InvokeModelAPI 操作命名的特定预配置模型的状态机的IAM策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "InvokeModel1", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:region:account-id:provisioned-model/c2oi931ulksx" ] } ] }

要使用的完全访问IAM策略示例 InvokeModel

以下是状态机的IAM策略示例,该状态机在您使用 InvokeModelAPI 操作时提供完全访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "InvokeModel1", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:region::foundation-model/*", "arn:aws:bedrock:region:account-id:provisioned-model/*" ] } ] }

将特定基础模型作为基本模型访问的 IAM 策略示例

以下是状态机使用 CreateModelCustomizationJobAPI 操作访问名amazon.titan-text-express-v1为基础模型的特定基础模型的IAM策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "CreateModelCustomizationJob1", "Action": [ "bedrock:CreateModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:region::foundation-model/amazon.titan-text-express-v1", "arn:aws:bedrock:region:account-id:custom-model/*", "arn:aws:bedrock:region:account-id:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::account-id:role/myRole" ] } ] }

将特定自定义模型作为基本模型访问的 IAM 策略示例

以下是状态机使用 CreateModelCustomizationJobAPI 操作访问作为基础模型的特定自定义模型的IAM策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "CreateModelCustomizationJob1", "Action": [ "bedrock:CreateModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:region:account-id:custom-model/*", "arn:aws:bedrock:region:account-id:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::account-id:role/roleName" ] } ] }

使用 CreateModelCustomizationJob .sync 的完全访问IAM策略示例

以下是状态机的IAM策略示例,该状态机在您使用 CreateModelCustomizationJobAPI 操作时提供完全访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "CreateModelCustomizationJob1", "Action": [ "bedrock:CreateModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:region::foundation-model/*", "arn:aws:bedrock:region:account-id:custom-model/*", "arn:aws:bedrock:region:account-id:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::account-id:role/myRole" ] } ] }

IAM使用 CreateModelCustomizationJob .sync 访问特定基础模型的策略示例

以下是状态机访问amazon.titan-text-express-v1使用 CreateModelCustomizationJob.sync API 操作命名的特定基础模型的IAM策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "CreateModelCustomizationJob1", "Action": [ "bedrock:CreateModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:region::foundation-model/amazon.titan-text-express-v1", "arn:aws:bedrock:region:account-id:custom-model/*", "arn:aws:bedrock:region:account-id:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "bedrock:GetModelCustomizationJob", "bedrock:StopModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:region:account-id:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob3", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::account-id:role/myRole" ] } ] }

IAM使用 CreateModelCustomizationJob .sync 访问自定义模型的策略示例

以下是状态机使用 CreateModelCustomizationJob.sync API 操作访问自定义模型的IAM策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "CreateModelCustomizationJob1", "Action": [ "bedrock:CreateModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:region:account-id:custom-model/*", "arn:aws:bedrock:region:account-id:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "bedrock:GetModelCustomizationJob", "bedrock:StopModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:region:account-id:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob3", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::account-id:role/myRole" ] } ] }

使用 CreateModelCustomizationJob .sync 的完全访问IAM策略示例

以下是状态机的IAM策略示例,该状态机在您使用 CreateModelCustomizationJob.sync API 操作时提供完全访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "CreateModelCustomizationJob1", "Action": [ "bedrock:CreateModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:region::foundation-model/*", "arn:aws:bedrock:region:account-id:custom-model/*", "arn:aws:bedrock:region:account-id:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "bedrock:GetModelCustomizationJob", "bedrock:StopModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:region:account-id:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob3", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::account-id:role/myRole" ] } ] }