View a markdown version of this page

Scénario : un agent d'assistance client basé sur l'intelligence artificielle utilisant AgentCore Memory - Amazon Bedrock AgentCore

Scénario : un agent d'assistance client basé sur l'intelligence artificielle utilisant AgentCore Memory

Dans cette section, vous apprendrez à créer un agent d'assistance client basé sur l'intelligence artificielle qui utilise AgentCore Memory pour fournir une assistance personnalisée en conservant l'historique des conversations et en extrayant des informations à long terme sur les préférences des utilisateurs. Cette rubrique inclut des exemples de code pour la AgentCore CLI et le AWS SDK.

Prenons l'exemple d'une cliente, Sarah, qui contacte l'agent d'assistance AI de votre site Web d'achat pour se renseigner sur le retard d'une commande. Le flux d'interaction via les API de AgentCore mémoire ressemblerait à ceci :

Mémoire AgentCore Mémoire

Étape 1 : créer un AgentCore souvenir

Tout d'abord, vous créez une ressource mémoire dotée de capacités de mémoire à court et à long terme, en configurant les stratégies relatives aux informations à long terme à extraire.

Exemple
AgentCore CLI
  1. Créez de la mémoire avec une stratégie sémantique :

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

    La AgentCore CLI assure la gestion des ressources de mémoire. Pour les opérations liées aux événements (création d'événements, liste d'événements, etc.), utilisez le SDK AWS Python (Boto3) ou le SDK. AWS

Interactive
  1. Exécutez agentcore pour ouvrir le TUI, puis sélectionnez Ajouter et choisissez Memory :

  2. Sélectionnez la stratégie sémantique :

    Assistant de mémoire : sélectionnez la stratégie SEMANTIC
  3. Vérifiez la configuration et appuyez sur Entrée pour confirmer :

    Assistant de mémoire : révision de la configuration
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)

Étape 2 : démarrer la session

Lorsque Sarah lance la conversation, l'agent crée un nouvel identifiant de session unique pour suivre cette interaction séparément.

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

Étape 3 : Capturez l'historique des conversations

Pendant que Sarah explique son problème, l'agent capture chaque étape de la conversation (à la fois ses questions et les réponses de l'agent). Cela alimente la conversation complète dans la mémoire à court terme et fournit les données brutes que les stratégies de mémoire à long terme doivent traiter.

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

Étape 4 : générer de la mémoire à long terme

En arrière-plan, le processus d'extraction asynchrone s'exécute. Ce processus analyse les événements bruts récents à l'aide des stratégies de mémoire que vous avez configurées pour extraire des souvenirs à long terme tels que des résumés, des faits sémantiques ou les préférences de l'utilisateur, qui sont ensuite stockés pour une utilisation future.

Étape 5 : récupérer les interactions passées dans la mémoire à court terme

Pour fournir une assistance contextuelle, l'agent charge l'historique des conversations en cours. Cela permet à l'agent de comprendre les problèmes que Sarah a soulevés dans le chat en cours.

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)

Étape 6 : Utilisez les mémoires à long terme pour une assistance personnalisée

L'agent effectue une recherche sémantique dans les souvenirs à long terme extraits pour trouver des informations pertinentes sur les préférences de Sarah, l'historique des commandes ou les préoccupations passées. Cela permet à l'agent de fournir une assistance hautement personnalisée sans avoir à demander à Sarah de répéter les informations qu'elle a déjà partagées lors des discussions précédentes.

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

Cette approche intégrée permet à l'agent de conserver un contexte riche au fil des sessions, de reconnaître les clients récurrents, de mémoriser les détails importants et de proposer des expériences personnalisées de manière fluide, ce qui se traduit par un support client plus rapide, plus naturel et plus efficace.