

# Self-managed 策略
<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)、、[BatchDeleteMemoryRecords](https://docs.aws.amazon.com/bedrock-agentcore/latest/APIReference/API_BatchDeleteMemoryRecords.html)）相结合 [BatchUpdateMemoryRecords](https://docs.aws.amazon.com/bedrock-agentcore/latest/APIReference/API_BatchUpdateMemoryRecords.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>

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

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

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

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

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

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

## 先决条件
<a name="prerequisites"></a>

在设置自我管理策略之前，请确认您已经：
+ 具有适当权限的 AWS 账户
+ 亚马逊 Bedrock 访问权限 AgentCore 
+ 对 AWS IAM、Amazon S3 和亚马逊 SNS 的基本了解

## 设置基础设施
<a name="setting-up-infrastructure"></a>

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

### 步骤 1：创建 S3 存储桶
<a name="create-s3-bucket"></a>

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

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

### 步骤 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 Bed AgentCore rock 控制平面 API 使用自我管理策略创建或更新 AgentCore 内存。

### 所需的权限
<a name="required-permissions"></a>

您的 IAM 用户或角色需要：
+ bedrock-agentcore：\* 权限
+  `iam:PassRole`执行角色的权限

### 使用自我管理策略创建 AgentCore 记忆
<a name="create-memory-with-strategy"></a>

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

## 了解有效载荷交付
<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>

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

### 步骤 1：设置计算
<a name="set-up-compute"></a>

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

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

1. 配置 Lambda 执行角色权限

### 步骤 2：处理管道
<a name="processing-pipeline"></a>

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

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

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

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

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

## 测试您的实现
<a name="testing-implementation"></a>

1.  **创建事件**：使用 Amazon Bedrock AgentCore API 创建对话事件 () `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 共享**： Long-term 存储记录生成 SLA 在 Amazon Bedrock AgentCore 和您的自我管理管道之间共享
+  **错误处理**：为失败的处理实现正确的重试逻辑和死信队列
+  **监控**：为调试和处理失败和延迟设置 CloudWatch 日志、指标和警报。另外，请查看来自 Amazon Bedrock 的销售日志中是否存在有效载荷 AgentCore 交付失败

### 成本优化
<a name="cost-optimization"></a>
+  **S3 生命周期策略**：配置自动删除已处理的负载以控制存储成本
+  **Right-sizing**：根据您的处理要求选择适当的计算内存和超时设置

### 处理注意事项
<a name="processing-considerations"></a>
+  **触发器优化**：根据您的用例要求配置触发条件——通过考虑应用程序对延迟和处理成本的容忍度，在处理效率和内存新鲜度之间取得平衡。
+  **FIFO 主题**：当会话顺序至关重要时（例如，对于摘要工作流程）使用 FIFO SNS 主题
+  **内存整合**：实施重复数据删除逻辑以防止存储冗余或相互冲突的内存记录，从而降低存储成本并提高检索准确性
+  **内存记录组织**：在摄取记录时，请务必包含有意义的命名空间和策略 ID，以便对内存记录进行高效的分类、筛选和检索

### 安全性
<a name="security"></a>
+  **最低权限**：向所有 IAM 角色授予所需的最低权限
+  **加密**：对包含敏感数据的 S3 存储桶和 SNS 主题使用 KMS 加密