自我管理策略
Amazon Bedrock AgentCore 記憶體中的自我管理策略可讓您完全控制記憶體擷取和整合管道。透過自我管理策略,您可以建置自訂記憶體處理工作流程,同時利用 Amazon Bedrock AgentCore 進行儲存和擷取。
自我管理策略結合批次操作 ( BatchCreateMemoryRecords、BatchUpdateMemoryRecords、BatchDeleteMemoryRecords),可讓您將這些擷取的記錄直接擷取到 Amazon Bedrock AgentCore 記憶體中,以用於搜尋功能。
透過自我管理策略,您可以:
-
透過可設定的觸發條件控制管道調用
-
與外部處理系統整合
-
實作自訂擷取和合併演算法
-
調用任何偏好的模型進行擷取和合併
-
定義自訂記憶體記錄結構描述、命名空間等。
-
將擷取的記錄擷取至 Amazon Bedrock AgentCore 長期記憶體
建立和使用自我管理策略
自我管理策略遵循從觸發組態到記憶體記錄儲存的五個步驟。
-
設定觸發:定義根據短期記憶體事件調用管道的觸發條件 (訊息計數、閒置逾時、字符計數)
-
接收通知和承載交付:Amazon Bedrock AgentCore 會將通知發佈到您的 SNS 主題,並在符合觸發條件時將對話資料交付到您的 S3 儲存貯體
-
擷取記憶體記錄 :您的自訂管道會擷取承載並套用擷取邏輯來識別相關的記憶體
-
合併記憶體記錄 :處理擷取的記憶體,以移除重複項目並解決與現有記錄的衝突
-
儲存記憶體記錄 :使用批次 APIs將已處理的記憶體記錄儲存回 Amazon Bedrock AgentCore 長期記憶體
先決條件
在設定自我管理策略之前,請確認您已:
-
具有適當許可 AWS 的帳戶
-
Amazon Bedrock AgentCore 存取
-
對 AWS IAM、Amazon S3 和 Amazon 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 Bedrock AgentCore 控制平面 APIs,透過自我管理策略建立或更新 AgentCore 記憶體。
所需的許可
您的 IAM 使用者或角色需要:
-
bedrock-agentcore:* 許可
-
iam:PassRole執行角色的 許可
使用自我管理策略建立 AgentCore 記憶體
使用 AWS SDK 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": "{}", } ] }
建置您的自訂管道
本節示範使用 AWS Lambda 和 SQS 建置自我管理記憶體處理管道的一種方法。這只是一個範例 - 您可以使用任何運算平台 (EC2、ECS、Fargate)、邏輯和處理架構來實作管道,以符合您的需求。
步驟 1:設定運算
-
建立 SQS 佇列並訂閱您的 SNS 主題
-
建立 AWS Lambda 函數來處理通知
-
設定 Lambda 執行角色許可
步驟 2:處理管道
下列範例管道包含四個主要元件:
-
通知處理 - 處理 SNS 通知和下載 S3 承載
-
記憶體擷取 - 使用底端模型從對話中擷取相關資訊
-
記憶體整合 - 將擷取的記憶體與現有記錄重複刪除和合併
-
批次擷取 - 使用批次 APIs 將處理的記憶體儲存回 Amazon Bedrock AgentCore
測試您的實作
-
建立事件 :使用 Amazon Bedrock AgentCore APIs建立對話事件
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 共用 :Amazon Bedrock AgentCore 與您的自我管理管道之間共用長期記憶體記錄產生 SLA
-
處理錯誤:針對失敗的處理實作適當的重試邏輯和無效字母佇列
-
監控 :設定 CloudWatch 日誌、指標、警示以偵錯和處理失敗和延遲。此外,檢查來自 Amazon Bedrock AgentCore 的附加日誌是否有承載交付失敗
成本最佳化
-
S3 生命週期政策:設定自動刪除已處理的承載,以控制儲存成本
-
適當調整大小:根據您的處理需求選擇適當的運算記憶體和逾時設定
處理考量
-
觸發最佳化 :根據您的使用案例需求設定觸發條件 - 透過考慮應用程式的延遲容錯能力與處理成本,在處理效率和記憶體新鮮度之間取得平衡。
-
FIFO 主題 :工作階段排序至關重要時使用 FIFO SNS 主題 (例如,用於摘要工作流程)
-
記憶體整合:實作重複資料刪除邏輯,以防止儲存備援或衝突的記憶體記錄,進而降低儲存成本並改善擷取準確性
-
記憶體記錄組織 :擷取記錄時一律包含有意義的命名空間和策略 IDs,以有效分類、篩選和擷取記憶體記錄
安全
-
最低權限 :授予所有 IAM 角色所需的最低許可
-
加密:對包含敏感資料的 S3 儲存貯體和 SNS 主題使用 KMS 加密