

# セルフマネージド戦略
<a name="memory-self-managed-strategies"></a>

Amazon Bedrock AgentCore Memory のセルフマネージド戦略により、メモリ抽出パイプラインと統合パイプラインを完全に制御できます。セルフマネージド戦略を使用すると、Amazon Bedrock AgentCore を活用してストレージと取り出しを行いながら、カスタムメモリ処理ワークフローを構築できます。

バッチオペレーション ([BatchCreateMemoryRecords](https://docs.aws.amazon.com/bedrock-agentcore/latest/APIReference/API_BatchCreateMemoryRecords.html)、[BatchUpdateMemoryRecords](https://docs.aws.amazon.com/bedrock-agentcore/latest/APIReference/API_BatchUpdateMemoryRecords.html)、[BatchDeleteMemoryRecords](https://docs.aws.amazon.com/bedrock-agentcore/latest/APIReference/API_BatchDeleteMemoryRecords.html)) と組み合わせてセルフマネージド戦略を使用すると、抽出されたレコードを Amazon Bedrock AgentCore メモリに直接取り込み、検索機能を使用できます。

セルフマネージド戦略を使用すると、次のことができます。
+ 設定可能なトリガーによるパイプライン呼び出しの制御
+ 外部処理システムとの統合
+ カスタム抽出アルゴリズムと統合アルゴリズムを実装する
+ 抽出と統合に任意の優先モデルを呼び出す
+ カスタムメモリレコードスキーマ、名前空間などを定義します。
+ 抽出されたレコードを Amazon Bedrock AgentCore 長期メモリに取り込む

**Topics**
+ [セルフマネージド戦略を作成して使用する](#use-self-managed-strategy)
+ [前提条件](#prerequisites)
+ [インフラストラクチャを設定します。](#setting-up-infrastructure)
+ [セルフマネージド戦略を作成する](#creating-self-managed-strategy)
+ [ペイロード配信について](#understanding-payload-delivery)
+ [カスタムパイプラインを構築する](#building-custom-pipeline)
+ [実装をテストする](#testing-implementation)
+ [ベストプラクティス](#best-practices)

## セルフマネージド戦略を作成して使用する
<a name="use-self-managed-strategy"></a>

セルフマネージド戦略は、トリガー設定からメモリレコードストレージまでの 5 ステップのプロセスに従います。

1.  **トリガーを設定する**: 短期メモリイベントに基づいてパイプラインを呼び出すトリガー条件 (メッセージ数、アイドルタイムアウト、トークン数) を定義します。

1.  **通知とペイロード配信の受信**: Amazon Bedrock AgentCore は、SNS トピックに通知を発行し、トリガー条件が満たされると会話データを S3 バケットに配信します。

1.  **メモリレコードの抽出**: カスタムパイプラインがペイロードを取得し、抽出ロジックを適用して関連するメモリを特定します。

1.  **メモリレコードの統合**: 抽出されたメモリを処理して重複を削除し、既存のレコードとの競合を解決する

1.  **メモリレコードの保存**: バッチ APIsを使用して、処理されたメモリレコードを Amazon Bedrock AgentCore 長期メモリに保存します。

## 前提条件
<a name="prerequisites"></a>

セルフマネージド戦略を設定する前に、以下を確認してください。
+ 適切なアクセス許可を持つ AWS アカウント
+ Amazon Bedrock AgentCore アクセス
+ IAM、Amazon AWS S3、Amazon SNS の基本的な理解 Amazon S3

## インフラストラクチャを設定します。
<a name="setting-up-infrastructure"></a>

Amazon Bedrock AgentCore が AWS リソースにアクセスするために必要な S3 バケット、SNS トピック、IAM ロールなどの必要なリソースを作成します。

### ステップ 1: S3 バケットを作成する
<a name="create-s3-bucket"></a>

Amazon Bedrock AgentCore がバッチ処理されたイベントペイロードを配信するアカウントに S3 バケットを作成します。

**重要**  
処理後にオブジェクトを自動的に削除してコストを制御するようにライフサイクルポリシーを設定します。

### ステップ 2: SNS トピックを作成する
<a name="create-sns-topic"></a>

ジョブ通知用の SNS トピックを作成します。セッション内の処理順序がユースケースにとって重要な場合は、FIFO トピックを使用します。

### ステップ 3: IAM ロールを作成する
<a name="create-iam-role"></a>

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"
}
```

## セルフマネージド戦略を作成する
<a name="creating-self-managed-strategy"></a>

Amazon Bedrock AgentCore コントロールプレーン APIsを使用して、セルフマネージド戦略で AgentCore メモリを作成または更新します。

### 必要なアクセス許可
<a name="required-permissions"></a>

IAM ユーザーまたはロールには以下が必要です。
+ bedrock-agentcore:\* アクセス許可
+  `iam:PassRole` 実行ロールの アクセス許可

### セルフマネージド戦略を使用して AgentCore メモリを作成する
<a name="create-memory-with-strategy"></a>

 AWS SDK `CreateMemory`オペレーションを使用して、セルフマネージド戦略を持つ AgentCore Memory を作成します。

```
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"
            }
          }
        }
      }
    }
  ]'
```

## ペイロード配信について
<a name="understanding-payload-delivery"></a>

トリガー条件が満たされると、Amazon Bedrock AgentCore は特定のスキーマを使用して通知とペイロードを送信します。

### SNS 通知メッセージ
<a name="sns-notification-message"></a>

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

### S3 ペイロード構造
<a name="s3-payload-structure"></a>

```
{
  "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": "{}",
    }
  ]
}
```

## カスタムパイプラインを構築する
<a name="building-custom-pipeline"></a>

このセクションでは、 AWS Lambda と SQS を使用してセルフマネージド型メモリ処理パイプラインを構築する 1 つのアプローチを示します。これは 1 つの例にすぎません。要件を満たす任意のコンピューティングプラットフォーム (EC2、ECS、Fargate)、ロジック、処理フレームワークを使用してパイプラインを実装できます。

### ステップ 1: コンピューティングを設定する
<a name="set-up-compute"></a>

1. SQS キューを作成し、SNS トピックにサブスクライブする

1. 通知を処理する AWS Lambda 関数を作成する

1. Lambda 実行ロールのアクセス許可の設定

### ステップ 2: パイプラインを処理する
<a name="processing-pipeline"></a>

次のパイプライン例は、4 つの主要コンポーネントで構成されています。

1. 通知処理 - SNS 通知の処理と S3 ペイロードのダウンロード

1. メモリ抽出 - Bedrock モデルを使用して会話から関連情報を抽出する

1. メモリ統合 - 抽出されたメモリを既存のレコードと重複排除してマージする

1. バッチ取り込み - バッチ APIs を使用して処理されたメモリを Amazon Bedrock AgentCore に保存する

## 実装をテストする
<a name="testing-implementation"></a>

1.  **イベントの作成**: Amazon Bedrock AgentCore APIs を使用して会話イベントを作成する (`CreateEvent`)

1.  **通知のモニタリング**: トリガーが満たされたときに SNS トピックが通知を受信することを確認する

1.  **処理の検証**: Lambda 関数がペイロードを正しく処理し、メモリレコードを抽出することを確認する

1.  **取り込みの確認**: 抽出されたメモリが保存されていることを確認する`list-memory-records`ために を使用します。

### 例: テストイベントの作成
<a name="creating-test-events"></a>

```
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"
    }
  }]'
```

### 例: メモリレコードの取得
<a name="retrieving-memory-records"></a>

```
# 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
```

## ベストプラクティス
<a name="best-practices"></a>

セルフマネージド戦略を実装するときは、パフォーマンス、信頼性、コスト最適化、セキュリティに関する以下のベストプラクティスに従ってください。

### パフォーマンスと信頼性
<a name="performance-reliability"></a>
+  **SLA 共有** : 長期メモリレコード生成 SLA は Amazon Bedrock AgentCore とセルフマネージドパイプライン間で共有されます
+  **エラー処理**: 失敗した処理に対して適切な再試行ロジックとデッドレターキューを実装する
+  **のモニタリング**: 障害とレイテンシーのデバッグと処理のための CloudWatch ログ、メトリクス、アラームを設定します。また、Amazon Bedrock AgentCore から提供されたログでペイロード配信の失敗を確認します。

### コスト最適化
<a name="cost-optimization"></a>
+  **S3 ライフサイクルポリシー**: 処理されたペイロードの自動削除を設定してストレージコストを制御する
+  **適切なサイズ**設定: 処理要件に基づいて適切なコンピューティングメモリとタイムアウト設定を選択します。

### 処理に関する考慮事項
<a name="processing-considerations"></a>
+  **トリガーの最適化**: ユースケースの要件に基づいてトリガー条件を設定します。レイテンシーと処理コストに対するアプリケーションの許容度を考慮して、処理効率とメモリの鮮度のバランスを取ります。
+  **FIFO トピック**: セッションの順序付けが重要な場合 (要約ワークフローなど) に FIFO SNS トピックを使用する
+  **メモリ統合**: 重複排除ロジックを実装して、冗長または競合するメモリレコードの保存を防止します。これにより、ストレージコストを削減し、取得精度が向上します。
+  **メモリレコードの整理**: レコードを取り込むときは、常に意味のある名前空間と戦略 IDs を含めて、メモリレコードの効率的な分類、フィルタリング、取得を可能にします。

### セキュリティ
<a name="security"></a>
+  **最小特権**: すべての IAM ロールに必要な最小限のアクセス許可を付与します
+  **暗号化**: 機密データを含む S3 バケットと SNS トピックに KMS 暗号化を使用する