View a markdown version of this page

自我管理策略 - Amazon Bedrock AgentCore

自我管理策略

Amazon Bedrock AgentCore 記憶體中的自我管理策略可讓您完全控制記憶體擷取和整合管道。透過自我管理策略,您可以建置自訂記憶體處理工作流程,同時利用 Amazon Bedrock AgentCore 進行儲存和擷取。

自我管理策略結合批次操作 ( BatchCreateMemoryRecordsBatchUpdateMemoryRecordsBatchDeleteMemoryRecords),可讓您將這些擷取的記錄直接擷取到 Amazon Bedrock AgentCore 記憶體中,以用於搜尋功能。

透過自我管理策略,您可以:

  • 透過可設定的觸發條件控制管道調用

  • 與外部處理系統整合

  • 實作自訂擷取和合併演算法

  • 調用任何偏好的模型進行擷取和合併

  • 定義自訂記憶體記錄結構描述、命名空間等。

  • 將擷取的記錄擷取至 Amazon Bedrock AgentCore 長期記憶體

建立和使用自我管理策略

自我管理策略遵循從觸發組態到記憶體記錄儲存的五個步驟。

  1. 設定觸發:定義根據短期記憶體事件調用管道的觸發條件 (訊息計數、閒置逾時、字符計數)

  2. 接收通知和承載交付:Amazon Bedrock AgentCore 會將通知發佈到您的 SNS 主題,並在符合觸發條件時將對話資料交付到您的 S3 儲存貯體

  3. 擷取記憶體記錄 :您的自訂管道會擷取承載並套用擷取邏輯來識別相關的記憶體

  4. 合併記憶體記錄 :處理擷取的記憶體,以移除重複項目並解決與現有記錄的衝突

  5. 儲存記憶體記錄 :使用批次 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:設定運算

  1. 建立 SQS 佇列並訂閱您的 SNS 主題

  2. 建立 AWS Lambda 函數來處理通知

  3. 設定 Lambda 執行角色許可

步驟 2:處理管道

下列範例管道包含四個主要元件:

  1. 通知處理 - 處理 SNS 通知和下載 S3 承載

  2. 記憶體擷取 - 使用底端模型從對話中擷取相關資訊

  3. 記憶體整合 - 將擷取的記憶體與現有記錄重複刪除和合併

  4. 批次擷取 - 使用批次 APIs 將處理的記憶體儲存回 Amazon Bedrock AgentCore

測試您的實作

  1. 建立事件 :使用 Amazon Bedrock AgentCore APIs建立對話事件 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 共用 :Amazon Bedrock AgentCore 與您的自我管理管道之間共用長期記憶體記錄產生 SLA

  • 處理錯誤:針對失敗的處理實作適當的重試邏輯和無效字母佇列

  • 監控 :設定 CloudWatch 日誌、指標、警示以偵錯和處理失敗和延遲。此外,檢查來自 Amazon Bedrock AgentCore 的附加日誌是否有承載交付失敗

成本最佳化

  • S3 生命週期政策:設定自動刪除已處理的承載,以控制儲存成本

  • 適當調整大小:根據您的處理需求選擇適當的運算記憶體和逾時設定

處理考量

  • 觸發最佳化 :根據您的使用案例需求設定觸發條件 - 透過考慮應用程式的延遲容錯能力與處理成本,在處理效率和記憶體新鮮度之間取得平衡。

  • FIFO 主題 :工作階段排序至關重要時使用 FIFO SNS 主題 (例如,用於摘要工作流程)

  • 記憶體整合:實作重複資料刪除邏輯,以防止儲存備援或衝突的記憶體記錄,進而降低儲存成本並改善擷取準確性

  • 記憶體記錄組織 :擷取記錄時一律包含有意義的命名空間和策略 IDs,以有效分類、篩選和擷取記憶體記錄

安全

  • 最低權限 :授予所有 IAM 角色所需的最低許可

  • 加密:對包含敏感資料的 S3 儲存貯體和 SNS 主題使用 KMS 加密