

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为长期记忆记录设置存活时间
<a name="long-term-record-ttl"></a>

默认情况下，长期内存记录不会过期。您可以选择设置生存时间 (TTL)，以便在您选择的保留期之后自动删除记录。使用 TTL 来满足数据保留要求、控制存储增长或确保陈旧的见解在内存中过时。

您可以使用配置 TTL`recordExpirySpecification`，可以通过两种方式提供该选项：
+  **Strategy-level**— 开启`CreateMemory`和`UpdateMemory`，在策略`recordExpirySpecification`上设置一个。TTL 适用于策略生成的长期记忆记录。这适用于[内置策略](long-term-configuring-built-in-strategies.md)和[自定义（带覆盖功能的内置）策略](long-term-configuring-custom-strategies.md)。
+  **Request-level**— 开`BatchCreateMemoryRecords`启和`BatchUpdateMemoryRecords`，`recordExpirySpecification`根据请求设置。TTL 适用于该批次中的每条记录。有关更多信息，请参阅为[批量请求设置生存时间](#long-term-record-ttl-batch-examples)。

## 配置生存时间
<a name="long-term-record-ttl-configure"></a>

A `recordExpirySpecification` 接受两个相互排斥的字段之一：
+  `recordExpiryDurationDays`— 记录过期的天数（至少 31 天）。使用此字段来设置或更新 TTL。
+  `action`— 设置`REMOVE`为可清除先前配置的 TTL，这样更改后生成的记录就不会再过期。

生成记录时，该服务会对每条记录应用一个 TTL。更改或删除 TTL 仅影响更改后创建的记录。以前存储的记录保留其原始过期时间，过期的记录无法恢复。

## 跨策略的一致性
<a name="long-term-record-ttl-consistency"></a>

当您在同一个内存中配置`recordExpiryDurationDays`多个策略时，以下每个策略组中的值必须一致：
+  **语义和用户偏好策略** — 必须使用相同的`recordExpiryDurationDays`策略。这适用于`semanticMemoryStrategy`和`userPreferenceMemoryStrategy`内置策略，也适用于覆盖`semanticOverride`或的自定义策略`userPreferenceOverride`。
+  **摘要和情节策略** —必须使用相同的`recordExpiryDurationDays`策略。这适用于`summaryMemoryStrategy`和`episodicMemoryStrategy`内置策略，也适用于覆盖`summaryOverride`或的自定义策略`episodicOverride`。

A `recordExpirySpecification` 不适用于自我管理策略 (`selfManagedConfiguration`)。对于自我管理策略，您可以通过批处理 API 自行提供记录，因此您可以通过 `recordExpirySpecification` on `BatchCreateMemoryRecords` and 来控制每个请求的留存率。`BatchUpdateMemoryRecords`有关更多信息，请参阅[Self-managed 策略](memory-self-managed-strategies.md)。

## 当记录被删除时
<a name="long-term-record-ttl-deletion-timing"></a>

删除已过期的长期记忆记录通常需要几天时间才能在存活时间过后完成。该服务将过期记录作为后台进程删除，而不是在确切的到期时刻删除。在该时间段内，读取操作（例如`RetrieveMemoryRecords``GetMemoryRecord`、和）仍可返回过期记录`ListMemoryRecords`。如果您需要立即删除某条记录，请使用`DeleteMemoryRecord`或`BatchDeleteMemoryRecords`而不是依赖 TTL 将其显式删除。

## 配置长期内存存活时间的权限
<a name="long-term-record-ttl-permissions"></a>

任何配置或删除（`recordExpirySpecification`无论是提供`recordExpiryDurationDays`还是设置为）的请求`REMOVE`都`action`需要`bedrock-agentcore:UpdateMemoryRecordExpirySpecification`权限。除了操作的基本操作外，还需要此权限。这适用于所有四个可以携带以下内容的入口点`recordExpirySpecification`：
+  `CreateMemory`和`UpdateMemory`（战略层面）
+  `BatchCreateMemoryRecords`和`BatchUpdateMemoryRecords`（请求级别）

不带`recordExpirySpecification`有 a 的请求不受影响，只需要其现有操作即可。如果您设置或删除 TTL，则必须将其`bedrock-agentcore:UpdateMemoryRecordExpirySpecification`添加到提出请求的委托人的 IAM 策略中。没有它，即使允许调用者执行基本操作`AccessDeniedException`，携带的请求也会被拒绝。`recordExpirySpecification`

对记录设置 TTL 是一种延迟的、由服务执行的删除：持续时间过后，服务就会删除该记录。如果没有专用权限，任何可以调用`CreateMemory`、`UpdateMemory``BatchCreateMemoryRecords`、或`BatchUpdateMemoryRecords`可以通过配置短 TTL 来删除记录的委托人。即使该校长无法致电`DeleteMemoryRecord`或，也是如此`BatchDeleteMemoryRecords`。相反，可以移除TTL的委托人可以保留本应到期的数据。该`bedrock-agentcore:UpdateMemoryRecordExpirySpecification`操作允许您控制谁可以配置或删除记录的生存时间。此控件独立于基本操作和记录删除操作。

## 为策略设定生存时间
<a name="long-term-record-ttl-strategy-examples"></a>

以下 IAM 策略授予委托人管理内存资源和配置保留期的能力，同时不允许按需删除记录。委托人可以设置或删除 TTL。但是，由于`DeleteMemoryRecord`和`BatchDeleteMemoryRecords`未获得授权，因此委托人无法直接删除单个记录。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ManageMemoryAndRetention",
            "Effect": "Allow",
            "Action": [
                "bedrock-agentcore:CreateMemory",
                "bedrock-agentcore:UpdateMemory",
                "bedrock-agentcore:UpdateMemoryRecordExpirySpecification"
            ],
            "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/*"
        }
    ]
}
```

要在创建内存时设置 TTL，请在策略`recordExpirySpecification`上提供一个。

```
aws bedrock-agentcore-control create-memory \
  --name "SupportAgentFactMemory" \
  --event-expiry-duration 90 \
  --memory-strategies '[
    {
      "semanticMemoryStrategy": {
        "name": "FactExtractor",
        "namespaceTemplates": ["/support_cases/{sessionId}/facts/"],
        "recordExpirySpecification": {
          "recordExpiryDurationDays": 60
        }
      }
    }
  ]'
```

要更改现有策略的留存率，请在`recordExpirySpecification`条`modifyMemoryStrategies`目`recordExpiryDurationDays`中使用。

```
aws bedrock-agentcore-control update-memory \
  --memory-id "SupportAgentFactMemory-abc123" \
  --memory-strategies '{
    "modifyMemoryStrategies": [
      {
        "memoryStrategyId": "FactExtractor-xyz789",
        "recordExpirySpecification": {
          "recordExpiryDurationDays": 45
        }
      }
    ]
  }'
```

要删除先前配置的 TTL 以使之后生成的记录不再过期，请将设置为`action`。`REMOVE`

```
aws bedrock-agentcore-control update-memory \
  --memory-id "SupportAgentFactMemory-abc123" \
  --memory-strategies '{
    "modifyMemoryStrategies": [
      {
        "memoryStrategyId": "FactExtractor-xyz789",
        "recordExpirySpecification": {
          "action": "REMOVE"
        }
      }
    ]
  }'
```

## 为批量请求设置生存时间
<a name="long-term-record-ttl-batch-examples"></a>

当您直接使用批处理 API 写入记录时，您可以设置一个适用于请求中每条记录的请求级 TTL。以下 IAM 策略允许委托人通过批处理 API 写入记录并配置这些请求的保留期。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "BatchWriteWithRetention",
            "Effect": "Allow",
            "Action": [
                "bedrock-agentcore:BatchCreateMemoryRecords",
                "bedrock-agentcore:BatchUpdateMemoryRecords",
                "bedrock-agentcore:UpdateMemoryRecordExpirySpecification"
            ],
            "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/*"
        }
    ]
}
```

要对已创建的记录设置 TTL，`recordExpirySpecification`请在请求的顶层提供。它适用于呼叫创建的每条记录。

```
aws bedrock-agentcore batch-create-memory-records \
  --memory-id "your-memory-id" \
  --records '[
    {
      "requestIdentifier": "1",
      "namespaces": ["/actor/Jane/"],
      "content": {"text": "Customer prefers window seats"},
      "timestamp": 1705312800
    }
  ]' \
  --record-expiry-specification '{
    "recordExpiryDurationDays": 31
  }'
```

要更改更新请求中记录的保留期，请提供`recordExpiryDurationDays`。要删除先前配置的 TTL，`action`请将设置为。`REMOVE`

```
aws bedrock-agentcore batch-update-memory-records \
  --memory-id "your-memory-id" \
  --records '[
    {
      "memoryRecordId": "mem-12345678-1234-1234-1234-123456789012",
      "namespaces": ["/actor/Jane/"],
      "content": {"text": "Customer prefers aisle seats"},
      "timestamp": 1705395600
    }
  ]' \
  --record-expiry-specification '{
    "action": "REMOVE"
  }'
```

### 如何 BatchUpdateMemoryRecords 应用生存时间
<a name="long-term-record-ttl-batch-behavior"></a>

`BatchUpdateMemoryRecords`修改现有记录时，生成的 TTL 取决于两件事。首先是请求是否包含`recordExpirySpecification`。第二个问题是记录是否已经有一个。
+  **如果请求包含显`recordExpirySpecification`式**请求，则服务会直接应用该请求，并且在所有情况下都优先。如果记录已经有 TTL，则新值会将其覆盖。如果记录中没有，则新值将设置一个。
+  **如果请求中不包含`recordExpirySpecification`，并且记录已经有一个，则该记录**的 TTL 将使用其上次已知的应用时长进行重置。
+  **如果请求中不包含`recordExpirySpecification`，且记录没有**，则不应用 TTL，并且该记录仍未过期。

在批处理 API 中，记录的 TTL 仅来自请求`recordExpirySpecification`中的。该服务从来没有从记录的相关策略中衍生出来。记录的策略可能会配置`recordExpiryDurationDays`。但是，该策略级别的设置不适用于通过`BatchCreateMemoryRecords`或写入或更新的记录。`BatchUpdateMemoryRecords`要更改批量写入记录的保留期，您必须在请求中明确设置保留期。