View a markdown version of this page

Self-managed 策略 - Amazon Bedrock AgentCore

Self-managed 策略

Amazon Bedrock AgentCore Memory 中的自我管理策略可让您完全控制内存提取和整合管道。通过自我管理策略,您可以构建自定义内存处理工作流程,同时利用 Amazon Bedrock AgentCore 进行存储和检索。

自我管理策略与批量操作(BatchCreateMemoryRecords、、BatchDeleteMemoryRecords)相结合 BatchUpdateMemoryRecords,可让您直接将这些提取的记录提取到 Amazon Bedrock AgentCore 内存中以实现搜索功能。

借助自我管理策略,您可以:

  • 通过可配置的触发器控制管道调用

  • 与外部处理系统集成

  • 实现自定义提取和合并算法

  • 调用任何首选模型进行提取和合并

  • 定义自定义内存记录架构、命名空间等。

  • 将提取的记录摄取到 Amazon Bedrock 的 AgentCore 长期存储器中

创建和使用自我管理策略

Self-managed 策略遵循从触发器配置到内存记录存储的五步过程。

  1. 配置触发器:定义根据短期记忆事件调用管道的触发条件(消息数、空闲超时、令牌计数)

  2. 接收通知和有效负载传送:Amazon Bedrock 会向您的 SNS 主题 AgentCore 发布通知,并在满足触发条件时将对话数据发送到您的 S3 存储桶

  3. 提取内存记录:您的自定义管道会检索有效负载并应用提取逻辑来识别相关内存

  4. 整合内存记录:处理提取的存储器以删除重复项并解决与现有记录的冲突

  5. 存储内存记录:使用批处理 API 将处理后的内存记录存储回 Amazon Bedrock AgentCore 长期存储器中

先决条件

在设置自我管理策略之前,请确认您已经:

  • 具有适当权限的 AWS 账户

  • 亚马逊 Bedrock 访问权限 AgentCore

  • 对 AWS IAM、Amazon S3 和亚马逊 SNS 的基本了解

设置基础设施

创建 Amazon Bedrock AgentCore 访问您的 AWS 资源所需的资源,包括 S3 存储桶、SNS 主题和 IAM 角色。

步骤 1:创建 S3 存储桶

在您的账户中创建一个 S3 存储桶,Amazon Bedrock AgentCore 将在其中交付批量事件有效负载。

重要

配置生命周期策略,使其在处理后自动删除对象,从而控制成本。

步骤 2:创建 SNS 主题

为工作通知创建 SNS 主题。如果在会话中处理顺序对您的用例很重要,请使用 FIFO 主题。

步骤 3:创建 IAM 角色

创建一个 Amazon Bedrock AgentCore 可以代入的 IAM 角色来访问您的资源。

信任策略

使用以下信任策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "bedrock-agentcore.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:bedrock-agentcore:<region>:<account-id>:memory/*" } } } ] }

权限策略

使用以下权限策略:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3PayloadDelivery", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::your-agentcore-payloads-bucket", "arn:aws:s3:::your-agentcore-payloads-bucket/*" ] }, { "Sid": "SNSNotifications", "Effect": "Allow", "Action": [ "sns:GetTopicAttributes", "sns:Publish" ], "Resource": "arn:aws:sns:us-east-1:123456789012:agentcore-memory-jobs" } ] }

其他 KMS 权限(如果使用加密资源)

如果您使用加密资源,请添加以下 KMS 权限:

{ "Sid": "KMSPermissions", "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/your-key-id" }

创建自我管理的策略

使用 Amazon Bed AgentCore rock 控制平面 API 使用自我管理策略创建或更新 AgentCore 内存。

所需的权限

您的 IAM 用户或角色需要:

  • bedrock-agentcore:* 权限

  • iam:PassRole执行角色的权限

使用自我管理策略创建 AgentCore 记忆

使用 S AWS DK CreateMemory 操作创建具有自我管理策略的 AgentCore 内存。

aws bedrock-agentcore-control create-memory \ --name "MyCustomMemory" \ --description "Memory with self-managed extraction strategy" \ --memory-execution-role-arn "arn:aws:iam::123456789012:role/AgentCoreMemoryRole" \ --event-expiry-duration 90 \ --memory-strategies '[ { "customMemoryStrategy": { "name": "SelfManagedExtraction", "description": "Custom extraction strategy", "configuration": { "selfManagedConfiguration": { "triggerConditions": [ { "messageBasedTrigger": { "messageCount": 6 } }, { "tokenBasedTrigger": { "tokenCount": 1000 } }, { "timeBasedTrigger": { "idleSessionTimeout": 30 } } ], "historicalContextWindowSize": 2, "invocationConfiguration": { "payloadDeliveryBucketName": "your-agentcore-payloads-bucket", "topicArn": "arn:aws:sns:us-east-1:123456789012:agentcore-memory-jobs" } } } } } ]'

了解有效载荷交付

当触发条件得到满足时,Amazon Bedrock AgentCore 会使用特定的架构发送通知和有效负载。

SNS 通知消息

{ "jobId": "unique-job-identifier", "s3PayloadLocation": "s3://bucket/path/to/payload.json", "memoryId": "your-memory-id", "strategyId": "your-strategy-id" }

S3 有效载荷结构

{ "requestId": "request-identifier", "accountId": "123456789012", "memoryId": "your-memory-id", "actorId": "user-or-agent-id", "sessionId": "conversation-session-id", "strategyId": "your-strategy-id", "startingTimestamp": 1634567890, "endingTimestamp": 1634567920, "currentContext": [ { "role": "USER", "content": { "text": "User message content" } }, { "role": "ASSISTANT", "content": { "text": "Assistant response" } } ], "historicalContext": [ { "role": "USER", "content": { "text": "User message content" } }, { "role": "ASSISTANT", "content": { "text": "Previous assistant response" } }, { "blob": "{}", } ] }

构建您的自定义管道

本节演示了一种使用 Lambd AWS a 和 SQS 构建自我管理的内存处理管道的方法。这只是一个示例,您可以使用任何符合您要求的计算平台(EC2、ECS、Fargate)、逻辑和处理框架来实现您的管道。

步骤 1:设置计算

  1. 创建 SQS 队列并订阅您的 SNS 主题

  2. 创建 L AWS ambda 函数来处理通知

  3. 配置 Lambda 执行角色权限

步骤 2:处理管道

以下示例管道由四个主要组件组成:

  1. 通知处理-处理 SNS 通知和下载 S3 有效负载

  2. 记忆提取-使用基岩模型从对话中提取相关信息

  3. 内存整合-删除重复数据,并将提取的存储器与现有记录合并

  4. 批量摄取-使用批处理 API 将处理过的内存存储回 Amazon Bedrock AgentCore

测试您的实现

  1. 创建事件:使用 Amazon Bedrock AgentCore API 创建对话事件 () CreateEvent

  2. 监控通知:验证当触发器满足时,您的 SNS 主题是否会收到通知

  3. 验证处理:检查您的 Lambda 函数是否正确处理有效负载并提取内存记录

  4. 验证摄取:用于确认提取list-memory-records的内存已存储

示例:创建测试事件

aws bedrock-agentcore create-event \ --memory-id "your-memory-id" \ --actor-id "test-user" \ --session-id "test-session-1" \ --event-timestamp "2024-01-15T10:00:00Z" \ --payload '[{ "conversational": { "content": {"text": "I prefer Italian restaurants with outdoor seating"}, "role": "USER" } }]'

示例:检索内存记录

# List records belonging to a specific namespace aws bedrock-agentcore list-memory-records \ --memory-id "your-memory-id" \ --namespace "/actor/Jane/" # lists all records present in the given namespace # List records belonging to a particular namespace hierarchy aws bedrock-agentcore list-memory-records \ --memory-id "your-memory-id" \ --namespace-path "/" # lists all records present under the namespace hierarchy

最佳实践

在实施自我管理策略时,请遵循这些最佳实践,以提高性能、可靠性、成本优化和安全性。

性能和可靠性

  • SLA 共享: Long-term 存储记录生成 SLA 在 Amazon Bedrock AgentCore 和您的自我管理管道之间共享

  • 错误处理:为失败的处理实现正确的重试逻辑和死信队列

  • 监控:为调试和处理失败和延迟设置 CloudWatch 日志、指标和警报。另外,请查看来自 Amazon Bedrock 的销售日志中是否存在有效载荷 AgentCore 交付失败

成本优化

  • S3 生命周期策略:配置自动删除已处理的负载以控制存储成本

  • Right-sizing:根据您的处理要求选择适当的计算内存和超时设置

处理注意事项

  • 触发器优化:根据您的用例要求配置触发条件——通过考虑应用程序对延迟和处理成本的容忍度,在处理效率和内存新鲜度之间取得平衡。

  • FIFO 主题:当会话顺序至关重要时(例如,对于摘要工作流程)使用 FIFO SNS 主题

  • 内存整合:实施重复数据删除逻辑以防止存储冗余或相互冲突的内存记录,从而降低存储成本并提高检索准确性

  • 内存记录组织:在摄取记录时,请务必包含有意义的命名空间和策略 ID,以便对内存记录进行高效的分类、筛选和检索

安全性

  • 最低权限:向所有 IAM 角色授予所需的最低权限

  • 加密:对包含敏感数据的 S3 存储桶和 SNS 主题使用 KMS 加密