本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Step Functions 调用亚马逊 Bedrock AgentCore 安全带
你可以将 Step Functions 与 Amazon Bedrock AgentCore 集成,从状态机调用安全带。Harness 是一种托管运行时,用于协调模型推理、工具使用和多回合对话。在 Workflow Studio 中,搜索AgentCore InvokeHarness以找到此状态并将其拖到您的工作流程中。
在配置面板中,您可以使用 Quick Create Harness 创建新的安全带和执行角色,也可以选择现有的线束 ARN。使用现有线束时,可以按每次调用覆盖配置——任务状态定义中的值会覆盖线束默认值。有关可用参数,请参阅InvokeHarness《亚马逊 Bedrock AgentCore API 参考》。有关线束执行角色的更多信息,请参阅 Amazon Bedrock AgentCore 开发者指南中的运行时权限。
提示
要为您的代理资源增加可观察性,请启用 CloudWatch 交易搜索。有关更多信息,请参阅 A mazon CloudWatch 用户指南中的向代理资源添加可观察性。
要了解如何在 Step Functions 中与 AWS 服务集成,请参阅集成 服务和在 Step Functions 中将参数传递给服务 API。
经过优化的 AgentCore 安全带集成的主要特点
-
仅支持请求响应集成模式。不支持运行作业 (.sync)和等待具有任务令牌的回调模式。
-
响应被转换为匡威形状的 JSON 结构。仅返回最后一条助手消息;之前的多回合对话会被丢弃。
-
会话中所有消息的代币使用量指标(
InputTokensOutputTokens、、TotalTokens)汇总。 -
响应中仅包含文本内容。省略了工具使用和推理块
Output.Message.Content。 -
输出大小受任务状态输出限制的约束。有关当前值,请参见与任务执行相关的配额。
-
InvokeHarness任务状态的最大执行时间为 15 分钟(900 秒),即使该TimeoutSeconds值超过该限制也是如此。任务状态超时后,线束会继续执行,直到达到自己配置的超时时间。为避免意外成本,请确保安全带超时时间不超过 15 分钟。 -
Step Functions 控制台执行详细信息视图在代理步骤旁边显示一个 CloudWatch 链接,提供代理推理(包括工具使用情况)的逐向视图。
优化的亚马逊 Bedrock AgentCore 安全带 API
支持以下 API:
InvokeHarness
调用安全带来运行 AI 代理,该代理可以使用工具、访问内存和执行多回合对话。
支持的模式:仅限请求响应。
有关完整的请求语法,请参阅InvokeHarness《Amazon Bedrock AgentCore API 参考》。
中的参数 Step Functions 表示为 PascalCase
即使原生服务 API 在 camelCase 中(例如 API 操作)startSyncExecution,您也可以在中指定参数 PascalCase,例如:。StateMachineArn
响应字段
-
Output.Message— 特工的最后一条助手消息。包含Role(总是"assistant")和Content(文本块数组)。只返回最后一个助手回合;多回合对话中较早的回合会被丢弃。 -
Output.Message.Content— 内容块数组。每个区块都包含一个带有代理响应文本的Text字段。仅包含文本内容;省略了工具使用和推理块。 -
StopReason— 为什么代理停了下来。值:end_turn、max_tokens、stop_sequence、tool_use。 -
Usage— 所有回合的代币消耗指标汇总。包含InputTokensOutputTokens、和TotalTokens。 -
Metrics.LatencyMs— 总调用延迟(以毫秒为单位),在所有回合中汇总。
响应语法
{
"Output": {
"Message": {
"Role": "string",
"Content": [
{
"Text": "string"
}
]
}
},
"StopReason": "string",
"Usage": {
"InputTokens": long,
"OutputTokens": long,
"TotalTokens": long
},
"Metrics": {
"LatencyMs": long
}
}
注意
停止执行或任务状态并不能阻止安全带继续运行。
Amazon Bedrock AgentCore 集成的任务状态定义
以下示例说明如何定义调用 Amazon Bedro AgentCore ck 工具的任务状态。
该RuntimeSessionId字段用于标识对话会话。在所有调用中使用相同的会话 ID 继续对话。
注意
Step Functions 资源 URI 使用bedrockagentcore(没有连字符),而 Amazon Bedrock AgentCore 资源 ARN 使用bedrock-agentcore(带连字符)。
例使用模型覆盖和系统提示进行基本调用
{
"Type": "Task",
"Resource": "arn:aws:states:::bedrockagentcore:invokeHarness",
"Arguments": {
"HarnessArn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:harness/my-agent-harness",
"RuntimeSessionId": "{% $uuid() %}",
"Messages": [
{
"Content": [{ "Text": "{% $states.input.userMessage %}" }],
"Role": "user"
}
],
"SystemPrompt": [{ "Text": "You are a helpful customer service agent." }],
"Model": {
"BedrockModelConfig": {
"Temperature": 0.7,
"ModelId": "global.anthropic.claude-sonnet-4-6"
}
},
"MaxIterations": 75,
"TimeoutSeconds": 600
},
"End": true
}例使用工具调用(浏览器)
{
"Type": "Task",
"Resource": "arn:aws:states:::bedrockagentcore:invokeHarness",
"Arguments": {
"HarnessArn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:harness/order-agent",
"RuntimeSessionId": "{% $uuid() %}",
"Messages": [
{
"Content": [{ "Text": "What is the status of order #12345?" }],
"Role": "user"
}
],
"Tools": [
{
"Type": "agentcore_browser",
"Name": "aws_browser_v1",
"Config": {
"AgentCoreBrowser": {
"BrowserArn": "arn:aws:bedrock-agentcore:us-east-1:aws:browser/aws.browser.v1"
}
}
}
],
"MaxIterations": 10,
"TimeoutSeconds": 300
},
"End": true
}提示
在运行完整执行之前,您可以使用 TestStateAPI 单独测试此状态。
错误处理
InvokeHarnessAPI 可能会因各种错误而失败,包括限制、验证和拒绝访问错误。有关完整列表,请参阅 Amazon Bedrock AgentCore API 参考中的InvokeHarness错误。
以下示例显示了带有Retry和Catch字段的任务状态,用于处理错误:
{
"Type": "Task",
"Resource": "arn:aws:states:::bedrockagentcore:invokeHarness",
"Arguments": {
"HarnessArn": "arn:aws:bedrock-agentcore:us-east-1:123456789012:harness/my-harness",
"Messages": [
{
"Content": [{ "Text": "{% $states.input.userMessage %}" }],
"Role": "user"
}
]
},
"Retry": [
{
"ErrorEquals": ["BedrockAgentCore.ThrottlingException"],
"IntervalSeconds": 2,
"MaxAttempts": 3,
"BackoffRate": 2.0
}
],
"Catch": [
{
"ErrorEquals": ["BedrockAgentCore.ResourceNotFoundException"],
"Next": "HandleNotFound"
},
{
"ErrorEquals": ["States.ALL"],
"Next": "HandleError"
}
],
"End": true
}
调用 Amazon Bedrock 的 IAM 政策 AgentCore
以下示例模板展示了如何根据状态机定义中的资源 AWS Step Functions 生成 IAM 策略。有关更多信息,请参阅Step Functions 如何为集成服务生成 IAM 策略和探索 Step Functions 中的服务集成模式。
Amazon Bedrock AgentCore 集成的 IAM 策略示例
以下示例展示了如何为您的 Step Functions 执行角色创建 IAM 策略以与 Amazon Bedrock AgentCore 资源进行交互。
在以下策略示例中,使用您自己的值替换占位符值。
用于调用特定工具的 IAM 策略
以下示例策略允许通过 ARN 调用特定的 Amazon Bedrock AgentCore 安全带。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "InvokeSpecificHarness",
"Effect": "Allow",
"Action": [
"bedrock-agentcore:InvokeHarness",
"bedrock-agentcore:InvokeAgentRuntime"
],
"Resource": "arn:aws:bedrock-agentcore:region:accountId:harness/harnessName"
}
]
}
用于调用账户中所有安全带的 IAM 策略
以下示例政策允许在您的账户中调用任何 Amazon Bedrock AgentCore 安全带。我们建议尽可能将范围缩小到特定的安全带 ARN。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "InvokeAllHarnesses",
"Effect": "Allow",
"Action": [
"bedrock-agentcore:InvokeHarness",
"bedrock-agentcore:InvokeAgentRuntime"
],
"Resource": "arn:aws:bedrock-agentcore:region:accountId:harness/*"
}
]
}
注意
如果您的线束使用网关、浏览器或代码解释器等工具,则这些权限是在线束执行角色上配置的,而不是在 Step Functions 执行角色上配置的。有关更多信息,请参阅 Amazon Bedrock AgentCore 用户指南中的控制执行角色权限。