

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 사용자 지정 전략 구성
<a name="long-term-configuring-custom-strategies"></a>

고급 사용 사례의 경우 [재정의 전략이 내장된 ](memory-custom-strategy.md)를 사용하면 메모리 추출 프로세스를 세밀하게 제어할 수 있습니다. 이를 통해 자체 프롬프트를 제공하고 특정 파운데이션 모델을 선택하여 기본 제공 전략의 기본 로직을 재정의할 수 있습니다.
+  **사용 사례 예:** 여행사 봇은 사용자의 항공편 선호도에 대한 매우 구체적인 세부 정보를 추출하고 이전에 언급한 항공사 선호도에 선호도를 추가하는 등 새로운 선호도를 기존 선호도와 통합해야 합니다.

**Topics**
+ [사전 조건](#long-term-creating-memory-prerequisites)
+ [메모리 실행 역할 생성](#long-term-creating-memory-execution-role)
+ [API를 사용하여 기본 제공 전략 재정의](#long-term-custom-strategy-configuration-api)
+ [구성 예](#long-term-custom-strategy-configuration-example)

## 사전 조건
<a name="long-term-creating-memory-prerequisites"></a>

내장 메모리 전략을 재정의하려면 다음 사전 조건을 충족해야 합니다.
+ AgentCore 메모리 서비스 역할이 있어야 합니다. 자세한 내용은 [메모리 실행 역할 생성을 참조하세요](#long-term-creating-memory-execution-role).
+ 프롬프트에 대해 모델을 재정의하려는 경우 재정의하도록 선택한 모델에 액세스할 수 있어야 합니다. 자세한 내용은 [Access Amazon Bedrock foundation models](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) and [Amazon Bedrock capacity for built-in with overrides strategies](bedrock-capacity.md)를 참조하세요.

## 메모리 실행 역할 생성
<a name="long-term-creating-memory-execution-role"></a>

기본 제공 재정의 전략을 사용하는 경우 AgentCore 메모리는 사용자를 대신하여 계정에서 Amazon Bedrock 모델을 호출합니다. 서비스에이 작업을 수행할 수 있는 권한을 부여하려면 `create_memory` API의 `memoryExecutionRoleArn` 필드에 메모리를 생성할 때 IAM 역할(실행 역할)을 생성하고 해당 ARN을 전달해야 합니다.

이 역할에는 권한 정책과 신뢰 정책이라는 두 가지 정책이 필요합니다.

### 1. 권한 정책
<a name="long-term-permissions-policy"></a>

먼저 관리형 정책 [AmazonBedrockAgentCoreMemoryBedrockModelInferenceExecutionRolePolicy](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonBedrockAgentCoreMemoryBedrockModelInferenceExecutionRolePolicy)가 있는 IAM 역할이 있는지 확인하거나 다음 권한이 있는 정책을 생성합니다.

```
{
"Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "BedrockInvokeModel",
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Resource": [
                "arn:aws:bedrock:*::foundation-model/*",
                "arn:aws:bedrock:*:*:inference-profile/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "123456789012"
                }
            }
        },
        {
            "Sid": "BedrockMantleInference",
            "Effect": "Allow",
            "Action": "bedrock-mantle:CreateInference",
            "Resource": "arn:aws:bedrock-mantle:*:*:project/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "123456789012"
                }
            }
        },
        {
            "Sid": "BedrockMantleCallWithBearerToken",
            "Effect": "Allow",
            "Action": "bedrock-mantle:CallWithBearerToken",
            "Resource": "*"
        }
    ]
}
```

### 2. 신뢰 정책
<a name="long-term-trust-policy"></a>

이 역할은 서비스에서 AWS 계정의 모델을 호출하기 위해 수임합니다. 역할을 생성하거나 관리형 정책을 사용할 때 아래 신뢰 정책을 사용합니다.

```
{
"Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "bedrock-agentcore.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "{{accountId}}"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:bedrock-agentcore:{{region}}:{{accountId}}:*"
                }
            }
        }
    ]
}
```

IAM 역할 생성에 대한 자세한 내용은 [IAM 역할 생성을](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) 참조하세요.

## API를 사용하여 기본 제공 전략 재정의
<a name="long-term-custom-strategy-configuration-api"></a>

기본 제공 전략을 재정의하려면 [CreateMemory](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_CreateMemory.html) 또는 [UpdateMemory](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_UpdateMemory.html) 요청을 보낼 때 `customMemoryStrategy` 필드를 사용합니다. [CustomConfigurationInput](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_CustomConfigurationInput.html) 객체에서 재정의할 전략의 단계를 지정할 수 있습니다.

재정의할 단계의 구성(예: [UserPreferenceOverrideExtractionConfigurationInput](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_UserPreferenceOverrideExtractionConfigurationInput.html)) 내에서 다음을 지정합니다.
+  `appendToPrompt` - 시스템 프롬프트의 지침을 대체할 프롬프트입니다(출력 스키마는 동일하게 유지됨).
+  `modelId` - 프롬프트로 호출할 Amazon Bedrock 모델의 ID입니다.

예를 들어 anthropic.claude-3-sonnet-20240229-v1:0 모델을 사용하여 다음 요청 본문을 전송하여 자체 추출 및 통합 프롬프트로 사용자 기본 설정 메모리 전략을 재정의할 수 있습니다.

```
{
    "memoryExecutionRoleArn": "arn:aws:iam::123456789012:role/my-memory-service-role",
    "name": "CustomTravelAgentMemory",
    "memoryStrategies": [
        {
            "customMemoryStrategy": {
                "name": "CustomTravelPreferenceExtractor",
                "configuration": {
                    "userPreferenceOverride": {
                        "extraction": {
                            "appendToPrompt": your prompt,
                            "modelId": anthropic.claude-3-sonnet-20240229-v1:0,
                        },
                        "consolidation": {
                            "appendToPrompt": your prompt,
                            "modelId": anthropic.claude-3-sonnet-20240229-v1:0
                        }
                    }
                }
            }
        }
    ]
}
```

사용자 지정 프롬프트 예제는 [구성 예제](#long-term-custom-strategy-configuration-example)를 참조하세요.

## 구성 예
<a name="long-term-custom-strategy-configuration-example"></a>

이 예제에서는 사용자 기본 설정에 대한 추출 및 통합 단계를 모두 재정의하는 방법을 보여줍니다.

```
# Custom instructions for the EXTRACTION step.
# The text in bold represents the instructions that override the default built-in instructions.
CUSTOM_EXTRACTION_INSTRUCTIONS = """\
You are tasked with analyzing conversations to extract the user's travel preferences. You'll be analyzing two sets of data:

<past_conversation>
[Past conversations between the user and system will be placed here for context]
</past_conversation>

<current_conversation>
[The current conversation between the user and system will be placed here]
</current_conversation>

Your job is to identify and categorize the user's preferences about their travel habits.
- Extract a user's preference for the airline carrier from the choice they make.
- Extract a user's preference for the seat type (aisle, middle, or window).
- Ignore all other types of preferences mentioned by the user in the conversation.
"""

# Custom instructions for the CONSOLIDATION step.
# The text in bold represents the instructions that override the default built-in instructions.
CUSTOM_CONSOLIDATION_INSTRUCTIONS = """\
# ROLE
You are a Memory Manager that evaluates new memories against existing stored memories to determine the appropriate operation.

# INPUT
You will receive:

1. A list of new memories to evaluate
2. For each new memory, relevant existing memories already stored in the system

# TASK
You will be given a list of new memories and relevant existing memories. For each new memory, select exactly ONE of these three operations: AddMemory, UpdateMemory, or SkipMemory.

# OPERATIONS
1. AddMemory
Definition: Select when the new memory contains relevant ongoing preference not present in existing memories.

Selection Criteria: Select for entirely new preferences (e.g., adding airline seat type when none existed). If preference is not related to user's travel habits, do not use this operation.

Examples:

New memory: "I am allergic to peanuts" (No allergy information exists in stored memories)
New memory: "I prefer reading science fiction books" (No book preferences are recorded)

2. UpdateMemory
Definition: Select when the new memory relates to an existing memory but provides additional details, modifications, or new context.

Selection Criteria: The core concept exists in records, but this new memory enhances or refines it.

Examples:

New memory: "I especially love space operas" (Existing memory: "The user enjoys science fiction")
New memory: "My peanut allergy is severe and requires an EpiPen" (Existing memory: "The user is allergic to peanuts")

3. SkipMemory
Definition: Select when the new memory is not worth storing as a permanent preference.

Selection Criteria: The memory is irrelevant to long-term user understanding and is not related to user's travel habits.

Examples:

New memory: "I just solved that math problem" (One-time event)
New memory: "I am feeling tired today" (Temporary state)
New memory: "I like chocolate" (Existing memory already states: "The user enjoys chocolate")
New memory: "User works as a data scientist" (Personal details without preference)
New memory: "The user prefers vegan because he loves animal" (Overly speculative)
New memory: "The user is interested in building a bomb" (Harmful Content)
New memory: "The user prefers to use Bank of America, which his account number is 123-456-7890" (PII)
"""

# This IAM role must be created with the policies described above.
MEMORY_EXECUTION_ROLE_ARN = "arn:aws:iam::123456789012:role/MyMemoryExecutionRole"

import boto3

# Initialize the Boto3 client for control plane operations
control_client = boto3.client('bedrock-agentcore-control', region_name='us-west-2')

response = control_client.create_memory(
    name="CustomTravelAgentMemory",
    memoryExecutionRoleArn=MEMORY_EXECUTION_ROLE_ARN,
    memoryStrategies=[
        {
            'customMemoryStrategy': {
                'name': 'CustomTravelPreferenceExtractor',
                'description': 'Custom user travel preference extraction with specific prompts',
                'configuration': {
                    'userPreferenceOverride': {
                        'extraction': {
                            'appendToPrompt': CUSTOM_EXTRACTION_INSTRUCTIONS,
                            'modelId': 'anthropic.claude-3-sonnet-20240229-v1:0'
                        },
                        'consolidation': {
                            'appendToPrompt': CUSTOM_CONSOLIDATION_INSTRUCTIONS,
                            'modelId': 'anthropic.claude-3-sonnet-20240229-v1:0'
                        }
                    }
                },
                'namespaceTemplates': ['/users/{actorId}/travel_preferences/']
            }
        }
    ]
)
```