Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Spécifier l'organisation de la mémoire à long terme avec des espaces de noms
Lorsque vous créez une AgentCore mémoire, utilisez un espace de noms pour spécifier où les mémoires à long terme pour une stratégie de mémoire sont regroupées de manière logique. Chaque fois qu'une nouvelle mémoire à long terme est extraite à l'aide de la stratégie de mémoire, elle est enregistrée dans l'espace de noms que vous avez défini. Cela signifie que toutes les mémoires à long terme sont limitées à leur espace de noms spécifique, ce qui permet de les organiser et d'éviter toute confusion avec d'autres utilisateurs ou sessions. Vous devez utiliser un format hiérarchique séparé par des barres obliques/. Cela aide à organiser clairement les souvenirs. Si nécessaire, vous pouvez choisir d'utiliser les variables prédéfinies suivantes entre crochets dans l'espace de noms en fonction des besoins organisationnels de votre application :
-
ActorID — Identifie à qui appartient la mémoire à long terme.
Un acteur fait référence à une entité telle que les utilisateurs finaux ou les agent/user combinaisons. Par exemple, dans un chatbot d'assistance au codage, l'acteur est généralement le développeur qui pose des questions. L'utilisation de l'identifiant d'acteur permet au système de savoir à quel utilisateur appartient la mémoire, en séparant et en organisant les données de chaque utilisateur.
-
StrategyID : indique la stratégie de mémoire utilisée. Cet identifiant de stratégie est généré automatiquement lorsque vous créez une AgentCore mémoire.
-
SessionID : identifie la session ou la conversation dont provient la mémoire.
Une session est généralement une conversation ou une période d'interaction unique entre l'utilisateur et l'agent IA. Il regroupe tous les messages et événements connexes qui se produisent au cours de cette conversation.
Par exemple, si vous définissez l'espace de noms suivant comme entrée de votre stratégie lors de la création d'une AgentCore mémoire :
/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}/
Après la création de la mémoire, cet espace de noms peut ressembler à ceci :
/strategy/summarization-93483043/actor/actor-9830m2w3/session/session-9330sds8
Un espace de noms peut présenter différents niveaux de granularité. Les exemples suivants utilisent uniquement des variables intégrées :
Granulaire au niveau de la session
/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}/
Informations détaillées au niveau de l'acteur au fil des sessions
/strategy/{memoryStrategyId}/actor/{actorId}/
Granulaire au niveau de la stratégie pour tous les acteurs
/strategy/{memoryStrategyId}/
Globale pour toutes les stratégies
/
Pour une organisation encore plus précise, vous pouvez ajouter des variables d'espace de noms personnalisées pour représenter des dimensions supplémentaires telles que le locataire, l'équipe ou l'environnement.
Pour un exemple de code, voir Activer la mémoire à long terme.
Variables d'espace de noms personnalisées
Outre les variables intégrées (actorId,,memoryStrategyId)sessionId, vous pouvez définir des variables d'espace de noms personnalisées pour représenter les dimensions organisationnelles uniques de votre application, telles que l'entreprise, l'organisation, l'équipe ou l'environnement. Grâce aux variables personnalisées, vous pouvez étendre les mémoires à long terme selon des hiérarchies arbitraires sans créer de stratégies dupliquées ni surcharger les variables intégrées.
Par exemple, une application mutualisée peut avoir besoin de mémoires exploitées par les organisations :
/org/{orgname}/team/{teamname}/actor/{actorId}/session/{sessionId}/
Vous définissez les variables personnalisées lors de la création ou de la mise à jour d'une ressource mémoire existante à l'aide du namespaceKeys paramètre, et vous fournissez leurs valeurs lors de l'exécution via le extractionConfig.namespaceVariables champ de l'CreateEventopération.
Important
Toutes les clés et valeurs des variables d'espace de noms personnalisés doivent être en minuscules.
Définir les clés de l'espace de noms
Lorsque vous créez ou mettez à jour une ressource mémoire, utilisez le namespaceKeys paramètre pour déclarer vos clés de variables personnalisées et vos règles de validation facultatives. Chaque clé doit :
-
Ne contiennent que des caractères alphanumériques minuscules.
-
Ne pas être un nom de variable intégré (
actorIdsessionId,, oumemoryStrategyId). -
Comporte au plus 32 caractères.
Vous pouvez définir jusqu'à 5 clés d'espace de noms par ressource mémoire et jusqu'à 5 variables personnalisées par. namespaceTemplate
Lorsque vous définissez des clés d'espace de noms, tenez compte des points suivants :
-
Vous pouvez définir des clés d'espace de noms qui ne sont référencées par aucune stratégie afin de pré-enregistrer les clés pour une utilisation future.
-
Une seule clé d'espace de noms peut être référencée par plusieurs stratégies. Par exemple,
{companyname}peut apparaître ànamespaceTemplatela fois dans une stratégie sémantique et dans une stratégie récapitulative. -
Une clé d'espace de noms actuellement référencée par une stratégie
namespaceTemplatene peut pas être supprimée. Vous devez d'abord supprimer la référence de la stratégie (déréférencer la clé), puis la supprimer.
Pour chaque clé, vous pouvez éventuellement spécifier des règles de validation qui limitent les valeurs acceptées lors de l'exécution :
-
AllowedValues : liste contenant jusqu'à 10 valeurs autorisées (distinction majuscules/minuscules). Les valeurs doivent commencer par un caractère alphanumérique minuscule et ne contenir que des caractères alphanumériques minuscules, des traits d'union et des traits de soulignement.
-
RegexPattern — Modèle d'expression régulière (64 caractères maximum) auquel la valeur doit correspondre.
Lorsque vous spécifiez à la fois allowedValues etregexPattern, le service applique les deux règles (logiqueAND).
L'exemple suivant montre comment créer une ressource mémoire avec des variables d'espace de noms personnalisées et une validation :
aws bedrock-agentcore-control create-memory \ --name "MultiTenantAgentMemory" \ --description "Memory for a multi-tenant AI agent" \ --event-expiry-duration 10 \ --memory-strategies '[ { "semanticMemoryStrategy": { "name": "TenantScopedStrategy", "namespaceTemplates": ["/org/{orgname}/team/{teamname}/actor/{actorId}/session/{sessionId}/"] } } ]' \ --namespace-keys '[ {"key": "orgname", "validation": {"allowedValues": ["acme", "globex", "initech"]}}, {"key": "teamname", "validation": {"regexPattern": "^[a-z][a-z0-9-]*$"}} ]'
Fournir des valeurs d'espace de noms lors de l'exécution
Lorsque vous créez un événement à l'aide de cette CreateEvent opération, transmettez les valeurs des variables d'espace de noms personnalisées dans le extractionConfig.namespaceVariables champ :
aws bedrock-agentcore create-event \ --memory-id "MultiTenantAgentMemory-n29sh5ka8r" \ --actor-id "user123" \ --session-id "session67" \ --event-timestamp "$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")" \ --payload '[ { "conversational": { "content": {"text": "I need help debugging my application."}, "role": "USER" } } ]' \ --extraction-config '{ "namespaceVariables": { "orgname": "acme", "teamname": "engineering" } }'
Le service remplace ces valeurs dans les modèles d'espaces de noms lors de l'extraction de mémoire à long terme.
Note
Si aucune variable d'espace de noms personnalisée référencée par une stratégie n'namespaceTemplateest fournie dans la CreateEvent demande, la résolution de l'espace de noms n'a pas lieu pour cette stratégie. Par conséquent, l'extraction de la mémoire à long terme n'est pas initiée pour cette stratégie. L'CreateEventopération réussit toujours et l'événement est conservé dans la mémoire à court terme.
Pour détecter ces défaillances, configurez des journaux distribués et surveillez la NamespaceResolutionFailure métrique, qui affiche les rapports avec les dimensions :Operation, ResourceStrategyType, et StrategyId pour laquelle l'extraction a été ignorée.
Mettre à jour les clés d'espace de noms
Lorsque vous mettez à jour les clés d'espace de noms à l'aide de l'UpdateMemoryopération, la namespaceKeys valeur remplace entièrement l'ensemble existant. Pour effectuer une mise à jour en toute sécuritéGetMemory, récupérez les clés actuelles avec, appliquez vos modifications et soumettez la liste complète.
Gardez à l'esprit les contraintes suivantes :
-
Si vous omettez une clé qui est toujours référencée par une stratégie
namespaceTemplate, le service lance unValidationException. Vous devez d'abord supprimer la clé de la stratégienamespaceTemplateavant de pouvoir la supprimernamespaceKeys. -
Pour ajouter une nouvelle clé, incluez-la à côté de toutes les clés existantes dans la demande.
# Get the current memory configuration current = control_client.get_memory(memoryId="MultiTenantAgentMemory-n29sh5ka8r") existing_keys = current['memory'].get('namespaceKeys', []) # Add a new key while preserving existing ones existing_keys.append({ 'key': 'category', 'validation': { 'allowedValues': ['backend', 'frontend', 'data'] } }) # Update with the full set control_client.update_memory( memoryId="MultiTenantAgentMemory-n29sh5ka8r", namespaceKeys=existing_keys )
Restreindre l'accès au chemin d'écriture à l'aide de clés de condition IAM
Vous pouvez créer des politiques IAM qui utilisent la clé de bedrock-agentcore:namespaceVariable/<variableName> condition pour contrôler les valeurs de variables d'espace de noms personnalisées qu'un appelant peut utiliser lors de la création d'événements. Avec cette clé de condition, vous pouvez appliquer l'isolation des locataires au niveau du chemin d'écriture.
La clé de condition suit le modèle bedrock-agentcore:namespaceVariable/<key> où se <key> trouve le nom de la variable d'espace de noms défini dansnamespaceKeys.
La politique suivante permet à l'appelant de créer des événements uniquement lorsqu'elle orgname est définie suracme, et refuse explicitement les demandes lorsqu'elle orgname est définie sur : globex
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowCreateEventForAcme", "Effect": "Allow", "Action": "bedrock-agentcore:CreateEvent", "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringEquals": { "bedrock-agentcore:namespaceVariable/orgname": "acme" } } }, { "Sid": "DenyCreateEventForGlobex", "Effect": "Deny", "Action": "bedrock-agentcore:CreateEvent", "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringEquals": { "bedrock-agentcore:namespaceVariable/orgname": "globex" } } } ] }
Le tableau suivant montre comment IAM évalue les demandes en fonction de la présence d'une clé de condition dans la politique et si la demande fournit la variable d'espace de noms :
La politique comporte une condition namespaceVariable ? |
La requête fournit la variable ? | Résultat | Raison |
|---|---|---|---|
|
Non |
Non |
Autorisé |
État non évalué |
|
Non |
Oui |
Autorisé |
Les clés contextuelles supplémentaires sont ignorées |
|
Oui |
Oui (valeur correspondante) |
Autorisé |
La condition est satisfaite |
|
Oui |
Non |
Refusé |
La clé de condition est manquante, ne peut pas être satisfaite |
|
Oui |
Oui (valeur non correspondante) |
Refusé |
La condition n'est pas satisfaite |
Restreindre l'accès au chemin de lecture avec IAM
Vous pouvez créer des politiques IAM pour restreindre l'accès à la lecture de la mémoire en fonction des étendues que vous définissez, telles que l'acteur, la session et l'espace de noms. Utilisez les étendues comme clés contextuelles dans vos politiques IAM.
La politique suivante limite l'accès à la récupération de mémoires vers un espace de noms spécifique ou des enregistrements relevant d'une hiérarchie NamespacePath particulière. Dans cet exemple, la politique autorise l'accès uniquement aux mémoires avec des espaces de noms exacts tels que summaries/agent1/ OR avec des espaces de noms relevant de la hiérarchie NamespacePath suivante avecsummaries/agent1/, par exemple, ou. summaries/agent1/session1/ summaries/agent1/session2/
{ "Version":"2012-10-17", "Statement": [ { "Sid": "SpecificNamespaceAccess", "Effect": "Allow", "Action": [ "bedrock-agentcore:RetrieveMemoryRecords" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringEquals": { "bedrock-agentcore:namespace": "summaries/agent1/" } } }, { "Sid": "SpecificNamespacePathAccess", "Effect": "Allow", "Action": [ "bedrock-agentcore:RetrieveMemoryRecords" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringLike": { "bedrock-agentcore:namespacePath": "summaries/agent1/*" } } } ] }
Note
Les API de récupération (ListMemoryRecords,RetrieveMemoryRecords) nécessitent un espace de noms entièrement résolu. Les variables d'espace de noms personnalisées sont déjà remplacées à ce stade, de sorte que les clés existantes bedrock-agentcore:namespace et les clés de bedrock-agentcore:namespacePath condition couvrent le chemin de lecture sans configuration supplémentaire.