Crea un sistema multi-agente con ADK, esegui il deployment in Agent Engine e inizia a utilizzare il protocollo A2A

1. Obiettivo di questo lab

In questo lab pratico creerai un'applicazione multi-agente utilizzando ADK (Agent Development Kit) che genera un'immagine in base al prompt e la valuta in base al prompt. Se l'immagine non soddisfa in modo soddisfacente i requisiti descritti nel prompt, l'agente genererà continuamente immagini finché non verrà generata l'immagine che soddisfa i tuoi requisiti. Ciascuno degli agenti di questo esercizio pratico ha un unico scopo e collabora con gli altri per raggiungere l'obiettivo generale. Imparerai a testare l'applicazione localmente e a eseguirne il deployment in Vertex AI Agent Engine.

Obiettivi didattici

2. Configurazione del progetto

  • Se non hai già un progetto che puoi utilizzare, dovrai crearne uno nuovo nella console GCP.
  • In questo lab utilizzeremo GCP Cloud Shell per svolgere le nostre attività. Apri Cloud Shell e imposta il progetto utilizzando Cloud Shell.
  • Apri GCP Cloud Shell facendo clic qui, Cloud Shell . Se viene visualizzato il popup "Autorizza shell", fai clic per autorizzare l'editor di Cloud Shell.
  • Puoi verificare se il progetto è già autenticato utilizzando il seguente comando nel terminale Cloud Shell.
gcloud auth list
  • Esegui questo comando in Cloud Shell per confermare il tuo progetto
gcloud config list project
  • Copia l'ID progetto e utilizza il seguente comando per impostarlo
gcloud config set project <YOUR_PROJECT_ID>
  • Se non ricordi l'ID progetto, puoi elencare tutti i tuoi ID progetto con
gcloud projects list

3. Abilita API

Per eseguire questo lab, dobbiamo abilitare alcuni servizi API. Esegui questo comando in Cloud Shell.

gcloud services enable aiplatform.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com

Ti presentiamo le API

  • L'API Vertex AI (aiplatform.googleapis.com) consente l'accesso alla piattaforma Vertex AI, permettendo alla tua applicazione di interagire con i modelli Gemini per la generazione di testo, le sessioni di chat e le chiamate di funzione.
  • L'API Cloud Resource Manager (cloudresourcemanager.googleapis.com) ti consente di gestire in modo programmatico i metadati dei tuoi progetti Google Cloud, come l'ID e il nome del progetto, spesso richiesti da altri strumenti e SDK per verificare l'identità e le autorizzazioni del progetto.

4. Introduzione ad Agent Development Kit

Agent Development Kit offre diversi vantaggi chiave per gli sviluppatori che creano applicazioni agentiche:

  1. Sistemi multi-agente: crea applicazioni modulari e scalabili componendo più agenti specializzati in una gerarchia. Consente una coordinazione e una delega complesse.
  2. Ecosistema di strumenti avanzati: dota gli agenti di diverse funzionalità: utilizza strumenti predefiniti (Ricerca, Esecuzione di codice e così via), crea funzioni personalizzate, integra strumenti di framework di agenti di terze parti (LangChain, CrewAI) o utilizza altri agenti come strumenti.
  3. Orchestrazione flessibile: definisci i workflow utilizzando gli agenti del workflow (SequentialAgent, ParallelAgent e LoopAgent) per pipeline prevedibili oppure sfrutta il routing dinamico basato su LLM (trasferimento LlmAgent) per un comportamento adattivo.
  4. Esperienza per sviluppatori integrata: sviluppa, testa ed esegui il debug in locale con una potente CLI e una UI di sviluppo interattiva. Esamina gli eventi, lo stato e l'esecuzione passo passo dell'agente.
  5. Valutazione integrata: valuta sistematicamente le prestazioni dell'agente valutando sia la qualità della risposta finale sia la traiettoria di esecuzione passo passo rispetto a scenari di test predefiniti.
  6. Pronto per il deployment: inserisci i tuoi agenti in un container ed esegui il deployment ovunque: esegui localmente, scala con Vertex AI Agent Engine o integra in un'infrastruttura personalizzata utilizzando Cloud Run o Docker.

Sebbene altri SDK di AI generativa o framework di agenti ti consentano anche di eseguire query sui modelli e persino di potenziarli con strumenti, il coordinamento dinamico tra più modelli richiede un notevole impegno da parte tua.

L'Agent Development Kit offre un framework di livello superiore rispetto a questi strumenti, consentendoti di collegare facilmente più agenti tra loro per workflow complessi ma facili da gestire.

e97ad3e26ceb7a2f.png

Figura 1: posizionamento di ADK (Agent Development Kit)

5. Introduzione a Vertex AI Agent Engine

Vertex AI Agent Engine è un servizio completamente gestito per il deployment di agenti in Google Cloud. Con Vertex AI Agent Engine, gli sviluppatori possono sviluppare, personalizzare, eseguire il deployment, gestire e pubblicare agenti AI OSS( ADK (Agent Development Kit) , LangChain, LangGraph, CrewAI, AutoGen e altri) su Vertex AI.

Agent Engine fornisce anche servizi per la gestione dei dati utente, noti anche come memoria dell'agente. Attualmente sono disponibili due tipi di servizi di memoria.

  • Memoria a breve termine: con le sessioni di Agent Engine puoi archiviare, gestire e recuperare la cronologia della conversazione in corso (stato) all'interno di una singola sessione come memoria a breve termine.
  • Memoria a lungo termine: con Agent Engine Memory Bank, memorizza, trasforma e recupera i ricordi (stato), in particolare in più sessioni come ricordi a lungo termine.

Puoi eseguire il deployment degli agenti anche in altri servizi Google Cloud come Cloud Run o GKE. Ti consigliamo di utilizzare Vertex AI Agent Engine per i seguenti casi d'uso.

  • Runtime gestito stateful: se hai bisogno di un runtime stateful completamente gestito per il deployment dell'agente, Vertex AI Agent Engine è una buona scelta, in quanto astrae attività comuni come la gestione delle sessioni e la persistenza per gli agenti AI.
  • Esecuzione del codice: se l'agente deve eseguire codice generato dinamicamente durante la sessione utente, Agent Engine fornisce un ambiente sandbox sicuro in cui puoi eseguire il codice.
  • Memoria a lungo termine flessibile: se hai bisogno di una memoria a lungo termine flessibile per i tuoi agenti, Vertex AI Memory Bank, che può essere utilizzato con Vertex AI Agent Engine, può fornire un modo flessibile per ricordare le informazioni sull'utente che possono essere utilizzate in tutte le sessioni.

Puoi anche combinare Vertex AI Agent Engine con altri runtime come Cloud Run per creare un'architettura applicativa flessibile. Di seguito è riportato un esempio di architettura di riferimento che utilizza vari servizi per creare un agente.

d8eb74a6d8a055f9.png

Figura 2: un'architettura di riferimento di esempio per la creazione di agenti utilizzando più servizi.

6. Introduzione ad A2A

Il protocollo Agent2Agent (A2A) è uno standard aperto progettato per consentire una comunicazione e una collaborazione fluide e sicure tra agenti AI autonomi di framework, fornitori e domini diversi.

  1. Interoperabilità universale:A2A consente agli agenti di lavorare insieme indipendentemente dalle tecnologie sottostanti, promuovendo un ecosistema veramente multi-agente. Ciò significa che gli agenti creati da aziende diverse su piattaforme diverse possono comunicare e coordinarsi.
  2. Rilevamento delle funzionalità:gli agenti possono pubblicizzare le proprie funzionalità utilizzando le "schede dell'agente" (documenti JSON), che descrivono la loro identità, le funzionalità A2A supportate, le competenze e i requisiti di autenticazione. In questo modo, gli altri agenti possono scoprire e selezionare l'agente più adatto per un determinato compito.
  3. Sicurezza per impostazione predefinita:la sicurezza è un principio fondamentale. A2A incorpora meccanismi di autenticazione e autorizzazione di livello aziendale, utilizzando standard come HTTPS/TLS, JWT, OIDC e chiavi API per garantire interazioni sicure e proteggere i dati sensibili.
  4. Indipendente dalla modalità: il protocollo supporta varie modalità di comunicazione, tra cui streaming di testo, audio e video, nonché moduli interattivi e iframe incorporati. Questa flessibilità consente agli agenti di scambiare informazioni nel formato più appropriato per l'attività e l'utente.
  5. Gestione strutturata delle attività:A2A definisce protocolli chiari per la delega, il monitoraggio e il completamento delle attività. Supporta il raggruppamento delle attività correlate e la loro gestione su diversi agenti utilizzando ID attività unici. Le attività possono passare attraverso cicli di vita definiti (ad es. inviate, in corso, completate).
  6. Esecuzione opaca:una funzionalità importante è che gli agenti non devono rivelare ad altri agenti i loro processi di ragionamento interni, la memoria o gli strumenti specifici. Espongono solo i servizi chiamabili, promuovendo la modularità e la privacy.
  7. Basato su standard esistenti: A2A sfrutta tecnologie web consolidate come HTTP, Server-Sent Events (SSE) per lo streaming in tempo reale e JSON-RPC per lo scambio di dati strutturati, semplificando l'integrazione con l'infrastruttura IT esistente.
  8. Comunicazione asincrona: il protocollo è progettato con la comunicazione asincrona come considerazione principale, facilitando la progressione flessibile delle attività e consentendo le notifiche push per gli aggiornamenti anche quando una connessione non viene mantenuta in modo persistente.

7. Architettura dell'agente

In questo lab creerai un'applicazione multi-agente che genera un'immagine in base alle tue specifiche e la valuta prima di presentartela.

Il sistema è strutturato con un agente principale chiamato image_scoring che coordina l'intero processo. Questo agente principale ha un agente secondario chiamato image_generation_scoring_agent, che a sua volta ha i propri agenti secondari per attività più specifiche. In questo modo si crea una relazione gerarchica in cui l'agente principale delega le attività ai suoi agenti secondari. bfed5e21e0b66d26.png

Figura 3: flusso complessivo dell'agente.

Elenco di tutti gli agenti

Agent

Purpose

Subagenti

image_scoring (Main Agent)

Questo è l'agente principale che gestisce il flusso di lavoro complessivo. Esegue ripetutamente image_generation_scoring_agent e checker_agent in un ciclo finché non viene soddisfatta una condizione di terminazione.

image_generation_scoring_agent
checker_agent_instance

image_generation_scoring_agent (sub-agente di image_scoring)

Questo agente è responsabile della logica di base della generazione e dell'assegnazione di un punteggio alle immagini. Per farlo, esegue una sequenza di tre subagenti.

image_generation_prompt_agent
image_generation_agent
scoring_images_prompt

checker_agent_instance (agente secondario di image_scoring)

Questo agente controlla se il processo di assegnazione del punteggio delle immagini deve continuare o terminare. Utilizza lo strumento check_tool_condition per valutare la condizione di terminazione.

-

checker_agent_instance (agente secondario di image_scoring)

Questo agente è un esperto nella creazione di prompt per la generazione di immagini. Prende un testo di input e genera un prompt dettagliato adatto al modello di generazione di immagini.

-

image_generation_prompt_agent (agente secondario di image_generation_scoring_agent)

Questo agente è un esperto nella creazione di prompt per la generazione di immagini. Prende un testo di input e genera un prompt dettagliato adatto al modello di generazione di immagini.

-

scoring_images_prompt (sub-agente di image_generation_scoring_agent):

Questo agente è un esperto nella valutazione e nell'assegnazione di un punteggio alle immagini in base a vari criteri. Prende l'immagine generata e le assegna un punteggio.

-

Elenco di tutti gli strumenti utilizzati

Strumento

Descrizione

User agent

check_tool_condition

Questo strumento controlla se la condizione di terminazione del ciclo è soddisfatta o se è stato raggiunto il numero massimo di iterazioni. Se una di queste condizioni è vera, il ciclo si interrompe.

checker_agent_instance

generate_images

Questo strumento genera immagini utilizzando il modello Imagen 3. Può anche salvare le immagini generate in un bucket Google Cloud Storage.

image_generation_agent

get_policy

Questo strumento recupera un criterio da un file JSON. La policy viene utilizzata da image_generation_prompt_agent per creare il prompt di generazione di immagini e da scoring_images_prompt per assegnare un punteggio alle immagini.

image_generation_agent

get_image

Questo strumento carica l'artefatto dell'immagine generata in modo che possa essere valutato.

scoring_images_prompt

set_score

Questo strumento imposta il punteggio totale dell'immagine generata nello stato della sessione.

scoring_images_prompt

8. Installare ADK e configurare l'ambiente

In questo esercizio pratico utilizzeremo Cloud Shell per eseguire le attività.

Prepara una scheda dell'editor di Cloud Shell

  1. Fai clic su questo link per andare direttamente all'editor di Cloud Shell.
  2. Fai clic su Continua.
  3. Quando ti viene chiesto di autorizzare Cloud Shell, fai clic su Autorizza.
  4. Per il resto del lab, puoi lavorare in questa finestra come IDE con l'editor di Cloud Shell e il terminale Cloud Shell.
  5. Apri un nuovo terminale utilizzando Terminale > Nuovo terminale nell'editor di Cloud Shell. Tutti i comandi riportati di seguito verranno eseguiti in questo terminale.

Scarica e installa l'ADK e gli esempi di codice per questo lab

  1. Esegui i seguenti comandi per clonare l'origine necessaria da GitHub e installare le librerie necessarie. Esegui i comandi nel terminale aperto nell'editor di Cloud Shell.
#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. Utilizzeremo uv per creare l'ambiente Python (esegui nel terminale dell'editor di Cloud Shell):
#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. Se non hai un bucket di spazio di archiviazione cloud, creane uno nuovo in Google Cloud Storage. Puoi anche creare il bucket utilizzando il comando gsutil. Concedi ad Agent Engine l'accesso a Google Cloud Storage (esegui nel terminale dell'editor di Cloud Shell).
# 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. Nell'editor, vai a Visualizza > Attiva/disattiva file nascosti. Nella cartella image_scoring crea un file .env con il seguente contenuto. Aggiungi i dettagli richiesti, come il nome del progetto e il bucket Cloud Storage (Esegui nel terminale dell'editor Cloud Shell).
#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. Nel menu dell'editor di Cloud Shell, seleziona File > Apri cartella.
  2. Nella casella visualizzata, aggiungi le seguenti informazioni sulla cartella dopo il tuo nome utente: imagescoring/. Fai clic su Ok. Ora dovresti vedere la struttura completa del progetto nel riquadro dell'explorer a sinistra.
  3. Vai alla cartella image_scoring nel riquadro laterale di Explorer. Fai clic sul file agent.py per aprirlo ed esaminare la struttura dell'agente. Questo agente contiene l'agente principale che si connetterà agli altri agenti secondari. bb0c3b10a31e9d14.png

Figura 4: la struttura delle cartelle visibile dal riquadro laterale di Esplora risorse. Puoi semplicemente fare clic su un file per visualizzarne i contenuti.

  1. Torna alla directory principale multiagenthandson nel terminale ed esegui questo comando per eseguire l'agente in locale (Run in Cloud Shell Editor Terminal).
#go to the directory multiagenthandson
cd ~/imagescoring/multiagenthandson
# Run the following command to run agents locally
adk web

dfda0b40b44e9230.png

Figura 5: avvio dell'applicazione ADK

  1. Ctrl+Click (CMD+Click per macOS) sull'URL http:// visualizzato sul terminale per aprire il client GUI basato su browser dell'ADK. Dovrebbe avere l'aspetto della Figura 5
  2. Seleziona image_scoring dal menu a discesa in alto a sinistra (vedi Figura 5). Ora generiamo alcune immagini. Dovresti trovare le immagini anche nel bucket Google Cloud Storage. Prova i seguenti prompt o i tuoi prompt.
  • Un tranquillo paesaggio montano al tramonto
  • Un gatto in bicicletta

c159623ad45f37cf.png

Figura 6: esempio di output

9. Esegui il deployment in Agent Engine

Ora eseguiamo il deployment dell'agente in Agent Engine. Agent Engine è un servizio completamente gestito per il deployment di agenti in GCP. Agent Engine è compatibile con ADK (Agent Development Kit), pertanto gli agenti creati con ADK (Agent Development Kit) possono essere implementati in Agent Engine.

  1. Prima di passare ai passaggi riportati di seguito nel terminale dell'editor di Cloud Shell, arresta il server ADK con Ctrl+C.
  2. Crea il file requirements.txt utilizzando Poetry. Poetry utilizzerà pyproject.toml per creare il file requirements.txt. Dopo aver eseguito il comando, controlla se è stato creato il file requirements.txt (esegui nel terminale dell'editor di Cloud Shell).
# 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. Crea il pacchetto. Dobbiamo raggruppare la nostra app in un pacchetto Python .whl. Useremo la poesia per farlo. Dopo aver eseguito il comando, assicurati che venga creata una cartella dist e che contenga il file .whl (esegui nel terminale dell'editor di Cloud Shell).
# Go to the parent folder containing pyproject.toml file
cd ~/imagescoring/multiagenthandson

#Create python package, to create whl file
python3 -m poetry build
  1. Ora prepareremo lo script che esegue il deployment dell'agente di valutazione delle immagini nel servizio Agent Engine. Nella directory deploy, individua deploy.py nel riquadro laterale dell'editor di Cloud Shell e fai clic per aprirlo. Verifica i contenuti come segue
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. Ora possiamo eseguire lo script di deployment. Innanzitutto, vai alla cartella principale multiagenthandson (esegui nel terminale dell'editor di Cloud Shell).
#go to multiagenthandson folder
cd ~/imagescoring/multiagenthandson

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

Dopo il deployment, dovresti vedere qualcosa di simile a questo: 57d86995465cdcda.png

Figura 7: esempio di output

  1. Ora testiamo l'agente di cui è stato eseguito il deployment. Per testare il motore dell'agente di cui è stato eseguito il deployment da remoto, copia prima la posizione dell'agente dall'output del deployment nel terminale. Dovrebbe avere un aspetto simile a questo: projects/85469421903/locations/us-central1/reasoningEngines/7369674597261639680 .
    Vai alla cartella testclient nel riquadro laterale dell'editor di Cloud Shell, fai clic su remote_test.py per aprirlo, quindi modifica le seguenti righe:
REASONING_ENGINE_ID = "projects/xxx/locations/us-central1/reasoningEngines/xxx"  # TODO: Change this
  1. Dalla directory principale multiagenthandson, esegui questo comando nel terminale dell'editor di Cloud Shell. L'output dovrebbe corrispondere alla Figura 8.
#go to multiagenthandson folder
cd ~/imagescoring/multiagenthandson

#execute remote_test.py
python3 -m testclient.remote_test

c612b8a79a7120ae.png

Figura 8: esempio di output

10. Crea un agente A2A

In questo passaggio creeremo un semplice agente A2A basato sull'agente creato nei passaggi precedenti. Gli agenti ADK (Agent Development Kit) esistenti possono essere pubblicati con il protocollo A2A. Questi sono gli aspetti chiave che imparerai in questo passaggio.

  • Scopri le nozioni di base del protocollo A2A.
  • Scopri come funzionano insieme i protocolli ADK e A2A.
  • Scopri come interagire con il protocollo A2A.

In questo esercizio pratico utilizzeremo il codice nella cartella image_scoring_adk_a2a_server. Prima di iniziare l'attività, cambia la directory in questa cartella (esegui nel terminale dell'editor di Cloud Shell).

#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. Crea la scheda dell'agente A2A

Il protocollo A2A richiede una scheda dell'agente che contenga tutte le informazioni sull'agente, come le funzionalità, la guida all'utilizzo e così via. Una volta implementato un agente A2A, la scheda dell'agente è visibile tramite il link ".well-known/agent-card.json". I clienti possono fare riferimento a queste informazioni per inviare la richiesta agli agenti.

Vai alla directory remote_a2a/image_scoring e individua agents.json nel riquadro laterale dell'editor di Cloud Shell. Fai clic sul file per aprirlo e verifica che i contenuti corrispondano a quanto segue:

{
 "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. Crea l'agente A2A Nella directory principale di image_scoring_adk_a2a_server, verifica che esista il file a2a_agent.py. Puoi aprirlo facendo clic sul nome del file nel riquadro laterale dell'editor di Cloud Shell. Questo file funge da punto di ingresso per l'agente A2A e deve avere i seguenti contenuti:

#change directory to image_scoring_adk_a2a_server
cd ~/imagescoring/multiagenthandson/image_scoring_adk_a2a_server
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. Esegui l'agente A2A

Ora siamo pronti per eseguire l'agente. Per eseguire l'agente, esegui il comando seguente dalla cartella principale image_scoring_adk_a2a_server (esegui nel terminale dell'editor di Cloud Shell).

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

4. Testare l'agente A2A

Una volta che l'agente è in esecuzione, possiamo testarlo. Innanzitutto, controlliamo la scheda dell'agente. Apri un nuovo terminale utilizzando Terminale > Nuovo terminale ed esegui il seguente comando (esegui nel terminale dell'editor di Cloud Shell appena aperto).

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

L'esecuzione del comando precedente dovrebbe mostrare la scheda dell'agente per il nostro agente A2A, che corrisponde principalmente ai contenuti di agent.json che abbiamo creato nel passaggio precedente.

Ora inviamo una richiesta all'agente. Possiamo utilizzare curl per inviare la richiesta all'agente (esegui nel terminale dell'editor di Cloud Shell appena aperto).

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"
      }
    }
  }'

Nella richiesta precedente, puoi modificare il prompt modificando la riga "Crea un'immagine di un gatto". Dopo aver eseguito il comando, puoi controllare l'immagine di output nell'Google Cloud Storage specificato.

11. Esegui la pulizia

Ora puliamo ciò che abbiamo appena creato.

  1. Elimina il server Vertex AI Agent Engine che abbiamo appena creato. Vai a Vertex AI digitando Vertex AI nella barra di ricerca della console Google Cloud. Fai clic su Agent Engine a sinistra.Puoi eliminare l'agente facendo clic su Elimina. 98e8aac9efc8e32a.png

Figura 9: puoi eliminare le istanze di Vertex AI Agent Engine dalla console Google Cloud

  1. Elimina i file in Cloud Shell
#Execute the following to delete the files
cd ~
rm -R ~/imagescoring
  1. Elimina il bucket. Puoi andare alla console GCP -> Cloud Storage , selezionare ed eliminare il bucket. 913625e5969c9104.png

Figura 10: eliminazione del bucket

12. Conclusione

Complimenti! Hai eseguito il deployment di un'applicazione multi-agente ADK (Agent Development Kit) in Vertex AI Agent Engine. Si tratta di un risultato significativo che copre il ciclo di vita principale di un'applicazione cloud-native moderna, fornendoti una base solida per il deployment dei tuoi sistemi agentici complessi.

Riepilogo

In questo lab hai imparato a:

Risorse utili

Dal prototipo alla produzione

Questo lab fa parte del percorso di apprendimento per l'AI pronta per la produzione con Google Cloud.