Cloud Run'da MCP sunucusu kullanan bir ADK aracısı oluşturma ve dağıtma

1. Giriş

Bu laboratuvarda, istemci aracısı hizmetinin uygulanması ve dağıtımı üzerinde durulmaktadır. Agent Development Kit (ADK) kullanarak 1. laboratuvarda oluşturulan MCP sunucusu gibi uzak araçları kullanan bir yapay zeka ajanı oluşturacaksınız. Gösterilen temel mimari ilke, endişelerin ayrılmasıdır. Bu ilkeye göre, ayrı bir muhakeme katmanı (aracı), güvenli bir API aracılığıyla ayrı bir araç katmanıyla (MCP sunucusu) iletişim kurar.

1. laboratuvarda, Antigravity CLI'yı (agy) kullanırken olduğu gibi, kurgusal bir hayvanat bahçesindeki hayvanlar hakkında LLM'lere veri sağlayan bir MCP sunucusu oluşturmuştunuz. Bu laboratuvarda ise kurgusal hayvanat bahçesi için bir tur rehberi ajanı oluşturacağız. Ajan, hayvanat bahçesindeki hayvanlarla ilgili ayrıntılara erişmek için 1. laboratuvardaki aynı MCP sunucusunu kullanacak ve en iyi tur rehberi deneyimini oluşturmak için Wikipedia'dan da yararlanacak.

f8d4423edbfe993d.png

Son olarak, tur rehberi aracısını Google Cloud Run'a dağıtacağız. Böylece, yalnızca yerel olarak çalışmak yerine tüm hayvanat bahçesi ziyaretçileri tarafından erişilebilir.

Ön koşullar

  • Cloud Run'da çalışan bir MCP sunucusu veya ilişkili hizmet URL'si.
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi.
  • Yüklü KSA araçları: gcloud, uv, agy.

Neler öğreneceksiniz?

  • ADK dağıtımı için Python projesi nasıl yapılandırılır?
  • Google-adk ile araç kullanan bir aracı nasıl uygulayabilirim?
  • Bir aracıyı, araç seti için uzak bir MCP sunucusuna bağlama
  • Python uygulamasını Cloud Run'a sunucusuz container olarak dağıtma
  • IAM rollerini kullanarak hizmetten hizmete güvenli kimlik doğrulama yapılandırma
  • Gelecekteki maliyetleri önlemek için Cloud kaynaklarını nasıl sileceğinizi öğrenin.

Gerekenler

  • Google Cloud Hesabı ve Google Cloud projesi
  • Chrome gibi bir web tarayıcısı

2. Neden Cloud Run'a dağıtım yapmalısınız?

Cloud Run, sunucusuz bir platform olduğundan ADK aracılarını barındırmak için mükemmel bir seçimdir. Bu sayede, temel altyapıyı yönetmek yerine kodunuza odaklanabilirsiniz. Operasyonel işleri sizin için hallederiz.

Bunu bir pop-up mağazaya benzetebiliriz: Yalnızca müşteriler (istekler) geldiğinde açılır ve kaynakları kullanır. Müşteri olmadığında tamamen kapanır ve boş bir mağaza için ödeme yapmazsınız.

Temel Özellikler

Her Yerde Kapsayıcı Çalıştırma:

  • Uygulamanızın bulunduğu bir container (Docker görüntüsü) getirirsiniz.
  • Cloud Run, bu kapsayıcıyı Google'ın altyapısında çalıştırır.
  • İşletim sistemi yaması, VM kurulumu veya ölçeklendirme ile ilgili sorunlar yok.

Otomatik ölçeklendirme:

  • Uygulamanızı kullanan kişi sayısı 0 ise → 0 örnek çalıştırılır (maliyet açısından avantajlı olan sıfır örneğe ölçeklendirilir).
  • 1.000 istek gelirse → gerektiği kadar kopya oluşturulur.

Varsayılan olarak durum bilgisi yok:

  • Her istek farklı bir örneğe gidebilir.
  • Durumu saklamanız gerekiyorsa Cloud SQL, Firestore veya Memorystore gibi harici bir hizmet kullanın.

Herhangi bir dili veya çerçeveyi destekler:

  • Cloud Run, Linux kapsayıcısında çalıştığı sürece Python, Go, Node.js, Java veya .Net olup olmamasıyla ilgilenmez.

Kullandığınız Kadar Ödeyin:

3. Başlamadan önce

Yönlendirmesiz ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

fbef9caa1602edd0.pnga99b7ace416376c4.png5e3ff691252acf41.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Alternatif olarak kendi takma adınızı deneyebilir ve kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırmayla karşılaşmamak için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme sürümü programından yararlanabilir.

Cloud Shell'i başlatma

  1. Cloud Shell Düzenleyici'ye gidin.
  2. Terminal ekranın alt kısmında görünmüyorsa açın:
    • Terminal'i tıklayın.
    • Yeni Terminal'i tıklayın.
    d32c46fffa0a30a5.png
  3. Terminalde şu komutla projenizi ayarlayın. 1. laboratuvarı tamamladıysanız aynı proje kimliğini kullandığınızdan emin olun:
    gcloud config set project [YOUR-PROJECT-ID]
    
    Proje kimliğinizi hatırlamıyorsanız tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
    gcloud projects list | awk '/PROJECT_ID/{print $2}'
    
  4. Yetkilendirme istenirse devam etmek için Yetkilendir'i tıklayın.

6356559df3eccdda.png

  1. Şu mesajı görürsünüz:
    Updated property [core/project].
    
    WARNING simgesini görüyorsanız ve Do you want to continue (Y/n)? soruluyorsa proje kimliğini yanlış girmiş olabilirsiniz. n tuşuna basın, Enter tuşuna basın ve gcloud config set project komutunu tekrar çalıştırmayı deneyin.

4. Ortamınızı ayarlama

API'leri etkinleştirme ve ortam değişkenlerini ayarlama

Gerekli tüm hizmetleri etkinleştirin:

gcloud services enable \
    run.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com \
    aiplatform.googleapis.com

Beklenen çıktı

Operation "operations/acat.p2-[GUID]" finished successfully.

Proje dizinini oluşturun.

Bu komut, aracının kaynak kodu için laboratuvarla ilgili ana klasörü oluşturur.

cd && mkdir zoo_guide_agent && cd zoo_guide_agent

requirements.txt dosyasını oluşturun. Bu dosyada, aracınızın ihtiyaç duyduğu Python kitaplıkları listelenir. Aşağıdaki komut dosyayı oluşturur ve doldurur.

cloudshell edit requirements.txt
google-adk==1.14.0
langchain-community==0.3.27
wikipedia==1.4.0

Mevcut proje kimliğiniz ve proje numaranız için değişkenler ayarlayın. Ayrıca projeniz için özel bir hizmet hesabı oluşturun. Bu, komutları çalıştırmanın daha sağlam bir yoludur.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export SA_NAME=lab2-cr-service
export SERVICE_ACCOUNT="${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
gcloud iam service-accounts create ${SA_NAME} \
    --display-name="Service Account for lab 2 "

zoo_guide_agent dizininde aracının kimliğini doğrulamak için bir .env dosyası oluşturun ve açın.

cloudshell edit .env

cloudshell edit komutu, .env dosyasını terminalin üstündeki düzenleyicide açar. .env dosyasına aşağıdakileri girin ve terminale geri dönün.

MODEL="gemini-3.5-flash"
GOOGLE_GENAI_USE_ENTERPRISE=true
GOOGLE_CLOUD_LOCATION=global

MCP sunucusu URL'sini ekleyin. 1. laboratuvarı tamamladıysanız 1. laboratuvarda oluşturduğunuz MCP sunucusunu kullanmak için aşağıdaki adımları uygulayın:

Temsilcinin hizmet hesabına, Gemini Enterprise Agent Platform'da Gemini'ı kullanma ve uzak MCP sunucusunu çağırma izni verin:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/aiplatform.user"
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/run.invoker"

1. laboratuvardaki MCP sunucusu URL'sini bir ortam değişkenine kaydedin.

echo -e "\nMCP_SERVER_URL=https://zoo-mcp-server-${PROJECT_NUMBER}.us-west1.run.app/mcp" >> .env

Herkese açık bir MCP sunucu bağlantısı kullanıyorsanız aşağıdakileri çalıştırın ve PROJECT_NUMBER yerine sağlanan bilgileri girin.

echo -e "\nMCP_SERVER_URL=https://zoo-mcp-server-${PROJECT_NUMBER}.us-west1.run.app/mcp" >> .env

5. Ajan iş akışı oluşturma

init.py dosyasıoluşturun.

init.py dosyasını oluşturun. Bu dosya, Python'a zoo_guide_agent dizininin bir paket olduğunu bildirir.

cloudshell edit __init__.py

Önceki komut, kod düzenleyiciyi açar. Aşağıdaki kodu __init__.py dosyasına ekleyin:

from . import agent

main_agent.py dosyasını oluşturma

Ana agent.py dosyasını oluşturun. Bu komut, Python dosyasını oluşturur ve çok ajanlı sisteminizin kodunu yapıştırır.

cloudshell edit agent.py

İçe aktarma işlemleri ve ilk kurulum

Bu ilk blok, ADK ve Google Cloud'dan gerekli tüm kitaplıkları getirir. Ayrıca, modelinize ve sunucu URL'nize erişmek için çok önemli olan .env dosyanızdaki ortam değişkenlerini yükler ve günlük kaydını ayarlar.

Aşağıdaki kodu agent.py dosyanıza ekleyin:

import os
import logging
import google.cloud.logging
from dotenv import load_dotenv

from google.adk import Agent
from google.adk.agents import SequentialAgent
from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset, StreamableHTTPConnectionParams
from google.adk.tools.tool_context import ToolContext
from google.adk.tools.langchain_tool import LangchainTool

from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper

import google.auth
import google.auth.transport.requests
import google.oauth2.id_token

# --- Setup Logging and Environment ---

cloud_logging_client = google.cloud.logging.Client()
cloud_logging_client.setup_logging()

load_dotenv()

model_name = os.getenv("MODEL")

Araçları tanımlama (Agent'ın yetenekleri)

3eb9c6772576b906.jpeg

Bir ajan, yalnızca kullanabileceği araçlar kadar iyidir. Bu bölümde, ajanımızın sahip olacağı tüm özellikleri (veri kaydetme için özel bir işlev, güvenli MCP sunucumuza bağlanan bir MCP Aracı ve bir Wikipedia Aracı dahil) tanımlıyoruz.

Aşağıdaki kodu agent.py dosyasının en altına ekleyin:

# Greet user and save their prompt

def add_prompt_to_state(
    tool_context: ToolContext, prompt: str
) -> dict[str, str]:
    """Saves the user's initial prompt to the state."""
    tool_context.state["PROMPT"] = prompt
    logging.info(f"[State updated] Added to PROMPT: {prompt}")
    return {"status": "success"}


# Configuring the MCP Tool to connect to the Zoo MCP server

mcp_server_url = os.getenv("MCP_SERVER_URL")
if not mcp_server_url:
    raise ValueError("The environment variable MCP_SERVER_URL is not set.")

def get_id_token():
    """Get an ID token to authenticate with the MCP server."""
    target_url = os.getenv("MCP_SERVER_URL")
    audience = target_url.split('/mcp/')[0]
    request = google.auth.transport.requests.Request()
    id_token = google.oauth2.id_token.fetch_id_token(request, audience)
    return id_token

"""
# Use this code if you are using the public MCP Server and comment out the code below defining mcp_tools
mcp_tools = MCPToolset(
    connection_params=StreamableHTTPConnectionParams(
        url=mcp_server_url
    )
)
"""

mcp_tools = MCPToolset(
            connection_params=StreamableHTTPConnectionParams(
                url=mcp_server_url,
                headers={
                    "Authorization": f"Bearer {get_id_token()}",
                },
            ),
        )

# Configuring the Wikipedia Tool
wikipedia_tool = LangchainTool(
    tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
)

Üç Araç Açıklaması

  1. add_prompt_to_state 📝

Bu araç, hayvanat bahçesi ziyaretçilerinin sorduklarını hatırlar. Bir ziyaretçi "Aslanlar nerede?" diye sorduğunda bu araç, söz konusu soruyu aracının belleğine kaydeder. Böylece iş akışındaki diğer aracılar neyi araştırmaları gerektiğini bilir.

Nasıl çalışır? Ziyaretçinin istemini paylaşılan tool_context.state sözlüğüne yazan bir Python işlevidir. Bu araç bağlamı, ajanın tek bir görüşmedeki kısa süreli belleğini temsil eder. Bir aracı tarafından duruma kaydedilen veriler, iş akışındaki bir sonraki aracı tarafından okunabilir.

  1. MCPToolset 🦁

Bu, tur rehberi aracısını 1. laboratuvarda oluşturulan hayvanat bahçesi MCP sunucusuna bağlamak için kullanılır. Bu sunucuda, hayvanlarımızla ilgili adları, yaşları ve bulundukları yer gibi belirli bilgileri aramak için özel araçlar bulunur.

Nasıl: Hayvanat bahçesinin özel sunucu URL'sine güvenli bir şekilde bağlanır. Kimliğini kanıtlamak ve erişim elde etmek için get_id_token kullanarak güvenli bir "anahtar kartı" (hizmet hesabı kimlik jetonu) otomatik olarak alır.

  1. LangchainTool 🌍

Bu sayede tur rehberi aracısı genel dünya bilgisine sahip olur. Bir ziyaretçi, hayvanat bahçesinin veritabanında bulunmayan bir soru sorduğunda (ör. "Aslanlar vahşi doğada ne yer?") bu araç, temsilcinin Wikipedia'da yanıtı aramasını sağlar.

Nasıl: Bir bağdaştırıcı görevi görerek aracımızın LangChain kitaplığındaki önceden oluşturulmuş WikipediaQueryRun aracını kullanmasına olanak tanır.

Kaynaklar:

Uzman Ajanları Tanımlama

b8a9504b21920969.jpeg

Ardından, araştırmacı aracısını ve yanıt biçimlendirici aracısını tanımlayacağız. Araştırmacı ajan, operasyonumuzun "beynidir". Bu aracı, paylaşılan State istemini alır, güçlü araçlarını (Zoo'nun MCP Sunucu Aracı ve Wikipedia Aracı) inceler ve yanıtı bulmak için hangilerini kullanacağına karar verir.

Yanıt biçimlendirici aracısının rolü sunumdur. Yeni bilgi bulmak için herhangi bir araç kullanmaz. Bunun yerine, Araştırmacı aracısı tarafından toplanan ham verileri (State üzerinden iletilir) alır ve bunları LLM'nin dil becerilerini kullanarak samimi ve sohbet tarzında bir yanıta dönüştürür.

Aşağıdaki kodu agent.py dosyasının en altına ekleyin:

# 1. Researcher Agent
comprehensive_researcher = Agent(
    name="comprehensive_researcher",
    model=model_name,
    description="The primary researcher that can access both internal zoo data and external knowledge from Wikipedia.",
    instruction="""
    You are a helpful research assistant. Your goal is to fully answer the user's PROMPT.
    You have access to two tools:
    1. A tool for getting specific data about animals AT OUR ZOO (names, ages, locations).
    2. A tool for searching Wikipedia for general knowledge (facts, lifespan, diet, habitat).

    First, analyze the user's PROMPT.
    - If the prompt can be answered by only one tool, use that tool.
    - If the prompt is complex and requires information from both the zoo's database AND Wikipedia,
      you MUST use both tools to gather all necessary information.
    - Synthesize the results from the tool(s) you use into preliminary data outputs.

    PROMPT:
    {{ PROMPT }}
    """,
    tools=[
        mcp_tools,
        wikipedia_tool
    ],
    output_key="RESEARCH_DATA" # A key to store the combined findings
)

# 2. Response Formatter Agent
response_formatter = Agent(
    name="response_formatter",
    model=model_name,
    description="Synthesizes all information into a friendly, readable response.",
    instruction="""
    You are the friendly voice of the Zoo Tour Guide. Your task is to take the
    RESEARCH_DATA and present it to the user in a complete and helpful answer.

    - First, present the specific information from the zoo (like names, ages, and where to find them).
    - Then, add the interesting general facts from the research.
    - If some information is missing, just present the information you have.
    - Be conversational and engaging.

    RESEARCH_DATA:
    {{ RESEARCH_DATA }}
    """
)

İş Akışı Ajanı

İş akışı aracısı, hayvanat bahçesi turunun "arka ofis" yöneticisi olarak işlev görür. Araştırma isteğini alır ve yukarıda tanımladığımız iki aracının görevlerini doğru sırayla (önce araştırma, sonra biçimlendirme) yapmasını sağlar. Bu sayede, ziyaretçilerin sorularını yanıtlama konusunda öngörülebilir ve güvenilir bir süreç oluşturulur.

Nasıl: SequentialAgent, kendi başına düşünmeyen özel bir aracı türüdür. Tek görevi, sub_agents (araştırmacı ve biçimlendirici) listesini sabit bir sırayla çalıştırmak ve paylaşılan belleği otomatik olarak birinden diğerine aktarmaktır.

Bu kod bloğunu agent.py dosyasının en altına ekleyin:

tour_guide_workflow = SequentialAgent(
    name="tour_guide_workflow",
    description="The main workflow for handling a user's request about an animal.",
    sub_agents=[
        comprehensive_researcher, # Step 1: Gather all data
        response_formatter,       # Step 2: Format the final response
    ]
)

Ana İş Akışını Oluşturma 1000b9d20f4e134b.jpeg

Bu ajan, ADK çerçevesinin tüm yeni görüşmeler için başlangıç noktası olarak kullandığı root_agent olarak belirlenir. Birincil rolü, genel süreci yönetmektir. İlk denetleyici olarak görev yapar ve görüşmenin ilk dönüşünü yönetir.

Son kod bloğunu agent.py dosyasının en altına ekleyin:

root_agent = Agent(
    name="greeter",
    model=model_name,
    description="The main entry point for the Zoo Tour Guide.",
    instruction="""
    - Let the user know you will help them learn about the animals we have in the zoo.
    - When the user responds, use the 'add_prompt_to_state' tool to save their response.
    After using the tool, transfer control to the 'tour_guide_workflow' agent.
    """,
    tools=[add_prompt_to_state],
    sub_agents=[tour_guide_workflow]
)

agent.py dosyanız tamamlandı. Bu şekilde oluşturarak her bileşenin (araçlar, çalışan aracıları ve yönetici aracıları) nihai ve akıllı sistemi oluşturmada nasıl belirli bir role sahip olduğunu görebilirsiniz. Sıradaki adım: Dağıtım

6. ADK CLI'yı kullanarak aracı dağıtma

Yerel kodunuz hazır ve Google Cloud projeniz hazırlanmış durumdayken artık aracı dağıtma zamanı gelmiştir. Tüm dağıtım iş akışını otomatikleştiren kullanışlı bir araç olan adk deploy cloud_run komutunu kullanacaksınız. Bu tek komut, kodunuzu paketler, bir container görüntüsü oluşturur, bu görüntüyü Artifact Registry'ye gönderir ve hizmeti Cloud Run'da başlatarak web'de erişilebilir hale getirir.

Dağıt

Aracınızı dağıtmak için aşağıdaki komutları çalıştırın. uvx komutu, Python paketleri olarak yayınlanan komut satırı araçlarını bu araçların genel olarak yüklenmesini gerektirmeden çalıştırmanıza olanak tanır.

# Run the deployment command
uvx --from google-adk==1.14.0 \
adk deploy cloud_run \
  --project=$PROJECT_ID \
  --region=us-west1 \
  --service_name=zoo-tour-guide \
  --with_ui \
  . \
  -- \
  --labels=dev-tutorial=codelab-adk \
  --service-account=$SERVICE_ACCOUNT

İstemleri Kabul Etme

Aşağıdaki istemlerle karşılaşabilirsiniz:

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region 
[us-west1] will be created.

Do you want to continue (Y/n)?

Y yazıp ENTER tuşuna basın.

Aşağıdaki istemlerle karşılaşabilirsiniz:

Allow unauthenticated invocations to [your-service-name] (y/N)?.

Bu laboratuvarda kolay test için kimliği doğrulanmamış çağrılara izin vermek istiyoruz. y yazıp Enter tuşuna basın.

Başarıyla yürütüldüğünde komut, dağıtılan Cloud Run hizmetinin URL'sini sağlar. (https://zoo-tour-guide-123456789.us-west1.run.app gibi görünür.) Bu URL'yi bir sonraki görev için kopyalayın.

7. Dağıtılan ajanı test etme

Temsilciniz artık Cloud Run'da yayında olduğuna göre, dağıtımın başarılı olduğunu ve temsilcinin beklendiği gibi çalıştığını onaylamak için bir test yapacaksınız. ADK'nın web arayüzüne erişmek ve aracıyla etkileşim kurmak için herkese açık hizmet URL'sini (ör. https://zoo-tour-guide-123456789.us-west1.run.app/) kullanırsınız.

Herkese açık Cloud Run hizmeti URL'sini web tarayıcınızda açın. --with_ui flag kullandığınız için ADK geliştirici kullanıcı arayüzünü görürsünüz.

Sağ üstte Token Streaming simgesini açın.

Artık Zoo temsilcisiyle etkileşimde bulunabilirsiniz.

Yeni bir sohbet başlatmak için hello yazıp Enter tuşuna basın.

Sonucu gözlemleyin. Ajan, selamlama mesajıyla hızlı bir şekilde yanıt vermelidir:

"Hello! I'm your Zoo Tour Guide. I can help you learn about the amazing animals we have here. What would you like to know or explore today?"

Ajan'a şu gibi sorular sorun:

Where can I find the polar bears in the zoo and what is their diet?

3244d2f6c3b03088.png e135694253b1be41.png

Agent Flow Açıklaması

Sisteminiz akıllı ve çok görevli bir ekip olarak çalışıyor. Süreç, kullanıcının sorusundan nihai ve ayrıntılı cevaba kadar sorunsuz ve verimli bir akış sağlamak için net bir sırayla yönetilir.

1. Hayvanat Bahçesi Karşılama Görevlisi (Karşılama Masası)

Tüm süreç, karşılama temsilcisiyle başlar.

Görevi: Sohbeti başlatmak. Kullanıcıyı karşılaması ve hangi hayvan hakkında bilgi edinmek istediğini sorması talimatı veriliyor.

Kullandığı Araç: Kullanıcı yanıt verdiğinde Karşılayıcı, kullanıcının tam olarak ne söylediğini (ör. "Aslanlar hakkında bilgi ver") yakalamak ve bunları sistemin belleğine kaydetmek için add_prompt_to_state aracını kullanır.

Devretme: Talimat kaydedildikten sonra kontrol hemen alt aracısı olan tour_guide_workflow'a geçer.

2. Kapsamlı Araştırmacı (The Super-Researcher)

Bu, ana iş akışındaki ilk adım ve operasyonun "beyni"dir. Artık büyük bir ekibiniz yerine, mevcut tüm bilgilere erişebilen tek bir uzman temsilciniz var.

Görevi: Kullanıcının sorusunu analiz edip akıllı bir plan oluşturmak. Aşağıdaki işlemlerin gerekip gerekmediğine karar vermek için dil modelinin güçlü araç kullanma özelliğinden yararlanır:

  • Hayvanat bahçesinin kayıtlarındaki dahili veriler (MCP sunucusu aracılığıyla).
  • Web'den (Wikipedia API aracılığıyla) alınan genel bilgiler.
  • Karmaşık sorular için ise her ikisini de kullanabilirsiniz.

İşlemi: Gerekli tüm ham verileri toplamak için gerekli araçları çalıştırır. Örneğin, "Aslanlarımız kaç yaşında ve vahşi doğada ne yerler?" diye sorulduğunda yaş bilgileri için MCP sunucusunu, beslenme bilgileri için ise Wikipedia aracını çağırır.

3. Yanıt Biçimlendirici (Sunucu)

Kapsamlı Araştırmacı tüm bilgileri topladıktan sonra çalıştırılacak son aracıdır.

Görevi: Hayvanat Bahçesi Tur Rehberi'nin samimi sesi olarak hareket etmek. Bu özellik, ham verileri (bir veya iki kaynaktan alınmış olabilir) alıp düzenler.

İşlevi: Tüm bilgileri tek bir tutarlı ve ilgi çekici yanıtta birleştirir. Talimatlarına uyarak önce belirli hayvanat bahçesi bilgilerini sunar, ardından ilginç genel bilgileri ekler.

Sonuç: Bu ajan tarafından oluşturulan metin, kullanıcının sohbet penceresinde gördüğü eksiksiz ve ayrıntılı yanıttır.

Temsilci oluşturma hakkında daha fazla bilgi edinmek isterseniz aşağıdaki kaynakları inceleyin:

  1. ADK dokümanları
  2. ADK ajanları için özel araçlar oluşturma

8. Ortamı temizleme

gcloud run services delete zoo-tour-guide --region=us-west1 --quiet
gcloud artifacts repositories delete cloud-run-source-deploy --location=us-west1 --quiet

9. Tebrikler

Codelab'i tamamladığınız için tebrik ederiz.

İşlediğimiz konular

  • ADK komut satırı arayüzüyle dağıtım için Python projesi nasıl yapılandırılır?
  • SequentialAgent ve ParallelAgent kullanarak çok ajanlı iş akışı uygulama
  • Araçlarını kullanmak için MCPToolset'i kullanarak uzak bir MCP sunucusuna nasıl bağlanacağınız açıklanmaktadır.
  • Wikipedia API gibi harici araçları entegre ederek dahili verileri nasıl zenginleştireceğinizi öğrenin.
  • adk deploy komutunu kullanarak bir aracıyı Cloud Run'a sunucusuz container olarak dağıtma

Anket

Bu eğitimi nasıl kullanacaksınız?

Sadece okuyun Okuyun ve alıştırmaları tamamlayın