MCP-Server in Cloud Run mit einem ADK-Agenten verwenden

1. Einführung

In diesem Lab geht es um die Implementierung und Bereitstellung eines Client-Agent-Dienstes. Sie verwenden das Agent Development Kit (ADK), um einen KI-Agenten zu erstellen, der Remote-Tools wie den in Lab 1 erstellten MCP-Server verwendet. Das wichtigste architektonische Prinzip, das hier demonstriert wird, ist die Trennung von Zuständigkeiten. Eine separate Reasoning-Ebene (der Agent) kommuniziert über eine sichere API mit einer separaten Tooling-Ebene (dem MCP-Server).

In Lab 1 haben Sie einen MCP-Server erstellt, der LLMs Daten zu den Tieren in einem fiktiven Zoo zur Verfügung stellt, z. B. bei Verwendung der Gemini CLI. In diesem Lab erstellen wir einen Reiseführer-Agenten für den fiktiven Zoo. Der Agent verwendet denselben MCP-Server aus Lab 1, um auf Details zu den Zootieren zuzugreifen, und nutzt Wikipedia, um die bestmögliche Führung zu erstellen.

f8d4423edbfe993d.png

Schließlich stellen wir den Tourguide-Agenten in Google Cloud Run bereit, damit alle Zoobesucher darauf zugreifen können und er nicht nur lokal ausgeführt wird.

Voraussetzungen

  • Ein laufender MCP-Server in Cloud Run oder die zugehörige Dienst-URL.
  • Google Cloud-Projekt mit aktivierter Abrechnungsfunktion.

Lerninhalte

  • So strukturieren Sie ein Python-Projekt für die ADK-Bereitstellung.
  • Implementieren eines Agents, der Tools verwendet, mit google-adk
  • So verbinden Sie einen Agent mit einem Remote-MCP-Server für sein Toolset.
  • So stellen Sie eine Python-Anwendung als serverlosen Container in Cloud Run bereit.
  • So konfigurieren Sie die sichere Dienst-zu-Dienst-Authentifizierung mit IAM-Rollen.
  • So löschen Sie Cloud-Ressourcen, um zukünftige Kosten zu vermeiden.

Voraussetzungen

  • Ein Google Cloud-Konto und ein Google Cloud-Projekt
  • Ein Webbrowser wie Chrome

2. Warum in Cloud Run bereitstellen?

Cloud Run ist eine gute Wahl für das Hosting von ADK-Agents, da es sich um eine serverlose Plattform handelt. Sie können sich also auf Ihren Code konzentrieren und müssen sich nicht um die Verwaltung der zugrunde liegenden Infrastruktur kümmern. Wir übernehmen die operative Arbeit für Sie.

Stellen Sie sich das wie einen Pop-up-Shop vor: Er wird nur geöffnet und verwendet Ressourcen, wenn Kunden (Anfragen) eintreffen. Wenn es keine Kunden gibt, wird der Store vollständig geschlossen und Sie zahlen nicht für ein leeres Geschäft.

Wichtige Funktionen

Container überall ausführen:

  • Sie stellen einen Container (Docker-Image) mit Ihrer App bereit.
  • Cloud Run führt den Container in der Infrastruktur von Google aus.
  • Kein OS-Patching, keine VM-Einrichtung und keine Probleme mit der Skalierung.

Autoscaling:

  • Wenn 0 Nutzer Ihre App verwenden, werden 0 Instanzen ausgeführt und Sie zahlen 0 $, wenn die App im Leerlauf ist.
  • Wenn 1.000 Anfragen eingehen, werden so viele Kopien wie nötig erstellt.

Standardmäßig zustandslos:

  • Jede Anfrage kann an eine andere Instanz gesendet werden.
  • Wenn Sie den Zustand speichern müssen, verwenden Sie einen externen Dienst wie Cloud SQL, Firestore oder Redis.

Unterstützung beliebiger Sprachen oder Frameworks:

  • Solange die Anwendung in einem Linux-Container ausgeführt wird, ist es für Cloud Run unerheblich, ob sie in Python, Go, Node.js, Java oder .NET geschrieben ist.

Nur für die tatsächliche Nutzung zahlen:

  • Die Abrechnung erfolgt pro Anfrage + Rechenzeit (bis zu 100 ms).
  • Sie zahlen nicht für inaktive Ressourcen wie bei einer herkömmlichen VM.

3. Einrichtung und Anforderungen

Einrichtung der Umgebung im eigenen Tempo

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eins erstellen.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am Programm Kostenlose Testversion mit einem Guthaben von 300$ teilnehmen.

Cloud Shell starten

Wenn das Terminal nicht unten auf dem Bildschirm angezeigt wird, öffnen Sie es:

  • Klicken Sie auf Terminal.
  • Klicken Sie auf Neues Terminal.

d32c46fffa0a30a5.png

Legen Sie im Terminal Ihr Projekt mit diesem Befehl fest. Wenn Sie Lab 1 abgeschlossen haben, achten Sie darauf, dass Sie dieselbe Projekt-ID verwenden:

gcloud config set project [YOUR-PROJECT-ID]

Wenn Sie sich nicht mehr an Ihre Projekt-ID erinnern, können Sie alle Ihre Projekt-IDs mit folgendem Befehl auflisten:

gcloud projects list | awk '/PROJECT_ID/{print $2}'

4. Wenn Sie zur Autorisierung aufgefordert werden, klicken Sie auf Autorisieren, um fortzufahren.

6356559df3eccdda.png

5. Es sollte folgende Meldung angezeigt werden:

Updated property [core/project].
If you see a `WARNING` and are asked `Do you want to continue (Y/n)?`,

then you have likely entered the project ID incorrectly. Press `n`,

press `Enter`, and try to run the `gcloud config set project` command again.

4. Hinweis

APIs aktivieren und Umgebungsvariablen festlegen

Aktivieren Sie alle erforderlichen Dienste:

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

Erwartete Ausgabe

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

Konfigurieren Sie Ihre Standardregion für die Verwendung der Vertex AI-Modelle für die Einbettung. Weitere Informationen zu verfügbaren Standorten für Vertex AI In diesem Beispiel verwenden wir die Region „europe-west1“.

gcloud config set compute/region europe-west1

5. ADK herunterladen und installieren und Projektordner erstellen

Erstellen Sie die Projektverzeichnisse.

Mit diesem Befehl wird ein Hauptordner für das Lab für den Quellcode des Agents erstellt.

cd && mkdir zoo_guide_agent && cd zoo_guide_agent

Erstellen Sie eine virtuelle Umgebung.

python3 -m venv .venv

Virtuelle Umgebung aktivieren

source .venv/bin/activate

Erstellen Sie die Datei requirements.txt. In dieser Datei sind die Python-Bibliotheken aufgeführt, die Ihr Agent benötigt. Mit dem folgenden Befehl wird die Datei erstellt und mit Daten gefüllt.

cloudshell edit requirements.txt
google-adk==1.12.0
langchain-community
wikipedia

Sie sollten den Befehl über das Hauptverzeichnis Ihres Projekts, zoo_guide_agent, ausführen.

pip install -r requirements.txt

Legen Sie Variablen für Ihr aktuelles Projekt, Ihre Region und Ihren Nutzer fest. Dies ist eine robustere Methode zum Ausführen dieser Befehle.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_REGION=$(gcloud config get-value compute/region)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
export SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"

Erstellen und öffnen Sie eine .env-Datei, um den Agenten im Verzeichnis zoo_guide_agent zu authentifizieren.

cloudshell edit .env

Mit dem Befehl „cloudshell edit“ wird die Datei .env im Editor über dem Terminal geöffnet. Geben Sie Folgendes in die Datei .env ein und kehren Sie zum Terminal zurück.

MODEL="gemini-2.5-flash"
SERVICE_ACCOUNT="${PROJECT_NUMBER}-compute@developer.gserviceaccount.com"

Fügen Sie die MCP-Server-URL hinzu. Wenn Sie Lab 1 abgeschlossen haben, gehen Sie so vor, um den MCP-Server zu verwenden, den Sie in Lab 1 erstellt haben:

  1. Der Cloud Run-Dienstidentität die Berechtigung zum Aufrufen des Remote-MCP-Servers erteilen
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/run.invoker"
  1. Speichern Sie die MCP-Server-URL aus Lab 1 in einer Umgebungsvariablen.
echo -e "\nMCP_SERVER_URL=https://zoo-mcp-server-${PROJECT_NUMBER}.europe-west1.run.app/mcp/" >> .env

Wenn Sie einen öffentlichen MCP-Serverlink verwenden, führen Sie Folgendes aus und ersetzen Sie PROJECT_NUMBER durch den bereitgestellten Wert.

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

6. Agent-Workflow erstellen

Erstellen Sie die Datei init.py. Diese Datei teilt Python mit, dass das Verzeichnis „zoo_guide_agent“ ein Paket ist.

cloudshell edit __init__.py

Mit dem obigen Befehl wird der Code-Editor geöffnet. Fügen Sie den folgenden Code zu __init__.py hinzu:

from . import agent

Hauptdatei „agent.py“ erstellen

Erstellen Sie die Hauptdatei „agent.py“. Mit diesem Befehl wird die Python-Datei erstellt und der vollständige Code für Ihr Multi-Agent-System eingefügt.

cloudshell edit agent.py

Schritt 1: Importe und Ersteinrichtung

In diesem ersten Block werden alle erforderlichen Bibliotheken aus dem ADK und Google Cloud eingebunden. Außerdem wird die Protokollierung eingerichtet und die Umgebungsvariablen aus der Datei .env geladen, was für den Zugriff auf Ihr Modell und Ihre Server-URL entscheidend ist.

Fügen Sie Ihrer Datei „agent.py“ den folgenden Code hinzu:

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")

Schritt 2:Tools definieren (die Funktionen des Agents)

3eb9c6772576b906.jpeg

Ein Agent ist nur so gut wie die Tools, die er verwenden kann. In diesem Abschnitt definieren wir alle Funktionen, die unser Agent haben wird, einschließlich einer benutzerdefinierten Funktion zum Speichern von Daten, eines MCP-Tools, das eine Verbindung zu unserem sicheren MCP-Server herstellt, sowie eines Wikipedia-Tools.

Fügen Sie am Ende von „agent.py“ den folgenden Code hinzu:

# 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())
)

Die drei Tools im Detail

  1. add_prompt_to_state 📝

Dieses Tool merkt sich, was ein Zoobesucher fragt. Wenn ein Besucher fragt: „Wo sind die Löwen?“, wird diese Frage im Speicher des Agenten gespeichert, damit die anderen Agenten im Workflow wissen, wonach sie suchen müssen.

Vorgehensweise:Es handelt sich um eine Python-Funktion, die den Prompt des Besuchers in das freigegebene tool_context.state-Wörterbuch schreibt. Dieser Tool-Kontext stellt das Kurzzeitgedächtnis des Agents für eine einzelne Unterhaltung dar. Daten, die von einem Agent im Status gespeichert werden, können vom nächsten Agent im Workflow gelesen werden.

  1. MCPToolset 🦁

Damit wird der Tourguide-Agent mit dem im ersten Lab erstellten Zoo-MCP-Server verbunden. Dieser Server verfügt über spezielle Tools, mit denen du bestimmte Informationen über unsere Tiere nachschlagen kannst, z. B. ihren Namen, ihr Alter und ihr Gehege.

Vorgehensweise:Es wird eine sichere Verbindung zur privaten Server-URL des Zoos hergestellt. Dazu wird get_id_token verwendet, um automatisch eine sichere „Schlüsselkarte“ (ein Dienstkonto-ID-Token) zu erhalten, mit der die Identität nachgewiesen und Zugriff gewährt wird.

  1. LangchainTool 🌍

Dadurch erhält der Reiseführer-Agent allgemeines Weltwissen. Wenn ein Besucher eine Frage stellt, die nicht in der Datenbank des Zoos enthalten ist, z. B. „Was fressen Löwen in freier Wildbahn?“, kann der Kundenservicemitarbeiter mit diesem Tool die Antwort auf Wikipedia nachschlagen.

Funktionsweise:Es fungiert als Adapter, sodass unser Agent das vordefinierte Tool „WikipediaQueryRun“ aus der LangChain-Bibliothek verwenden kann.

Ressourcen:

Schritt 3: Specialist Agents definieren

b8a9504b21920969.jpeg

Als Nächstes definieren wir den Researcher-Agent und den Response-Formatter-Agent. Der Researcher-Agent ist das „Gehirn“ unserer Operation. Dieser Agent nimmt den Prompt des Nutzers aus dem freigegebenen State entgegen, prüft seine leistungsstarken Tools (das MCP-Server-Tool des Zoos und das Wikipedia-Tool) und entscheidet, welche er verwenden soll, um die Antwort zu finden.

Die Rolle des Antwortformatierungs-Agents ist die Präsentation. Es werden keine Tools verwendet, um neue Informationen zu finden. Stattdessen werden die vom Researcher-Agenten erfassten Rohdaten (über den Status übergeben) verwendet und mit den Sprachkenntnissen des LLM in eine freundliche, konversationelle Antwort umgewandelt.

Fügen Sie den folgenden Code am Ende von agent.py ein:

# 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 }}
    """
)

Schritt 4: Der Workflow-Agent

Der Workflow-Agent fungiert als „Backoffice“-Manager für die Zoo-Tour. Es nimmt die Forschungsanfrage entgegen und sorgt dafür, dass die beiden oben definierten Agents ihre Aufgaben in der richtigen Reihenfolge ausführen: zuerst Recherche, dann Formatierung. So entsteht ein vorhersehbarer und zuverlässiger Prozess für die Beantwortung der Frage eines Besuchers.

Funktionsweise:Es handelt sich um ein SequentialAgent, einen speziellen Agent-Typ, der nicht selbstständig denkt. Seine einzige Aufgabe besteht darin, eine Liste von sub_agents (dem Researcher und dem Formatter) in einer festen Reihenfolge auszuführen und den gemeinsam genutzten Speicher automatisch von einem zum nächsten zu übergeben.

Fügen Sie diesen Codeblock am Ende von agent.py ein:

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
    ]
)

Letzter Schritt: Hauptworkflow zusammenstellen 1000b9d20f4e134b.jpeg

Dieser Agent wird als root_agent bezeichnet, der vom ADK-Framework als Ausgangspunkt für alle neuen Unterhaltungen verwendet wird. Ihre Hauptaufgabe besteht darin, den Gesamtprozess zu orchestrieren. Er fungiert als erster Controller und verwaltet die erste Runde des Gesprächs.

Fügen Sie diesen letzten Codeblock am Ende von agent.py ein:

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]
)

Ihre agent.py-Datei ist jetzt fertig. So können Sie sehen, wie jede Komponente – Tools, Worker-Agents und Manager-Agents – eine bestimmte Rolle bei der Erstellung des endgültigen, intelligenten Systems spielt. Als Nächstes folgt die Bereitstellung.

7. Anwendung für die Bereitstellung vorbereiten

Nachdem Sie Ihre lokale Umgebung vorbereitet haben, müssen Sie Ihr Google Cloud-Projekt für die Bereitstellung vorbereiten. Dabei wird die Dateistruktur Ihres Agents noch einmal geprüft, um sicherzustellen, dass sie mit dem Bereitstellungsbefehl kompatibel ist. Wichtiger ist, dass Sie eine wichtige IAM-Berechtigung konfigurieren, mit der Ihr bereitgestellter Cloud Run-Dienst in Ihrem Namen agieren und die Vertex AI-Modelle aufrufen kann. Wenn Sie diesen Schritt ausführen, ist die Cloud-Umgebung bereit, damit Ihr Agent erfolgreich ausgeführt werden kann.

Laden Sie die Variablen in Ihre Shell-Sitzung, indem Sie den Befehl „source“ ausführen.

source .env

Weisen Sie dem Dienstkonto die Rolle „Vertex AI-Nutzer“ zu. Dadurch erhält es die Berechtigung, Vorhersagen zu treffen und die Modelle von Google aufzurufen.

# Grant the "Vertex AI User" role to your service account
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$SERVICE_ACCOUNT" \
  --role="roles/aiplatform.user"

8. Agent mit der ADK-Befehlszeile bereitstellen

Nachdem Sie Ihren lokalen Code vorbereitet und Ihr Google Cloud-Projekt eingerichtet haben, können Sie den Agenten bereitstellen. Sie verwenden den Befehl adk deploy cloud_run, ein praktisches Tool, das den gesamten Bereitstellungsablauf automatisiert. Mit diesem einzelnen Befehl wird Ihr Code verpackt, ein Container-Image erstellt, das Image per Push in Artifact Registry übertragen und der Dienst in Cloud Run gestartet, sodass er im Web zugänglich ist.

.gcloudignore-Datei erstellen

Um die Bereitstellungszeit zu verkürzen, möchten wir eine .gcloudignore-Datei erstellen. Führen Sie dazu die folgenden Befehle aus, um den Agent bereitzustellen.

cloudshell edit .gcloudignore

Mit dem Befehl „cloudshell edit“ wird die Datei .gcloudignore im Editor über dem Terminal geöffnet. Schreiben Sie Folgendes in die Datei und speichern Sie sie. Kehren Sie dann zum Terminal zurück, um die Bereitstellungsbefehle im nächsten Abschnitt auszuführen.

.venv/

Bereitstellen

Führen Sie die folgenden Befehle aus, um den Agent bereitzustellen.

# Run the deployment command
adk deploy cloud_run \
  --project=$PROJECT_ID \
  --region=europe-west1 \
  --service_name=zoo-tour-guide \
  --with_ui \
  .
gcloud run services update zoo-tour-guide \
  --region=europe-west1 \
  --update-labels=dev-tutorial=codelab-adk

Prompts akzeptieren

Möglicherweise werden Sie aufgefordert, Folgendes zu tun:

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

Do you want to continue (Y/n)?

Geben Sie Y ein und drücken Sie die Eingabetaste.

Möglicherweise werden Sie aufgefordert, Folgendes zu tun:

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

In diesem Lab möchten wir nicht authentifizierte Aufrufe zulassen, um das Testen zu vereinfachen. Geben Sie y ein und drücken Sie die Eingabetaste.

Nach erfolgreicher Ausführung des Befehls wird die URL des bereitgestellten Cloud Run-Dienstes angezeigt. Sie sieht in etwa so aus: https://zoo-tour-guide-123456789.europe-west1.run.app. Kopieren Sie diese URL für die nächste Aufgabe.

9. Bereitgestellten Agent testen

Nachdem Ihr Agent jetzt in Cloud Run aktiv ist, führen Sie einen Test durch, um zu bestätigen, dass die Bereitstellung erfolgreich war und der Agent wie erwartet funktioniert. Sie verwenden die öffentliche Dienst-URL (z. B. https://zoo-tour-guide-123456789.europe-west1.run.app/), um auf die Weboberfläche des ADK zuzugreifen und mit dem Agent zu interagieren.

Öffnen Sie die öffentliche Cloud Run-Dienst-URL in Ihrem Webbrowser. Da Sie --with_ui flag verwendet haben, sollten Sie die ADK-Entwickler-UI sehen.

Aktivieren Sie rechts oben die Option Token Streaming.

Sie können jetzt mit dem Zoo-Kundenservicemitarbeiter interagieren.

Geben Sie hello ein und drücken Sie die Eingabetaste, um eine neue Unterhaltung zu beginnen.

Sehen Sie sich das Ergebnis an. Der Agent sollte schnell mit seiner Begrüßung antworten:

"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?"

3244d2f6c3b03088.png e135694253b1be41.png

Agent-Ablauf

Ihr System arbeitet als intelligentes Multi-Agent-Team. Der Prozess wird durch eine klare Abfolge gesteuert, um einen reibungslosen und effizienten Ablauf von der Frage eines Nutzers bis zur endgültigen, detaillierten Antwort zu gewährleisten.

1. Der Zoo-Begrüßer (The Welcome Desk)

Der gesamte Prozess beginnt mit dem Begrüßungs-Agent.

Aufgabe:Das Gespräch beginnen. Die Anweisung lautet, den Nutzer zu begrüßen und zu fragen, welches Tier er kennenlernen möchte.

Its Tool:Wenn der Nutzer antwortet, verwendet der Greeter das Tool „add_prompt_to_state“, um seine genauen Worte zu erfassen (z.B. „Erzähl mir etwas über Löwen“), und speichert sie im Systemspeicher.

Übergabe:Nachdem der Prompt gespeichert wurde, wird die Steuerung sofort an den untergeordneten Agenten „tour_guide_workflow“ übergeben.

2. Der umfassende Researcher (The Super-Researcher)

Dies ist der erste Schritt im Hauptworkflow und das „Gehirn“ des Vorgangs. Statt eines großen Teams haben Sie jetzt einen einzelnen, hochqualifizierten Agenten, der auf alle verfügbaren Informationen zugreifen kann.

Aufgabe:Die Frage des Nutzers analysieren und einen intelligenten Plan erstellen. Dabei wird die leistungsstarke Funktion des Sprachmodells zur Verwendung von Tools genutzt, um zu entscheiden, ob Folgendes erforderlich ist:

  • Interne Daten aus den Aufzeichnungen des Zoos (über den MCP-Server).
  • Allgemeines Wissen aus dem Web (über die Wikipedia API).
  • Oder bei komplexen Fragen beides.

Aktion:Es werden die erforderlichen Tools ausgeführt, um alle erforderlichen Rohdaten zu erfassen. Wenn beispielsweise gefragt wird: „Wie alt sind unsere Löwen und was fressen sie in freier Wildbahn?“, wird der MCP-Server nach dem Alter und das Wikipedia-Tool nach Informationen zur Ernährung aufgerufen.

3. Der Antwort-Formatter (The Presenter)

Nachdem der Comprehensive Researcher alle Fakten zusammengetragen hat, wird dieser Agent als letzter ausgeführt.

Aufgabe:Als freundliche Stimme des Zoo-Tourguides fungieren. Dabei werden die Rohdaten (die aus einer oder beiden Quellen stammen können) bereinigt.

Aktion:Alle Informationen werden in einer einzigen, kohäsiven und ansprechenden Antwort zusammengefasst. Gemäß der Anleitung werden zuerst die spezifischen Zoo-Informationen und dann die interessanten allgemeinen Fakten präsentiert.

Das Endergebnis:Der von diesem Agent generierte Text ist die vollständige, detaillierte Antwort, die der Nutzer im Chatfenster sieht.

Wenn Sie mehr über das Erstellen von Agents erfahren möchten, finden Sie in den folgenden Ressourcen weitere Informationen:

  1. ADK-Dokumentation
  2. Benutzerdefinierte Tools für ADK-Agents erstellen

10. Umgebung bereinigen

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

11. Glückwunsch

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Behandelte Themen

  • Hier erfahren Sie, wie Sie ein Python-Projekt für die Bereitstellung mit der ADK-Befehlszeilenschnittstelle strukturieren.
  • So implementieren Sie einen Multi-Agent-Workflow mit SequentialAgent und ParallelAgent.
  • So stellen Sie mit MCPToolset eine Verbindung zu einem Remote-MCP-Server her, um seine Tools zu verwenden.
  • Wie Sie interne Daten durch die Einbindung externer Tools wie der Wikipedia API erweitern können.
  • So stellen Sie einen Agent als serverlosen Container in Cloud Run mit dem Befehl „adk deploy“ bereit.

12. Umfrage

Ausgabe:

Wie werden Sie diese Anleitung verwenden?

Nur lesen Lesen und Übungen machen