View a markdown version of this page

カスタム戦略を設定する - Amazon Bedrock AgentCore

カスタム戦略を設定する

高度なユースケースでは、オーバーライド戦略が組み込まれているため、メモリ抽出プロセスをきめ細かく制御できます。これにより、独自のプロンプトを提供し、特定の基盤モデルを選択することで、組み込み戦略のデフォルトロジックを上書きできます。

  • ユースケースの例: 旅行代理店ボットは、ユーザーのフライト設定に関する非常に具体的な詳細を抽出し、前述の航空会社設定に座席設定を追加するなど、新しい設定を既存の設定と統合する必要があります。

前提条件

組み込みメモリ戦略を上書きするには、次の前提条件を満たす必要があります。

メモリ実行ロールの作成

オーバーライド戦略で組み込み を使用すると、AgentCore Memory はユーザーに代わってアカウントで Amazon Bedrock モデルを呼び出します。これを行うアクセス許可をサービスに付与するには、IAM ロール (実行ロール) を作成し、create_memoryAPI の memoryExecutionRoleArnフィールドにメモリを作成するときにその ARN を渡す必要があります。

このロールには、アクセス許可ポリシーと信頼ポリシーの 2 つのポリシーが必要です。

1. アクセス許可ポリシー

まず、管理ポリシー 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. 信頼ポリシー

このロールは、 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 ロールの作成」を参照してください。

API を使用して組み込み戦略を上書きする

組み込み戦略を上書きするには、CreateMemory または UpdateMemory リクエストを送信するときに customMemoryStrategyフィールドを使用します。CustomConfigurationInput オブジェクトでは、上書きする戦略のステップを指定できます。

上書きするステップの設定 (UserPreferenceOverrideExtractionConfigurationInput など) 内で、以下を指定します。

  • 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 } } } } } ] }

カスタムプロンプトの例については、「設定の例」を参照してください。

設定例

この例では、ユーザー設定の抽出ステップと統合ステップの両方を上書きする方法を示します。

# 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/'] } } ] )