View a markdown version of this page

Escenario: un agente de IA de atención al cliente que usa AgentCore Memory - Amazon Bedrock AgentCore

Escenario: un agente de IA de atención al cliente que usa AgentCore Memory

En esta sección, aprenderás a crear un agente de IA de atención al cliente que utilice AgentCore Memory para ofrecer asistencia personalizada manteniendo el historial de conversaciones y extrayendo información a largo plazo sobre las preferencias de los usuarios. El tema incluye ejemplos de código para la AgentCore CLI y el AWS SDK.

Pensemos en una clienta, Sarah, que contacta con el agente de asistencia de inteligencia artificial de su sitio web de compras para preguntar sobre un pedido retrasado. El flujo de interacción a través de las API de AgentCore memoria tendría el siguiente aspecto:

Memoria: AgentCore memoria

Paso 1: Crear una AgentCore memoria

Primero, crea un recurso de memoria con capacidades de memoria a corto y largo plazo, configurando las estrategias para extraer la información a largo plazo.

ejemplo
AgentCore CLI
  1. Crea memoria con una estrategia semántica:

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

    La AgentCore CLI proporciona administración de recursos de memoria. Para las operaciones de eventos (crear eventos, enumerar eventos, etc.), usa el SDK de AWS Python (Boto3) o AWS el SDK.

Interactive
  1. Ejecute agentcore para abrir la TUI y, a continuación, seleccione añadir y, a continuación, elija Memoria:

  2. Seleccione la estrategia semántica:

    Asistente de memoria: selecciona la estrategia SEMÁNTICA
  3. Revise la configuración y pulse Entrar para confirmar:

    Asistente de memoria: revise la configuración
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)

Paso 2: Iniciar la sesión

Cuando Sarah inicia la conversación, el agente crea un identificador de sesión nuevo y único para realizar un seguimiento de esta interacción por separado.

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

Paso 3: Captura el historial de conversaciones

Mientras Sarah explica su problema, el agente captura cada momento de la conversación (tanto sus preguntas como las respuestas del agente). Esto rellena toda la conversación en la memoria a corto plazo y proporciona los datos sin procesar para que los procesen las estrategias de memoria a largo plazo.

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.")

Paso 4: Generar memoria a largo plazo

En segundo plano, se ejecuta el proceso de extracción asíncrona. Este proceso analiza los eventos sin procesar recientes utilizando las estrategias de memoria configuradas para extraer recuerdos a largo plazo, como resúmenes, datos semánticos o preferencias del usuario, que luego se almacenan para su uso futuro.

Paso 5: Recupera las interacciones pasadas de la memoria a corto plazo

Para proporcionar asistencia basada en el contexto, el agente carga el historial de conversaciones actual. Esto ayuda al agente a entender los problemas que Sarah ha planteado en la conversación en curso.

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)

Paso 6: Utilice los recuerdos a largo plazo para obtener asistencia personalizada

El agente realiza una búsqueda semántica en las memorias extraídas a largo plazo para encontrar información relevante sobre las preferencias de Sarah, su historial de pedidos o sus inquietudes anteriores. Esto permite al agente ofrecer una asistencia altamente personalizada sin tener que pedirle a Sarah que repita información que ya ha compartido en conversaciones anteriores.

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

Este enfoque integrado permite al agente mantener un contexto detallado en todas las sesiones, reconocer a los clientes habituales, recordar detalles importantes y ofrecer experiencias personalizadas sin problemas, lo que se traduce en una atención al cliente más rápida, natural y eficaz.