1. Genel Bakış
Birden fazla kısıtlamaya sahip bir seyahat isteğini yerine getirmek (örneğin, tarihi tapınaklara ve yerel mutfağa odaklanan, modern sanat galerileri içermeyen, 100 ABD dolarının altında bir bütçeyle tam günlük Kyoto seyahat planı tasarlamak) için kısıtlamaları belirlemek, turistik yerleri ve restoranları aynı anda araştırmak, ayrıntılı bir program hazırlamak ve nihai planı denetlemek gerekir. Birçok araca sahip tek bir monolitik ajana güvenmek, doğrulama adımlarının atlanmasına veya hariç tutma kurallarının ihlal edilmesine neden olabilir. Bu nedenle orkestrasyon, deterministik iş akışı denetleyicileri aracılığıyla özel alt ajanları koordine eder.
ADK ile Yapay Zeka Ajanları Oluşturma serisinin bu üçüncü bölümünde, Agent Development Kit (ADK) 2 iş akışı denetleyicilerini (SequentialAgent, ParallelAgent ve LoopAgent) kullanarak Agent Platform'da bağımsız bir çoklu yapay zeka ajanı seyahat planlayıcısı oluşturacaksınız. Üç aşamalı bir süreçte (1. veya 2. bölüm çalışma alanı kurulumu gerekmez), gemini-3.8-flash tarafından desteklenen altı uzman yapay zeka ajanını paylaşılan oturum durumu (output_key), eşzamanlı google_search yürütme ve yinelemeli bir yapıcı-kontrolör iyileştirme döngüsüyle koordine edeceksiniz.
Ön koşullar
- Üretken yapay zeka kavramları hakkında bilgi sahibi olma
- Python programlama konusunda temel düzeyde yeterlilik
- Yapay zeka ajanıyla ilgili temel bilgiler ve Google ADK hakkında bilgi sahibi olma
Öğrenecekleriniz
- Sıfırdan çoklu temsilci ADK 2 projesi oluşturma
output_keykullanarak oturum durumunu paylaşan uzmanlaşmış temsilcilerden oluşan bir ekip tasarlama- Belirgin ve adım adım ilerleyen bir ardışık düzende alt ajanları yürütmek için
SequentialAgentöğesini kullanma - Daha düşük gecikme süresi için bağımsız araştırma temsilcilerini eşzamanlı olarak çalıştırmak üzere
ParallelAgentaracını kullanma - Yinelemeli bir yapıcı-kontrolör hassaslaştırma döngüsü uygulamak için
LoopAgentveToolContextüst birime iletme özelliğini kullanma - Sıralı, paralel ve döngü kalıplarını hiyerarşik bir çoklu temsilci iş akışında birleştirme
İhtiyacınız olanlar
- Google Hesabı (Atölye kredisi talep ediyorsanız kişisel
@gmail.comhesabı kullanın) - Eğitmeninizden aldığınız atölye kredisi bağlantısı (ve QR kodunu taramak için telefon kamerası) veya etkin bir Cloud Faturalandırma Hesabı
- Google Chrome (Kişisel hesaplar ile iş hesaplarının karışmaması için gizli pencere kullanılması önerilir.)
2. Google Cloud kredilerini kullanma (isteğe bağlı)
Etkinlik kredisi bağlantısı içeren bir atölyeye katılıyorsanız kredi kartı olmadan faturalandırma hesabı oluşturmak için Google Developer Program kredinizi kullanın.
Etkinlik kredinizi alma
- Atölye kredisi bağlantısını gizli pencerede açın ve
@gmail.comhesabınızla oturum açın. - Avantajınızı Kullanın sayfasında Krediyi Kullan'ı tıklayın:

- Google Developer Program profili oluşturmanız istenirse formu doldurun.
- Gerçek Kişi Olduğunuzu Doğrulamak İçin Tarayın ifadesi göründüğünde QR kodunu telefonunuzla tarayın ve doğrulamayı tamamlayın (QR kodu görünmüyorsa sayfayı yenileyip Krediyi Al'ı tekrar tıklayın):

- Etkinlik kredinizi başarıyla kullandınız ifadesinin göründüğünü onaylayın, ardından Faturalandırma Hesabını Aç'ı tıklayın:

🔍 Çalışmanızı kontrol edin
Faturalandırma hesabı kurulumu 3 dakika kadar sürer:
- Google Cloud Billing'i açın (veya URL'yi gizli pencerenize kopyalayın) ve Faturalandırma hesaplarınız'ı seçin:
https://console.cloud.google.com/billing
GDP Credithesabınızın durumu Etkin olarak gösterilene kadar sayfayı yenileyin:

3. Google Cloud projesi oluşturma (isteğe bağlı)
Bu codelab'deki tüm kaynakların izole kalması ve kolayca temizlenebilmesi için özel bir Google Cloud projesi oluşturun.
- Proje Oluşturma sayfasını açın (veya URL'yi gizli pencerenize kopyalayın):
https://console.cloud.google.com/projectcreate
- Proje ayrıntılarınızı girin:
- Proje adı: Örneğin,
google-cloud-workshop - Faturalandırma hesabı (gösteriliyorsa):
GDP Credit(veya etkin faturalandırma hesabınızı) seçin. - Üst kaynak: Kuruluş yok (veya gerekirse kuruluşunuz)
- Proje adı: Örneğin,
- Proje adının altında oluşturulan Proje Kimliği'ni not edin ve Oluştur'u tıklayın:

🔍 Çalışmanızı kontrol edin
Sağ üstteki araç çubuğunda Bildirimler'i tıklayın ve proje oluşturma işlemi tamamlandığında Proje Seç'i tıklayın:

4. Ortamınızı ayarlama
Google Cloud Shell'i yapılandırın, Agent Platform API'yi etkinleştirin ve uv ile izole bir Python 3.12 sanal ortamı oluşturun.
Cloud Shell'i yapılandırma
- Google Cloud konsolu araç çubuğunda Cloud Shell'i etkinleştir'i (
>_) tıklayın veya doğrudan Google Cloud Shell'i açın (ya da URL'yi gizli pencerenize kopyalayın):
https://shell.cloud.google.com/?show=ide,terminal

- İstenirse Authorize'ı (Yetkilendir) tıklayın:

- Terminalinizdeki numaralı menüden etkin Google Cloud proje kimliğinizi seçin:
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
Aşağıdakine benzer bir çıkış görürsünüz (etiketlenmemiş projeler de bilgilendirici bir [environment: untagged] satırı yazdırır):
1) google-cloud-workshop-4210 2) my-cloud-project-8812 Select your project (e.g. 1): 1 Updated property [core/project].
Seçtiğiniz proje kimliğinin Cloud Shell isteminde sarı renkle vurgulandığını doğrulayın:

Gerekli API'leri etkinleştirme
ADK temsilcilerinizin Gemini modellerini çağırabilmesi için Agent Platform API'yi etkinleştirin:
gcloud services enable aiplatform.googleapis.com
Şuna benzer bir çıkış alırsınız:
Operation "operations/acat.p2-..." finished successfully.
Python sanal ortamı oluşturma ve ADK'yi yükleme
~/adk-agents çalışma alanını oluşturun ve Python 3.12 sanal ortamını etkinleştirin:
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
Terminal isteminizin başında (.venv) ön ekinin göründüğünü doğrulayın:

Etkin sanal ortamda ADK 2'yi yükleyin:
uv pip install --no-cache "google-adk==2.14.0"
🔍 Çalışmanızı kontrol edin
Yüklü adk CLI sürümünü doğrulayın:
adk --version
Şuna benzer bir çıkış alırsınız:
adk, version 2.14.0
5. Seyahat planlayıcı temsilcisinin iskeletini oluşturma
Ortamınız hazır olduğunda ADK'nin yerleşik adk create komutunu kullanarak travel_planner temsilci paketiniz için başlangıç dosyalarını oluşturun.
Başlangıç paketini oluşturma
~/adk-agents dizininizden adk create komutunu çalıştırın:
cd ~/adk-agents
adk create travel_planner
Terminalde istendiğinde aşağıdaki yapılandırma seçeneklerini belirleyin (ilk çalıştırmada Enable telemetry? [Y/n]: istemi gösterilirse Enter tuşuna basın veya n yazıp Enter tuşuna basın):
- Kök temsilci için bir model seçin:
gemini-3.8-flashmodelini seçmek için2yazın (1seçeneğigemini-3.5-flashmodelini seçer) ve Enter tuşuna basın. - Arka uç seçin: Google Cloud Agent Platform arka ucunu seçmek için
2yazın (aşağıdaki CLI menüsünde2seçeneği) ve Enter tuşuna basın. - Enter Google Cloud project ID (Google Cloud proje kimliğini girin): Parantez içinde gösterilen proje kimliğinizi Enter tuşuna basarak onaylayın.
- Enter Google Cloud region (Google Cloud bölgesini girin):
globalyazın ve Enter tuşuna basın.
adk create, GOOGLE_GENAI_USE_ENTERPRISE=1, proje kimliğiniz ve GOOGLE_CLOUD_LOCATION=global değerlerini travel_planner/.env dosyasına yazar. Böylece daha sonra agent.py aracını güncellediğinizde kimlik bilgileriniz yapılandırılmış olarak kalır.
🔍 Çalışmanızı kontrol edin
Şuna benzer bir çıkış alırsınız:
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/)
Cloud Shell kod düzenleyicide mevcut klasörü açarak dosyaları terminalinizle yan yana inceleyip düzenleyebilirsiniz:
which cloudshell >/dev/null 2>&1 && cloudshell workspace ~/adk-agents || true
cd ~/adk-agents
source .venv/bin/activate
Varsayılan tek temsilciyi test etme
Çoklu temsilci iş akışları oluşturmadan önce ADK Development kullanıcı arayüzünü başlatarak varsayılan tek temsilcinin geniş kapsamlı bir seyahat planlama sorgusuna nasıl yanıt verdiğini inceleyin:
cd ~/adk-agents
adk web --allow_origins "*"
Cloud Shell Web Önizlemesi'ni kullanarak tarayıcınızda geliştirme kullanıcı arayüzünü açın:
- Cloud Shell'in sağ üst araç çubuğundaki Web Preview (Web Önizlemesi) simgesini tıklayın.
- Change Port'u (Bağlantı Noktasını Değiştir) seçin,
8000değerini girin ve Change and Preview'u (Değiştir ve Önizle) tıklayın.

ADK Web kullanıcı arayüzü yüklendikten sonra "hello, what can you do?" veya "Help me plan a trip to Japan" gibi bir selamlama mesajı gönderin:

Tek bir root_agent, yapılandırılmış tercih çıkarma, canlı web araştırması veya bütçe doğrulaması olmadan doğrudan tek seferde yanıt verir.
Testi tamamladığınızda Cloud Shell terminalinizde Ctrl + C tuşlarına basarak adk web sunucusunu durdurun ve komut istemine dönün.
6. SequentialAgent iş akışı oluşturma
Şimdi ilk düzenleme kalıbınızı oluşturacaksınız: SequentialAgent tarafından desteklenen doğrusal bir iş akışı. Sıralı ardışık düzende alt ajanlar belirli bir sırayla yürütülür. İlk uzman, yapılandırılmış parametreleri ayıklar ve output_key="user_preferences" kullanarak paylaşılan oturum durumuna kaydeder. İkinci uzman ise seyahat planını hazırlamak için paylaşılan durumdan {user_preferences} değerini okur.

İlk uzmanları oluşturma (specialists.py)
travel_planner/ içinde specialists.py adlı yeni bir dosya açın:
cloudshell edit ~/adk-agents/travel_planner/specialists.py
user_profiler_agent ve itinerary_synthesizer_agent değerlerini tanımlamak için aşağıdaki kodu travel_planner/specialists.py dosyasına yapıştırın (sonraki adımlar için ToolContext ve google_search değerlerini önceden içe aktarın):
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",
)
Sıralı ardışık düzeni bağlama (workflows.py)
Uzmanları yönetmek için travel_planner/ içinde workflows.py adlı yeni bir dosya oluşturun:
cloudshell edit ~/adk-agents/travel_planner/workflows.py
travel_planner/workflows.py alanına aşağıdaki SequentialAgent tanımını ekleyin:
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
],
)
root_agent (agent.py) ile iş akışını bağlayın
Şimdi master_travel_agent adlı temsilciyi root_agent adlı temsilcinin alt ajanı olarak kaydedin. travel_planner/agent.py uygulamasını açın:
cloudshell edit ~/adk-agents/travel_planner/agent.py
travel_planner/agent.py dosyasının içeriğini aşağıdaki kodla değiştirin:
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],
)
🔍 Çalışmanızı kontrol edin
Terminalinizden ADK web kullanıcı arayüzünü başlatın:
cd ~/adk-agents
adk web --allow_origins "*"
8000 bağlantı noktasında Web Önizlemesi'ni açın ve istemi girin:
Help me plan a trip to Kyoto
Events (Etkinlikler) görünümünde aşağıdaki yürütme akışına benzer bir çıkış görürsünüz:
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

Herhangi bir etkinlik rozetini (veya State: final_itinerary çipini) tıklayın ve sol denetleyici panelindeki State (Durum) sekmesine geçerek user_preferences ve final_itinerary değerlerinin oturum durumuna doldurulduğunu onaylayın.
İzlemeyi incelemeyi tamamladığınızda terminalinizde Ctrl + C tuşuna basarak adk web aracını durdurun.
7. ParallelAgent ile araştırma yapma
Sıralı iş akışı, tercihleri ayıklama ve seyahat planı taslağı oluşturma işlemlerini net bir şekilde ayırsa da önerileri yalnızca modelin statik eğitim bilgilerine dayanır. Yerleşik google_search aracından destek alan iki özel araştırmacı ekleyerek seyahat planını canlı web verilerine dayandırabilirsiniz:
activity_finder_agent: Kullanıcının varış noktası ve ilgi alanlarıyla eşleşen 3 turistik yer bulur ve tahmini bilet fiyatlarını gösterir.restaurant_finder_agent: Yüksek puanlı 3 yerel restoranı ve kişi başına tahmini maliyetlerini bulur.
Turistik yerleri ve restoranları araştırmak birbirinden bağımsız olduğu için bunları sırayla çalıştırmak zaman kaybına neden olur. Bunun yerine, her iki araştırmacıyı da bir ParallelAgent (parallel_research_agent) içine sarmalayacaksınız. Böylece ADK, her iki Google Arama iş akışını da eşzamanlı olarak yürütür ve itinerary_synthesizer_agent'ya aktarmadan önce {activity_recommendations?} ve {restaurant_recommendations?}'i doldurur.

Paralel araştırma uzmanlarını specialists.py adlı dosyaya ekle
travel_planner/specialists.py uygulamasını açın:
cloudshell edit ~/adk-agents/travel_planner/specialists.py
Aşağıdaki iki Google Arama uzmanını travel_planner/specialists.py dosyasının altına (itinerary_synthesizer_agent dosyasının hemen altına) ekleyin:
# --- 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 öğesini workflows.py içine ekle
travel_planner/workflows.py uygulamasını açın:
cloudshell edit ~/adk-agents/travel_planner/workflows.py
ParallelAgent kullanarak parallel_research_agent öğesini tanımlamak için travel_planner/workflows.py öğesini güncelleyin ve user_profiler_agent ile itinerary_synthesizer_agent arasına yerleştirin:
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
],
)
🔍 Çalışmanızı kontrol edin
Paralel araştırma ardışık düzenini test etmek için adk web aracını tekrar başlatın:
cd ~/adk-agents
adk web --allow_origins "*"
Web önizleme kullanıcı arayüzünde şu istemi gönderin:
Help me plan a trip to Kyoto focused on historic temples and ramen
Events (Etkinlikler) görünümünde aşağıdakine benzer bir çıkış görürsünüz:
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']
- İzleme görünümü: Görüşme bölmesinin üst kısmındaki (Etkinlikler'in yanındaki) İzlemeler'i tıklayın ve sıranızı inceleyin.
parallel_research_agentaltındaactivity_finder_agentverestaurant_finder_agentiçin çakışan zaman çizelgesi aralıkları görürsünüz. Bu sayede, toplam web araştırması gecikmesi, sıralı olarak çalıştırmaya kıyasla neredeyse yarı yarıya azalır. - State (Durum) sekmesi: Canlı oturum sözlüğünü (
user_preferences,activity_recommendations,restaurant_recommendationsvefinal_itinerary) incelemek için sol denetleyici panelindeki State (Durum) sekmesini tıklayın.
Testi tamamladığınızda adk web aracını durdurmak için terminalinizde Ctrl + C tuşlarına basın.
8. LoopAgent ile taslakları iyileştirme
Canlı arama sonuçları olsa bile itinerary_synthesizer_agent tarafından üretilen ilk taslak, kullanıcının toplam bütçesini aşabilir veya yanlışlıkla hariç tutulan bir kategoriyi (ör. kullanıcı istemediği halde modern sanat galerisi) içerebilir.
Kısıtlamalara uyulmasını sağlamak için LoopAgent kullanarak ardışık düzenin sonuna bir oluşturucu-denetleyici hassaslaştırma döngüsü ekleyeceksiniz:
itinerary_critic_agent(Denetleyici):{final_itinerary},{user_preferences}ile karşılaştırılarak denetlenir. Tahmini maliyetleri toplar, her bir negatif kısıtlamayı kontrol eder vecritique_feedbackiçin özel düzeltme talimatları yazar veya tam olarak"APPROVED"ifadesiyle yanıt verir.itinerary_refiner_agent(The Maker / Exiter):{critique_feedback}. Eleştiri"APPROVED"iseLoopAgentdöngüsünden hemen çıkmak içinexit_looparacını (tool_context.actions.escalate = True) çağırır. Aksi takdirde, işaretlenen sorunları düzeltmek için{final_itinerary}dosyasını düzeltir ve bir sonraki geçiş içinfinal_itinerarydosyasının üzerine yazar.

exit_loop, Eleştirmen ve İyileştirici'yi specialists.py öğesine ekleyin
travel_planner/specialists.py uygulamasını açın:
cloudshell edit ~/adk-agents/travel_planner/specialists.py
exit_loop aracını (ToolContext), itinerary_critic_agent ve itinerary_refiner_agent öğelerini travel_planner/specialists.py dosyasının altına ekleyin:
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 kitlesini workflows.py kampanyasına ekleyin
travel_planner/workflows.py uygulamasını açın:
cloudshell edit ~/adk-agents/travel_planner/workflows.py
travel_planner/workflows.py öğesini, itinerary_critic_agent ve itinerary_refiner_agent öğelerini bir LoopAgent (max_iterations=3) içinde sarmalayacak şekilde güncelleyin ve master_travel_agent öğesinin dördüncü aşaması olarak ekleyin:
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
],
)
🔍 Çalışmanızı kontrol edin
Çoklu temsilci iş akışının tamamını test etmek için adk web uygulamasını başlatın:
cd ~/adk-agents
adk web --allow_origins "*"
8000 bağlantı noktasında Web Önizlemesi kullanıcı arayüzünü açın, Yeni Oturum başlatın ve Kyoto ile ilgili birden fazla kısıtlama içeren bu istemle tüm sistemi test edin:
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.
Events (Etkinlikler) görünümünde ve terminal günlüklerinde aşağıdaki yürütme sırasına benzer bir çıkış görürsünüz:
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
- Etkinlikler görünümü:
itinerary_critic_agentveyaitinerary_refiner_agentbölümündeki herhangi bir etkinlik çipini tıklayarak sol taraftaki Bilgi sekmesinde yükünü inceleyin.itinerary_refiner_agent,exit_loopişlevini çağırdığında etkinliği inceleyerekactions.escalate: truedeğerini görebilirsiniz. Bu sinyal,LoopAgentişlevinemax_iterations=3değerine ulaşmadan önce yinelemeyi durdurmasını söyler. - State (Durum) sekmesi:
state['critique_feedback']vestate['final_itinerary']değerlerinin geçişler arasında güncellenmesini izlemek için State (Durum) sekmesini tıklayın. İlk taslak$100 USDdeğerini aşarsacritique_feedback,final_itinerarydaha düşük maliyetli alternatiflerle güncellenmeden önce 1. aşamada denetçinin düzeltme talimatlarını tutar vecritique_feedback, 2. aşamada"APPROVED"olarak değişir.
Testi tamamladığınızda adk web aracını durdurmak için terminalinizde Ctrl + C tuşlarına basın.
9. Temizleme
Yerel proje dosyalarını silme
adk-agents proje dizinini ve sanal ortamı Cloud Shell ana klasörünüzden kaldırmak için şu komutu çalıştırın:
cd ~
rm -rf ~/adk-agents
Agent Platform API'yi devre dışı bırakma
Projenizde etkinleştirilen Agent Platform API'ye artık ihtiyacınız yoksa gcloud ile devre dışı bırakın:
gcloud services disable aiplatform.googleapis.com --quiet
Google Cloud projesinin tamamını silme (isteğe bağlı)
PROJECT_ID=$(gcloud config get-value project)
gcloud projects delete "$PROJECT_ID" --quiet
🔍 Çalışmanızı kontrol edin
~/adk-agents adlı kullanıcının kaldırıldığını onaylayın:
test ! -d ~/adk-agents && echo "Workspace ~/adk-agents removed"
Şuna benzer bir çıkış alırsınız:
Workspace ~/adk-agents removed
10. Tebrikler
Tebrikler! Google Agent Development Kit (ADK) ile hiyerarşik bir çoklu temsilci sistemi oluşturdunuz. Bu sistem, altı uzman temsilciden oluşan bir ekibi sıralı, paralel ve yinelemeli döngü iş akışlarında koordine eder.
Başarılarınız
- Paylaşılan oturum durumu aracılığıyla temsilciler arasında yapılandırılmış iletişim (
output_keyve{state_variable}şablon ekleme) SequentialAgentkullanarak deterministik, adım adım bir ardışık düzen oluşturun.ParallelAgentkullanılarak bağımsız Google Arama araştırma temsilcileri aynı anda çalıştırıldıLoopAgentvetool_context.actions.escalate = Truekullanarak otomatik bir yapıcı-kontrolör doğrulama döngüsü uygulandı.
Sonraki adımlar
- Bu seyahat planlayıcıyı ADK 2'nin birleştirilmiş
Workflow,JoinNodeve deterministikEvent(route=...)döngüleriyle yeniden oluşturmak için serinin 4. bölümü olan Building AI Agents with ADK: Orchestrating Graph Workflows (ADK ile Yapay Zeka Ajanları Oluşturma: Grafik İş Akışlarını Yönetme) başlıklı makaleyi okuyun. - Resmi ADK İş Akışı Temsilcileri belgelerini okuyun.
- ADK'da birden fazla temsilci sistemi hakkında bilgi edinme
- Uygulamalı atölyeler ve öğrenme rotaları için GEAR (Gemini Enterprise Agent Ready) programına ve Get Certified programına katılın.