使用 Step Functions 调用和自定义 Amazon Bedrock 模型
可以将 Step Functions 与 Amazon Bedrock 集成,以调用指定的 Amazon Bedrock 模型并创建微调任务来自定义模型。本页列出了经优化的 Amazon Bedrock API,并提供了提取模型调用结果的示例 Task 状态。
要了解如何在 Step Functions 中与 AWS 服务集成,请参阅集成 服务和在 Step Functions 中将参数传递给服务 API。
提示
要部署与 Amazon Bedrock 集成的示例工作流程,请参阅使用 Amazon Bedrock 执行 AI 提示串接。
Amazon Bedrock 服务集成 API
要将 AWS Step Functions 与 Amazon Bedrock 集成,您可以使用以下 API。这些 API 与相应的 Amazon Bedrock API 类似,只是 InvokeModel 有额外的请求字段。
Amazon Bedrock API:CreateModelCustomizationJob
创建微调作业以自定义基础模型。对于请求响应,可以使用 CreateModelCustomizationJob 来调用 Step Functions 集成 API;或者,对于运行任务 (.sync) 集成模式,可以使用 CreateModelCustomizationJob.sync 来调用此 API。API 调用的字段没有区别。
Amazon Bedrock API:InvokeModel
使用您在请求正文中提供的输入,调用指定的 Amazon Bedrock 模型来运行推理。您可以使用 InvokeModel 对文本模型、图像模型和嵌入模型运行推理。
InvokeModel 的 Amazon Bedrock 服务集成 API 请求正文包含以下额外参数。
-
Body:以 Content-Type 请求标头中指定的格式指定输入数据。Body包含特定于目标模型的参数。如果您使用
InvokeModelAPI,则必须指定Body参数。Step Functions 不会验证您在Body中提供的输入。当使用 Amazon Bedrock 经优化的集成指定
Body时,您可以指定最大 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 权限。本部分还包含授予完全访问权限的策略示例。
切记用特定资源信息替换斜体文本。
使用 InvokeModel 访问特定基础模型的 IAM 策略示例
以下是状态机的一个 IAM 策略示例,它使用 InvokeModel API 操作访问名为 amazon.titan-text-express-v1 的特定基础模型。
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "InvokeModel1", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1" ] } ] }
使用 InvokeModel 访问特定预置模型的 IAM 策略示例
以下是状态机的一个 IAM 策略示例,它使用 InvokeModel API 操作访问名为 c2oi931ulksx 的特定预置模型。
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "InvokeModel1", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:provisioned-model/c2oi931ulksx" ] } ] }
使用 InvokeModel 的完全访问 IAM 策略示例
以下是状态机的一个 IAM 策略示例,它在您使用 InvokeModel API 操作时提供完全访问权限。
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "InvokeModel1", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:us-east-1::foundation-model/*", "arn:aws:bedrock:us-east-1:123456789012:provisioned-model/*" ] } ] }
将特定基础模型作为基本模型访问的 IAM 策略示例
以下是状态机的一个 IAM 策略示例,它使用 CreateModelCustomizationJob API 操作将名为 amazon.titan-text-express-v1 的特定基础模型作为基本模型访问。
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "CreateModelCustomizationJob1", "Action": [ "bedrock:CreateModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1", "arn:aws:bedrock:us-east-1:123456789012:custom-model/*", "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012:role/myRole" ] } ] }
将特定自定义模型作为基本模型访问的 IAM 策略示例
以下是状态机的一个 IAM 策略示例,它使用 CreateModelCustomizationJob API 操作将特定自定义模型作为基本模型访问。
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "CreateModelCustomizationJob1", "Action": [ "bedrock:CreateModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:custom-model/*", "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012:role/myRoleName" ] } ] }
使用 CreateModelCustomizationJob.sync 的完全访问 IAM 策略示例
以下是状态机的一个 IAM 策略示例,它在您使用 CreateModelCustomizationJob API 操作时提供完全访问权限。
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "CreateModelCustomizationJob1", "Action": [ "bedrock:CreateModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:us-east-1::foundation-model/*", "arn:aws:bedrock:us-east-1:123456789012:custom-model/*", "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012:role/myRole" ] } ] }
使用 CreateModelCustomizationJob.sync 访问特定基础模型的 IAM 策略示例
以下是状态机的一个 IAM 策略示例,它使用 CreateModelCustomizationJob.sync API 操作访问名为 amazon.titan-text-express-v1 的特定基础模型。
-
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Sid": "CreateModelCustomizationJob1", "Action": [ "bedrock:CreateModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1", "arn:aws:bedrock:us-east-1:123456789012:custom-model/*", "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "bedrock:GetModelCustomizationJob", "bedrock:StopModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob3", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012: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:us-east-1:123456789012:custom-model/*", "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "bedrock:GetModelCustomizationJob", "bedrock:StopModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob3", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012: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:us-east-1::foundation-model/*", "arn:aws:bedrock:us-east-1:123456789012:custom-model/*", "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob2", "Action": [ "bedrock:GetModelCustomizationJob", "bedrock:StopModelCustomizationJob" ], "Resource": [ "arn:aws:bedrock:us-east-1:123456789012:model-customization-job/*" ] }, { "Effect": "Allow", "Sid": "CreateModelCustomizationJob3", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012:role/myRole" ] } ] }