Mit der Memory Bank der Agent Platform können Ihre Agenten langfristig gemerkte Informationen über mehrere Sitzungen hinweg verwalten. Wenn Ihr Agent mit dem Agent Development Kit (ADK) verwendet wird, kann er automatisch Aufrufe an Memory Bank orchestrieren, um Erinnerungen auf Grundlage von Nutzerinteraktionen zu speichern und abzurufen.
In diesem Dokument wird beschrieben, wie Sie einen ADK-Agenten erstellen, ihn für die Verwendung von Memory Bank konfigurieren und mit ihm interagieren, um Erinnerungen zu generieren und darauf zuzugreifen.
Informationen zum direkten Aufrufen der API ohne ADK finden Sie in der Kurzanleitung für die Memory Bank API.
Gemerkte Informationen mit dem ADK-Speicherdienst und Memory Bank verwalten
VertexAiMemoryBankService
ist ein ADK-Wrapper für Memory Bank, der durch die BaseMemoryService des ADK definiert wird.
Sie können Callbacks und Tools definieren, die mit dem Informationsdienst interagieren, um Informationen zu lesen und zu schreiben.
Die VertexAiMemoryBankService-Benutzeroberfläche umfasst:
memory_service.add_session_to_memorylöst eineGenerateMemories-Anfrage an Memory Bank aus, wobei alle Ereignisse im bereitgestelltenadk.Sessionals Quellinhalte verwendet werden. Sie können Aufrufe dieser Methode mitcallback_context.add_session_to_memoryin Ihren Callbacks orchestrieren.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_memory, wodurch eineGenerateMemories-Anfrage an die Memory Bank mit einer Teilmenge von Ereignissen ausgelöst wird. Sie können Aufrufe dieser Methode mitcallback_context.add_events_to_memoryin Ihren Callbacks orchestrieren.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_memorylöst eineRetrieveMemories-Anfrage an Memory Bank aus, um relevante gemerkte Informationen für die aktuelleuser_idundapp_nameabzurufen. Sie können Aufrufe dieser Methode mit integrierten Speichertools (LoadMemoryTooloderPreloadMemoryTool) oder einem benutzerdefinierten Tool, dastool_context.search_memoryaufruft, orchestrieren.
Hinweis
Wenn Sie dieser Anleitung folgen möchten, sollten Sie zuerst die Schritte im Abschnitt „Erste Schritte“ auf der Seite „Memory Bank einrichten“ ausführen.
Umgebungsvariablen festlegen
Legen Sie zum Verwenden des ADK Ihre Umgebungsvariablen fest:
import os
os.environ["GOOGLE_GENAI_USE_ENTERPRISE"] = "TRUE"
os.environ["GOOGLE_CLOUD_PROJECT"] = "PROJECT_ID"
os.environ["GOOGLE_CLOUD_LOCATION"] = "LOCATION"
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- LOCATION: Ihre Region. Unterstützte Regionen für Memory Bank
ADK-Agent erstellen
Wenn Sie einen Agent mit Speicher erstellen möchten, richten Sie Tools und Callbacks ein, die Aufrufe an Ihren Speicherdienst orchestrieren.
Callback für die Erstellung von gemerkten Informationen definieren
Um Aufrufe zum Merken von Informationen zu orchestrieren, erstellen Sie eine Callback-Funktion, die das Merken von Informationen auslöst. Sie können entweder eine Teilmenge von Ereignissen (mit callback_context.add_events_to_memory) oder alle Ereignisse in einer Sitzung (mit callback_context.add_session_to_memory) zur Verarbeitung im Hintergrund senden:
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
Tool zum Abrufen von Erinnerungen definieren
Wenn Sie Ihren ADK-Agenten entwickeln, fügen Sie ein Memory-Tool ein. Dieses legt fest, wann der Agent Erinnerungen abruft und wie diese in den Prompt aufgenommen werden.
Wenn Sie PreloadMemoryTool verwenden, ruft Ihr KI-Agent zu Beginn jedes Turns Erinnerungen ab und fügt sie in die Systemanweisung ein. Das ist gut, um einen grundlegenden Kontext zum Nutzer herzustellen. Wenn Sie LoadMemoryTool verwenden, ruft das Modell dieses Tool auf, wenn es feststellt, dass Erinnerungen zum Beantworten der Nutzeranfrage erforderlich sind.
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
)
Alternativ können Sie ein eigenes benutzerdefiniertes Tool zum Abrufen von gemerkten Informationen erstellen. Das ist hilfreich, wenn Sie Ihrem Agenten Anweisungen dazu geben möchten, wann er gemerkte Informationen abrufen soll:
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
)
ADK Memory Bank-Speicherdienst und Memory Bank-Instanz definieren
Nachdem Sie Ihren KI-Agenten mit Merkfähigkeit erstellt haben, müssen Sie ihn mit einem Merkfähigkeitsservice verknüpfen. Die Konfiguration Ihres ADK-Speicherdienstes hängt davon ab, wo Ihr ADK-Agent ausgeführt wird. Die Laufzeit orchestriert die Ausführung Ihrer Agents, Tools und Callbacks.
Memory Bank-Instanz erstellen
Sie müssen zuerst eine Memory Bank-Instanz erstellen. Dieser Schritt ist optional, wenn Sie die Agent Runtime zum Bereitstellen Ihres KI-Agenten verwenden. Weitere Informationen zum Anpassen des Verhaltens von Memory Bank finden Sie auf der Seite „Memory Bank einrichten“ im Abschnitt Memory Bank-Instanz konfigurieren.
import agentplatform
client = agentplatform.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.memory_banks.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.name)
memory_bank_id = memory_bank.name.split("/")[-1]
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- LOCATION: Ihre Region. Unterstützte Regionen für Memory Bank
ADK-Laufzeit erstellen
Übergeben Sie die Memory Bank-Instanz-ID an die Laufzeit- oder Bereitstellungsskripts, damit Ihr Agent Memory Bank als ADK-Speicherdienst verwendet.
Lokaler Runner
adk.Runner wird im Allgemeinen in einer lokalen Umgebung wie Colab verwendet. In diesem Fall müssen Sie den Speicherdienst und den Runner direkt erstellen.
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)
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- LOCATION: Ihre Region. Unterstützte Regionen für Memory Bank
- APP_NAME: Name der ADK-App. Der App-Name wird im
scope-Wörterbuch der generierten Erinnerungen angegeben, damit Erinnerungen sowohl für Nutzer als auch für Apps isoliert werden. - MEMORY_BANK_ID: Die Instanz-ID der Memory Bank. Beispiel:
456inprojects/my-project/locations/us-central1/reasoningEngines/456. - SESSIONS_ID: Die Instanz-ID von Agent Platform Sessions. Beispiel:
789inprojects/my-project/locations/us-central1/reasoningEngines/789.
Agent Runtime auf der Gemini Enterprise Agent Platform
Die Agent Runtime ADK-Vorlage (AdkApp) kann sowohl lokal als auch zum Bereitstellen eines ADK-Agenten in der Agent Runtime verwendet werden. Wenn das Memory Bank ADK-Template auf der Agent Platform bereitgestellt wird, wird VertexAiMemoryBankService als Standardspeicherdienst verwendet. Sie können also Ihre Memory Bank-Instanz erstellen und in einem einzigen Schritt in einer Laufzeit bereitstellen.
Weitere Informationen zum Einrichten Ihrer Memory Bank-Instanz, einschließlich der Anpassung des Verhaltens Ihrer Memory Bank, finden Sie unter Memory Bank konfigurieren.
Verwenden Sie den folgenden Code, um Ihren speicherfähigen ADK-Agenten in der Agent Runtime bereitzustellen:
import asyncio
import agentplatform
from agentplatform.frameworks import AdkApp
client = agentplatform.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.
runtime_instance = client.runtimes.create(
agent=adk_app,
config={
"staging_bucket": "STAGING_BUCKET",
"requirements": ["google-cloud-agentplatform[runtimes,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.
runtime_instance = client.runtimes.update(
name=agent_engine.api_resource.name,
agent=adk_app,
config={
"staging_bucket": "STAGING_BUCKET",
"requirements": ["google-cloud-agentplatform[runtimes,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)
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- LOCATION: Ihre Region. Sehen Sie sich die unterstützten Regionen für Memory Bank an.
- STAGING_BUCKET: Ihr Cloud Storage-Bucket, der für das Staging Ihrer Agent Runtime verwendet werden soll.
Bei der lokalen Ausführung verwendet die ADK-Vorlage InMemoryMemoryService als Standardspeicherdienst. Sie können den Standard-Speicherdienst jedoch überschreiben, um VertexAiMemoryBankService zu verwenden:
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.runtimes.create(...)` or `client.runtimes.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)
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- LOCATION: Ihre Region. Unterstützte Regionen für Memory Bank
- MEMORY_BANK_ID: Die Memory Bank-Instanz-ID, die für Memory Bank verwendet werden soll. Beispiel:
456inprojects/my-project/locations/us-central1/reasoningEngines/456.
Cloud Run
Informationen zum Bereitstellen Ihres Agenten in Cloud Run finden Sie in der ADK-Dokumentation.
adk deploy cloud_run \
...
--memory_service_uri=agentengine://AGENT_ENGINE_ID
Google Kubernetes Engine (GKE)
Informationen zum Bereitstellen Ihres Agents in GKE finden Sie in der ADK-Dokumentation.
adk deploy gke \
...
--memory_service_uri=agentengine://AGENT_ENGINE_ID
ADK Web
Mit der ADK-Weboberfläche können Sie Ihre KI-Agenten direkt im Browser testen.
export GOOGLE_CLOUD_PROJECT="PROJECT_ID"
export GOOGLE_CLOUD_LOCATION="LOCATION"
adk web --memory_service_uri=agentengine://MEMORY_BANK_ID
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- LOCATION: Ihre Region. Sehen Sie sich die unterstützten Regionen für Memory Bank an.
- MEMORY_BANK_ID: Die Instanz-ID der Memory Bank. Beispiel:
456inprojects/my-project/locations/us-central1/reasoningEngines/456.
Mit dem Agent interagieren
Nachdem Sie Ihren Agenten definiert und Memory Bank eingerichtet haben, können Sie mit ihm interagieren. Wenn Sie bei der Initialisierung Ihres Agents einen Callback zum Auslösen der Speichergenerierung angegeben haben, wird die Speichergenerierung jedes Mal ausgelöst, wenn der Agent aufgerufen wird.
Gemerkte Informationen werden mit dem Bereich {"user_id": USER_ID, "app_name":
APP_NAME} gespeichert, der der Nutzer-ID und dem App-Namen entspricht, die zum Ausführen Ihres Agents verwendet werden.
Die Methode zur Interaktion mit Ihrem Agenten hängt von seiner Ausführungsumgebung ab:
Lokaler Runner
# 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"
)
Ersetzen Sie Folgendes:
- APP_NAME: App-Name für Ihren Runner.
- USER_ID: Eine Kennung für den Nutzer. Die in dieser Sitzung generierten Erinnerungen werden mit dieser opaken Kennung verschlüsselt. Der Umfang der generierten gemerkten Informationen wird als
{"user_id": "USER_ID"}gespeichert.
Agent Runtime
Wenn Sie die ADK-Vorlage verwenden, können Sie Ihre Agent Runtime aufrufen, um mit dem Speicher und den Sitzungen zu interagieren.
# 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"
)
Ersetzen Sie Folgendes:
- USER_ID: Eine Kennung für den Nutzer. Erinnerungen, die aus dieser Sitzung generiert werden, werden mit dieser intransparenten Kennung verschlüsselt. Der Bereich der generierten gemerkten Informationen wird als
{"user_id": "USER_ID"}gespeichert.
Cloud Run
Weitere Informationen finden Sie im Abschnitt Agent testen der ADK Cloud Run-Bereitstellungsdokumentation.
GKE
Weitere Informationen finden Sie im Abschnitt Agent testen in der ADK-Dokumentation zur GKE-Bereitstellung.
ADK Web
Wenn Sie ADK Web verwenden möchten, rufen Sie den lokalen Server unter http://localhost:8000 auf.
Standardmäßig wird die Nutzer-ID vom ADK Web auf user festgelegt. Wenn Sie die Standard-Nutzer-ID überschreiben möchten, fügen Sie userId in die Suchparameter ein, z. B. http://localhost:8000?userId=YOUR_USER_ID.
Weitere Informationen finden Sie auf der Seite ADK Web in der ADK-Dokumentation.
Beispielinteraktion
Erste Sitzung
Wenn Sie PreloadMemoryTool verwendet haben, versucht der KI-Agent zu Beginn jedes Turns, gemerkte Informationen abzurufen, um auf Einstellungen zuzugreifen, die der Nutzer dem KI-Agenten zuvor mitgeteilt hat. Bei der ersten Interaktion des Agenten mit dem Nutzer sind keine Erinnerungen verfügbar, die abgerufen werden könnten. Daher kennt der Agent keine Nutzerpräferenzen wie die bevorzugte Temperatur, wie im folgenden Beispiel gezeigt:
Erste Runde:
Nutzer: „Kannst du die Temperatur anpassen?“
(Toolaufruf): Das ADK versucht, gespeicherte Informationen abzurufen. Es sind keine Informationen verfügbar.
Modell: „Welche Temperatur bevorzugst du?“
(Callback): Das ADK löst die Generierung von Informationen aus. Es werden keine gemerkten Informationen extrahiert.
Zweiter Zug:
Nutzer: Ich fühle mich bei 21 Grad wohl.
(Toolaufruf): Das ADK versucht, gespeicherte Informationen abzurufen. Es sind keine Informationen verfügbar.
Modell: Okay, ich habe die Temperatur auf 22 Grad aktualisiert.
(Callback): Das ADK löst die Erstellung des Gedächtnisses aus. Die Information „Ich mag eine Temperatur von 22 Grad“ wird gespeichert.
Zweite Sitzung
Der extrahierte Speicher ist für die nächste Sitzung für denselben App-Namen und dieselbe Nutzer-ID verfügbar. Wenn der Nutzer ähnliche oder widersprüchliche Informationen zu bestehenden Erinnerungen angibt, werden die neuen Informationen mit den bestehenden Erinnerungen zusammengeführt.
Erste Runde
Nutzer: Korrigiere die Temperatur. Das ist so unangenehm!
(Toolaufruf): Das ADK versucht, Erinnerungen abzurufen. Die Erinnerung „Ich mag die Temperatur von 22 Grad“ wird abgerufen.
Modell: Okay, ich habe die Temperatur auf 21 Grad eingestellt.
(Callback): Das ADK löst die Generierung von Erinnerungen aus. Es werden keine Erinnerungen extrahiert, da der Nutzer nichts geteilt hat, was gespeichert werden könnte.
Zweite Runde
Nutzer: Eigentlich habe ich es morgens lieber etwas wärmer.
(Toolaufruf): Das ADK versucht, Erinnerungen abzurufen. Die gemerkte Information „Ich mag eine Temperatur von 22 Grad“ wird abgerufen.
Modell: Okay, ich habe die Temperatur erhöht.
(Callback): Das ADK löst die Generierung von Erinnerungen aus. Das vorhandene Gedächtnis „Ich mag die Temperatur von 22 Grad“ wird zu „Ich mag die Temperatur von 22 Grad im Allgemeinen, aber morgens mag ich es wärmer“ aktualisiert.
Multiregionale Memory Bank mit regionaler Laufzeit verwenden
Wenn Sie die Laufzeit mit integrierter Memory Bank verwenden, werden Ihr Agent und Memory Bank standardmäßig in derselben Region bereitgestellt. Sie können sie jedoch entkoppeln, um eine multiregionale Memory Bank (z. B. us) mit einer regionalen Laufzeit (z. B. us-central1) zu verwenden. Mit dieser Konfiguration können Sie eine zentrale Memory Bank für verschiedene regionale Bereitstellungen beibehalten.
Wenn Sie eine multiregionale Memory Bank verwenden möchten, müssen Sie den Standard-ADK-Memory-Service-Builder überschreiben, damit er auf den multiregionalen Standort und die entsprechende Memory Bank-ID verweist.
import agentplatform
from google.adk.memory import VertexAiMemoryBankService
from agentplatform.frameworks import AdkApp
# Create the Memory Bank instance in a multi-region location (for example, 'us')
client_mb = agentplatform.Client(project="PROJECT_ID", location="us")
memory_bank = client_mb.memory_banks.create()
memory_bank_id = memory_bank.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 = agentplatform.Client(project="PROJECT_ID", location="us-central1")
runtime_instance = client_runtime.runtimes.create(
agent=adk_app,
config={
"staging_bucket": "STAGING_BUCKET",
"requirements": ["google-cloud-agentplatform[runtimes,adk]"]
}
)
Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- STAGING_BUCKET: Ihr Cloud Storage-Bucket, der für das Staging Ihrer Agent Runtime verwendet werden soll.
Bereinigen
Wenn Sie alle in diesem Projekt verwendeten Ressourcen bereinigen möchten, können Sie das Google Cloud-Projekt löschen, das Sie für die Kurzanleitung verwendet haben.
Andernfalls können Sie die einzelnen Ressourcen löschen, die Sie in dieser Anleitung erstellt haben. Gehen Sie dazu so vor:
Mit dem folgenden Codebeispiel können Sie die Agent Runtime-Instanz löschen. Dadurch werden auch alle Sitzungen oder Erinnerungen gelöscht, die zu dieser Laufzeit gehören.
client_runtime.runtimes.delete(name=runtime_instance.api_resource.name, force=True) client_mb.memory_banks.delete(name=memory_bank.name, force=True)Löschen Sie alle lokal erstellten Dateien.
Nächste Schritte
Kurzanleitung: Memory Bank API
Erste Schritte mit der Memory Bank API zum Verwalten von Langzeitspeicherinhalten