Self-managed 策略
Amazon Bedrock AgentCore Memory 中的自我管理策略可让您完全控制内存提取和整合管道。通过自我管理策略,您可以构建自定义内存处理工作流程,同时利用 Amazon Bedrock AgentCore 进行存储和检索。
自我管理策略与批量操作(BatchCreateMemoryRecords、、BatchDeleteMemoryRecords)相结合 BatchUpdateMemoryRecords,可让您直接将这些提取的记录提取到 Amazon Bedrock AgentCore 内存中以实现搜索功能。
借助自我管理策略,您可以:
-
通过可配置的触发器控制管道调用
-
与外部处理系统集成
-
实现自定义提取和合并算法
-
调用任何首选模型进行提取和合并
-
定义自定义内存记录架构、命名空间等。
-
将提取的记录摄取到 Amazon Bedrock 的 AgentCore 长期存储器中
创建和使用自我管理策略
Self-managed 策略遵循从触发器配置到内存记录存储的五步过程。
-
配置触发器:定义根据短期记忆事件调用管道的触发条件(消息数、空闲超时、令牌计数)
-
接收通知和有效负载传送:Amazon Bedrock 会向您的 SNS 主题 AgentCore 发布通知,并在满足触发条件时将对话数据发送到您的 S3 存储桶
-
提取内存记录:您的自定义管道会检索有效负载并应用提取逻辑来识别相关内存
-
整合内存记录:处理提取的存储器以删除重复项并解决与现有记录的冲突
-
存储内存记录:使用批处理 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:设置计算
-
创建 SQS 队列并订阅您的 SNS 主题
-
创建 L AWS ambda 函数来处理通知
-
配置 Lambda 执行角色权限
步骤 2:处理管道
以下示例管道由四个主要组件组成:
-
通知处理-处理 SNS 通知和下载 S3 有效负载
-
记忆提取-使用基岩模型从对话中提取相关信息
-
内存整合-删除重复数据,并将提取的存储器与现有记录合并
-
批量摄取-使用批处理 API 将处理过的内存存储回 Amazon Bedrock AgentCore
测试您的实现
-
创建事件:使用 Amazon Bedrock AgentCore API 创建对话事件 ()
CreateEvent -
监控通知:验证当触发器满足时,您的 SNS 主题是否会收到通知
-
验证处理:检查您的 Lambda 函数是否正确处理有效负载并提取内存记录
-
验证摄取:用于确认提取
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 加密