View a markdown version of this page

Specifica l'organizzazione della memoria a lungo termine con namespace - Fondamento Amazon AgentCore

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Specifica l'organizzazione della memoria a lungo termine con namespace

Quando crei una AgentCore memoria, usa uno spazio dei nomi per specificare dove sono raggruppate logicamente le memorie a lungo termine per una strategia di memoria. Ogni volta che una nuova memoria a lungo termine viene estratta utilizzando la strategia di memoria, viene salvata con lo spazio dei nomi impostato. Ciò significa che tutte le memorie a lungo termine sono assegnate al rispettivo namespace specifico, mantenendole organizzate ed evitando qualsiasi confusione con altri utenti o sessioni. È necessario utilizzare un formato gerarchico separato da barre in avanti. / Questo aiuta a mantenere i ricordi organizzati in modo chiaro. Se necessario, puoi scegliere di utilizzare le seguenti variabili predefinite tra parentesi graffe nel namespace in base alle esigenze organizzative dell'applicazione:

  • actorID: identifica a chi appartiene la memoria a lungo termine.

    Un attore si riferisce a entità come utenti finali o combinazioni. agent/user Ad esempio, in un chatbot di supporto alla programmazione, l'attore è solitamente lo sviluppatore che pone domande. L'uso dell'actor ID aiuta il sistema a sapere a quale utente appartiene la memoria, mantenendo i dati di ogni utente separati e organizzati.

  • StrategyID: mostra quale strategia di memoria viene utilizzata. Questo identificatore di strategia viene generato automaticamente quando si crea una memoria. AgentCore

  • SessionID: identifica da quale sessione o conversazione proviene la memoria.

    Una sessione è in genere un singolo periodo di conversazione o interazione tra l'utente e l'agente AI. Raggruppa tutti i messaggi e gli eventi correlati che si verificano durante quella conversazione.

Ad esempio, se definisci il seguente namespace come input per la tua strategia durante la creazione di una AgentCore Memory:

/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}/

Dopo la creazione della memoria, questo namespace potrebbe assomigliare a:

/strategy/summarization-93483043/actor/actor-9830m2w3/session/session-9330sds8

Un namespace può avere diversi livelli di granularità. Gli esempi seguenti utilizzano solo variabili integrate:

Granulare a livello di sessione

/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}/

Granulare a livello di attore in tutte le sessioni

/strategy/{memoryStrategyId}/actor/{actorId}/

Granulare a livello di strategia per tutti gli attori

/strategy/{memoryStrategyId}/

Globale in tutte le strategie

/

Per un'organizzazione ancora più granulare, puoi aggiungere variabili di namespace personalizzate per rappresentare dimensioni aggiuntive come tenant, team o ambiente.

Ad esempio di codice, vedi Abilitare la memoria a lungo termine.

Variabili di namespace personalizzate

Oltre alle variabili integrate (actorId,,memoryStrategyId)sessionId, è possibile definire variabili di namespace personalizzate per rappresentare le dimensioni organizzative uniche dell'applicazione, ad esempio azienda, organizzazione, team o ambiente. Con le variabili personalizzate, è possibile definire le memorie a lungo termine secondo gerarchie arbitrarie senza creare strategie duplicate o sovraccaricare le variabili integrate.

Ad esempio, un'applicazione multi-tenant potrebbe aver bisogno di memorie limitate alle organizzazioni:

/org/{orgname}/team/{teamname}/actor/{actorId}/session/{sessionId}/

Si definiscono le variabili personalizzate durante la creazione o l'aggiornamento di una risorsa di memoria esistente utilizzando il namespaceKeys parametro e si forniscono i relativi valori in fase di esecuzione tramite il extractionConfig.namespaceVariables campo dell'operazione. CreateEvent

Importante

Tutte le chiavi e i valori delle variabili namespace personalizzate devono essere in minuscolo.

Definire le chiavi dello spazio dei nomi

Quando crei o aggiorni una risorsa di memoria, utilizza il namespaceKeys parametro per dichiarare le chiavi variabili personalizzate e le regole di convalida opzionali. Ogni chiave deve:

  • Contiene solo caratteri alfanumerici minuscoli.

  • Non deve essere un nome di variabile incorporato (actorId,, sessionId o). memoryStrategyId

  • Deve contenere al massimo 32 caratteri.

È possibile definire fino a 5 chiavi namespace per risorsa di memoria e fino a 5 variabili personalizzate per. namespaceTemplate

Quando definisci le chiavi dello spazio dei nomi, tieni presente quanto segue:

  • È possibile definire chiavi dello spazio dei nomi a cui non fa riferimento alcuna strategia per preregistrare le chiavi per un uso futuro.

  • Una singola chiave dello spazio dei nomi può essere referenziata da più strategie. Ad esempio, {companyname} può apparire sia in una strategia semantica che in una strategia riassuntiva. namespaceTemplate

  • Una chiave dello spazio dei nomi a cui fa attualmente riferimento una strategia non può essere eliminata. namespaceTemplate È necessario innanzitutto rimuovere il riferimento dalla strategia (annullare il riferimento della chiave), quindi eliminarlo.

Per ogni chiave, è possibile specificare facoltativamente regole di convalida che vincolano i valori accettati in fase di esecuzione:

  • AllowedValues: un elenco di un massimo di 10 valori consentiti (con distinzione tra maiuscole e minuscole). I valori devono iniziare con un carattere alfanumerico minuscolo e contenere solo caratteri alfanumerici minuscoli, trattini e trattini bassi.

  • RegexPattern: un modello regex (fino a 64 caratteri) a cui il valore deve corrispondere.

Quando si specificano entrambi allowedValues eregexPattern, il servizio applica entrambe le regole (logiche). AND

L'esempio seguente mostra come creare una risorsa di memoria con variabili di namespace personalizzate e convalida:

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-]*$"}} ]'

Fornisci i valori dello spazio dei nomi in fase di esecuzione

Quando crei un evento utilizzando l'CreateEventoperazione, passa i valori della variabile namespace personalizzata nel campo: extractionConfig.namespaceVariables

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" } }'

Il servizio sostituisce questi valori nei modelli di namespace durante l'estrazione della memoria a lungo termine.

Nota

Se nella CreateEvent richiesta non viene fornita una variabile di namespace personalizzata a cui fa riferimento quella di una strategia, namespaceTemplate la risoluzione dello spazio dei nomi non ha luogo per quella strategia. Di conseguenza, l'estrazione della memoria a lungo termine non viene avviata per quella strategia. L'CreateEventoperazione ha comunque esito positivo e l'evento viene mantenuto nella memoria a breve termine.

Per rilevare questi errori, configura i log di vendita e monitora la NamespaceResolutionFailure metrica, che riporta le dimensioni:, Operation ResourceStrategyType, e StrategyId per la quale l'estrazione è stata saltata.

Aggiorna le chiavi del namespace

Quando si aggiornano le chiavi dello spazio dei nomi con l'UpdateMemoryoperazione, il namespaceKeys valore sostituisce completamente il set esistente. Per eseguire l'aggiornamento in modo sicuro, recupera le chiavi correnti conGetMemory, applica le modifiche e invia l'elenco completo.

Tieni a mente i seguenti vincoli:

  • Se ometti una chiave a cui fa ancora riferimento quella di una strategianamespaceTemplate, il servizio genera un. ValidationException Devi prima rimuovere la chiave dalla strategia namespaceTemplate prima di poterla rimuovere. namespaceKeys

  • Per aggiungere una nuova chiave, includila insieme a tutte le chiavi esistenti nella richiesta.

# 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 )

Limita l'accesso al percorso di scrittura con le chiavi di condizione IAM

È possibile creare policy IAM che utilizzano la chiave di bedrock-agentcore:namespaceVariable/<variableName> condizione per controllare quali valori personalizzati delle variabili dello spazio dei nomi un chiamante può utilizzare durante la creazione di eventi. Con questa chiave di condizione, puoi imporre l'isolamento del tenant nel percorso di scrittura.

La chiave di condizione segue lo schema bedrock-agentcore:namespaceVariable/<key> in cui <key> è definito il nome della variabile namespace. namespaceKeys

La seguente politica consente al chiamante di creare eventi solo se orgname è impostata su e nega acme esplicitamente le richieste quando è impostata su: orgname 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" } } } ] }

La tabella seguente mostra come IAM valuta le richieste in base alla presenza o meno di una chiave di condizione nella policy e se la richiesta fornisce la variabile namespace:

La policy ha una condizione? namespaceVariable La richiesta fornisce la variabile? Risultato Motivo

No

No

Consentito

Condizione non valutata

No

Sì

Consentito

Le chiavi di contesto aggiuntive vengono ignorate

Sì

Sì (valore corrispondente)

Consentito

La condizione è soddisfatta

Sì

No

Negato

Manca la chiave della condizione, non può essere soddisfatta

Sì

Sì (valore non corrispondente)

Negato

La condizione non è soddisfatta

Limita l'accesso al percorso di lettura con IAM

Puoi creare policy IAM per limitare l'accesso in lettura alla memoria in base agli ambiti che definisci, come attore, sessione e namespace. Usa gli ambiti come chiavi di contesto nelle tue policy IAM.

La seguente policy limita l'accesso al recupero delle memorie a uno o più record specifici in una particolare gerarchia NamespacePath. In questo esempio, la policy consente l'accesso solo alle memorie con namespace esatti come OR con namespace nella seguente gerarchia NamespacePath con, ad esempio summaries/agent1/ or. 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

Le API di recupero (,) richiedono lo spazio dei nomi completamente risolto. ListMemoryRecords RetrieveMemoryRecords Le variabili di namespace personalizzate sono già sostituite a questo punto, quindi le chiavi esistenti bedrock-agentcore:namespace e di bedrock-agentcore:namespacePath condizione coprono il percorso di lettura senza alcuna configurazione aggiuntiva.