ADK ile çoklu aracı sistemi oluşturma, Agent Engine'de dağıtma ve A2A protokolünü kullanmaya başlama

1. Bu laboratuvarın amacı

Bu uygulamalı laboratuvarda, isteminize göre bir resim oluşturan ve bu resmi isteminize göre değerlendiren ADK (Agent Development Kit) kullanarak çoklu aracı uygulaması oluşturacaksınız. Resim, istemde açıklanan koşulları yeterince karşılamıyorsa temsilci, koşullarınızı karşılayan bir resim oluşturulana kadar sürekli olarak resim üretir. Bu uygulamalı etkinlikteki her aracının tek bir amacı vardır. Aracılar, genel hedefe ulaşmak için birbirleriyle işbirliği yapar. Uygulamayı yerel olarak test etmeyi ve Vertex AI Agent Engine'de dağıtmayı öğreneceksiniz.

Neler öğreneceksiniz?

2. Proje Ayarları

  • Kullanabileceğiniz bir projeniz yoksa GCP Console'da yeni bir proje oluşturmanız gerekir.
  • Bu laboratuvarda görevlerimizi gerçekleştirmek için GCP Cloud Shell'i kullanacağız. Cloud Shell'i açın ve Cloud Shell'i kullanarak projeyi ayarlayın.
  • Burayı tıklayarak GCP Cloud Shell'i açın. Cloud Shell . "Authorize Shell" (Shell'e Yetki Ver) pop-up'ı gösterilirse Cloud Shell Editor'a yetki vermek için tıklayın.
  • Projenin kimliğinin doğrulanıp doğrulanmadığını Cloud Shell terminalinde aşağıdaki komutu kullanarak kontrol edebilirsiniz.
gcloud auth list
  • Projenizi onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
  • Proje kimliğini kopyalayın ve ayarlamak için aşağıdaki komutu kullanın.
gcloud config set project <YOUR_PROJECT_ID>
  • Bu laboratuvarı çalıştırmak için bazı hizmetleri etkinleştirmemiz gerekiyor. Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud services enable aiplatform.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com

3. Agent Development Kit'e Giriş

Agent Development Kit, yapay zeka destekli uygulamalar geliştiren geliştiriciler için çeşitli önemli avantajlar sunar:

  1. Çoklu Temsilci Sistemleri: Hiyerarşik olarak birden fazla uzmanlaşmış temsilciyi bir araya getirerek modüler ve ölçeklenebilir uygulamalar oluşturun. Karmaşık koordinasyon ve yetki devrini etkinleştirin.
  2. Zengin Araç Ekosistemi: Temsilcilere çeşitli özellikler kazandırın: Önceden oluşturulmuş araçları (Arama, Kod Yürütme vb.) kullanın, özel işlevler oluşturun, üçüncü taraf temsilci çerçevelerindeki (LangChain, CrewAI) araçları entegre edin veya hatta diğer temsilcileri araç olarak kullanın.
  3. Esnek Düzenleme: Tahmin edilebilir ardışık düzenler için iş akışı aracılarını (SequentialAgent, ParallelAgent ve LoopAgent) kullanarak iş akışları tanımlayın veya uyarlanabilir davranış için LLM destekli dinamik yönlendirmeden (LlmAgent aktarımı) yararlanın.
  4. Entegre Geliştirici Deneyimi: Güçlü bir KSA ve etkileşimli geliştirme kullanıcı arayüzü ile yerel olarak geliştirin, test edin ve hataları ayıklayın. Etkinlikleri, durumu ve aracı yürütme adımını adım adım inceleyin.
  5. Yerleşik Değerlendirme: Hem nihai yanıt kalitesini hem de adım adım yürütme sürecini önceden tanımlanmış test senaryolarına göre değerlendirerek temsilci performansını sistematik olarak değerlendirin.
  6. Dağıtıma Hazır: Temsilcilerinizi container'a dönüştürün ve istediğiniz yerde dağıtın. Yerel olarak çalıştırın, Vertex AI Agent Engine ile ölçeklendirin veya Cloud Run ya da Docker kullanarak özel altyapıya entegre edin.

Diğer üretken yapay zeka SDK'ları veya aracı çerçeveleri de modelleri sorgulamanıza ve hatta araçlarla desteklemenize olanak tanır. Ancak birden fazla model arasında dinamik koordinasyon sağlamak için sizin tarafınızda önemli ölçüde çalışma yapılması gerekir.

Agent Development Kit, bu araçlara kıyasla daha üst düzey bir çerçeve sunar. Bu sayede, karmaşık ancak bakımı kolay iş akışları için birden fazla aracı birbirine kolayca bağlayabilirsiniz.

e97ad3e26ceb7a2f.png

Şekil 1: ADK (Agent Development Kit)'nın konumlandırılması

4. Vertex AI Agent Engine'e giriş

Vertex AI Agent Engine, Google Cloud'da aracı dağıtmak için kullanılan tümüyle yönetilen bir hizmettir. Geliştiriciler, Vertex AI Agent Engine ile Vertex AI'da OSS yapay zeka aracıları( ADK (Agent Development Kit) , LangChain, LangGraph, CrewAI, AutoGen ve daha fazlası!) geliştirebilir, özelleştirebilir, dağıtabilir, sunabilir ve yönetebilir.

Agent Engine, aracı belleği olarak da bilinen kullanıcı verilerini işlemek için hizmetler de sunar. Şu anda iki tür bellek hizmeti mevcuttur.

  • Kısa süreli bellek: Agent Engine Oturumları ile devam eden görüşme geçmişini (durum) tek bir oturumda kısa süreli bellek olarak saklayabilir, yönetebilir ve alabilirsiniz.
  • Uzun süreli bellek: Agent Engine Memory Bank ile özellikle birden fazla oturumda anıları (durum) uzun süreli bellek olarak saklayın, dönüştürün ve alın.

Aracıları Cloud Run veya GKE gibi diğer Google Cloud hizmetlerine de dağıtabilirsiniz. Aşağıdaki kullanım alanları için Vertex AI Agent Engine'i kullanmayı düşünebilirsiniz.

  • Durumlu yönetilen çalışma zamanı: Aracınızın dağıtımı için durumlu ve tam olarak yönetilen bir çalışma zamanına ihtiyacınız varsa Vertex AI Agent Engine iyi bir seçimdir. Çünkü oturum yönetimi ve yapay zeka aracı için kalıcılık gibi yaygın görevleri soyutlar.
  • Kod Yürütme: Aracınızın, kullanıcı oturumu sırasında dinamik olarak oluşturulan kodu yürütmesi gerekiyorsa Agent Engine, kodu yürütebileceğiniz güvenli bir Sandbox sağlar.
  • Esnek uzun süreli bellek: Temsilcileriniz için esnek uzun süreli belleğe ihtiyacınız varsa Vertex AI Agent Engine ile kullanılabilen Vertex AI Memory Bank, oturumlar arasında kullanılabilen, kullanıcınızla ilgili bilgileri hatırlamanın esnek bir yolunu sunabilir.

Esnek bir uygulama mimarisi oluşturmak için Vertex AI Agent Engine'i Cloud Run gibi diğer çalışma zamanlarıyla da birleştirebilirsiniz. Aşağıda, bir aracı oluşturmak için çeşitli hizmetlerin kullanıldığı bir referans mimarisi örneği verilmiştir.

d8eb74a6d8a055f9.png

Şekil 2: Birden fazla hizmet kullanarak Aracı oluşturmaya yönelik örnek bir referans mimarisi.

5. A2A'ya giriş

Agent2Agent (A2A) protokolü, farklı çerçeveler, tedarikçiler ve alanlardaki bağımsız yapay zeka temsilcileri arasında sorunsuz ve güvenli iletişim ile işbirliğini sağlamak için tasarlanmış açık bir standarttır.

  1. Evrensel Birlikte Çalışabilirlik: A2A, temel teknolojilerinden bağımsız olarak temsilcilerin birlikte çalışmasına olanak tanıyarak gerçek anlamda çoklu temsilci ekosistemi oluşturur. Bu sayede, farklı platformlarda farklı şirketler tarafından oluşturulan temsilciler iletişim kurabilir ve koordineli çalışabilir.
  2. Yetenek Keşfi: Temsilciler, kimliklerini, desteklenen A2A özelliklerini, becerilerini ve kimlik doğrulama koşullarını açıklayan "Temsilci Kartları" (JSON belgeleri) kullanarak yeteneklerini tanıtabilir. Bu sayede diğer temsilciler, belirli bir görev için en uygun temsilciyi bulup seçebilir.
  3. Varsayılan olarak güvenli: Güvenlik, temel bir ilkedir. A2A, güvenli etkileşimler sağlamak ve hassas verileri korumak için HTTPS/TLS, JWT, OIDC ve API anahtarları gibi standartları kullanan kurumsal düzeyde kimlik doğrulama ve yetkilendirme mekanizmalarını içerir.
  4. Biçimden Bağımsız: Protokol; metin, ses ve video akışı gibi çeşitli iletişim biçimlerinin yanı sıra etkileşimli formları ve yerleştirilmiş iFrame'leri destekler. Bu esneklik, temsilcilerin görev ve kullanıcı için en uygun biçimde bilgi alışverişinde bulunmasına olanak tanır.
  5. Yapılandırılmış Görev Yönetimi: A2A, görev atama, izleme ve tamamlama için net protokoller tanımlar. İlgili görevlerin gruplandırılmasını ve benzersiz görev kimlikleri kullanılarak farklı temsilciler arasında yönetilmesini destekler. Görevler, tanımlanmış yaşam döngülerinden (ör. gönderildi, üzerinde çalışılıyor, tamamlandı) geçebilir.
  6. Opak Yürütme: Önemli bir özellik olarak, aracıların diğer aracılara kendi içindeki muhakeme süreçlerini, hafızasını veya kullandığı araçları açıklaması gerekmez. Yalnızca çağrılabilir hizmetlerini kullanıma sunarak modülerliği ve gizliliği desteklerler.
  7. Mevcut Standartlar Üzerine Kurulmuştur: A2A, HTTP, Server-Sent Events (SSE) (gerçek zamanlı akış için) ve JSON-RPC (yapılandırılmış veri değişimi için) gibi yerleşik web teknolojilerinden yararlanır. Bu sayede mevcut BT altyapısıyla entegrasyonu kolaylaştırır.
  8. Asenkron İletişim: Protokol, asenkron iletişim öncelikli olacak şekilde tasarlanmıştır. Bu sayede görevlerin esnek bir şekilde ilerlemesi sağlanır ve bağlantı sürekli olarak korunmasa bile güncellemeler için anlık bildirimler etkinleştirilebilir.

6. Aracı Mimarisi

Bu laboratuvarda, belirttiğiniz özelliklere göre görüntü oluşturan ve görüntüyü size sunmadan önce değerlendiren çok agent'lı bir uygulama oluşturacaksınız.

Sistem, tüm süreci yöneten image_scoring adlı ana bir aracıyla yapılandırılmıştır. Bu ana temsilcinin image_generation_scoring_agent adlı bir alt temsilcisi vardır. Bu alt temsilcinin de daha spesifik görevler için kendi alt temsilcileri bulunur. Bu durumda, ana temsilci görevleri alt temsilcilere devrettiği için hiyerarşik bir ilişki oluşur. bfed5e21e0b66d26.png

Şekil 3: Genel temsilci akışı.

Tüm Aracıların Listesi

Ajan

Purpose

Alt aracılar

image_scoring (Main Agent)

Bu, genel iş akışını yöneten kök aracıdır. Sonlandırma koşulu karşılanana kadar image_generation_scoring_agent ve checker_agent'ı döngü içinde tekrar tekrar çalıştırır.

image_generation_scoring_agent
checker_agent_instance

image_generation_scoring_agent (image_scoring alt aracısı)

Bu aracı, resim oluşturma ve puanlama işlemlerinin temel mantığından sorumludur. Bunu yapmak için üç alt aracıdan oluşan bir sıra yürütür.

image_generation_prompt_agent
image_generation_agent
scoring_images_prompt

checker_agent_instance (image_scoring alt aracısı)

Bu aracı, resim puanlama sürecinin devam edip etmeyeceğini veya sonlandırılıp sonlandırılmayacağını kontrol eder. Sonlandırma koşulunu değerlendirmek için check_tool_condition aracını kullanır.

-

checker_agent_instance (image_scoring alt aracısı)

Bu aracı, görüntü üretme istemleri oluşturma konusunda uzmandır. Giriş metnini alır ve görüntü üretme modeline uygun ayrıntılı bir istem oluşturur.

-

image_generation_prompt_agent (image_generation_scoring_agent'ın alt aracısı)

Bu aracı, görüntü üretme istemleri oluşturma konusunda uzmandır. Giriş metnini alır ve görüntü üretme modeline uygun ayrıntılı bir istem oluşturur.

-

scoring_images_prompt (image_generation_scoring_agent alt aracısı):

Bu ajan, çeşitli ölçütlere göre resimleri değerlendirme ve puanlama konusunda uzmandır. Oluşturulan resmi alıp puanlandırır.

-

Kullanılan Tüm Araçların Listesi

Araç

Açıklama

Kullanıcı aracısı

check_tool_condition

Bu araç, döngü sonlandırma koşulunun karşılanıp karşılanmadığını veya maksimum yineleme sayısına ulaşılıp ulaşılmadığını kontrol eder. Bu koşullardan biri doğruysa döngü durdurulur.

checker_agent_instance

generate_images

Bu araç, Imagen 3 modelini kullanarak görüntüler oluşturur. Ayrıca, oluşturulan görüntüleri bir Google Cloud Storage paketine kaydedebilir.

image_generation_agent

get_policy

Bu araç, bir JSON dosyasından politika getirir. Politika, image_generation_prompt_agent tarafından görüntü oluşturma istemini oluşturmak, scoring_images_prompt tarafından ise görüntüleri puanlamak için kullanılır.

image_generation_agent

get_image

Bu araç, oluşturulan resim yapısını puanlanabilmesi için yükler.

scoring_images_prompt

set_score

Bu araç, oturum durumunda oluşturulan resmin toplam puanını ayarlar.

scoring_images_prompt

7. ADK'yı yükleme ve ortamınızı ayarlama

Bu uygulamalı laboratuvarda görevleri gerçekleştirmek için Cloud Shell'i kullanacağız.

Cloud Shell Düzenleyici sekmesi hazırlama

  1. Doğrudan Cloud Shell Düzenleyici'ye gitmek için bu bağlantıyı tıklayın.
  2. Devam'ı tıklayın.
  3. Cloud Shell'i yetkilendirmeniz istendiğinde Yetkilendir'i tıklayın.
  4. Bu laboratuvarın geri kalanında, Cloud Shell Düzenleyici ve Cloud Shell Terminal ile IDE'niz olarak bu pencerede çalışabilirsiniz.
  5. Cloud Shell Düzenleyici'de Terminal>New Terminal'i (Terminal>Yeni Terminal) kullanarak yeni bir terminal açın. Aşağıdaki tüm komutlar bu terminalde çalıştırılacak.

Bu laboratuvar için ADK'yı ve kod örneklerini indirip yükleyin.

  1. Gerekli kaynağı GitHub'dan klonlamak ve gerekli kitaplıkları yüklemek için aşağıdaki komutları yürütün. Cloud Shell Düzenleyici'de açılan Terminal'de komutları çalıştırın.
#create the project directory
mkdir ~/imagescoring
cd ~/imagescoring
#clone the code in the local directory
git clone https://github.com/haren-bh/multiagenthandson.git
  1. Python ortamı oluşturmak için uv'yi kullanacağız (Cloud Shell Düzenleyici Terminali'nde çalıştırın):
#Install uv if you do not have installed yet
pip install uv

#Create the virtual environment
uv venv .adkvenv

source .adkvenv/bin/activate

#go to the project directory
cd ~/imagescoring/multiagenthandson

#install dependencies
uv pip install -r pyproject.toml
  1. Bulut depolama alanı paketiniz yoksa Google Cloud Storage'da yeni bir paket oluşturun. Paketi gsutil komutunu kullanarak da oluşturabilirsiniz. Agent Engine'e Google Cloud Storage erişimi verin (Cloud Shell Düzenleyici Terminali'nde çalıştırın).
# First, make sure your PROJECT_ID variable is set
PROJECT_ID=$(gcloud config get-value project)

# Now, create the bucket with a unique name
# We'll use the project ID to help ensure uniqueness
gsutil mb gs://${PROJECT_ID}-imagescoring-bucket

#Now lets give Agent Engine the permission to access Cloud Storage
# 1. Get the current Project ID (text) and Project Number (numeric)
PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

# 2. Construct the Reasoning Engine Service Account email
SA_EMAIL="service-${PROJECT_NUMBER}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"
# 3. Create Agent Engine Service account if not already created
gcloud beta services identity create --service=aiplatform.googleapis.com --project=${PROJECT_NUMBER}

# 3. Grant GCS Access
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA_EMAIL" --role="roles/storage.objectUser" --condition=None
  1. Düzenleyicide Görünüm > Gizli dosyaları aç/kapat'a gidin. Ayrıca image_scoring klasöründe aşağıdaki içeriğe sahip bir .env dosyası oluşturun. Proje adınız ve Cloud Storage paketi gibi gerekli ayrıntıları ekleyin (Cloud Shell Düzenleyici Terminali'nde çalıştırın).
#go to image_scoring folder
cd ~/imagescoring/multiagenthandson/image_scoring
cat <<EOF>> .env
GOOGLE_GENAI_USE_VERTEXAI=1
GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_CLOUD_STORAGE_BUCKET=$(gcloud config get-value project)-imagescoring-bucket
GCS_BUCKET_NAME=$(gcloud config get-value project)-imagescoring-bucket
SCORE_THRESHOLD=40
IMAGEN_MODEL="imagen-3.0-generate-002"
GENAI_MODEL="gemini-2.5-flash"
EOF
  1. Kaynak kodundaki aracı yapısına bakın ve agent.py ile başlayın . Bu temsilci, diğer temsilcilere bağlanacak olan kök temsilciyi içerir.
  2. Terminalde en üstteki multiagenthandson dizinine geri dönün ve aracı yerel olarak çalıştırmak için aşağıdaki komutu yürütün (Cloud Shell Düzenleyici Terminali'nde çalıştırın).
#go to the directory multiagenthandson
cd ~/imagescoring/multiagenthandson
# Run the following command to run agents locally
adk web

dfda0b40b44e9230.png

Şekil 4

ADK'nın tarayıcı tabanlı GUI istemcisini açmak için terminalde gösterilen http:// URL'sini Ctrl+tıklayın (MacOS için CMD+tıklayın). 2. Şekil'deki gibi görünmelidir.

  1. Sol üst taraftaki açılır menüden image_scoring'i seçin (Şekil 5'e bakın). Şimdi de birkaç resim oluşturalım. Resimleri Google Cloud Storage paketinde de bulabilirsiniz. Aşağıdaki istemleri veya kendi istemlerinizi deneyin.
  2. Gün batımında huzurlu bir dağ manzarası
  3. Bisiklet süren bir kedi

c159623ad45f37cf.png

Şekil 5: Örnek çıktı

8. Agent Engine'e dağıtma

Şimdi aracıyı Agent Engine'e dağıtıyoruz. Agent Engine, GCP'de aracı dağıtmak için kullanılan, tümüyle yönetilen bir hizmettir. Agent Engine, ADK (Agent Development Kit) ile uyumludur. Bu nedenle, ADK (Agent Development Kit) ile oluşturulan temsilciler Agent Engine'de dağıtılabilir.

  1. Poetry'yi kullanarak requirements.txt dosyasını oluşturun. Poetry, requirements.txt dosyasını oluşturmak için pyproject.toml dosyasını kullanır. Komutu çalıştırdıktan sonra requirements.txt dosyasının oluşturulup oluşturulmadığını kontrol edin (Cloud Shell Düzenleyici Terminali'nde çalıştırın).
# Go to the parent folder containing pyproject.toml file
cd ~/imagescoring/multiagenthandson

# install poetry-plugin-export
uv pip install poetry-plugin-export

#Create requirements.txt file
python3 -m poetry export -f requirements.txt --output requirements.txt --without-hashes
  1. Paketi oluşturun. Uygulamamızı .whl Python paketine paketlememiz gerekir. Bunu yapmak için şiir kullanacağız. Komutu yürüttükten sonra bir dist klasörünün oluşturulduğundan ve bu klasörün .whl dosyasını içerdiğinden emin olun (Cloud Shell Düzenleyici Terminali'nde çalıştırın).
# Go to the parent folder containing pyproject.toml file
cd ~/imagescoring/multiagenthandson

#Create python package, to create whl file
python3 -m poetry build
  1. Şimdi dağıtım komut dosyasını hazırlayacağız. Dağıtım komut dosyası, resim puanlama aracımızı veya aracı motoru hizmetimizi dağıtır. Lütfen deploy klasöründeki deploy.py dosyasının içeriğini aşağıdaki gibi onaylayın (Dosyayı bulmak için Cloud Shell Düzenleyici Yan Bölmesi'ni kullanın).
import vertexai
from image_scoring.agent import root_agent
import os
import glob # To easily find the wheel file
from dotenv import load_dotenv

# Load environment variables from image_scoring/.env
env_path = os.path.join(os.path.dirname(__file__), "..", "image_scoring", ".env")
load_dotenv(env_path)

PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
LOCATION = os.getenv("GOOGLE_CLOUD_LOCATION", "us-central1")
STAGING_BUCKET = f"gs://{os.getenv('GOOGLE_CLOUD_STORAGE_BUCKET')}"

from vertexai import agent_engines

client=vertexai.Client(
    project=PROJECT_ID,
    location=LOCATION,
)
remote_app = client.agent_engines.create(
    agent=root_agent,
    config={
        "display_name": "image-scoring",
        "staging_bucket": STAGING_BUCKET,
        "requirements": open(os.path.join(os.getcwd(), "requirements.txt")).readlines() + ["./dist/image_scoring-0.1.0-py3-none-any.whl"],
        "extra_packages": [
            "./dist/image_scoring-0.1.0-py3-none-any.whl",
        ],     "env_vars":{"GCS_BUCKET_NAME":os.getenv('GOOGLE_CLOUD_STORAGE_BUCKET')}
    }
)
print(f"DEBUG: AgentEngine attributes: {dir(remote_app)}")
try:
    print(remote_app.api_resource.name)
except AttributeError:
    print("Could not find resource_name, check DEBUG output above.")
  1. Artık dağıtım komut dosyasını çalıştırabiliriz. Öncelikle multiagenthandson (Run in Cloud Shell Editor Terminal) adlı üst klasöre gidin.
#go to multiagenthandson folder
cd ~/imagescoring/multiagenthandson

#run deploy script from the parent folder containing deploy.py
python3 -m deploy.deploy

Dağıtım işleminden sonra aşağıdakine benzer bir ekran görürsünüz: 57d86995465cdcda.png

Şekil 6: Örnek çıktı

  1. Şimdi dağıtılan temsilciyi test edelim. Uzakta dağıtılan aracı motorunu test etmek için önce terminaldeki dağıtım çıkışından aracı konumunu kopyalayın. Şuna benzer bir şey görünmelidir: projects/85469421903/locations/us-central1/reasoningEngines/7369674597261639680 .
    testclient klasörüne gidin,Cloud Shell Düzenleyici'de remote_test.py dosyasını açın ve aşağıdaki satırları düzenleyin.
REASONING_ENGINE_ID = "projects/xxx/locations/us-central1/reasoningEngines/xxx"  # TODO: Change this
  1. multiagenthandson adlı üst klasörden aşağıdaki komutu çalıştırın. Şekil 4'teki gibi bir çıkış almanız gerekir. Yürütme tamamlandıktan sonra (Run in Cloud Shell Editor Terminal) seçeneğini görebilirsiniz.
#go to multiagenthandson folder
cd ~/imagescoring/multiagenthandson

#execute remote_test.py
python3 -m testclient.remote_test

c612b8a79a7120ae.png

Şekil 7: Örnek çıktı

9. A2A temsilcisi oluşturma

Bu adımda, önceki adımlarda oluşturduğumuz temsilciyi temel alan basit bir A2A temsilcisi oluşturacağız. Mevcut ADK (Agent Development Kit) aracıları, A2A protokolü altında yayınlanabilir. Bu adımda öğreneceğiniz temel bilgiler şunlardır.

  • A2A protokolü hakkında temel bilgileri öğrenin.
  • ADK ve A2A protokollerinin birlikte nasıl çalıştığını öğrenin.
  • A2A protokolüyle nasıl etkileşim kuracağınızı öğrenin.

Bu uygulamalı laboratuvarda, image_scoring_adk_a2a_server klasöründeki kodu kullanacağız. İşleme başlamadan önce lütfen dizininizi bu klasör olarak değiştirin (Cloud Shell Düzenleyici Terminali'nde çalıştırın).

#change directory to image_scoring_adk_a2a_server
cd ~/imagescoring/multiagenthandson/image_scoring_adk_a2a_server

#copy the env file
cp ~/imagescoring/multiagenthandson/image_scoring/.env remote_a2a/image_scoring

1. A2A temsilci kartı oluşturma

A2A protokolü, aracıyla ilgili tüm bilgileri (ör. aracının yetenekleri, kullanım kılavuzu) içeren bir aracı kartı gerektirir. Bir A2A aracısı dağıtıldıktan sonra aracı kartı, ".well-known/agent-card.json" bağlantısı kullanılarak görüntülenebilir. Müşteriler, isteği temsilcilere göndermek için bu bilgileri kullanabilir.

remote_a2a/image_scoring klasöründe, Cloud Shell Düzenleyici'yi kullanarak aşağıdaki içeriğe sahip bir agents.json dosyası olduğunu doğrulayın.

{
 "name": "image_scoring",
 "description": "Agent that generates images based on user prompts and scores their adherence to the prompt.",
 "url": "http://localhost:8001/a2a/image_scoring",
 "version": "1.0.0",
 "defaultInputModes": ["text/plain"],
 "defaultOutputModes": ["image/png", "text/plain"],
 "capabilities": {
   "streaming": true,
   "functions": true
 },
 "skills": [
   {
     "id": "generate_and_score_image",
     "name": "Generate and Score Image",
     "description": "Generates an image from a given text prompt and then evaluates how well the generated image adheres to the original prompt, providing a score.",
     "tags": ["image generation", "image scoring", "evaluation", "AI art"],
     "examples": [
       "Generate an image of a futuristic city at sunset",
       "Create an image of a cat playing a piano",
       "Show me an image of a serene forest with a hidden waterfall"
     ]
   }
 ]
}

2. A2A temsilcisi oluşturma

Kök klasör image_scoring_adk_a2a_server içinde, A2A aracısının giriş noktası olan Cloud Shell Düzenleyici yan bölmesini kullanarak a2a_agent.py dosyasının bulunduğunu doğrulayın. Aşağıdaki içerikler bulunmalıdır:

from google.adk.agents.remote_a2a_agent import RemoteA2aAgent

root_agent = RemoteA2aAgent(
   name="image_scoring",
   description="Agent to give interesting facts.",
   agent_card="http://localhost:8001/a2a/image_scoring/.well-known/agent.json",
  
   # Optional configurations
   timeout=300.0,          # HTTP timeout (seconds)
   httpx_client=None,      # Custom HTTP client
)

3. A2A temsilcisini çalıştırma

Artık temsilciyi çalıştırmaya hazırız. Aracıyı çalıştırmak için üst klasör image_scoring_adk_a2a_server'ın içinden aşağıdaki komutu yürütün (Cloud Shell Düzenleyici Terminali'nde çalıştırın).

#following command runs the ADK agent as a2a agent
adk api_server --a2a --port 8001 remote_a2a

4. A2A temsilcisini test etme

Temsilci çalıştıktan sonra artık temsilciyi test edebiliriz. Öncelikle, temsilci kartını kontrol edelim. Terminal>New Terminal'i kullanarak yeni bir terminal açın ve aşağıdaki komutu çalıştırın (Run in the newly opened Cloud Shell Editor Terminal).

#Execute the following 
curl http://localhost:8001/a2a/image_scoring/.well-known/agent.json

Yukarıdaki komutun yürütülmesi, A2A aracımızın aracı kartını göstermelidir. Bu kart, önceki adımda oluşturduğumuz agent.json dosyasının içeriğinden oluşur.

Şimdi temsilciye bir istek gönderelim. Aracıya istek göndermek için curl'ü kullanabiliriz (yeni açılan Cloud Shell Editor Terminal'de çalıştırın).

curl -X POST   http://localhost:8001/a2a/image_scoring   -H 'Content-Type: application/json'   -d '{
    "id": "uuid-123",
    "params": {
      "message": {
        "messageId": "msg-456",
        "parts": [{"text": "Create an image of a cat"}],
        "role": "user"
      }
    }
  }'

Yukarıdaki istekte, "Bir kedi resmi oluştur" satırını değiştirerek istemi değiştirebilirsiniz. Komutu çalıştırdıktan sonra belirtilen Google Cloud Storage'da çıkış resmini kontrol edebilirsiniz.

10. Temizleme

Şimdi de oluşturduğumuz öğeleri temizleyelim.

  1. Yeni oluşturduğumuz Vertex AI Agent Engine sunucusunu silin. Google Cloud Console'un arama çubuğuna Vertex AI yazarak Vertex AI'a gidin. Sol taraftaki Agent Engine'i tıklayın.Sil'i tıklayarak temsilciyi silebilirsiniz. 98e8aac9efc8e32a.png

Şekil 8

  1. Cloud Shell'deki dosyaları silme
#Execute the following to delete the files
cd ~
rm -R ~/imagescoring
  1. Paketi silin. GCP Console -> Cloud Storage'a gidip paketinizi seçip silebilirsiniz. 913625e5969c9104.png

Şekil 9: Paketi silme

11. Sonuç

Tebrikler! Çoklu aracı içeren bir ADK (Agent Development Kit) uygulamasını Vertex AI Agent Engine'e başarıyla dağıttınız. Bu önemli başarı, modern bir bulut tabanlı uygulamanın temel yaşam döngüsünü kapsar ve kendi karmaşık aracı sistemlerinizi dağıtmak için sağlam bir temel sunar.

Özet

Bu laboratuvarda şunları öğrendiniz:

Faydalı kaynaklar