As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Especifique a organização da memória de longo prazo com namespaces
Ao criar uma AgentCore memória, use um namespace para especificar onde as memórias de longo prazo de uma estratégia de memória são agrupadas logicamente. Toda vez que uma nova memória de longo prazo é extraída usando a estratégia de memória, ela é salva no namespace que você definiu. Isso significa que todas as memórias de longo prazo têm como escopo seu namespace específico, mantendo-as organizadas e evitando qualquer confusão com outros usuários ou sessões. Você deve usar um formato hierárquico separado por barras. / Isso ajuda a manter as memórias organizadas de forma clara. Conforme necessário, você pode optar por usar as seguintes variáveis predefinidas entre chaves no namespace com base nas necessidades organizacionais do seu aplicativo:
-
ActorID — Identifica a quem pertence a memória de longo prazo.
Um ator se refere a uma entidade, como usuários finais ou agent/user combinações. Por exemplo, em um chatbot de suporte à codificação, o ator geralmente é o desenvolvedor fazendo perguntas. O uso do ID do ator ajuda o sistema a saber a qual usuário a memória pertence, mantendo os dados de cada usuário separados e organizados.
-
StrategyID — Mostra qual estratégia de memória está sendo usada. Esse identificador de estratégia é gerado automaticamente quando você cria uma AgentCore memória.
-
SessionID — Identifica de qual sessão ou conversa a memória é.
Uma sessão geralmente é uma única conversa ou período de interação entre o usuário e o agente de IA. Ele agrupa todas as mensagens e eventos relacionados que acontecem durante essa conversa.
Por exemplo, se você definir o namespace a seguir como entrada para sua estratégia ao criar uma AgentCore memória:
/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}/
Após a criação da memória, esse namespace pode ter a seguinte aparência:
/strategy/summarization-93483043/actor/actor-9830m2w3/session/session-9330sds8
Um namespace pode ter diferentes níveis de granularidade. Os exemplos a seguir usam somente variáveis integradas:
Granular no nível da sessão
/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}/
Granular no nível do ator em todas as sessões
/strategy/{memoryStrategyId}/actor/{actorId}/
Granular no nível da estratégia entre os atores
/strategy/{memoryStrategyId}/
Global em todas as estratégias
/
Para uma organização ainda mais granular, você pode adicionar variáveis de namespace personalizadas para representar dimensões adicionais, como locatário, equipe ou ambiente.
Por exemplo, código, consulte Habilitar memória de longo prazo.
Variáveis de namespace personalizadas
Além das variáveis integradas (actorId,,memoryStrategyId)sessionId, você pode definir variáveis de namespace personalizadas para representar as dimensões organizacionais exclusivas do seu aplicativo, como empresa, organização, equipe ou ambiente. Com variáveis personalizadas, você pode definir o escopo de memórias de longo prazo em hierarquias arbitrárias sem criar estratégias duplicadas ou sobrecarregar as variáveis incorporadas.
Por exemplo, um aplicativo multilocatário pode precisar de memórias com escopo definido pelas organizações:
/org/{orgname}/team/{teamname}/actor/{actorId}/session/{sessionId}/
Você define as variáveis personalizadas ao criar ou atualizar um recurso de memória existente usando o namespaceKeys parâmetro e fornece seus valores em tempo de execução por meio do extractionConfig.namespaceVariables campo na CreateEvent operação.
Importante
Todas as chaves e valores de variáveis de namespace personalizados devem estar em minúsculas.
Definir chaves de namespace
Ao criar ou atualizar um recurso de memória, use o namespaceKeys parâmetro para declarar suas chaves de variáveis personalizadas e regras de validação opcionais. Cada chave deve:
-
Contenha somente caracteres alfanuméricos minúsculos.
-
Não ser um nome de variável embutido (
actorIdsessionId,, oumemoryStrategyId). -
Tenha no máximo 32 caracteres.
Você pode definir até 5 chaves de namespace por recurso de memória e até 5 variáveis personalizadas por. namespaceTemplate
Lembre-se do seguinte ao definir chaves de namespace:
-
Você pode definir chaves de namespace que não são referenciadas por nenhuma estratégia para pré-registrar chaves para uso futuro.
-
Uma única chave de namespace pode ser referenciada por várias estratégias. Por exemplo,
{companyname}pode aparecer tanto em uma estratégia semântica quanto em uma estratégia resumida.namespaceTemplate -
Uma chave de namespace atualmente referenciada por uma estratégia
namespaceTemplatenão pode ser excluída. Você deve primeiro remover a referência da estratégia (desreferenciar a chave) e depois excluí-la.
Para cada chave, você pode, opcionalmente, especificar regras de validação que restringem os valores aceitos em tempo de execução:
-
AllowedValues — Uma lista de até 10 valores permitidos (diferencia maiúsculas de minúsculas). Os valores devem começar com um caractere alfanumérico minúsculo e conter somente caracteres alfanuméricos minúsculos, hífens e sublinhados.
-
RegexPattern — Um padrão regex (até 64 caracteres) ao qual o valor deve corresponder.
Quando você especifica allowedValues eregexPattern, o serviço impõe as duas regras (lógicasAND).
O exemplo a seguir mostra como criar um recurso de memória com variáveis de namespace personalizadas e validação:
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-]*$"}} ]'
Forneça valores de namespace em tempo de execução
Ao criar um evento usando a CreateEvent operação, passe os valores da variável de namespace personalizada no extractionConfig.namespaceVariables campo:
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" } }'
O serviço substitui esses valores nos modelos de namespace durante a extração de memória de longo prazo.
nota
Se uma variável de namespace personalizada referenciada por uma estratégia não namespaceTemplate for fornecida na CreateEvent solicitação, a resolução do namespace não ocorrerá para essa estratégia. Como resultado, a extração de memória de longo prazo não é iniciada para essa estratégia. A CreateEvent operação ainda é bem-sucedida e o evento persiste na memória de curto prazo.
Para detectar essas falhas, configure os registros distribuídos e monitore a NamespaceResolutionFailure métrica, que relata as dimensões:Operation, ResourceStrategyType, e StrategyId para qual extração foi ignorada.
Atualizar chaves de namespace
Quando você atualiza as chaves de namespace com a UpdateMemory operação, o namespaceKeys valor substitui totalmente o conjunto existente. Para atualizar com segurança, recupere as chaves atuais comGetMemory, aplique suas alterações e envie a lista completa.
Lembre-se das seguintes restrições:
-
Se você omitir uma chave que ainda é referenciada por uma estratégia
namespaceTemplate, o serviço lança uma.ValidationExceptionVocê deve primeiro remover a chave da estratégianamespaceTemplateantes de removê-lanamespaceKeys. -
Para adicionar uma nova chave, inclua-a junto com todas as chaves existentes na solicitação.
# 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 )
Restrinja o acesso ao caminho de gravação com chaves de condição do IAM
Você pode criar políticas do IAM que usam a chave de bedrock-agentcore:namespaceVariable/<variableName> condição para controlar quais valores de variáveis de namespace personalizados um chamador pode usar ao criar eventos. Com essa chave de condição, você pode impor o isolamento do inquilino no caminho de gravação.
A chave de condição segue o padrão bedrock-agentcore:namespaceVariable/<key> em que <key> está o nome da variável do namespace definido em. namespaceKeys
A política a seguir permite que o chamador crie eventos somente quando orgname está definida como e nega explicitamente as solicitações quando orgname está definida como: acme 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" } } } ] }
A tabela a seguir mostra como o IAM avalia as solicitações com base na presença de uma chave de condição na política e se a solicitação fornece a variável de namespace:
A política tem condiçõesnamespaceVariable? |
A solicitação fornece a variável? | Resultado | Motivo |
|---|---|---|---|
|
Não |
Não |
Permitido |
Condição não avaliada |
|
Não |
Sim |
Permitido |
Chaves de contexto extras são ignoradas |
|
Sim |
Sim (valor correspondente) |
Permitido |
A condição está satisfeita |
|
Sim |
Não |
Negado |
A chave de condição está ausente, não pode ser satisfeita |
|
Sim |
Sim (valor não correspondente) |
Negado |
A condição não está satisfeita |
Restrinja o acesso ao caminho de leitura com o IAM
Você pode criar políticas do IAM para restringir o acesso à leitura da memória pelos escopos que você define, como ator, sessão e namespace. Use os escopos como chaves de contexto em suas políticas do IAM.
A política a seguir restringe o acesso à recuperação de memórias em um namespace ou registros específicos em uma hierarquia específica do NamespacePath. Neste exemplo, a política permite acesso somente a memórias com namespaces exatos, como summaries/agent1/ OR com namespaces na seguinte hierarquia NamespacePath com, como ou. summaries/agent1/ 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/*" } } } ] }
nota
As APIs de recuperação (ListMemoryRecords,RetrieveMemoryRecords) exigem o namespace totalmente resolvido. As variáveis de namespace personalizadas já estão substituídas neste momento, portanto, as chaves existentes bedrock-agentcore:namespace e de bedrock-agentcore:namespacePath condição cobrem o caminho de leitura sem nenhuma configuração adicional.