View a markdown version of this page

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

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

In questa sezione imparerai come creare un agente di intelligenza artificiale 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.

Prendi in considerazione una cliente, Sarah, che contatta l'agente AI del servizio di assistenza del tuo sito di shopping per richiedere informazioni su un ordine in ritardo. Il flusso di interazione attraverso le API di AgentCore memoria sarebbe simile al seguente:

Memoria: memoria AgentCore

Fase 1: Creare un AgentCore ricordo

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

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: verifica la 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: Avvia la sessione

Quando Sarah avvia la conversazione, l'agente crea un nuovo e unico 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}")

Passaggio 3: acquisisci la cronologia delle conversazioni

Mentre Sarah spiega il suo problema, l'agente registra ogni fase della conversazione (sia le sue domande che le risposte dell'agente). Questo compila l'intera conversazione nella memoria a breve termine e fornisce 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: Generare memoria a lungo termine

In background, viene eseguito il processo di estrazione asincrona. Questo processo analizza gli eventi raw recenti utilizzando le strategie di memoria configurate per estrarre memorie a lungo termine come riepiloghi, fatti semantici o preferenze dell'utente, che vengono poi archiviate per usi futuri.

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

Per fornire assistenza in base al contesto, l'agente carica la cronologia corrente delle conversazioni. Questo aiuta l'agente a capire quali problemi ha sollevato Sarah 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: Utilizza 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 ricco tra le sessioni, riconoscere i clienti abituali, richiamare dettagli importanti e fornire esperienze personalizzate senza interruzioni, con conseguente assistenza clienti più rapida, naturale ed efficace.