Konfigurieren Sie eine benutzerdefinierte Strategie
Für fortgeschrittene Anwendungsfälle bieten Ihnen die integrierten Overrides-Strategien eine genaue Kontrolle über den Speicherextraktionsprozess. Auf diese Weise können Sie die Standardlogik einer integrierten Strategie außer Kraft setzen, indem Sie Ihre eigenen Eingabeaufforderungen angeben und ein bestimmtes Basismodell auswählen.
-
Beispiel für einen Anwendungsfall: Ein Reisebüro-Bot muss sehr spezifische Details über die Flugpräferenzen eines Benutzers extrahieren und neue Präferenzen mit bestehenden zusammenführen, z. B. das Hinzufügen einer Sitzplatzpräferenz zu einer zuvor angegebenen Airline-Präferenz.
Themen
Voraussetzungen
Um eine integrierte Speicherstrategie außer Kraft zu setzen, müssen Sie die folgenden Voraussetzungen erfüllen:
-
Haben Sie eine AgentCore Speicherdienst-Rolle. Weitere Informationen finden Sie unter Speicherausführungsrolle erstellen.
-
Wenn Sie das Modell für die Aufforderung überschreiben möchten, müssen Sie Zugriff auf das Modell haben, mit dem Sie es überschreiben möchten. Weitere Informationen finden Sie unter Zugriff auf Amazon Bedrock Foundation-Modelle und Amazon Bedrock Capacity for Built-In with Overrides-Strategien.
Die Rolle „Memory Execution“ erstellen
Wenn Sie eine integrierte Strategie mit Überschreibungen verwenden, ruft AgentCore Memory in Ihrem Namen ein Amazon Bedrock-Modell in Ihrem Konto auf. Um dem Dienst die entsprechende Berechtigung zu erteilen, müssen Sie eine IAM-Rolle (eine Ausführungsrolle) erstellen und deren ARN beim Erstellen des Speichers im memoryExecutionRoleArn Feld der create_memory API übergeben.
Für diese Rolle sind zwei Richtlinien erforderlich: eine Berechtigungsrichtlinie und eine Vertrauensrichtlinie.
1. Berechtigungsrichtlinie
Stellen Sie zunächst sicher, dass Sie über eine IAM-Rolle mit der verwalteten Richtlinie verfügen AmazonBedrockAgentCoreMemoryBedrockModelInferenceExecutionRolePolicy, oder erstellen Sie eine Richtlinie mit den folgenden Berechtigungen:
{ "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. Vertrauensrichtlinie
Diese Rolle wird vom Dienst übernommen, um das Modell in Ihrem AWS Konto aufzurufen. Verwenden Sie die unten stehende Vertrauensrichtlinie, wenn Sie die Rolle erstellen oder wenn Sie die verwaltete Richtlinie verwenden:
{ "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}}:*" } } } ] }
Informationen zum Erstellen einer IAM-Rolle finden Sie unter Erstellung einer IAM-Rolle.
Überschreiben Sie eine integrierte Strategie mit der API
Um eine integrierte Strategie zu überschreiben, verwenden Sie das customMemoryStrategy Feld, wenn Sie eine CreateMemoryUpdateMemoryOder-Anfrage senden. Im CustomConfigurationInputObjekt können Sie einen Schritt in der Strategie angeben, der überschrieben werden soll.
Geben Sie in der Konfiguration für den zu überschreibenden Schritt (z. B. UserPreferenceOverrideExtractionConfigurationInput) Folgendes an:
-
appendToPrompt— Die Aufforderung, durch die die Anweisungen in der Systemaufforderung ersetzt werden sollen (das Ausgabeschema bleibt gleich). -
modelId— Die ID des Amazon Bedrock-Modells, das mit der Aufforderung aufgerufen werden soll.
Sie können beispielsweise den folgenden Anforderungstext senden, um die Speicherstrategie der Benutzereinstellungen mit Ihren eigenen Extraktions- und Konsolidierungsaufforderungen zu überschreiben, indem Sie das Modell anthropic.claude-3-sonnet-20240229-v 1:0 verwenden:
{ "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 } } } } } ] }
Beispiele für benutzerdefinierte Eingabeaufforderungen finden Sie unter Konfigurationsbeispiel.
Konfigurationsbeispiel
Dieses Beispiel zeigt, wie sowohl die Extraktions- als auch die Konsolidierungsschritte für Benutzereinstellungen außer Kraft gesetzt werden können.
# 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/'] } } ] )