1. Übersicht
Um eine Reiseanfrage mit mehreren Einschränkungen zu erfüllen (z. B. einen ganztägigen Reiseplan für Kyoto für unter 100 $ mit Schwerpunkt auf historischen Tempeln und lokaler Küche ohne moderne Kunstgalerien), müssen Einschränkungen extrahiert, Attraktionen und Restaurants gleichzeitig recherchiert, ein detaillierter Zeitplan erstellt und der endgültige Plan geprüft werden. Wenn Sie sich auf einen einzelnen monolithischen Agenten mit vielen Tools verlassen, können Bestätigungsschritte übersprungen oder Ausschlüsse verletzt werden. Daher werden bei der Orchestrierung spezialisierte Sub-Agenten über deterministische Workflow-Controller koordiniert.
In diesem dritten Teil der Reihe KI-Agenten mit dem ADK erstellen erstellen Sie einen eigenständigen Multi-Agenten-Reiseplaner auf der Agent Platform mit Workflow-Controllern (SequentialAgent, ParallelAgent und LoopAgent) des Agent Development Kit (ADK) 2. In drei aufeinanderfolgenden Phasen (ohne dass die Einrichtung eines Arbeitsbereichs aus Teil 1 oder Teil 2 erforderlich ist) koordinieren Sie sechs spezialisierte Agenten, die von gemini-3.8-flash unterstützt werden, mit einem gemeinsamen Sitzungsstatus (output_key), gleichzeitiger google_search-Ausführung und einer iterativen Maker-Checker-Optimierungsschleife.
Vorbereitung
- Verständnis von Konzepten der generativen KI
- Grundlegende Kenntnisse in der Programmierung mit Python
- Vertrautheit mit den Grundlagen zu KI-Agenten und dem Google ADK
Lerninhalte
- Wie Sie ein Multi-Agenten-ADK 2-Projekt von Grund auf neu erstellen
- Wie Sie ein Team spezialisierter Agenten entwerfen, die den Sitzungsstatus mithilfe von
output_keyteilen SequentialAgentverwenden, um Sub-Agenten in einer deterministischen, schrittweisen Pipeline auszuführenParallelAgentverwenden, um unabhängige Recherche-Agents gleichzeitig auszuführen und so die Latenz zu verringernLoopAgent- undToolContext-Eskalation verwenden, um eine iterative Maker-Checker-Optimierungsschleife zu implementieren- Sequenzielle, parallele und Schleifenmuster in einem hierarchischen Multi-Agenten-Workflow kombinieren
Voraussetzungen
- Ein Google-Konto (verwenden Sie ein privates
@gmail.com-Konto, wenn Sie Workshop-Guthaben einlösen möchten) - Einen Link für Workshop-Guthaben von Ihrem Kursleiter (plus eine Smartphone-Kamera zum Scannen des QR-Codes) oder ein aktives Cloud-Rechnungskonto
- Google Chrome (ein Inkognitofenster wird empfohlen, um eine Vermischung von privaten und geschäftlichen Konten zu vermeiden)
2. Google Cloud-Guthaben einlösen (optional)
Wenn Sie an einem Workshop mit einem Link für Veranstaltungsguthaben teilnehmen, fordern Sie Ihr Google Developer Program-Guthaben an, um ein Rechnungskonto ohne Kreditkarte bereitzustellen.
Event-Guthaben erhalten
- Öffnen Sie den Link für das Workshop-Guthaben in einem Inkognitofenster und melden Sie sich mit Ihrem
@gmail.com-Konto an. - Klicken Sie unter Vorteil erhalten auf Guthaben erhalten:

- Wenn Sie aufgefordert werden, ein Google Developer Program-Profil zu erstellen, füllen Sie das Formular aus.
- Wenn Scan to Verify You're Human (Scannen, um zu bestätigen, dass Sie ein Mensch sind) angezeigt wird, scannen Sie den QR-Code mit Ihrem Smartphone und schließen Sie die Bestätigung ab. Wenn der QR-Code nicht angezeigt wird, aktualisieren Sie die Seite und klicken Sie noch einmal auf Claim Credit (Guthaben einlösen):

- Prüfen Sie, ob die Meldung Sie haben Ihr Event-Guthaben erhalten angezeigt wird, und klicken Sie dann auf Rechnungskonto öffnen:

🔍 Arbeit überprüfen lassen
Die Einrichtung des Rechnungskontos dauert bis zu 3 Minuten:
- Öffnen Sie die Google Cloud-Abrechnung (oder kopieren Sie die URL in ein Inkognitofenster) und wählen Sie Meine Rechnungskonten aus:
https://console.cloud.google.com/billing
- Aktualisieren Sie die Seite, bis für Ihr
GDP Credit-Konto der Status Aktiv angezeigt wird:

3. Google Cloud-Projekt erstellen (optional)
Erstellen Sie ein dediziertes Google Cloud-Projekt, damit alle Ressourcen aus diesem Codelab isoliert bleiben und sich leicht bereinigen lassen.
- Öffnen Sie Projekt erstellen oder kopieren Sie die URL in Ihr Inkognitofenster:
https://console.cloud.google.com/projectcreate
- Geben Sie die Projektdetails ein:
- Projektname: z. B.
google-cloud-workshop - Rechnungskonto (falls angezeigt): Wählen Sie
GDP Credit(oder Ihr aktives Rechnungskonto) aus. - Übergeordnete Ressource: Keine Organisation (oder Ihre Organisation, falls erforderlich)
- Projektname: z. B.
- Notieren Sie sich die generierte Projekt-ID unter dem Projektnamen und klicken Sie dann auf Erstellen:

🔍 Arbeit überprüfen lassen
Klicken Sie in der Symbolleiste oben rechts auf Benachrichtigungen und dann auf Projekt auswählen, sobald das Projekt erstellt wurde:

4. Umgebung einrichten
Google Cloud Shell konfigurieren, die Agent Platform API aktivieren und mit uv eine isolierte virtuelle Python 3.12-Umgebung erstellen.
Cloud Shell konfigurieren
- Klicken Sie in der Symbolleiste der Google Cloud Console auf Cloud Shell aktivieren (
>_) oder öffnen Sie die Google Cloud Shell direkt (oder kopieren Sie die URL in Ihr Inkognitofenster):
https://shell.cloud.google.com/?show=ide,terminal

- Klicken Sie auf Autorisieren, wenn Sie dazu aufgefordert werden:

- Wählen Sie im nummerierten Menü in Ihrem Terminal die aktive Google Cloud-Projekt-ID aus:
unset CLOUDSDK_CORE_PROJECT
PS3="Select your project (e.g. 1): "
select PROJECT_ID in $(gcloud projects list --format="value(projectId)"); do
[ -n "$PROJECT_ID" ] && gcloud config set project "$PROJECT_ID" && break
done
Die Ausgabe sollte in etwa so aussehen (für Projekte ohne Tags wird auch eine Informationszeile [environment: untagged] ausgegeben):
1) google-cloud-workshop-4210 2) my-cloud-project-8812 Select your project (e.g. 1): 1 Updated property [core/project].
Prüfen Sie, ob die ausgewählte Projekt-ID in der Cloud Shell-Eingabeaufforderung gelb hervorgehoben ist:

Erforderliche APIs aktivieren
Aktivieren Sie die Agent Platform API, damit Ihre ADK-Agenten Gemini-Modelle aufrufen können:
gcloud services enable aiplatform.googleapis.com
Die Ausgabe sollte etwa so aussehen:
Operation "operations/acat.p2-..." finished successfully.
Virtuelle Python-Umgebung erstellen und ADK installieren
Erstellen Sie den Arbeitsbereich ~/adk-agents und aktivieren Sie eine virtuelle Python 3.12-Umgebung:
cd ~
mkdir -p adk-agents && cd ~/adk-agents
which uv >/dev/null 2>&1 || curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
uv venv .venv --python 3.12
source .venv/bin/activate
Prüfen Sie, ob das Präfix (.venv) am Anfang der Terminal-Eingabeaufforderung angezeigt wird:

Installieren Sie ADK 2 in der aktiven virtuellen Umgebung:
uv pip install --no-cache "google-adk==2.14.0"
🔍 Arbeit überprüfen lassen
Prüfen Sie die installierte adk-CLI-Version:
adk --version
Die Ausgabe sollte etwa so aussehen:
adk, version 2.14.0
5. Gerüst für den Reiseplaner-Agenten erstellen
Nachdem Sie Ihre Umgebung eingerichtet haben, können Sie mit dem integrierten ADK-Befehl adk create die Starterdateien für Ihr travel_planner-Agentenpaket generieren.
Starterpaket generieren
Führen Sie adk create im Verzeichnis ~/adk-agents aus:
cd ~/adk-agents
adk create travel_planner
Wählen Sie im Terminal die folgenden Konfigurationsoptionen aus. Wenn Sie beim ersten Ausführen die Aufforderung Enable telemetry? [Y/n]: erhalten, drücken Sie die Eingabetaste oder geben Sie n ein und drücken Sie die Eingabetaste:
- Modell für den Root-Agenten auswählen: Geben Sie
2ein, umgemini-3.8-flashauszuwählen (mit Option1wirdgemini-3.5-flashausgewählt), und drücken Sie die Eingabetaste. - Backend auswählen: Geben Sie
2ein, um das Google Cloud Agent Platform-Backend auszuwählen (Option2im Befehlszeilenmenü unten), und drücken Sie die Eingabetaste. - Google Cloud-Projekt-ID eingeben: Bestätigen Sie die in Klammern angezeigte Projekt-ID, indem Sie die Eingabetaste drücken.
- Google Cloud-Region eingeben: Geben Sie
globalein und drücken Sie die Eingabetaste.
adk create schreibt GOOGLE_GENAI_USE_ENTERPRISE=1, Ihre Projekt-ID und GOOGLE_CLOUD_LOCATION=global in travel_planner/.env, damit Ihre Anmeldedaten konfiguriert bleiben, wenn Sie agent.py später aktualisieren.
🔍 Arbeit überprüfen lassen
Die Ausgabe sollte etwa so aussehen:
Choose a model for the root agent: 1. gemini-3.5-flash 2. gemini-3.8-flash 3. Other models (fill later) Choose model (1, 2, 3): 2 1. Google AI 2. Vertex AI 3. Login with Google Choose a backend (1, 2, 3): 2 You need an existing Google Cloud account and project, check out this link for details: https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-cloud-vertex-ai Enter Google Cloud project ID [google-cloud-workshop-4210]: Enter Google Cloud region [us-central1]: global Agent created in /home/your_username/adk-agents/travel_planner: - .env - .gitignore - __init__.py - agent.py ⚠️ WARNING: Secrets (like GOOGLE_API_KEY) are stored in .env. Next steps: - Chat with your agent in the terminal: adk run travel_planner - Or in the browser: adk web . - Have your coding agent evaluate and deploy it: uvx google-agents-cli setup (other install options: https://adk.dev/get-started/agents-cli/)
Öffnen Sie den aktuellen Ordner im Cloud Shell-Code-Editor, damit Sie Dateien parallel zu Ihrem Terminal prüfen und bearbeiten können:
which cloudshell >/dev/null 2>&1 && cloudshell workspace ~/adk-agents || true
cd ~/adk-agents
source .venv/bin/activate
Standard-KI-Agenten testen
Bevor Sie Multi-Agent-Workflows erstellen, starten Sie die ADK-Entwicklungs-UI, um zu sehen, wie der standardmäßige einzelne Agent auf eine allgemeine Anfrage zur Reiseplanung reagiert:
cd ~/adk-agents
adk web --allow_origins "*"
Öffnen Sie die Entwicklungs-UI in Ihrem Browser mit der Webvorschau von Cloud Shell:
- Klicken Sie in der Cloud Shell-Symbolleiste rechts oben auf das Symbol für die Webvorschau.
- Wählen Sie Port ändern aus, geben Sie
8000ein und klicken Sie auf Ändern und Vorschau.

Sobald die ADK-Web-UI geladen ist, senden Sie eine Begrüßung wie "hello, what can you do?" oder "Help me plan a trip to Japan":

Beachten Sie, dass die einzelne root_agent-Instanz direkt in einem Durchgang antwortet, ohne strukturierte Präferenzextraktion, Live-Webrecherche oder Budgetprüfung.
Wenn Sie mit dem Testen fertig sind, drücken Sie in Ihrem Cloud Shell-Terminal Ctrl + C, um den adk web-Server zu beenden und zur Eingabeaufforderung zurückzukehren.
6. SequentialAgent-Workflow erstellen
Jetzt erstellen Sie Ihr erstes Orchestrierungsmuster: einen linearen Workflow, der von SequentialAgent unterstützt wird. In einer sequenziellen Pipeline werden Sub-Agenten in einer strengen Reihenfolge ausgeführt. Der erste Spezialist extrahiert strukturierte Parameter und speichert sie mit output_key="user_preferences" im freigegebenen Sitzungsstatus. Der zweite Spezialist liest {user_preferences} aus dem freigegebenen Status, um den Reiseplan zu erstellen.

Erste Spezialisten erstellen (specialists.py)
Öffnen Sie eine neue Datei mit dem Namen specialists.py in travel_planner/:
cloudshell edit ~/adk-agents/travel_planner/specialists.py
Fügen Sie den folgenden Code in travel_planner/specialists.py ein, um user_profiler_agent und itinerary_synthesizer_agent zu definieren. Importieren Sie vorab ToolContext und google_search für die nächsten Schritte:
from google.adk import Agent
from google.adk.tools import ToolContext, google_search
# --- Specialist 1: The User Profiler ---
user_profiler_agent = Agent(
name="user_profiler_agent",
description="Extracts travel preferences and constraints from user input.",
instruction="""
Extract destination, duration (default 1 day), budget, interests, and exclusions.
Return a single JSON object with keys: "destination", "duration", "budget", "interests", "exclusions".
""",
output_key="user_preferences", # Saves output to state['user_preferences']
)
# --- Specialist 2: The Synthesizer ---
itinerary_synthesizer_agent = Agent(
name="itinerary_synthesizer_agent",
description="Compiles preferences and research into a final Markdown itinerary.",
instruction="""
You are an elite Travel Concierge. Write a Markdown itinerary with an itemized USD and local currency cost breakdown using:
- User Preferences: {user_preferences}
- Activities (if available): {activity_recommendations?}
- Restaurants (if available): {restaurant_recommendations?}
""",
output_key="final_itinerary",
)
Sequenzielle Pipeline (workflows.py) verbinden
Erstellen Sie in travel_planner/ eine neue Datei mit dem Namen workflows.py, um die Spezialisten zu orchestrieren:
cloudshell edit ~/adk-agents/travel_planner/workflows.py
Fügen Sie travel_planner/workflows.py die folgende SequentialAgent-Definition hinzu:
from google.adk.agents import SequentialAgent
from .specialists import (
user_profiler_agent,
itinerary_synthesizer_agent,
)
# 1. SEQUENTIAL PHASE: A linear two-step workflow
master_travel_agent = SequentialAgent(
name="master_travel_agent",
description="Orchestrates the end-to-end travel planning process for trip and itinerary requests.",
sub_agents=[
user_profiler_agent, # Step 1: Extract constraints into user_preferences
itinerary_synthesizer_agent, # Step 2: Draft itinerary from user_preferences
],
)
Workflow mit root_agent (agent.py) verbinden
Registrieren Sie jetzt master_travel_agent als Sub-Agenten von root_agent. Öffnen Sie travel_planner/agent.py:
cloudshell edit ~/adk-agents/travel_planner/agent.py
Ersetzen Sie den Inhalt von travel_planner/agent.py durch den folgenden Code:
from google.adk import Agent
from .workflows import master_travel_agent
MODEL = "gemini-3.8-flash"
root_agent = Agent(
model=MODEL,
name="root_agent",
description="A helpful assistant for user questions.",
instruction=(
"Greet the user and delegate any travel or trip planning requests "
"to master_travel_agent."
),
sub_agents=[master_travel_agent],
)
🔍 Arbeit überprüfen lassen
Starten Sie die ADK-Webbenutzeroberfläche über Ihr Terminal:
cd ~/adk-agents
adk web --allow_origins "*"
Öffnen Sie die Webvorschau auf Port 8000 und geben Sie den Prompt ein:
Help me plan a trip to Kyoto
In der Ansicht Ereignisse sollte eine Ausgabe ähnlich dem folgenden Ausführungsablauf angezeigt werden:
1. root_agent -> calls transfer_to_agent(agent_name="master_travel_agent")
2. user_profiler_agent -> outputs JSON {"destination": "Kyoto", "duration": "1 day", ...} to state['user_preferences']
3. itinerary_synthesizer_agent -> reads {user_preferences} and outputs the formatted Markdown itinerary

Klicken Sie auf ein beliebiges Ereignis-Badge (oder den Chip State: final_itinerary) und wechseln Sie im linken Prüfbereich zum Tab Status, um zu bestätigen, dass user_preferences und final_itinerary im Sitzungsstatus ausgefüllt sind.
Wenn Sie mit der Prüfung des Trace fertig sind, drücken Sie in Ihrem Terminal Ctrl + C, um adk web zu beenden.
7. Recherche mit ParallelAgent ausführen
Der sequenzielle Workflow trennt die Extraktion von Präferenzen sauber von der Erstellung des Reiseplans, aber die Empfehlungen basieren immer noch ausschließlich auf dem statischen Trainingswissen des Modells. Sie können den Reiseplan mit Live-Webdaten fundieren, indem Sie zwei dedizierte Recherchetools hinzufügen, die auf dem integrierten google_search-Tool basieren:
activity_finder_agent: Sucht drei bestimmte Attraktionen, die zum Reiseziel und den Interessen des Nutzers passen, und gibt die geschätzten Ticketpreise an.restaurant_finder_agent: Sucht drei gut bewertete Restaurants in der Nähe und die geschätzten Kosten pro Person.
Da die Recherche von Attraktionen und die Recherche von Restaurants nicht voneinander abhängen, ist es Zeitverschwendung, sie nacheinander auszuführen. Stattdessen verpacken Sie beide Rechercheure in einem ParallelAgent (parallel_research_agent), damit das ADK beide Google-Suchworkflows gleichzeitig ausführt und {activity_recommendations?} und {restaurant_recommendations?} füllt, bevor die Übergabe an itinerary_synthesizer_agent erfolgt.

Spezialisten für parallele Recherche an specialists.py anhängen
Rufen Sie travel_planner/specialists.py auf:
cloudshell edit ~/adk-agents/travel_planner/specialists.py
Fügen Sie die folgenden beiden Google-Suchspezialisten unten in travel_planner/specialists.py (direkt unter itinerary_synthesizer_agent) hinzu:
# --- Specialist 3: The Activity Finder ---
activity_finder_agent = Agent(
name="activity_finder_agent",
description="Finds 3 attractions matching the user's destination and interests.",
instruction="""
Based on {user_preferences}, use google_search to find 3 specific attractions (including budget-friendly options).
Return a JSON list with keys: "attraction_name", "estimated_cost_local", "estimated_cost_usd", "notes".
""",
tools=[google_search],
output_key="activity_recommendations",
)
# --- Specialist 4: The Restaurant Finder ---
restaurant_finder_agent = Agent(
name="restaurant_finder_agent",
description="Finds 3 restaurants matching the destination and budget.",
instruction="""
Based on {user_preferences}, use google_search to find 3 highly-rated restaurants across price points.
Return a JSON list with keys: "restaurant_name", "cuisine", "estimated_cost_local", "estimated_cost_usd".
""",
tools=[google_search],
output_key="restaurant_recommendations",
)
ParallelAgent in workflows.py einfügen
Rufen Sie travel_planner/workflows.py auf:
cloudshell edit ~/adk-agents/travel_planner/workflows.py
Aktualisieren Sie travel_planner/workflows.py, um parallel_research_agent mit ParallelAgent zu definieren, und platzieren Sie es zwischen user_profiler_agent und itinerary_synthesizer_agent:
from google.adk.agents import ParallelAgent, SequentialAgent
from .specialists import (
activity_finder_agent,
itinerary_synthesizer_agent,
restaurant_finder_agent,
user_profiler_agent,
)
# Parallel branch: Run activity and restaurant research simultaneously
parallel_research_agent = ParallelAgent(
name="parallel_research_agent",
description="Runs activity and restaurant research concurrently.",
sub_agents=[
activity_finder_agent,
restaurant_finder_agent,
],
)
# Master pipeline: Profile -> Parallel Research -> Synthesize
master_travel_agent = SequentialAgent(
name="master_travel_agent",
description="Orchestrates the end-to-end travel planning process for trip and itinerary requests.",
sub_agents=[
user_profiler_agent, # Step 1: Extract constraints
parallel_research_agent, # Step 2: Research activities & restaurants in parallel
itinerary_synthesizer_agent, # Step 3: Synthesize into an itinerary
],
)
🔍 Arbeit überprüfen lassen
Starten Sie adk web noch einmal, um die parallele Recherchepipeline zu testen:
cd ~/adk-agents
adk web --allow_origins "*"
Senden Sie in der Webvorschau-UI den folgenden Prompt:
Help me plan a trip to Kyoto focused on historic temples and ramen
In der Ansicht Ereignisse sollte eine Ausgabe ähnlich der folgenden Sequenz angezeigt werden:
1. user_profiler_agent -> writes state['user_preferences'] 2. parallel_research_agent -> fans out concurrently: - activity_finder_agent invokes google_search -> writes state['activity_recommendations'] - restaurant_finder_agent invokes google_search -> writes state['restaurant_recommendations'] 3. itinerary_synthesizer_agent -> merges all three state keys into state['final_itinerary']
- Traces-Ansicht: Klicken Sie oben im Unterhaltungsbereich (neben Ereignisse) auf Traces und prüfen Sie Ihren Turn. Unter
parallel_research_agentsehen Sie sich überschneidende Zeitachsenbereiche füractivity_finder_agentundrestaurant_finder_agent. Die Gesamtlatenz der Webrecherche wird im Vergleich zur sequenziellen Ausführung fast halbiert. - Tab „Status“: Klicken Sie im linken Prüfbereich auf den Tab Status, um das Wörterbuch der Live-Sitzung (
user_preferences,activity_recommendations,restaurant_recommendationsundfinal_itinerary) zu prüfen.
Wenn Sie mit dem Testen fertig sind, drücken Sie in Ihrem Terminal Ctrl + C, um adk web zu beenden.
8. Entwürfe mit LoopAgent optimieren
Auch mit Live-Suchergebnissen kann der von itinerary_synthesizer_agent erstellte erste Entwurf das Gesamtbudget des Nutzers überschreiten oder versehentlich eine ausgeschlossene Kategorie enthalten (z. B. eine Galerie für moderne Kunst, obwohl der Nutzer keine wollte).
Um die Einhaltung von Einschränkungen zu gewährleisten, fügen Sie am Ende der Pipeline mit LoopAgent eine Maker-Checker-Optimierungsschleife hinzu:
itinerary_critic_agent(The Checker): Prüft{final_itinerary}anhand von{user_preferences}. Es summiert die geschätzten Kosten, prüft jede negative Einschränkung und schreibt entweder spezifische Überarbeitungsanweisungen incritique_feedbackoder antwortet mit der genauen Formulierung"APPROVED".itinerary_refiner_agent(The Maker / Exiter): Liest{critique_feedback}. Wenn die Kritik"APPROVED"entspricht, wird das Toolexit_loop(tool_context.actions.escalate = True) aufgerufen, um dieLoopAgentsofort zu beenden. Andernfalls wird{final_itinerary}überarbeitet, um die gemeldeten Probleme zu beheben, undfinal_itinerarywird für den nächsten Durchlauf überschrieben.

exit_loop, Critic und Refiner an specialists.py anhängen
Rufen Sie travel_planner/specialists.py auf:
cloudshell edit ~/adk-agents/travel_planner/specialists.py
Hängen Sie das exit_loop-Tool (ToolContext), itinerary_critic_agent und itinerary_refiner_agent an das Ende von travel_planner/specialists.py an:
def exit_loop(tool_context: ToolContext) -> dict:
"""Call ONLY when the critique is APPROVED to exit the refinement loop."""
print(f"[Tool Call] exit_loop triggered by {tool_context.agent_name}")
tool_context.actions.escalate = True
return {"status": "approved", "message": "Itinerary approved. Exiting refinement loop."}
# --- Specialist 5: The Budget & Constraint Critic (Inside LoopAgent) ---
itinerary_critic_agent = Agent(
name="itinerary_critic_agent",
include_contents="none",
description="Audits the itinerary draft against budget and negative constraints.",
instruction="""
Audit Current Itinerary ({final_itinerary}) against User Preferences ({user_preferences}).
Verify that the USD total stays within the user's budget and no excluded venue types appear.
If all checks pass, respond EXACTLY with the single word "APPROVED".
Otherwise, output 1-2 concise revision instructions explaining what to swap or adjust.
""",
output_key="critique_feedback",
)
# --- Specialist 6: The Itinerary Refiner / Exiter (Inside LoopAgent) ---
itinerary_refiner_agent = Agent(
name="itinerary_refiner_agent",
include_contents="none",
description="Refines the itinerary from critique feedback, or calls exit_loop when APPROVED.",
instruction="""
Review Auditor Critique ({critique_feedback}) for Current Itinerary ({final_itinerary}).
If the critique is EXACTLY "APPROVED", call `exit_loop` immediately and return the itinerary unchanged.
Otherwise, revise the draft using {activity_recommendations} and {restaurant_recommendations}
so all USD budget and exclusion rules pass, and output ONLY the updated Markdown itinerary.
""",
tools=[exit_loop],
output_key="final_itinerary",
)
LoopAgent zu workflows.py hinzufügen
Rufen Sie travel_planner/workflows.py auf:
cloudshell edit ~/adk-agents/travel_planner/workflows.py
Aktualisieren Sie travel_planner/workflows.py, um itinerary_critic_agent und itinerary_refiner_agent in einem LoopAgent (max_iterations=3) zu umschließen, und hängen Sie es als vierte Phase von master_travel_agent an:
from google.adk.agents import LoopAgent, ParallelAgent, SequentialAgent
from .specialists import (
activity_finder_agent,
itinerary_critic_agent,
itinerary_refiner_agent,
itinerary_synthesizer_agent,
restaurant_finder_agent,
user_profiler_agent,
)
# Stage 2: Parallel research branch
parallel_research_agent = ParallelAgent(
name="parallel_research_agent",
description="Runs activity and restaurant research concurrently.",
sub_agents=[
activity_finder_agent,
restaurant_finder_agent,
],
)
# Stage 4: Iterative Maker-Checker refinement loop
refinement_loop_agent = LoopAgent(
name="refinement_loop_agent",
description="Iteratively audits and refines the itinerary until constraints and budget are approved.",
sub_agents=[
itinerary_critic_agent,
itinerary_refiner_agent,
],
max_iterations=3,
)
# Master pipeline: Profile -> Parallel Research -> Synthesize -> Refinement Loop
master_travel_agent = SequentialAgent(
name="master_travel_agent",
description="Orchestrates the end-to-end travel planning process for trip and itinerary requests.",
sub_agents=[
user_profiler_agent, # Stage 1: Extract constraints
parallel_research_agent, # Stage 2: Research activities & restaurants in parallel
itinerary_synthesizer_agent, # Stage 3: Draft initial itinerary
refinement_loop_agent, # Stage 4: Audit and refine until approved
],
)
🔍 Arbeit überprüfen lassen
Starten Sie adk web, um den gesamten Multi-Agenten-Workflow zu testen:
cd ~/adk-agents
adk web --allow_origins "*"
Öffnen Sie die Webvorschau-UI auf Port 8000, starten Sie eine neue Sitzung und testen Sie das gesamte System mit diesem Prompt mit mehreren Einschränkungen für Kyoto:
Design a full-day itinerary for Kyoto with a total budget of $100. My main interests are historical landmarks, temples, and authentic local cuisine. Please do not include any modern art museums or galleries.
In der Ansicht Ereignisse und in den Terminal-Logs sollte eine Ausgabe ähnlich der folgenden Ausführungssequenz angezeigt werden:
1. user_profiler_agent -> writes JSON with destination="Kyoto", budget="$100", exclusions=["modern art museums", "galleries"] 2. parallel_research_agent -> runs activity_finder_agent and restaurant_finder_agent in parallel 3. itinerary_synthesizer_agent -> produces initial draft in state['final_itinerary'] 4. refinement_loop_agent: - itinerary_critic_agent -> audits USD budget and exclusions -> outputs "APPROVED" (or revision notes) - itinerary_refiner_agent -> triggers [Tool Call] exit_loop triggered by itinerary_refiner_agent and outputs the approved itinerary
- Ereignisansicht: Klicken Sie auf einen Ereignis-Chip aus
itinerary_critic_agentoderitinerary_refiner_agent, um die Nutzlast auf dem Tab Info links zu prüfen. Wennitinerary_refiner_agentexit_loopaufruft, prüfen Sie das Ereignis, umactions.escalate: truezu sehen – das Signal, dasLoopAgentmitteilt, die Iteration zu beenden, bevormax_iterations=3erreicht wird. - Tab „Status“: Klicken Sie auf den Tab Status, um zu sehen, wie
state['critique_feedback']undstate['final_itinerary']über die Durchgänge hinweg aktualisiert werden. Wenn der ursprüngliche Entwurf$100 USDüberschritten hat, enthältcritique_feedbackdie Überarbeitungsanweisungen des Auditors im ersten Durchlauf, bevorfinal_itinerarymit kostengünstigeren Alternativen aktualisiert wird undcritique_feedbackim zweiten Durchlauf zu"APPROVED"wechselt.
Wenn Sie mit dem Testen fertig sind, drücken Sie in Ihrem Terminal Ctrl + C, um adk web zu beenden.
9. Bereinigen
Lokale Projektdateien löschen
Führen Sie den folgenden Befehl aus, um das Projektverzeichnis adk-agents und die virtuelle Umgebung aus Ihrem Cloud Shell-Basisordner zu entfernen:
cd ~
rm -rf ~/adk-agents
Agent Platform API deaktivieren
Wenn Sie die Agent Platform API in Ihrem Projekt nicht mehr benötigen, deaktivieren Sie sie mit gcloud:
gcloud services disable aiplatform.googleapis.com --quiet
Gesamtes Google Cloud-Projekt löschen (optional)
PROJECT_ID=$(gcloud config get-value project)
gcloud projects delete "$PROJECT_ID" --quiet
🔍 Arbeit überprüfen lassen
Bestätigen Sie, dass ~/adk-agents entfernt wurde:
test ! -d ~/adk-agents && echo "Workspace ~/adk-agents removed"
Die Ausgabe sollte etwa so aussehen:
Workspace ~/adk-agents removed
10. Glückwunsch
Glückwunsch! Sie haben mit dem Google Agent Development Kit (ADK) ein hierarchisches Multi-Agenten-System erstellt, das ein Team von sechs spezialisierten Agenten über sequenzielle, parallele und iterative Schleifen-Workflows koordiniert.
Was Sie erreicht haben
- Strukturierte Kommunikation zwischen Agenten über einen gemeinsamen Sitzungsstatus (
output_key- und{state_variable}-Vorlageninjektion) - Eine deterministische Schritt-für-Schritt-Pipeline mit
SequentialAgenterstellen - Unabhängige KI-Agenten für die Google Suche wurden gleichzeitig mit
ParallelAgentausgeführt - Implementierung einer automatisierten Maker-Checker-Verifizierungsschleife mit
LoopAgentundtool_context.actions.escalate = True
Nächste Schritte
- Fahren Sie mit Teil 4 der Reihe Building AI Agents with ADK: Orchestrating Graph Workflows fort, um diesen Reiseplaner mit den einheitlichen
Workflow-,JoinNode- und deterministischenEvent(route=...)-Zyklen des ADK 2 neu zu erstellen. - Offizielle ADK-Dokumentation zu Workflow-Agenten lesen
- Multi-Agenten-Systeme im ADK kennenlernen
- Nehmen Sie am GEAR-Programm (Gemini Enterprise Agent Ready) und am Get Certified-Programm teil, um an praxisorientierten Workshops und Lernpfaden teilzunehmen.