View a markdown version of this page

Escenario: un agente de IA de atención al cliente que usa AgentCore Memory - Base amazónica AgentCore

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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 brindar 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 inteligencia artificial de soporte 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

En primer lugar, se crea un recurso de memoria con capacidades de memoria a corto y largo plazo, y se configuran 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.), utilice el SDK o el SDK de AWS Python (Boto3). AWS

Interactive
  1. Ejecuta agentcore para abrir la TUI y, a continuación, selecciona añadir y elige Memoria:

  2. Selecciona 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 ID de sesión nuevo y único para rastrear 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 la conversación

A medida que Sarah explica su problema, el agente captura cada paso 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 asincrónica. 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 usarlos en el futuro.

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

Para brindar asistencia adaptada al contexto, el agente carga el historial de conversaciones actual. Esto ayuda al agente a entender los problemas que Sarah ha planteado en el chat 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 los recuerdos extraídos a largo plazo para encontrar información relevante sobre las preferencias, el historial de pedidos o las preocupaciones pasadas de Sarah. Esto permite que el agente brinde una asistencia altamente personalizada sin necesidad de pedirle a Sarah que repita la información que ya ha compartido en chats 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 que regresan, 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.