Générer des souvenirs

La Memory Bank vous permet de construire des souvenirs à long terme à partir des conversations entre l'utilisateur et votre agent. Memory Bank consolide ensuite les souvenirs d'un utilisateur spécifique et les organise automatiquement en ajoutant, modifiant et supprimant des souvenirs au fil du temps. Cette page explique comment déclencher la génération de souvenirs et les obtenir.

Lorsque vous déclenchez la génération de souvenirs, la Banque de souvenirs effectue automatiquement les opérations suivantes :

  • Extraction : extrait des informations sur l'utilisateur à partir de ses conversations avec l'agent.

  • Consolidation : indique si les souvenirs existants de même portée doivent être supprimés ou mis à jour. La banque de souvenirs vérifie que les nouveaux souvenirs ne sont pas des doublons ni des contradictions avant de les fusionner avec les souvenirs existants.

Toutes les interactions avec l'user-agent n'entraînent pas la création ni la mise à jour de souvenirs. La mémoire ne conserve que les informations jugées utiles pour les futures interactions, qui peuvent inclure les types d'informations suivants :

  • Informations sur l'utilisateur, comme ses préférences, ses noms, ses relations, ses loisirs et ses dates importantes. Par exemple, "Je travaille chez Google", "Je préfère le siège côté couloir" ou "Mon anniversaire de mariage est le 31 décembre".
  • Événements clés de la conversation et résultats des tâches. Par exemple, "J'ai réservé des billets d'avion aller-retour entre JFK et SFO. Je pars le 1er juin 2025 et reviens le 7 juin 2025."
  • Informations que l'utilisateur demande explicitement à l'agent de mémoriser. Par exemple, si l'utilisateur dit "Souviens-toi que j'utilise principalement Python", la Banque de mémoire génère un souvenir tel que "J'utilise principalement Python".

Les souvenirs ne peuvent être extraits que du texte, des fichiers intégrés et des données de fichier du contenu source. Tous les autres contenus, y compris les appels de fonction et les réponses, sont ignorés lors de la génération de souvenirs.

Les souvenirs peuvent être extraits des images, des vidéos et des contenus audio fournis par l'utilisateur. Si la banque de mémoire juge que le contexte fourni par l'entrée multimodale est pertinent pour les futures interactions, une mémoire textuelle peut être créée, incluant les informations extraites de l'entrée. Par exemple, si l'utilisateur fournit une image d'un golden retriever avec le texte "C'est mon chien", la Banque de souvenirs génère un souvenir tel que "Mon chien est un golden retriever".

Configurer votre environnement

Avant de commencer à générer des souvenirs, vous devez configurer votre environnement et votre instance Agent Engine. Cette section suppose que vous avez configuré un environnement de développement Python ou que vous utilisez un environnement d'exécution avec un environnement de développement Python (tel que Colab).

Importer des bibliothèques

Installez le SDK Vertex AI :

  pip install google-cloud-aiplatform>=1.100.0

Configurer un client SDK Vertex AI

  import vertexai

  client = vertexai.Client(
      project="PROJECT_ID",
      location="LOCATION",
  )

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet
  • LOCATION : votre région. Seule la région us-central1 est acceptée pour la banque de mémoire Vertex AI Agent Engine.

Configurer votre instance Agent Engine

Pour extraire des souvenirs de la Memory Bank, vous avez d'abord besoin d'une instance d'Agent Engine. Vous pouvez créer une instance ou en obtenir une existante. Les nouvelles instances sont vides, sauf si vous créez ou générez des souvenirs au préalable.

Créer

agent_engine = client.agent_engines.create()

Utiliser un secret existant

agent_engine = client.agent_engines.get(name="AGENT_ENGINE_NAME")

Remplacez les éléments suivants :

  • AGENT_ENGINE_NAME : nom de l'Agent Engine. Il doit être au format projects/.../locations/.../reasoningEngines/.... Vous ne pouvez utiliser les instances Agent Engine dans us-central1 que pour la Memory Bank de Vertex AI Agent Engine.

Générer des souvenirs

Vous pouvez déclencher la génération de souvenirs à l'aide de GenerateMemories à la fin d'une session ou à intervalles réguliers au cours d'une session. La génération de mémoire extrait le contexte clé des conversations sources et le combine aux souvenirs existants pour la même portée. Par exemple, vous pouvez créer des souvenirs au niveau de la session en utilisant un champ d'application tel que {"user_id": "123", "session_id": "456"}. Les souvenirs ayant la même portée peuvent être regroupés et récupérés ensemble.

Lorsque vous appelez GenerateMemories, vous devez fournir la conversation source via les sessions Agent Engine ou directement au format JSON :

Sessions Agent Engine

Avec les sessions Agent Engine, la banque de mémoire utilise les événements de session comme source de conversation pour générer la mémoire.

Pour définir le champ d'application des souvenirs générés, la banque de souvenirs extrait et utilise l'ID utilisateur de la session par défaut. Par exemple, la portée des souvenirs est stockée sous la forme {"user_id": "123"} si le user_id de la session est "123". Vous pouvez également fournir un scope directement, ce qui remplace l'utilisation du user_id de la session comme portée.

client.agent_engines.generate_memories(
  name=agent_engine.api_resource.name,
  vertex_session_source={
    "session": "SESSION_NAME"
  },
  # Optional when using Agent Engine Sessions. Defaults to {"user_id": session.user_id}.
  scope=SCOPE,
  config={
      "wait_for_completion": True
  }
)

Remplacez les éléments suivants :

  • SESSION_NAME : nom de la session.

  • (Facultatif) SCOPE : dictionnaire représentant le champ d'application des souvenirs générés. Exemple :{"session_id": "MY_SESSION"} Seuls les souvenirs ayant la même portée sont pris en compte pour la consolidation. Si aucune valeur n'est spécifiée, {"user_id": session.user_id} est utilisé.

Format JSON

Si vous utilisez un stockage de session différent de celui des sessions Agent Engine, fournissez la conversation source directement au format JSON :

client.agent_engines.generate_memories(
    name=agent_engine.api_resource.name,
    direct_contents_source={
      "events": EVENTS
    },
    scope=SCOPE,
    config={
        "wait_for_completion": True
    }
)

Remplacez les éléments suivants :

  • EVENTS : liste des dictionnaires de contenu. Exemple :
[
  {
    "content": {
      "role": "user",
      "parts": [
        {"text": "I'm work with LLM agents!"}
      ]
    }
  }
]
  • SCOPE : dictionnaire représentant le champ d'application des souvenirs générés. Exemple :{"session_id": "MY_SESSION"} Seuls les souvenirs ayant la même portée sont pris en compte pour la consolidation.

GenerateMemories renvoie un AgentEngineGenerateMemoriesOperation contenant une liste de souvenirs générés :

AgentEngineGenerateMemoriesOperation(
  name="projects/.../locations/.../reasoningEngines/.../operations/...",
  done=True,
  response=GenerateMemoriesResponse(
    generatedMemories=[
      GenerateMemoriesResponseGeneratedMemory(
        memory=Memory(
          "name": "projects/.../locations/.../reasoningEngines/.../memories/..."
        ),
        action=<GenerateMemoriesResponseGeneratedMemoryAction.CREATED: "CREATED">,
      ),
      GenerateMemoriesResponseGeneratedMemory(
        memory=Memory(
          "name": "projects/.../locations/.../reasoningEngines/.../memories/..."
        ),
        action=<GenerateMemoriesResponseGeneratedMemoryAction.UPDATED: "UPDATED">,
      ),
      GenerateMemoriesResponseGeneratedMemory(
        memory=Memory(
          "name": "projects/.../locations/.../reasoningEngines/.../memories/..."
        ),
        action=<GenerateMemoriesResponseGeneratedMemoryAction.DELETED: "DELETED">,
      ),
    ]
  )
)

Chaque souvenir généré inclut l'action qui a été effectué sur ce souvenir :

  • CREATED : indique qu'un nouveau souvenir a été ajouté, représentant un nouveau concept qui n'a pas été capturé par les souvenirs existants.
  • UPDATED : indique qu'une mémoire existante a été mise à jour, ce qui se produit si la mémoire couvrait des concepts similaires à ceux des informations nouvellement extraites. Les faits mémorisés peuvent être mis à jour avec de nouvelles informations ou rester les mêmes.
  • DELETED : indique que la mémoire existante a été supprimée, car ses informations étaient en contradiction avec les nouvelles informations extraites de la conversation.

Pour les souvenirs CREATED ou UPDATED, vous pouvez utiliser GetMemories pour récupérer l'intégralité du contenu du souvenir. La récupération des souvenirs DELETED génère une erreur 404.

Étapes suivantes