1. Ringkasan
Untuk memenuhi permintaan perjalanan dengan banyak batasan (seperti merencanakan perjalanan sehari seharga $100 di Kyoto dengan kuil bersejarah, ramen lokal, dan tanpa museum seni modern), model perlu mengekstrak preferensi terstruktur, meneliti tempat secara bersamaan, menyintesis draf terperinci, dan mengaudit total biaya sebelum merespons. Di ADK 1.x, mengorkestrasi tahap-tahap tersebut memerlukan penyusunan bertingkat wrapper SequentialAgent, ParallelAgent, dan LoopAgent, menyimpan setiap output perantara ke dalam status sesi, dan memanggil panggilan alat LLM tambahan hanya untuk keluar dari loop penyempurnaan.
Dalam codelab ini, Anda akan membangun perencana perjalanan multi-agen di Platform Agen menggunakan alur kerja grafik (Workflow) Agent Development Kit (ADK) 2. Melalui tiga tahap progresif, Anda akan menghubungkan node Agent spesialis (didukung oleh gemini-3.8-flash) dalam rantai edge berurutan (node_input), menyebarkan peneliti google_search serentak yang disinkronkan dengan JoinNode, dan menerapkan aturan anggaran dan pengecualian dengan router Python deterministik (Event(route=...)) yang melewati penyempurnaan setiap kali draf awal lulus audit.
Prasyarat
- Kemahiran dasar dalam pemrograman Python
- Memahami konsep AI Generatif dan dasar-dasar agen AI
Yang Anda pelajari
- Cara mendeklarasikan pipeline multi-agen di ADK 2 menggunakan tuple edge
Workflow - Cara ADK 2 meneruskan output secara langsung di sepanjang edge sebagai
node_inputdan mengikat kunci status sesi sebagai parameter fungsi - Cara menyebarkan cabang riset serentak dan menggabungkan outputnya dengan
JoinNode - Cara merutekan siklus pembuat-pemeriksa yang dibatasi secara deterministik di Python dengan
Event(route=...) - Cara memeriksa grafik alur kerja yang dikompilasi, linimasa eksekusi paralel, dan delta status di UI Web ADK
Yang Anda perlukan
- Akun Google (gunakan akun
@gmail.compribadi jika mengklaim poin workshop) - Link kredit workshop dari instruktur Anda (ditambah kamera ponsel untuk memindai kode QR) atau akun Penagihan Cloud yang aktif
- Google Chrome (jendela Samaran direkomendasikan untuk menghindari pencampuran akun pribadi dan kantor)
2. Klaim kredit Google Cloud (Opsional)
Jika Anda menghadiri workshop dengan link kredit acara, klaim kredit Google Developer Program Anda untuk menyediakan akun penagihan tanpa kartu kredit.
Klaim kredit acara Anda
- Buka link kredit workshop di jendela Samaran dan login dengan akun
@gmail.comAnda. - Di Claim Your Benefit, klik Claim Credit:

- Jika diminta untuk membuat profil Google Developer Program, lengkapi formulir.
- Saat Scan to Verify You're Human muncul, pindai kode QR dengan ponsel Anda dan selesaikan verifikasi (muat ulang dan klik Claim Credit lagi jika kode QR tidak muncul):

- Pastikan pesan Successfully claimed your event credit! muncul, lalu klik Open Billing Account:

🔍 Periksa hasil kerja Anda
Penyiapan akun penagihan memerlukan waktu hingga 3 menit:
- Buka Penagihan Google Cloud (atau salin URL ke jendela Samaran Anda) dan pilih Akun penagihan Anda:
https://console.cloud.google.com/billing
- Muat ulang hingga akun
GDP CreditAnda menampilkan status Active:

3. Membuat project Google Cloud (Opsional)
Buat project Google Cloud khusus agar semua resource dari codelab ini tetap terisolasi dan mudah dibersihkan.
- Buka Create a Project (atau salin URL ke jendela Samaran):
https://console.cloud.google.com/projectcreate
- Masukkan detail project Anda:
- Nama project: Misalnya,
google-cloud-workshop - Billing account (jika ditampilkan): Pilih
GDP Credit(atau akun penagihan aktif Anda) - Parent resource: No organization (atau pilih organisasi Anda jika diperlukan)
- Nama project: Misalnya,
- Catat Project ID yang dihasilkan di bawah nama project, lalu klik Create:

🔍 Periksa hasil kerja Anda
Klik Notifications di toolbar kanan atas, lalu klik Select Project setelah pembuatan project selesai:

4. Menyiapkan lingkungan Anda
Konfigurasikan Google Cloud Shell, aktifkan Agent Platform API, dan buat lingkungan virtual Python 3.12 yang terisolasi dengan uv.
Mengonfigurasi Cloud Shell
- Klik Activate Cloud Shell (
>_) di toolbar Konsol Google Cloud, atau buka Google Cloud Shell secara langsung (atau salin URL ke jendela Samaran Anda):
https://shell.cloud.google.com/?show=ide,terminal

- Klik Authorize jika diminta:

- Pilih Project ID Google Cloud yang aktif dari menu bernomor di terminal Anda:
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
Anda akan melihat output yang mirip dengan (project yang tidak diberi tag juga mencetak baris informasi [environment: untagged]):
1) google-cloud-workshop-4210 2) my-cloud-project-8812 Select your project (e.g. 1): 1 Updated property [core/project].
Pastikan Project ID yang Anda pilih muncul ditandai dengan warna kuning di prompt Cloud Shell:

Aktifkan API yang diperlukan
Aktifkan Agent Platform API agar agen ADK Anda dapat memanggil model Gemini:
gcloud services enable aiplatform.googleapis.com
Anda akan melihat output yang mirip dengan:
Operation "operations/acat.p2-..." finished successfully.
Membuat lingkungan virtual Python dan menginstal ADK
Buat ruang kerja ~/adk-graph-agents dan aktifkan lingkungan virtual Python 3.12:
cd ~
mkdir -p adk-graph-agents && cd ~/adk-graph-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
Pastikan awalan (.venv) muncul di awal prompt terminal Anda:

Instal ADK 2 di dalam lingkungan virtual yang aktif:
uv pip install --no-cache "google-adk==2.14.0"
🔍 Periksa hasil kerja Anda
Verifikasi versi adk CLI yang diinstal:
adk --version
Anda akan melihat output yang mirip dengan:
adk, version 2.14.0
5. Membuat scaffold perencana perjalanan
Buat paket travel_planner awal dengan adk create dan uji baseline agen tunggal default di adk web.
Membuat paket awal
Jalankan adk create dari ~/adk-graph-agents:
cd ~/adk-graph-agents
adk create travel_planner
Pilih opsi berikut saat diminta (jika diminta dengan Enable telemetry? [Y/n]: pada pengoperasian pertama, tekan Enter atau ketik n dan tekan Enter):
- Choose a model for the root agent: Ketik
2untuk memilihgemini-3.8-flash(opsi1memilihgemini-3.5-flash), lalu tekan Enter. - Pilih backend: Ketik
2untuk memilih backend Agent Platform Google Cloud (opsi2di menu CLI di bawah) dan tekan Enter. - Enter Google Cloud project ID: Tekan Enter untuk menerima Project ID yang terdeteksi dalam tanda kurung.
- Enter Google Cloud region: Ketik
global(untuk menggunakan endpoint Gemini global) dan tekan Enter.
adk create menulis GOOGLE_GENAI_USE_ENTERPRISE=1, project ID Anda, dan GOOGLE_CLOUD_LOCATION=global ke dalam travel_planner/.env, sehingga kredensial Anda tetap utuh saat Anda mengganti agent.py nanti.
Anda akan melihat output yang mirip dengan:
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-graph-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/)
Buka ~/adk-graph-agents di editor kode Cloud Shell:
which cloudshell >/dev/null 2>&1 && cloudshell workspace ~/adk-graph-agents || true
Aktifkan kembali lingkungan virtual Anda di terminal yang dimuat ulang:
cd ~/adk-graph-agents
source .venv/bin/activate
Menguji agen tunggal awal
Mulai UI Web ADK untuk mengamati cara satu agen awal yang tidak diorkestrasi menjawab perintah perjalanan:
cd ~/adk-graph-agents
adk web --allow_origins "*"
Klik ikon Web Preview di toolbar Cloud Shell kanan atas, pilih Change Port, masukkan 8000, lalu klik Change and Preview:

🔍 Periksa hasil kerja Anda
Pilih travel_planner di dropdown kiri atas adk web dan kirim "Help me plan a trip to Japan":

Anda akan melihat balasan percakapan satu kali di panel chat (dengan satu pemanggilan root_agent di Events):
root_agent -> responds in one pass without structured preference extraction, live search, or budget verification
Tekan Ctrl + C di terminal Cloud Shell untuk menghentikan adk web sebelum mengedit file di langkah berikutnya.
6. Membangun alur kerja grafik linear
Bangun Workflow ADK 2 pertama Anda: rantai berurutan yang menghubungkan titik entri "START" yang dicadangkan ke user_profiler_agent dan itinerary_synthesizer_agent (node apa pun tanpa edge keluar bertindak sebagai node terminal). Setiap edge (a, b) secara otomatis menjalankan node Agent (alias untuk LlmAgent) dalam mode single_turn yang terisolasi dan mengirimkan output node a sebagai node_input (pesan pengguna yang masuk) ke node b, sementara {user_preferences} dalam string petunjuk menginterpolasi kunci status sesi yang cocok yang disimpan melalui output_key.

Membuat spesialis awal
Pastikan adk web dihentikan (Ctrl + C), lalu buka file baru bernama travel_planner/specialists.py:
cloudshell edit ~/adk-graph-agents/travel_planner/specialists.py
Tempelkan kode berikut ke dalam travel_planner/specialists.py untuk menentukan user_profiler_agent dan itinerary_synthesizer_agent (mengimpor google_search di awal untuk langkah berikutnya):
from google.adk import Agent
from google.adk.tools import google_search
MODEL = "gemini-3.8-flash"
# --- Specialist 1: The User Profiler ---
user_profiler_agent = Agent(
model=MODEL,
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", # Saved for multi-hop constraints downstream
)
# --- Specialist 2: The Synthesizer ---
itinerary_synthesizer_agent = Agent(
model=MODEL,
name="itinerary_synthesizer_agent",
description="Compiles preferences and research into a final Markdown itinerary.",
instruction="""
You are an elite Travel Concierge. Using the incoming input and
User Preferences ({user_preferences}), write a Markdown itinerary
with an itemized USD and local currency cost breakdown.
""",
output_key="final_itinerary",
)
Menentukan rantai edge berurutan
Buka file baru bernama travel_planner/workflows.py:
cloudshell edit ~/adk-graph-agents/travel_planner/workflows.py
Tempelkan definisi Workflow berikut (tempat tuple yang berisi 3 node atau lebih dikompilasi menjadi rantai berurutan dari "START"):
from google.adk import Workflow
from .specialists import (
itinerary_synthesizer_agent,
user_profiler_agent,
)
# 1. SEQUENTIAL GRAPH: START -> user_profiler_agent -> itinerary_synthesizer_agent
travel_workflow = Workflow(
name="travel_workflow",
description="Orchestrates the end-to-end travel planning process as a graph workflow.",
edges=[
("START", user_profiler_agent, itinerary_synthesizer_agent),
],
)
Mengekspos alur kerja sebagai root_agent
Buka travel_planner/agent.py:
cloudshell edit ~/adk-graph-agents/travel_planner/agent.py
Ganti seluruh konten travel_planner/agent.py dengan dua baris berikut:
from .workflows import travel_workflow
root_agent = travel_workflow
🔍 Periksa hasil kerja Anda
Mulai adk web dari ~/adk-graph-agents:
cd ~/adk-graph-agents
adk web --allow_origins "*"
Buka Pratinjau Web di port 8000, klik + New Session, dan kirim:
Help me plan a trip to Kyoto
Di tampilan Events, Anda akan melihat urutan peristiwa yang mirip dengan:
1. user_profiler_agent -> outputs JSON {"destination": "Kyoto", "duration": "1 day", ...} and writes state["user_preferences"]
2. itinerary_synthesizer_agent -> receives preferences via node_input and outputs the Markdown itinerary

Klik peristiwa apa pun di Events dan klik ikon Graph (account_tree di toolbar detail peristiwa) untuk memeriksa topologi START -> user_profiler_agent -> itinerary_synthesizer_agent yang dikompilasi, lalu periksa tab State untuk memverifikasi bahwa user_preferences dan final_itinerary diisi.
Tekan Ctrl + C di terminal Anda untuk menghentikan adk web sebelum melanjutkan.
7. Fan out dan join dengan JoinNode
Grounding itinerary dalam data web langsung dengan menambahkan dua spesialis google_search serentak (activity_finder_agent dan restaurant_finder_agent) dan menyinkronkannya dengan JoinNode:
- Fan-out tuple: Menempatkan
(activity_finder_agent, restaurant_finder_agent)di dalam edge tuple akan mengirimkan outputuser_profiler_agentsebagainode_inputke kedua peneliti secara bersamaan. - Fan-in barrier (
JoinNode): MenempatkanJoinNode(name="research_join")tepat setelah tuple akan menunggu hingga setiap cabang yang masuk selesai dan meneruskan satudict({"activity_finder_agent": ..., "restaurant_finder_agent": ...}) yang digabungkan sebagainode_inputkeitinerary_synthesizer_agent, bukan memicu sintesis dua kali.

Tambahkan pakar riset
Pastikan adk web dihentikan (Ctrl + C), lalu buka travel_planner/specialists.py:
cloudshell edit ~/adk-graph-agents/travel_planner/specialists.py
Tambahkan activity_finder_agent dan restaurant_finder_agent ke bagian bawah travel_planner/specialists.py (keduanya tidak memerlukan output_key karena research_join meneruskan kedua output secara langsung melalui node_input):
# --- Specialist 3: The Activity Finder ---
activity_finder_agent = Agent(
model=MODEL,
name="activity_finder_agent",
description="Finds 3 attractions matching the user's destination and interests.",
instruction="""
Using the travel preferences in the input, call 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],
)
# --- Specialist 4: The Restaurant Finder ---
restaurant_finder_agent = Agent(
model=MODEL,
name="restaurant_finder_agent",
description="Finds 3 restaurants matching the destination and budget.",
instruction="""
Using the travel preferences in the input, call 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],
)
Menambahkan fan-out dan JoinNode ke workflows.py
Buka travel_planner/workflows.py:
cloudshell edit ~/adk-graph-agents/travel_planner/workflows.py
Ganti seluruh konten travel_planner/workflows.py dengan fan-out dan grafik JoinNode:
from google.adk import Workflow
from google.adk.workflow import JoinNode
from .specialists import (
activity_finder_agent,
itinerary_synthesizer_agent,
restaurant_finder_agent,
user_profiler_agent,
)
research_join = JoinNode(name="research_join")
# 2. FAN-OUT / FAN-IN GRAPH: Profile -> (Activities || Restaurants) -> Join -> Synthesize
travel_workflow = Workflow(
name="travel_workflow",
description="Orchestrates the end-to-end travel planning process as a graph workflow.",
edges=[
(
"START",
user_profiler_agent,
(activity_finder_agent, restaurant_finder_agent),
research_join,
itinerary_synthesizer_agent,
),
],
)
🔍 Periksa hasil kerja Anda
Mulai adk web untuk menguji penelusuran serentak dan sinkronisasi JoinNode:
cd ~/adk-graph-agents
adk web --allow_origins "*"
Buka Pratinjau Web di port 8000, klik + New Session, dan kirim:
Help me plan a trip to Kyoto focused on historic temples and ramen
Di tampilan Events, Anda akan melihat urutan peristiwa yang mirip dengan:
1. user_profiler_agent -> emits JSON preferences via node_input
2. activity_finder_agent & restaurant_finder_agent -> invoke google_search concurrently
3. research_join -> merges both researcher outputs into one dict node_input
4. itinerary_synthesizer_agent -> drafts final_itinerary from the merged dict + {user_preferences}
Tekan Ctrl + C di terminal Anda untuk menghentikan adk web sebelum melanjutkan.
8. Siklus revisi rute
Terapkan batasan anggaran dan negatif dengan menambahkan itinerary_critic_agent, itinerary_refiner_agent, dan dua node fungsi Python deterministik (route_critique dan finalize_itinerary) yang menampilkan objek Event ADK:
route: Memilih kunci cabang bernama di edge dict ({"revise": ..., "approved": ...}) yang akan dijalankan berikutnya.output: Meneruskan nilai atau string Python yang diketik di sepanjang edge sebagainode_inputke node berikutnya tanpa merender pesan chat.messagedanstate:messagememunculkan teks yang dapat dilihat pengguna dalam transkrip chat, sedangkanstatemeng-commit update nilai kunci (stateDelta) ke status sesi.

Menambahkan spesialis kritik dan penyempurna
Pastikan adk web dihentikan (Ctrl + C), lalu buka travel_planner/specialists.py:
cloudshell edit ~/adk-graph-agents/travel_planner/specialists.py
Tambahkan itinerary_critic_agent dan itinerary_refiner_agent ke bagian bawah travel_planner/specialists.py (penyaring tidak memerlukan alat google_search atau exit_loop karena menukar item yang sudah dikumpulkan di {final_itinerary} dan hanya berjalan saat route_critique memilih "revise"):
# --- Specialist 5: The Budget & Constraint Critic ---
itinerary_critic_agent = Agent(
model=MODEL,
name="itinerary_critic_agent",
description="Audits the itinerary draft against budget and negative constraints.",
instruction="""
Audit the itinerary in the input 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.
""",
)
# --- Specialist 6: The Itinerary Refiner ---
itinerary_refiner_agent = Agent(
model=MODEL,
name="itinerary_refiner_agent",
description="Revises the itinerary draft using the critic's feedback.",
instruction="""
Revise Current Itinerary ({final_itinerary}) using the auditor critique in the input
so all USD budget and exclusion rules in {user_preferences} pass.
Output ONLY the updated Markdown itinerary.
""",
output_key="final_itinerary",
)
Tambahkan route_critique dan siklus
Buka travel_planner/workflows.py:
cloudshell edit ~/adk-graph-agents/travel_planner/workflows.py
Ganti seluruh konten travel_planner/workflows.py dengan alur kerja grafik lengkap:
from google.adk import Event, Workflow
from google.adk.workflow import JoinNode
from .specialists import (
activity_finder_agent, itinerary_critic_agent, itinerary_refiner_agent,
itinerary_synthesizer_agent, restaurant_finder_agent, user_profiler_agent,
)
MAX_REVISIONS = 2
research_join = JoinNode(name="research_join")
def route_critique(node_input: str, revision_count: int = 0):
"""Routes to 'approved' when constraints pass, or 'revise' up to MAX_REVISIONS."""
approved = node_input.strip().rstrip(".").upper() == "APPROVED"
if approved or revision_count >= MAX_REVISIONS:
return Event(route="approved", output=approved)
return Event(
route="revise", output=node_input, state={"revision_count": revision_count + 1}
)
def finalize_itinerary(node_input: bool, final_itinerary: str, revision_count: int = 0):
"""Emits the verified itinerary and resets revision_count for the next turn."""
status = (
f"Itinerary approved after {revision_count} revision(s)."
if node_input
else f"Max revisions ({revision_count}) reached; returning best-effort draft."
)
return Event(
message=f"{status}\n\n{final_itinerary}",
output=final_itinerary,
state={"revision_count": 0},
)
travel_workflow = Workflow(
name="travel_workflow",
description="Orchestrates the end-to-end travel planning process as a graph workflow.",
edges=[
(
"START",
user_profiler_agent,
(activity_finder_agent, restaurant_finder_agent),
research_join,
itinerary_synthesizer_agent,
itinerary_critic_agent,
route_critique,
),
(route_critique, {"revise": itinerary_refiner_agent, "approved": finalize_itinerary}),
(itinerary_refiner_agent, itinerary_critic_agent),
],
)
🔍 Periksa hasil kerja Anda
Pastikan travel_planner/workflows.py mengompilasi dengan baik dan mencetak tepi grafik terarah:
cd ~/adk-graph-agents && source .venv/bin/activate
python3 -c "from travel_planner.agent import root_agent; print('\n'.join(f'{e.from_node.name} -> {e.to_node.name} (route={e.route})' for e in root_agent.graph.edges))"
Anda akan melihat output yang mirip dengan:
__START__ -> user_profiler_agent (route=None) user_profiler_agent -> activity_finder_agent (route=None) user_profiler_agent -> restaurant_finder_agent (route=None) activity_finder_agent -> research_join (route=None) restaurant_finder_agent -> research_join (route=None) research_join -> itinerary_synthesizer_agent (route=None) itinerary_synthesizer_agent -> itinerary_critic_agent (route=None) itinerary_critic_agent -> route_critique (route=None) route_critique -> itinerary_refiner_agent (route=revise) route_critique -> finalize_itinerary (route=approved) itinerary_refiner_agent -> itinerary_critic_agent (route=None)
Selanjutnya, mulai adk web untuk menguji persetujuan langsung dan revisi yang dipicu anggaran:
adk web --allow_origins "*"
Buka Web Preview di port 8000, klik + New Session, dan kirim perintah Kyoto dengan beberapa batasan:
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.
Untuk melihat cara kerja loop route="revise", kirim perintah lanjutan dengan anggaran ketat sebesar $15:
Now design a full-day Kyoto itinerary with paid temple admissions, lunch, and dinner on a strict total budget of $15 USD.
Di tampilan Events, Anda akan melihat urutan eksekusi yang mirip dengan:
1. user_profiler_agent -> writes JSON constraints to state["user_preferences"] 2. (activity_finder_agent, restaurant_finder_agent) -> run google_search concurrently -> research_join 3. itinerary_synthesizer_agent -> writes initial draft to state["final_itinerary"] 4. itinerary_critic_agent -> outputs "APPROVED" (or revision instructions when over budget) 5. route_critique -> emits route="approved" (skipping refiner) or route="revise" -> itinerary_refiner_agent -> itinerary_critic_agent 6. finalize_itinerary -> emits "Itinerary approved after N revision(s)." (or max-revisions notice) and resets revision_count=0
Tekan Ctrl + C di terminal Anda untuk menghentikan adk web.
9. Pemecahan masalah
Dropdown agen kosong di adk web
- Penyebab:
adk webdimulai di dalamtravel_planner/, bukan di direktori~/adk-graph-agentsinduk, atau sesi Cloud Shell dimulai ulang. - Perbaikan: Tekan
Ctrl + C, kembali ke direktori induk, dan mulai ulang dengancd ~/adk-graph-agents && source .venv/bin/activate && adk web --allow_origins "*".
Error model 404 NOT_FOUND
- Penyebab: Anda menekan Enter untuk menerima region
us-central1default selamaadk create, bukan mengetikglobal. - Perbaikan: Buka
~/adk-graph-agents/travel_planner/.envdan pastikanGOOGLE_CLOUD_LOCATION=globalditetapkan.
ERROR: [Errno 98] address already in use pada port 8000
- Penyebab: Server
adk websebelumnya masih berjalan di Cloud Shell. - Perbaikan: Tekan
Ctrl + Cdi terminal aktif atau hentikan proses yang ada denganpkill -f "adk web"sebelum memulaiadk weblagi.
10. Pembersihan
Hapus ruang kerja lokal dan nonaktifkan API atau hapus project workshop khusus jika perlu.
Menghapus file project lokal
Hapus direktori ~/adk-graph-agents dan lingkungan virtual:
cd ~
rm -rf ~/adk-graph-agents
Menonaktifkan Agent Platform API (Opsional)
Nonaktifkan Agent Platform API jika Anda tidak lagi memerlukannya dalam project ini:
gcloud services disable aiplatform.googleapis.com --quiet
🔍 Periksa hasil kerja Anda
Konfirmasi bahwa ~/adk-graph-agents telah dihapus:
test ! -d ~/adk-graph-agents && echo "Workspace ~/adk-graph-agents removed"
Anda akan melihat output yang mirip dengan:
Workspace ~/adk-graph-agents removed
11. Selamat
Anda telah membangun perencana perjalanan multi-agen menggunakan ADK 2 Workflow, yang menyatukan rantai berurutan, fan-out serentak google_search dengan JoinNode, dan siklus pembuat-pemeriksa bersyarat dalam satu grafik edge deklaratif.
Yang Anda capai
- Mendeklarasikan pipeline multi-agen menggunakan ADK 2
Workflow(edges=[...]) - Meneruskan data secara langsung antara node fungsi
Agent,JoinNode, dan Python melaluinode_inputdan parameter yang terikat status, sekaligus menjaga status sesi tetap minimal - Menyebarkan cabang
google_searchserentak dan menyinkronkannya denganJoinNode - Mengganti
LoopAgentdan eskalasi loop berbasis alat dengan routerEvent(route=...)deterministik yang melewati panggilan LLM yang tidak perlu pada draf yang disetujui
Langkah berikutnya
- Mempelajari Sistem Multi-Agen di ADK
- Bergabunglah dengan program GEAR (Gemini Enterprise Agent Ready) dan program Dapatkan Sertifikasi untuk mengikuti workshop interaktif dan jalur pembelajaran