View a markdown version of this page

Scenario: un agente AI dell'assistenza clienti che utilizza AgentCore la memoria - Amazon Bedrock 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à.

Scenario: un agente AI dell'assistenza clienti che utilizza AgentCore la memoria

In questa sezione imparerai come creare un agente AI per l'assistenza clienti che utilizzi la AgentCore memoria per fornire assistenza personalizzata conservando la cronologia delle conversazioni ed estraendo informazioni a lungo termine sulle preferenze degli utenti. L'argomento include esempi di codice per la AgentCore CLI e l' AWS SDK.

Prendiamo in considerazione un cliente, Sarah, che contatta l'agente AI dell'assistenza del tuo sito web per gli acquisti per chiedere informazioni su un ordine ritardato. Il flusso di interazione attraverso le API di AgentCore memoria sarebbe simile al seguente:

Memoria e memoria AgentCore

Fase 1: Creare una AgentCore memoria

Innanzitutto, si crea una risorsa di memoria con funzionalità di memoria sia a breve che a lungo termine, configurando le strategie per estrarre le informazioni a lungo termine.

Esempio
AgentCore CLI
  1. Crea memoria con una strategia semantica:

    agentcore add memory --name CustomerSupportSemantic --strategies SEMANTIC agentcore deploy
    Nota

    La AgentCore CLI fornisce la gestione delle risorse di memoria. Per le operazioni sugli eventi (creazione di eventi, elenco di eventi, ecc.), usa AWS Python SDK (Boto3) o SDK. AWS

Interactive
  1. Esegui agentcore per aprire la TUI, quindi seleziona aggiungi e scegli Memoria:

  2. Seleziona la strategia semantica:

    Memory wizard: seleziona la strategia SEMANTIC
  3. Rivedi la configurazione e premi Invio per confermare:

    Memory wizard: revisione della configurazione
AWS SDK
  1. import boto3 import time from datetime import datetime # Initialize the Boto3 clients for control plane and data plane operations control_client = boto3.client('bedrock-agentcore-control') data_client = boto3.client('bedrock-agentcore') print("Creating a new memory resource...") # Create the memory resource with defined strategies response = control_client.create_memory( name="ShoppingSupportAgentMemory", description="Memory for a customer support agent.", memoryStrategies=[ { 'summaryMemoryStrategy': { 'name': 'SessionSummarizer', 'namespaceTemplates': ['/summaries/{actorId}/{sessionId}/'] } }, { 'userPreferenceMemoryStrategy': { 'name': 'UserPreferenceExtractor', 'namespaceTemplates': ['/users/{actorId}/preferences/'] } } ] ) memory_id = response['memory']['id'] print(f"Memory resource created with ID: {memory_id}") # Poll the memory status until it becomes ACTIVE while True: mem_status_response = control_client.get_memory(memoryId=memory_id) status = mem_status_response.get('memory', {}).get('status') if status == 'ACTIVE': print("Memory resource is now ACTIVE.") break elif status == 'FAILED': raise Exception("Memory resource creation FAILED.") print("Waiting for memory to become active...") time.sleep(10)

Fase 2: Avvio della sessione

Quando Sarah avvia la conversazione, l'agente crea un nuovo e univoco ID di sessione per tracciare questa interazione separatamente.

# Unique identifier for the customer, Sarah sarah_actor_id = "user-sarah-123" # Unique identifier for this specific support session support_session_id = "customer-support-session-1" print(f"Session started for Actor ID: {sarah_actor_id}, Session ID: {support_session_id}")

Fase 3: Acquisisci la cronologia delle conversazioni

Mentre Sarah spiega il problema, l'agente registra ogni turno della conversazione (sia le sue domande che le risposte dell'agente). In questo modo l'intera conversazione viene inserita nella memoria a breve termine e vengono forniti i dati grezzi per l'elaborazione delle strategie di memoria a lungo termine.

print("Capturing conversational events...") full_conversation_payload = [ { 'conversational': { 'role': 'USER', 'content': {'text': "Hi, my order #ABC-456 is delayed."} } }, { 'conversational': { 'role': 'ASSISTANT', 'content': {'text': "I'm sorry to hear that, Sarah. Let me check the status for you."} } }, { 'conversational': { 'role': 'USER', 'content': {'text': "By the way, for future orders, please always use FedEx. I've had issues with other carriers."} } }, { 'conversational': { 'role': 'ASSISTANT', 'content': {'text': "Thank you for that information. I have made a note to use FedEx for your future shipments."} } } ] data_client.create_event( memoryId=memory_id, actorId=sarah_actor_id, sessionId=support_session_id, eventTimestamp=datetime.now(), payload=full_conversation_payload ) print("Conversation history has been captured in short-term memory.")

Fase 4: Generazione di memoria a lungo termine

In background, viene eseguito il processo di estrazione asincrono. Questo processo analizza gli eventi grezzi recenti utilizzando le strategie di memoria configurate per estrarre ricordi a lungo termine come riassunti, fatti semantici o preferenze dell'utente, che vengono poi archiviati per un uso futuro.

Fase 5: Recupera le interazioni passate dalla memoria a breve termine

Per fornire assistenza contestuale, l'agente carica la cronologia delle conversazioni correnti. Questo aiuta l'agente a capire quali problemi Sarah ha sollevato nella chat in corso.

print("\nRetrieving current conversation history from short-term memory...") response = data_client.list_events( memoryId=memory_id, actorId=sarah_actor_id, sessionId=support_session_id, maxResults=10 ) # Reverse the list of events to display them in chronological order event_list = reversed(response.get('events', [])) for event in event_list: print(event)

Fase 6: Usa le memorie a lungo termine per un'assistenza personalizzata

L'agente esegue una ricerca semantica tra le memorie a lungo termine estratte per trovare informazioni pertinenti sulle preferenze di Sarah, sulla cronologia degli ordini o sulle preoccupazioni passate. Ciò consente all'agente di fornire un'assistenza altamente personalizzata senza dover chiedere a Sarah di ripetere le informazioni che ha già condiviso nelle chat precedenti.

# Wait for the asynchronous extraction to finish print("\nWaiting 60 seconds for long-term memory processing...") time.sleep(60) # --- Example 1: Retrieve the user's shipping preference --- print("\nRetrieving user preferences from long-term memory...") preference_response = data_client.retrieve_memory_records( memoryId=memory_id, namespace=f"/users/{sarah_actor_id}/preferences/", searchCriteria={"searchQuery": "Does the user have a preferred shipping carrier?"} ) for record in preference_response.get('memoryRecordSummaries', []): print(f"- Retrieved Record: {record}") # --- Example 2: Broad query about the user's issue (across sessions with the help of namespacePath) --- print("\nPerforming a broad search for user's reported issues...") issue_response = data_client.retrieve_memory_records( memoryId=memory_id, namespacePath=f"/summaries/{sarah_actor_id}/", searchCriteria={"searchQuery": "What problem did the user report with their order?"} ) for record in issue_response.get('memoryRecordSummaries', []): print(f"- Retrieved Record: {record}")

Questo approccio integrato consente all'agente di mantenere un contesto completo durante le sessioni, riconoscere i clienti abituali, richiamare dettagli importanti e offrire esperienze personalizzate senza interruzioni, garantendo un'assistenza clienti più rapida, naturale ed efficace.