Agent Platform Memory Bank permet à vos agents de gérer des informations mémorisées à long terme sur plusieurs sessions. Lorsqu'il est utilisé avec Agent Development Kit (ADK), votre agent peut orchestrer automatiquement les appels à Memory Bank pour stocker et récupérer des informations mémorisées en fonction des interactions de l'utilisateur.
Ce document explique comment créer un agent ADK, le configurer pour qu'il utilise Memory Bank et interagir avec lui pour générer des informations mémorisées et y accéder.
Pour savoir comment effectuer des appels directs à l'API sans ADK, consultez le guide de démarrage rapide de l'API Memory Bank.
Gérer les informations mémorisées avec le service de mémoire ADK et Memory Bank
VertexAiMemoryBankService
est un wrapper ADK autour de Memory Bank, défini par
BaseMemoryService d'ADK.
Vous pouvez définir des rappels et des outils qui interagissent avec le service de mémoire pour lire et écrire des informations mémorisées.
L'interface VertexAiMemoryBankService inclut les éléments suivants :
memory_service.add_session_to_memorydéclenche une requêteGenerateMemoriesà Memory Bank en utilisant tous les événements duadk.Sessionfourni comme contenu source. Vous pouvez orchestrer les appels à cette méthode à l'aide decallback_context.add_session_to_memorydans vos rappels.from google.adk.agents.callback_context import CallbackContext async def add_session_to_memory_callback(callback_context: CallbackContext): await callback_context.add_session_to_memory() return Nonememory_service.add_events_to_memoryqui déclenche uneGenerateMemoriesrequête à Memory Bank à l'aide d'un sous-ensemble d'événements. Vous pouvez orchestrer les appels à cette méthode à l'aide decallback_context.add_events_to_memorydans vos rappels.from google.adk.agents.callback_context import CallbackContext async def add_events_to_memory_callback(callback_context: CallbackContext): await callback_context.add_events_to_memory(events=callback_context.session.events[-5:-1]) return Nonememory_service.search_memorydéclenche uneRetrieveMemoriesrequête à Memory Bank pour récupérer les informations mémorisées pertinentes pour les actuelsuser_idetapp_name. Vous pouvez orchestrer les appels à cette méthode à l'aide d'outils de mémoire intégrés (LoadMemoryToolouPreloadMemoryTool) ou d'un outil personnalisé qui appelletool_context.search_memory.
Avant de commencer
Pour suivre les étapes décrites dans ce tutoriel, vous devez d'abord suivre les étapes de la section Premiers pas de la page Configurer Memory Bank.
Définir des variables d'environnement
Pour utiliser ADK, définissez vos variables d'environnement :
import os
os.environ["GOOGLE_GENAI_USE_ENTERPRISE"] = "TRUE"
os.environ["GOOGLE_CLOUD_PROJECT"] = "PROJECT_ID"
os.environ["GOOGLE_CLOUD_LOCATION"] = "LOCATION"
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet
- LOCATION : votre région Consultez les régions disponibles pour Memory Bank.
Créer votre agent ADK
Pour créer un agent compatible avec la mémoire, configurez des outils et des rappels qui orchestrent les appels à votre service de mémoire.
Définir un rappel de génération de la mémoire
Pour orchestrer les appels de génération de mémoire, créez une fonction de rappel qui déclenche la génération de mémoire. Vous pouvez envoyer un sous-ensemble d'événements (avec callback_context.add_events_to_memory) ou tous les événements d'une session (avec callback_context.add_session_to_memory) à traiter en arrière-plan :
from google.adk.agents.callback_context import CallbackContext
async def generate_memories_callback(callback_context: CallbackContext):
# Option 1 (Recommended): Send events to Memory Bank for memory generation,
# which is ideal for incremental processing of events.
await callback_context.add_events_to_memory(
events=callback_context.session.events[-5:-1])
# Option 2: Send the full session to Memory Bank for memory generation.
# It's recommended to only call this at the end of a session to minimize
# how many times a single event is re-processed.
await callback_context.add_session_to_memory()
return None
Définir un outil de récupération de mémoire
Lorsque vous développez votre agent ADK, incluez un outil de mémoire qui contrôle le moment où l'agent récupère les informations mémorisées et la manière dont elles sont incluses dans le prompt.
Si vous utilisez PreloadMemoryTool, votre agent récupère les informations mémorisées au début de chaque tour et les inclut dans l'instruction système, ce qui est utile pour établir un contexte de base concernant l'utilisateur. Si vous utilisez LoadMemoryTool, le modèle appelle cet outil lorsqu'il décide que des informations mémorisées sont nécessaires pour répondre à la requête de l'utilisateur.
from google import adk
from google.adk.tools.load_memory_tool import LoadMemoryTool
from google.adk.tools.preload_memory_tool import PreloadMemoryTool
memory_retrieval_tools = [
# Option 1: Retrieve memories at the start of every turn.
PreloadMemoryTool(),
# Option 2: Retrieve memories via tool calls. The model will only call this tool
# when it decides that memories are necessary to respond to the user query.
LoadMemoryTool()
]
agent = adk.Agent(
model="gemini-3.5-flash",
name='stateful_agent',
instruction="""You are a Vehicle Voice Agent, designed to assist users with information and in-vehicle actions.
1. **Direct Action:** If a user requests a specific vehicle function (e.g., "turn on the AC"), execute it immediately using the corresponding tool. You don't have the outcome of the actual tool execution, so provide a hypothetical tool execution outcome.
2. **Information Retrieval:** Respond concisely to general information requests with your own knowledge (e.g., restaurant recommendation).
3. **Clarity:** When necessary, try to seek clarification to better understand the user's needs and preference before taking an action.
4. **Brevity:** Limit responses to under 30 words.
""",
tools=memory_retrieval_tools,
after_agent_callback=generate_memories_callback
)
Vous pouvez également créer votre propre outil personnalisé pour récupérer des informations mémorisées, ce qui est utile lorsque vous souhaitez fournir des instructions à votre agent sur le moment où il doit récupérer des informations mémorisées :
from google import adk
from google.adk.tools import ToolContext, FunctionTool
async def search_memories(query: str, tool_context: ToolContext):
"""Query this tool when you need to fetch information about user preferences."""
return await tool_context.search_memory(query)
agent = adk.Agent(
model="gemini-3.5-flash",
name='stateful_agent',
instruction="""...""",
tools=[FunctionTool(func=search_memories)],
after_agent_callback=generate_memories_callback
)
Définir un service de mémoire ADK Memory Bank et une instance Memory Bank
Une fois que vous avez créé votre agent compatible avec la mémoire, vous devez le lier à un service de mémoire. Le processus de configuration de votre service de mémoire ADK dépend de l'endroit où votre agent ADK s'exécute. L'environnement d'exécution orchestre l'exécution de vos agents, outils et rappels.
Créer une instance Memory Bank
Vous devez d'abord créer une instance Memory Bank. Cette étape est facultative si vous utilisez Agent Runtime pour déployer votre agent. Pour en savoir plus sur la personnalisation du comportement de votre Memory Bank, consultez la section Configurer votre instance Memory Bank de la page Configurer Memory Bank.
import vertexai
client = vertexai.Client(
project="PROJECT_ID",
location="LOCATION"
)
# If you don't have a Memory Bank instance already, create a
# Memory Bank instance using the default configuration.
memory_bank = client.agent_engines.create()
# Optionally, print out the resource name. You will need the
# resource name if you want to interact with your Memory Bank instance later on.
print(memory_bank.api_resource.name)
agent_engine_id = memory_bank.api_resource.name.split("/")[-1]
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet
- LOCATION : votre région Consultez les régions disponibles pour Memory Bank.
Créer un environnement d'exécution ADK
Transmettez l'ID d'instance Memory Bank à l'environnement d'exécution ou aux scripts de déploiement afin que votre agent utilise Memory Bank comme service de mémoire ADK.
Exécuteur local
adk.Runner est généralement utilisé dans un environnement local, comme Colab. Dans ce cas, vous devez créer directement le service de mémoire et l'exécuteur.
import asyncio
from google.adk.memory import VertexAiMemoryBankService
from google.adk.sessions import VertexAiSessionService
from google.genai import types
memory_service = VertexAiMemoryBankService(
project="PROJECT_ID",
location="LOCATION",
agent_engine_id="MEMORY_BANK_ID",
)
# You can use any ADK session service. This example uses Sessions.
session_service = VertexAiSessionService(
project="PROJECT_ID",
location="LOCATION",
agent_engine_id="SESSIONS_ID",
)
runner = adk.Runner(
agent=agent,
app_name="APP_NAME",
session_service=session_service,
memory_service=memory_service
)
async def call_agent(query, session, user_id):
content = types.Content(role='user', parts=[types.Part(text=query)])
events = runner.run_async(
user_id=user_id, session_id=session, new_message=content)
async for event in events:
if event.is_final_response():
final_response = event.content.parts[0].text
print("Agent Response: ", final_response)
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet
- LOCATION : votre région Consultez les régions disponibles pour Memory Bank.
- APP_NAME : nom de l'application ADK Le nom de l'application sera inclus dans le dictionnaire
scopedes informations mémorisées générées afin que les informations mémorisées soient isolées entre les utilisateurs et les applications. - MEMORY_BANK_ID : ID de l'instance Memory Bank Par exemple,
456dansprojects/my-project/locations/us-central1/reasoningEngines/456. - SESSIONS_ID : ID de l'instance Agent Platform Sessions Par exemple,
789dansprojects/my-project/locations/us-central1/reasoningEngines/789.
Agent Runtime sur Gemini Enterprise Agent Platform
Le modèle ADK Agent Runtime (AdkApp) peut être utilisé à la fois
en local et pour déployer un agent ADK sur Agent Runtime. Lorsqu'il est déployé sur
Agent Platform, le modèle ADK Memory Bank
utilise
VertexAiMemoryBankService comme service de mémoire par défaut. Vous pouvez donc créer votre instance Memory Bank et la déployer dans un environnement d'exécution en une seule étape.
Pour en savoir plus sur la configuration de votre instance Memory Bank, y compris sur la personnalisation de son comportement, consultez la section Configurer Memory Bank.
Utilisez le code suivant pour déployer votre agent ADK compatible avec la mémoire sur Agent Runtime :
import asyncio
import vertexai
from vertexai.agent_engines import AdkApp
client = vertexai.Client(
project="PROJECT_ID",
location="LOCATION"
)
adk_app = AdkApp(agent=agent)
# Create a new resource with your agent deployed to Agent Runtime.
# The Agent Runtime instance will also include an empty Memory Bank instance.
agent_engine = client.agent_engines.create(
agent_engine=adk_app,
config={
"staging_bucket": "STAGING_BUCKET",
"requirements": ["google-cloud-aiplatform[agent_engines,adk]"]
}
)
# Alternatively, update an existing resource to deploy your agent to Agent Platform.
# Your agent will have access to the Runtime instance's existing memories.
agent_engine = client.agent_engines.update(
name=agent_engine.api_resource.name,
agent_engine=adk_app,
config={
"staging_bucket": "STAGING_BUCKET",
"requirements": ["google-cloud-aiplatform[agent_engines,adk]"]
}
)
async def call_agent(query, session_id, user_id):
async for event in agent_engine.async_stream_query(
user_id=user_id,
session_id=session_id,
message=query,
):
print(event)
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet
- LOCATION : votre région Consultez les régions disponibles pour Memory Bank.
- STAGING_BUCKET : bucket Cloud Storage à utiliser pour la préparation de votre Agent Runtime
Lorsqu'il est exécuté en local, le modèle ADK utilise InMemoryMemoryService comme service de mémoire par défaut. Toutefois, vous pouvez remplacer le service de mémoire par défaut pour utiliser VertexAiMemoryBankService :
def memory_bank_service_builder():
return VertexAiMemoryBankService(
project="PROJECT_ID",
location="LOCATION",
agent_engine_id="MEMORY_BANK_ID"
)
adk_app = AdkApp(
agent=adk_agent,
# Override the default memory service.
memory_service_builder=memory_bank_service_builder
)
async def call_agent(query, session_id, user_id):
# adk_app is a local agent. If you want to deploy it to Agent Runtime,
# use `client.agent_engines.create(...)` or `client.agent_engines.update(...)`
# and call the returned Agent Runtime instance instead.
async for event in adk_app.async_stream_query(
user_id=user_id,
session_id=session_id,
message=query,
):
print(event)
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet
- LOCATION : votre région Consultez les régions disponibles pour Memory Bank.
- MEMORY_BANK_ID : ID de l'instance Memory Bank à utiliser pour
Memory Bank. Par exemple,
456dansprojects/my-project/locations/us-central1/reasoningEngines/456.
Cloud Run
Pour déployer votre agent sur Cloud Run, reportez-vous aux instructions de la documentation ADK pour savoir comment définir votre agent à déployer sur Cloud Run.
adk deploy cloud_run \
...
--memory_service_uri=agentengine://AGENT_ENGINE_ID
Google Kubernetes Engine (GKE)
Pour déployer votre agent sur GKE, reportez-vous aux instructions de la documentation ADK pour savoir comment définir votre agent à déployer sur GKE.
adk deploy gke \
...
--memory_service_uri=agentengine://AGENT_ENGINE_ID
ADK Web
L'interface Web ADK vous permet de tester vos agents directement dans le navigateur.
export GOOGLE_CLOUD_PROJECT="PROJECT_ID"
export GOOGLE_CLOUD_LOCATION="LOCATION"
adk web --memory_service_uri=agentengine://MEMORY_BANK_ID
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet
- LOCATION : votre région Consultez les régions disponibles pour Memory Bank.
- MEMORY_BANK_ID : ID de l'instance Memory Bank Par exemple,
456dansprojects/my-project/locations/us-central1/reasoningEngines/456.
Interagir avec votre agent
Après avoir défini votre agent et configuré Memory Bank, vous pouvez interagir avec votre agent. Si vous avez fourni un rappel pour déclencher la génération de mémoire lors de l'initialisation de votre agent, la génération de mémoire sera déclenchée chaque fois que l'agent sera appelé.
Les informations mémorisées seront stockées à l'aide du champ d'application {"user_id": USER_ID, "app_name":
APP_NAME} correspondant à l'ID utilisateur et au nom de l'application utilisés pour exécuter votre agent.
La méthode d'interaction avec votre agent dépend de son environnement d'exécution :
Exécuteur local
# Use `asyncio.run(session_service.create(...))` if you're running this
# code as a standard Python script.
session = await session_service.create_session(
app_name="APP_NAME",
user_id="USER_ID"
)
# Use `asyncio.run(call_agent(...))` if you're running this code as a
# standard Python script.
await call_agent(
"Can you fix the temperature?",
session.id,
"USER_ID"
)
Remplacez les éléments suivants :
- APP_NAME : nom de l'application pour votre exécuteur
- USER_ID : identifiant de votre utilisateur Les informations mémorisées générées à partir de cette session sont indexées par cet identifiant opaque. Le champ d'application des informations mémorisées générées est stocké sous la forme
{"user_id": "USER_ID"}.
Agent Runtime
Lorsque vous utilisez le modèle ADK, vous pouvez appeler votre Agent Runtime pour interagir avec la mémoire et les sessions.
# Use `asyncio.run(agent_engine.async_create_session(...))` if you're
# running this code as a standard Python script.
session = await agent_engine.async_create_session(user_id="USER_ID")
# Use `asyncio.run(call_agent(...))` if you're running this code as a
# standard Python script.
await call_agent(
"Can you fix the temperature?",
session.get("id"),
"USER_ID"
)
Remplacez les éléments suivants :
- USER_ID : identifiant de votre utilisateur Les informations mémorisées générées à partir de cette session sont indexées par cet identifiant opaque. Le champ d'application des informations mémorisées générées'
est stocké sous la forme
{"user_id": "USER_ID"}.
Cloud Run
Reportez-vous à la section Tester votre agent de la documentation sur le déploiement d'ADK Cloud Run.
GKE
Reportez-vous à la section Tester votre agent de la documentation sur le déploiement d'ADK GKE.
ADK Web
Pour utiliser ADK Web, accédez au serveur local à l'adresse http://localhost:8000.
Par défaut, ADK Web définit l'ID utilisateur sur user. Pour remplacer l'ID utilisateur par défaut, incluez userId dans les paramètres de requête, comme
http://localhost:8000?userId=YOUR_USER_ID.
Pour en savoir plus, consultez la page ADK Web de la documentation ADK.
Exemple d'interaction
Première session
Si vous avez utilisé PreloadMemoryTool, l'agent tente de récupérer les informations mémorisées au début de chaque tour pour accéder aux préférences que l'utilisateur lui a précédemment communiquées. Lors de la première interaction de l'agent avec l'utilisateur, aucune information mémorisée n'est disponible. L'agent ne connaît donc aucune préférence de l'utilisateur, comme sa température préférée, comme illustré dans l'exemple suivant :
Premier tour :
Utilisateur : "Pouvez-vous régler la température ?"
(Appel d'outil) : ADK tente de récupérer des informations mémorisées, mais aucune n'est disponible.
Modèle : "Quelle température préférez-vous ?"
(Rappel): ADK déclenche la génération de mémoire. Aucune information mémorisée n'est extraite.
Deuxième tour :
Utilisateur : Je me sens bien à 22 degrés.
(Appel d'outil) : ADK tente de récupérer des informations mémorisées, mais aucune n'est disponible.
Modèle : OK, j'ai réglé la température sur 22 degrés.
(Rappel): ADK déclenche la génération de mémoire. L'information mémorisée "J'aime la température à 22 degrés" est créée.
Deuxième session
Les informations mémorisées extraites seront disponibles pour la session suivante pour le même nom d'application et le même ID utilisateur. Si l'utilisateur fournit des informations similaires ou contradictoires aux informations mémorisées existantes, les nouvelles informations seront consolidées avec les informations mémorisées existantes.
Premier tour
Utilisateur : Réglez la température. C'est tellement inconfortable !
(Appel d'outil): ADK tente de récupérer des informations mémorisées. L'information mémorisée "J'aime la température à 22 degrés" est récupérée.
Modèle : OK, j'ai réglé la température sur 22 degrés.
(Rappel): ADK déclenche la génération de mémoire. Aucune information mémorisée n'est extraite, car l'utilisateur n'a rien partagé d'utile à conserver.
Deuxième tour
Utilisateur : En fait, je préfère qu'il fasse plus chaud le matin.
(Appel d'outil): ADK tente de récupérer des informations mémorisées. L'information mémorisée "J'aime la température à 22 degrés" est récupérée.
Modèle : OK, j'ai augmenté la température.
(Rappel): ADK déclenche la génération de mémoire. L'information mémorisée existante "J'aime la température à 22 degrés" est mise à jour et devient "En général, j'aime la température à 22 degrés, mais je préfère qu'il fasse plus chaud le matin".
Utiliser un Memory Bank multirégional avec un environnement d'exécution régional
Lorsque vous utilisez Runtime avec Memory Bank intégré, votre agent et Memory Bank sont déployés dans la même région par défaut. Toutefois, vous pouvez les dissocier pour utiliser un Memory Bank multirégional (par exemple, us) avec un environnement d'exécution régional (par exemple, us-central1). Cette configuration vous permet de conserver un Memory Bank centralisé sur différents déploiements régionaux.
Pour utiliser un Memory Bank multirégional, vous devez remplacer le compilateur de service de mémoire ADK par défaut pour qu'il pointe vers l'emplacement multirégional et l'ID Memory Bank correspondant.
import vertexai
from google.adk.memory import VertexAiMemoryBankService
from vertexai.agent_engines import AdkApp
# Create the Memory Bank instance in a multi-region location (for example, 'us')
client_mb = vertexai.Client(project="PROJECT_ID", location="us")
memory_bank = client_mb.agent_engines.create()
memory_bank_id = memory_bank.api_resource.name.split(\"/\")[-1]
# Point your memory service to the 'us' location, 'us' Memory Bank
def memory_bank_service_builder():
return VertexAiMemoryBankService(
project="PROJECT_ID",
location="us",
agent_engine_id=memory_bank_id
)
# Create the AdkApp with the overridden builder
adk_app = AdkApp(
agent=agent,
memory_service_builder=memory_bank_service_builder
)
# Deploy the runtime to a specific region (for example, 'us-central1')
client_runtime = vertexai.Client(project="PROJECT_ID", location="us-central1")
agent_engine = client_runtime.agent_engines.create(
agent=adk_app,
config={
"staging_bucket": "STAGING_BUCKET",
"requirements": ["google-cloud-aiplatform[agent_engines,adk]"]
}
)
Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet
- STAGING_BUCKET : bucket Cloud Storage à utiliser pour la préparation de votre Agent Runtime
Libérer de l'espace
Pour nettoyer toutes les ressources utilisées dans ce projet, vous pouvez supprimer le Google Cloud projet que vous avez utilisé pour ce tutoriel.
Vous pouvez également supprimer les ressources individuelles que vous avez créées, comme suit :
Utilisez l'exemple de code suivant pour supprimer l'instance Agent Runtime, ce qui supprime également toutes les sessions ou informations mémorisées appartenant à cet environnement d'exécution.
agent_engine.delete(force=True)Supprimez tous les fichiers créés localement.
Étape suivante
Guide de démarrage rapide de l'API Memory Bank
Premiers pas avec l'API Memory Bank pour gérer les informations mémorisées à long terme.