L'Agent Development Kit (ADK) fournit un client AgentRegistry dédié qui vous permet de découvrir, de rechercher et de vous connecter de manière programmatique aux agents IA et aux serveurs MCP (Model Context Protocol) catalogués dans Agent Registry.
Au lieu de coder en dur les URL de point de terminaison dans votre application, vous pouvez utiliser l'ADK pour résoudre ces points de terminaison au moment de l'exécution.
Agent Registry fournit les points de terminaison sous-jacents, mais les déploiements de production routent généralement ces appels via Agent Gateway. Agent Gateway vous aide à appliquer des règles de sécurité, à effectuer la médiation de protocole et à appliquer le filtrage de contenu aux outils que vous découvrez.
Ce document explique comment récupérer des agents distants et des ensembles d'outils MCP à partir d'Agent Registry et les inclure dans un agent orchestrateur parent.
Avant de commencer
Avant d'intégrer l'ADK à Agent Registry, procédez comme suit :
- Configurez Agent Registry dans votre projet.
Installez la dernière version de l'ADK ou mettez-la à niveau avec les dépendances A2A nécessaires :
pip
pip install --upgrade "google-adk[a2a]"uv
uv add "google-adk[a2a]"Vous devez passer à la version
google-adk>=1.29.0au minimum.Configurez les identifiants par défaut de l'application (ADC) :
gcloud auth application-default login
Les identifiants ADC doivent disposer des autorisations IAM nécessaires pour les services sous-jacents avec lesquels les agents ou les outils interagissent. Vous pouvez également utiliser des en-têtes personnalisés pour les ensembles d'outils externes. Pour en savoir plus, consultez S'authentifier auprès des outils et des ressources.
Définir des variables d'environnement
Pour suivre ce guide, définissez les variables d'environnement suivantes :
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
export GOOGLE_CLOUD_LOCATION=LOCATION
Remplacez les éléments suivants :
PROJECT_ID: ID de votre projet.LOCATION: région ou emplacement du registre, par exempleus-central1.
Initialiser le client du registre
Pour interagir avec votre registre de manière programmatique, initialisez le client AgentRegistry avec votre projet et votre emplacement :
import os
from google.adk.integrations.agent_registry import AgentRegistry
project_id = os.environ.get("GOOGLE_CLOUD_PROJECT")
location = os.environ.get("GOOGLE_CLOUD_LOCATION", "global")
if not project_id:
raise ValueError("GOOGLE_CLOUD_PROJECT environment variable not set.")
# Initialize the client
registry = AgentRegistry(
project_id=project_id,
location=location,
)
Composer un système multi-agent
L'ADK fait abstraction des mécanismes de connexion sous-jacents, ce qui vous permet de concevoir des applications évolutives en composant plusieurs agents spécialisés dans des hiérarchies flexibles.
Vous pouvez utiliser le client du registre pour extraire des ressources spécifiques et les transmettre directement dans la définition d'un nouvel agent LlmAgent. Votre orchestrateur peut appeler des agents distants en tant que sous-agents et exécuter des outils MCP comme s'il s'agissait de fonctions Python locales.
Utilisez les méthodes suivantes :
- Pour récupérer un agent distant : utilisez
get_remote_a2a_agent(). - Pour récupérer un ensemble d'outils MCP : utilisez
get_mcp_toolset().
L'exemple suivant montre comment composer un système multi-agent en créant un agent orchestrateur qui tire parti d'un agent de voyage enregistré et d'un serveur MCP Compute Engine enregistré. Dans cet exemple, l'authentification est gérée par la propre identité de l'agent, mais vous pouvez utiliser d'autres méthodes, telles que les clés API et OAuth. Pour en savoir plus, consultez S'authentifier auprès des outils et des ressources.
Pour concevoir et orchestrer des agents à l'aide d'une interface visuelle low-code, configurez les sous-agents enregistrés directement dans le canevas Agent Studio. Pour en savoir plus, consultez Concevoir des agents dans Agent Studio.
import httpx
import google.auth
from google.auth.transport.requests import Request
from google.adk.agents.llm_agent import LlmAgent
# Define the GoogleAuth class for the HTTP client
class GoogleAuth(httpx.Auth):
def __init__(self):
self.creds, _ = google.auth.default()
def auth_flow(self, request):
if not self.creds.valid:
self.creds.refresh(Request())
request.headers["Authorization"] = f"Bearer {self.creds.token}"
yield request
# Connect to a remote A2A agent using its resource name in short or full format
# Short formats automatically imply the client's configured project and location
# Short format: "agents/AGENT_ID"
# Full format: f"projects/{project_id}/locations/{location}/agents/AGENT_ID"
agent_name = "agents/AGENT_ID"
# Configure the HTTP client with GoogleAuth and a 60-second timeout
httpx_client = httpx.AsyncClient(auth=GoogleAuth(), timeout=httpx.Timeout(60.0))
my_remote_agent = registry.get_remote_a2a_agent(
agent_name=agent_name,
httpx_client=httpx_client
)
# Retrieve an MCP toolset using its resource name in short or full format
# Short formats automatically imply the client's configured project and location
# Short format: "mcpServers/SERVER_ID"
# Full format: f"projects/{project_id}/locations/{location}/mcpServers/SERVER_ID"
mcp_server_name = "mcpServers/SERVER_ID"
my_mcp_toolset = registry.get_mcp_toolset(mcp_server_name=mcp_server_name)
# Compose the orchestrator agent
main_agent = LlmAgent(
model="MODEL_ID", # Replace with a model such as gemini-1.5-flash
name="travel_orchestrator",
instruction="""You are a travel coordinator. You can use your
subagents to book travel and your tools to query
historical travel data.""",
tools=[my_mcp_toolset],
sub_agents=[my_remote_agent],
)
# You can now run your orchestrator agent
# response = await main_agent.run('Book a flight to Paris and check my past trips.')
Bonnes pratiques pour réutiliser des agents
Pour minimiser la latence du réseau, récupérez vos agents et vos ensembles d'outils à partir du registre une seule fois au démarrage de l'application, au lieu d'appeler get_remote_a2a_agent() à chaque invocation.
Un agent ne peut avoir qu'un seul agent parent à la fois. Si vous tentez d'attribuer la même instance d'agent récupérée à plusieurs orchestrateurs, l'ADK peut générer une erreur indiquant que l'agent a déjà un parent.
Pour réutiliser un agent détecté dans plusieurs agents parents, utilisez la méthode .clone() afin de créer une instance de l'objet agent.
L'exemple suivant montre comment extraire un agent une seule fois et le cloner pour l'utiliser dans différents orchestrateurs :
import httpx
import google.auth
from google.auth.transport.requests import Request
from google.adk.agents.llm_agent import LlmAgent
# Define the GoogleAuth class for the HTTP client
class GoogleAuth(httpx.Auth):
def __init__(self):
self.creds, _ = google.auth.default()
def auth_flow(self, request):
if not self.creds.valid:
self.creds.refresh(Request())
request.headers["Authorization"] = f"Bearer {self.creds.token}"
yield request
# Configure the HTTP client with GoogleAuth and a 60-second timeout
httpx_client = httpx.AsyncClient(auth=GoogleAuth(), timeout=httpx.Timeout(60.0))
# Fetch the remote agent once during startup
# Use the resource name in short or full format
# Short formats automatically imply the client's configured project and location
# Short format: "agents/AGENT_ID"
# Full format: f"projects/{project_id}/locations/{location}/agents/AGENT_ID"
agent_name = f"projects/PROJECT_ID/locations/LOCATION/agents/AGENT_ID"
base_remote_agent = registry.get_remote_a2a_agent(
agent_name=agent_name,
httpx_client=httpx_client
)
# Use .clone() to assign the agent to different parent orchestrators
flight_orchestrator = LlmAgent(
model="gemini-1.5-flash",
name="flight_orchestrator",
sub_agents=[base_remote_agent.clone()]
)
hotel_orchestrator = LlmAgent(
model="gemini-1.5-flash",
name="hotel_orchestrator",
sub_agents=[base_remote_agent.clone()]
)
Étapes suivantes
- Découvrez comment configurer Agent Gateway pour acheminer le trafic vers vos points de terminaison résolus.
- Découvrez comment vous authentifier auprès des outils et des ressources à l'aide d'en-têtes ou de liaisons personnalisés.
- Découvrez comment enregistrer des compétences et gérer des compétences dans Agent Registry.