1. Einführung
In diesem Lab erstellen Sie einen Agenten mit dem Agent Development Kit (ADK). Sie lernen, wie Sie mit dem ADK und verschiedenen Tooltypen einen Softwarefehler-Assistenten-Agent erstellen. Sie beginnen mit einem einfachen Agent und fügen nach und nach Tools hinzu, um seine Funktionen zu erweitern, darunter Funktionstools, integrierte Tools, Drittanbieter-Tools und MCP-Tools (Model Context Protocol).
Lerninhalte
- Ein Python-Projekt für die ADK-Entwicklung einrichten
- So erstellen Sie einen einfachen ADK-Agenten.
- Funktionstools implementieren und verwenden
- Integrierte Tools wie die Google Suche einbinden
- Wie Sie Drittanbieter-Tools aus Frameworks wie LangChain im ADK nutzen können.
- Verwendung von MCP-Tools für die Interaktion mit Datenbanken (Cloud SQL) und APIs
2. Übersicht
Stellen Sie sich vor, Sie sind Mitglied des Projektmanagements bei QuantumRoast, einem globalen Unternehmen für Kaffeemaschinen.
Du hilfst deinen Teammitgliedern, sich in einer Vielzahl von Engineering-Roadmaps, plötzlichen Strategieänderungen (wir machen jetzt Matcha!) und eingehenden Tickets von Kunden zurechtzufinden – von fehlerhaften Abrechnungssystemen bis hin zu einer Kaffeemaschine, die rund um die Uhr ein hohes Geräusch macht.
An einem normalen Tag haben Sie etwa 50 Browser-Tabs geöffnet: das interne Ticketsystem, E-Mail, Chat, GitHub, Google Suche, StackOverflow und mehr. Sie mögen Ihren Job und Ihre Teammitglieder, aber manchmal sind Sie überfordert.
Was wäre, wenn wir einen Assistenten entwickeln könnten, der Ihnen beim Erstellen und Triage von Software-Tickets und beim Debuggen von Problemen hilft? Ein KI-Agent macht das möglich.
Agent Development Kit (ADK)
Das Agent Development Kit (ADK) ist ein flexibles und modulares Framework zum Entwickeln und Bereitstellen von KI-Agenten. Das ADK ist zwar für Gemini und das Google-Ökosystem optimiert, ist aber modell- und bereitstellungsunabhängig und für die Kompatibilität mit anderen Frameworks konzipiert. Das ADK wurde entwickelt, um die Entwicklung von KI-Agenten an die Softwareentwicklung anzunähern. So können Entwickler einfacher Agentenarchitekturen erstellen, bereitstellen und orchestrieren, die von einfachen Aufgaben bis hin zu komplexen Workflows reichen.
Das ADK ist das Framework, das wir zum Erstellen unseres QuantumRoast-Softwarefehlerassistenten verwenden.
Tools – Erste Schritte
KI-Agents verwenden Modelle, nicht nur hartcodierte Logik, um ein Problem zu lösen. KI-Agents können aber nicht nur auf LLMs basierende Schlussfolgerungen ziehen, sondern auch externe Daten erfassen und dann im Namen des Nutzers Aktionen ausführen. Anstatt Ihnen zu sagen, wie Sie ein Problem lösen können, kann ein KI-Agent Ihnen helfen, es tatsächlich zu lösen. Wie machen wir das? Mit Tools.
Ein Tool ist eine Funktion, die einem KI-Agenten hilft, mit der Welt zu interagieren. Ein Tool kann fast alles sein: eine Inline-Funktion, eine gehostete Datenbank, eine Drittanbieter-API oder sogar ein anderer Agent. KI-Agent-Frameworks wie das Agent Development Kit (ADK) bieten integrierte Unterstützung für Tools und unterstützen eine Vielzahl von Tool-Typen, die wir gleich näher erläutern.
Aber woher weiß ein Agent nicht nur, wann er ein bestimmtes Tool aufrufen soll, sondern auch, wie er es aufrufen soll? Das Modell des Agents spielt hier einige wichtige Rollen.
Die erste ist die Tool-Auswahl. Wir stellen unserem Agent eine Liste mit Tools und eine Anleitung zur Verwendung der Tools zur Verfügung. Wenn ein Nutzer den Agenten auffordert, hilft das Modell des Agenten dabei, zu entscheiden, welche Tools aufgerufen werden sollen und warum, um dem Nutzer zu helfen.
Der zweite wichtige Schritt ist Funktionsaufruf. Der Begriff „Funktionsaufruf“ ist etwas irreführend, da das Modell das Tool nicht tatsächlich aufruft, sondern sich auf den Aufruf vorbereitet, indem es den Anfragetext formatiert, den das Framework dann zum Aufrufen des Tools verwendet.
Schließlich hilft das Modell, die Antwort des Tools zu interpretieren, z. B. eine Liste offener Fehler aus der Datenbank, und entscheidet, ob weitere Maßnahmen ergriffen oder der Nutzer mit diesen Informationen benachrichtigt werden soll.
Um das alles in Aktion zu sehen, ist es an der Zeit, den QuantumRoast-Bug-Assistenten-Agenten mit ADK Python zu erstellen.
3. Hinweis
Google Cloud-Projekt einrichten
- Wenn Sie noch kein Google-Konto haben, müssen Sie ein Google-Konto erstellen.
- Verwenden Sie ein privates Konto anstelle eines Arbeitskontos oder eines Kontos einer Bildungseinrichtung. Bei Arbeitskonten und Konten von Bildungseinrichtungen kann es Einschränkungen geben, die verhindern, dass Sie die für dieses Lab erforderlichen APIs aktivieren.
- Melden Sie sich in der Google Cloud Console an.
- Aktivieren Sie die Abrechnung in der Cloud Console.
- Die Kosten für Cloud-Ressourcen für dieses Lab sollten weniger als 1 $betragen.
- Sie können die Schritte am Ende dieses Labs ausführen, um Ressourcen zu löschen und so weitere Kosten zu vermeiden.
- Neuen Nutzern steht die kostenlose Testversion mit einem Guthaben von 300$ zur Verfügung.
- Erstellen Sie ein neues Projekt oder wählen Sie ein vorhandenes Projekt aus.
Cloud Shell-Editor öffnen
- Cloud Shell-Editor aufrufen
- Wenn das Terminal nicht unten auf dem Bildschirm angezeigt wird, öffnen Sie es:
- Klicken Sie auf das Dreistrich-Menü
.
- Klicken Sie auf Terminal.
- Klicken Sie auf Neues Terminal
.
- Klicken Sie auf das Dreistrich-Menü
- Legen Sie im Terminal Ihr Projekt mit diesem Befehl fest (ersetzen Sie
YOUR_PROJECT_ID
):- Format:
gcloud config set project YOUR_PROJECT_ID
- Beispiel:
gcloud config set project lab-project-id-example
- Wenn Sie sich nicht an Ihre Projekt-ID erinnern können:
- Sie können alle Ihre Projekt-IDs mit folgendem Befehl auflisten:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
- Sie können alle Ihre Projekt-IDs mit folgendem Befehl auflisten:
- Format:
- Wenn Sie zur Autorisierung aufgefordert werden, klicken Sie auf Autorisieren, um fortzufahren.
- Es sollte folgende Meldung angezeigt werden:
Wenn SieUpdated property [core/project].
WARNING
sehen undDo you want to continue (Y/N)?
gefragt werden, haben Sie die Projekt-ID wahrscheinlich falsch eingegeben. Drücken SieN
, dannEnter
und versuchen Sie, den Befehlgcloud config set project
noch einmal auszuführen. - Legen Sie im Terminal die Umgebungsvariable
PROJECT_ID
fest, die in späteren Schritten verwendet werden soll.export PROJECT_ID=$(gcloud config get project)
APIs aktivieren
Führen Sie im Terminal den folgenden Befehl aus, um die erforderlichen Google Cloud APIs zu aktivieren:
gcloud services enable sqladmin.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
secretmanager.googleapis.com \
servicenetworking.googleapis.com \
aiplatform.googleapis.com \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com
Cloud SQL for PostgreSQL-Instanz erstellen
QuantumRoast hat eine Datenbank mit allen internen Tickets. Richten wir sie ein, indem wir eine Cloud SQL for PostgreSQL-Instanz erstellen.
gcloud sql instances create software-assistant \
--database-version=POSTGRES_16 \
--tier=db-custom-1-3840 \
--region=us-central1 \
--edition=ENTERPRISE \
--enable-google-ml-integration \
--database-flags cloudsql.enable_google_ml_integration=on \
--root-password=admin
Warten Sie, bis die Instanz erstellt wurde. Das kann einige Minuten dauern.
Nachdem Sie die Instanz erstellt haben, können Sie sie hier in der Cloud Console aufrufen.
Cloud SQL-Datenbank erstellen
Erstellen Sie eine SQL-Datenbank (tickets-db
) und gewähren Sie dem Cloud SQL-Dienstkonto Zugriff auf Vertex AI, damit wir Einbettungen für die Ähnlichkeitssuche erstellen können.
gcloud sql databases create tickets-db --instance=software-assistant
SERVICE_ACCOUNT_EMAIL=$(gcloud sql instances describe software-assistant --format="value(serviceAccountEmailAddress)")
echo $SERVICE_ACCOUNT_EMAIL
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" --role="roles/aiplatform.user"
Tabelle tickets
einrichten
Öffnen Sie in der Cloud Console (Cloud SQL) Cloud SQL Studio für die Instanz software-assistant
.
Melden Sie sich mit dem Nutzer postgres
und dem Passwort admin
in der tickets-db
-Datenbank an.
Öffnen Sie einen neuen Editor
-Tab.
Fügen Sie dann den folgenden SQL-Code ein, um die Tabelle einzurichten und Vektoreinbettungen zu erstellen. Drücken Sie die Taste Run
, um den Befehl auszuführen.
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
CREATE EXTENSION IF NOT EXISTS vector CASCADE;
GRANT EXECUTE ON FUNCTION embedding TO postgres;
CREATE TABLE tickets (
ticket_id SERIAL PRIMARY KEY, -- PostgreSQL's auto-incrementing integer type (SERIAL is equivalent to INT AUTO_INCREMENT)
title VARCHAR(255) NOT NULL, -- A concise summary or title of the bug/issue.
description TEXT, -- A detailed description of the bug.
assignee VARCHAR(100), -- The name or email of the person/team assigned to the ticket.
priority VARCHAR(50), -- The priority level (e.g., 'P0 - Critical', 'P1 - High').
status VARCHAR(50) DEFAULT 'Open', -- The current status of the ticket (e.g., 'Open', 'In Progress', 'Resolved'). Default is 'Open'.
creation_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- Timestamp when the ticket was first created. 'WITH TIME ZONE' is recommended for clarity and compatibility.
updated_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP -- Timestamp when the ticket was last updated. Will be managed by a trigger.
);
Die Tabelle tickets
wurde erstellt. Klicken Sie auf Clear
, um die alte Abfrage zu löschen.
Fügen Sie nun die Beispieldaten ein und klicken Sie noch einmal auf die Schaltfläche Run
.
INSERT INTO tickets (title, description, assignee, priority, status) VALUES
('Login Page Freezes After Multiple Failed Attempts', 'Users are reporting that after 3 failed login attempts, the login page becomes unresponsive and requires a refresh. No specific error message is displayed.', 'samuel.green@example.com', 'P0 - Critical', 'Open');
INSERT INTO tickets (title, description, assignee, priority, status) VALUES
('Dashboard Sales Widget Intermittent Data Loading Failure', 'The "Sales Overview" widget on the main dashboard intermittently shows a loading spinner but no data. Primarily affects Chrome browser users.', 'maria.rodriguez@example.com', 'P1 - High', 'In Progress');
INSERT INTO tickets (title, description, assignee, priority, status) VALUES
('Broken Link in Footer - Privacy Policy', 'The "Privacy Policy" hyperlink located in the website footer leads to a 404 "Page Not Found" error.', 'maria.rodriguez@example.com', 'P3 - Low', 'Resolved');
INSERT INTO tickets (title, description, assignee, priority, status) VALUES
('UI Misalignment on Mobile Landscape View (iOS)', 'On specific iOS devices (e.g., iPhone 14 models), the top navigation bar shifts downwards when the device is viewed in landscape orientation, obscuring content.', 'maria.rodriguez@example.com', 'P2 - Medium', 'In Progress');
INSERT INTO tickets (title, description, assignee, priority, status) VALUES
('Critical XZ Utils Backdoor Detected in Core Dependency (CVE-2024-3094)', 'Urgent: A sophisticated supply chain compromise (CVE-2024-3094) has been identified in XZ Utils versions 5.6.0 and 5.6.1. This malicious code potentially allows unauthorized remote SSH access by modifying liblzma. Immediate investigation and action required for affected Linux/Unix systems and services relying on XZ Utils.', 'frank.white@example.com', 'P0 - Critical', 'Open');
INSERT INTO tickets (title, description, assignee, priority, status) VALUES
('Database Connection Timeouts During Peak Usage', 'The application is experiencing frequent database connection timeouts, particularly during peak hours (10 AM - 12 PM EDT), affecting all users and causing service interruptions.', 'frank.white@example.com', 'P1 - High', 'Open');
INSERT INTO tickets (title, description, assignee, priority, status) VALUES
('Export to PDF Truncates Long Text Fields in Reports', 'When generating PDF exports of reports containing extensive text fields, the text is abruptly cut off at the end of the page instead of wrapping or continuing to the next page.', 'samuel.green@example.com', 'P1 - High', 'Open');
INSERT INTO tickets (title, description, assignee, priority, status) VALUES
('Search Filter "Date Range" Not Applying Correctly', 'The "Date Range" filter on the search results page does not filter records accurately; results outside the specified date range are still displayed.', 'samuel.green@example.com', 'P2 - Medium', 'Resolved');
INSERT INTO tickets (title, description, assignee, priority, status) VALUES
('Typo in Error Message: "Unathorized Access"', 'The error message displayed when a user attempts an unauthorized action reads "Unathorized Access" instead of "Unauthorized Access."', 'maria.rodriguez@example.com', 'P3 - Low', 'Resolved');
INSERT INTO tickets (title, description, assignee, priority, status) VALUES
('Intermittent File Upload Failures for Large Files', 'Users are intermittently reporting that file uploads fail without a clear error message or explanation, especially for files exceeding 10MB in size.', 'frank.white@example.com', 'P1 - High', 'Open');
Bei QuantumRoast möchten wir möglicherweise wissen, wann ein Fehler/Ticket zuletzt aktualisiert wurde.
Dazu können wir einen Trigger erstellen, um das Feld updated_time
jedes Mal zu aktualisieren, wenn ein Datensatz aktualisiert wird.
Klicken Sie auf Clear
und fügen Sie dann das folgende SQL ein, um einen Trigger zu implementieren.
Klicken Sie auf die Schaltfläche Run
, um den Befehl auszuführen.
CREATE OR REPLACE FUNCTION update_updated_time_tickets()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_time = NOW(); -- Set the updated_time to the current timestamp
RETURN NEW; -- Return the new row
END;
$$ language 'plpgsql';
CREATE TRIGGER update_tickets_updated_time
BEFORE UPDATE ON tickets
FOR EACH ROW -- This means the trigger fires for each row affected by the UPDATE statement
EXECUTE PROCEDURE update_updated_time_tickets();
Vektoreinbettungen aus dem Feld description
erstellen. Dadurch kann unser Agent eine Ähnlichkeitssuche in unserer Datenbank durchführen. Zum Beispiel: „Gibt es offene Probleme im Zusammenhang mit der Startseite der Website?“
ALTER TABLE tickets ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (embedding('text-embedding-005',description)) STORED;
Sie können jetzt die Datenbank abfragen, um zu prüfen, ob sie bereit ist.
SELECT * FROM tickets;
Es sollten 10 Zeilen zurückgegeben werden, die in etwa so aussehen:
Jetzt können Sie mit dem Programmieren beginnen.
4. Python-Projekt einrichten
Bevor wir mit der Entwicklung unseres Agents beginnen können, müssen wir sicherstellen, dass wir ein geeignetes Python-Projekt eingerichtet haben. Wir werden alles in Cloud Shell erledigen.
Erstellen Sie zuerst einen Ordner namens quantum-roast
und wechseln Sie in diesen:cd
mkdir quantum-roast && cd quantum-roast
Nachdem wir nun einen Ordner für unser Projekt haben, können wir das Projekt initialisieren und die entsprechenden Dateien erstellen, die wir benötigen.
Wir verwenden uv
(den extrem schnellen Paket- und Projektmanager von Python), der in Cloud Shell vorinstalliert ist, um unser Projekt und unsere Abhängigkeiten zu verwalten. Uv hilft uns, einige unserer Dateien einzurichten und virtuelle Umgebungen, Abhängigkeiten usw. zu verwalten.
Initialisieren Sie ein neues Projekt mit uv init
:
uv init --description "QuantumRoast Software Bug Assistant with ADK" --bare --python 3.10
Nach dem Ausführen des Befehls sollte eine pyproject.toml
-Datei für unser Projekt vorhanden sein. Führen Sie zur Überprüfung cat pyproject.toml
im Cloud Shell-Terminal aus:
cat pyproject.toml
Die Ausgabe sollte so aussehen:
[project] name = "quantum-roast" version = "0.1.0" description = "QuantumRoast Software Bug Assistant with ADK" requires-python = ">=3.10" dependencies = []
Es ist an der Zeit, google-adk
(ADK) als Abhängigkeit zu unserem Projekt hinzuzufügen. Dazu verwenden wir uv add
.
uv add google-adk==1.11.0
Dadurch wird google-adk
der Liste dependencies
in unserem pyproject.toml
hinzugefügt.
Das ADK erwartet eine bestimmte Projektstruktur, um optimale Ergebnisse zu erzielen.
quantum-roast/ software_bug_assistant/ __init__.py agent.py .env
Erstellen Sie den Ordner software_bug_assistant
und die Dateien darin:
mkdir software_bug_assistant && touch software_bug_assistant/__init__.py \
software_bug_assistant/agent.py \
software_bug_assistant/tools.py \
software_bug_assistant/.env
Prüfen Sie mit ls
, ob die Dateien erstellt wurden:
ls -a software_bug_assistant/
Sie sollten Folgendes sehen:
__init__.py . .. .env agent.py tools.py
Jetzt müssen Sie die Datei .env
mit den Umgebungsvariablen füllen, die für ADK erforderlich sind, um Gemini-Modelle richtig aufzurufen. Wir greifen über die Vertex AI API auf Gemini zu.
echo "GOOGLE_GENAI_USE_VERTEXAI=TRUE" >> software_bug_assistant/.env \
&& echo "GOOGLE_CLOUD_PROJECT=$PROJECT_ID" >> software_bug_assistant/.env \
&& echo "GOOGLE_CLOUD_LOCATION=us-central1" >> software_bug_assistant/.env
Führen Sie den folgenden Befehl aus, um zu prüfen, ob .env
korrekt ausgefüllt wurde:
cat software_bug_assistant/.env
Sie sollten Folgendes sehen, wobei your-project-id
Ihre Projekt-ID ist:
GOOGLE_GENAI_USE_VERTEXAI=TRUE GOOGLE_CLOUD_PROJECT=your-project-id GOOGLE_CLOUD_LOCATION=us-central1
Wir können jetzt mit der Erstellung unseres ADK-Agents beginnen.
5. Base ADK Agent
Wir beginnen mit einem einfachen ADK-Agenten, dem wir im Laufe dieses Workshops nach und nach Tools hinzufügen, um einen leistungsstarken Bug-Assistenten zu erstellen.
Öffnen Sie agent.py
im Cloud Shell-Editor:
cloudshell edit software_bug_assistant/agent.py
Fügen Sie den folgenden Code in agent.py
ein und speichern Sie die Datei Ctrl + s
:
from google.adk.agents import Agent
# --- Agent Definition (model, instructions, tools) ---
root_agent = Agent(
model="gemini-2.5-flash",
name="software_assistant",
instruction="""
You are a skilled expert in triaging and debugging software issues for a
coffee machine company, QuantumRoast.
""",
tools=[],
)
Führen Sie den neu erstellten Agenten aus, indem Sie die Entwickler-UI des ADK (adk web
) starten. Wenn Sie dies mit uv run
tun, wird automatisch eine virtuelle Umgebung mit installiertem ADK erstellt.
uv run adk web --port 8080 --reload_agents
In der Konsole sollte der erfolgreiche Start des ADK-Webservers angezeigt werden.
INFO: Started server process [1557] INFO: Waiting for application startup. +-----------------------------------------------------------------------------+ | ADK Web Server started | | | | For local testing, access at http://localhost:8080. | +-----------------------------------------------------------------------------+ INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)
Öffnen Sie die Webvorschau von Cloud Shell, um die Benutzeroberfläche zu sehen.
Sie sollten die ADK-Web-UI sehen.
Probieren Sie es aus und chatten Sie mit dem ADK-Agenten.
Fragen Sie den Agenten What day is it today?
.
In der Antwort sehen Sie, dass der Kundenservicemitarbeiter diese einfache Frage nicht beantworten kann. LLMs sind isolierte Systeme, die mit vergangenen Daten trainiert werden. Sie haben keinen Echtzeitkontext zu aktuellen Ereignissen oder dem aktuellen Datum – es sei denn, Sie stellen ihnen Tools zur Verfügung.
Es ist an der Zeit, den ersten Tooltyp des ADK zu implementieren: ein Funktionstool.
6. Funktionstool
Der erste und einfachste ADK-Tooltyp ist das Funktionstool. Genau das: eine Python-Funktion, die vom Agent aufgerufen wird.
Funktionstools sind sehr leistungsstark, da Sie benutzerdefinierten Code für den Agenten schreiben können, der als Tool aufgerufen werden soll, z. B. zum Ausführen einer Berechnung, zum Aufrufen einer API oder zum Abfragen einer Datenbank. Sie können einfache oder komplexe Funktionen sein.
Bei QuantumRoast möchten wir eine grundlegende Funktion definieren , um das Datum des aktuellen Tages abzurufen, damit wir später in diesem Lab Anfragen wie „Zeige mir Fehler der letzten Woche“ oder „Welcher Tag ist heute?“ bearbeiten können. Das kann jedem passieren.
In der Datei tools.py
im Ordner /software_bug_assistant
werden alle Tools organisiert, die wir in diesem Lab erstellen.
Öffnen Sie ein NEUES Terminal, indem Sie auf das Symbol +
klicken.
Legen Sie nun im neuen Terminal PROJECT_ID
fest und öffnen Sie tools.py
:
cd quantum-roast
export PROJECT_ID=$(gcloud config get project)
cloudshell edit software_bug_assistant/tools.py
Definieren Sie nun die Funktion get_current_date
, die als Funktionstool verwendet wird.
from datetime import datetime
# ----- Example of a Function tool -----
def get_current_date() -> dict:
"""
Get the current date in the format YYYY-MM-DD
"""
return {"current_date": datetime.now().strftime("%Y-%m-%d")}
Die Funktion ist jetzt definiert. Es ist an der Zeit, es als Tool an den Agenten zu übergeben.
Öffnen Sie agent.py
im Cloud Shell-Editor:
cloudshell edit software_bug_assistant/agent.py
Wir möchten die Funktion get_current_date
aus tools.py
importieren und an das tools
-Argument des Agents übergeben.
Die aktualisierte agent.py
sieht so aus:
from google.adk.agents import Agent
from .tools import get_current_date
# --- Agent Definition (model, instructions, tools) ---
root_agent = Agent(
model="gemini-2.5-flash",
name="software_assistant",
instruction="""
You are a skilled expert in triaging and debugging software issues for a
coffee machine company, QuantumRoast.
""",
tools=[get_current_date],
)
Wenn Sie nun zum Tab „Webvorschau“ zurückkehren, auf dem die ADK-Web-UI ausgeführt wird, und What day is it today?
noch einmal fragen…
Der Agent kann das Datum erfolgreich ermitteln, indem er das Funktionstool get_current_date
aufruft. 🎉
Sehen wir uns den nächsten ADK-Tooltyp an.
7. Integriertes Tool
Eine weitere Art von ADK-Tool ist ein integriertes Tool. Diese Tools arbeiten mit den wichtigsten Modellfunktionen von Google zusammen, z. B. der Codeausführung innerhalb des Modells selbst. Wir können das integrierte Tool Google Suche an unseren Bug-Assistenten anhängen, um ihm relevanten Kontext zu liefern, indem wir ihm Zugriff auf die Websuche gewähren. So kann der Kundenservicemitarbeiter aktuellere Informationen zu einem Fehler oder einer bekannten Sicherheitslücke erhalten.
Öffnen Sie die Datei tools.py
, um Unterstützung für das integrierte Tool für die Google Suche hinzuzufügen.
cloudshell edit software_bug_assistant/tools.py
Fügen Sie am Ende von tools.py
Folgendes hinzu:
# ----- Built-in Tool Imports -----
from google.adk.agents import Agent
from google.adk.tools import google_search
from google.adk.tools.agent_tool import AgentTool
# ----- Example of a Built-in Tool -----
search_agent = Agent(
model="gemini-2.5-flash",
name="search_agent",
description="A specialist in Google Search.",
instruction="""
You're a specialist in Google Search.
""",
tools=[google_search],
)
search_tool = AgentTool(search_agent)
Hier wird das Google Suche-Tool in einen eigenen Agenten mit eigenen Systemanweisungen eingebunden. Es wird also ein Agent als Tool verwendet.
Jetzt können wir search_tool
in den Stamm-Agenten in agent.py
importieren und übergeben:
cloudshell edit software_bug_assistant/agent.py
Sie können agent.py
durch den folgenden Code ersetzen, um search_tool
einzufügen:
from google.adk.agents import Agent
from .tools import get_current_date, search_tool
# --- Agent Definition (model, instructions, tools) ---
root_agent = Agent(
model="gemini-2.5-flash",
name="software_assistant",
instruction="""
You are a skilled expert in triaging and debugging software issues for a
coffee machine company, QuantumRoast.
""",
tools=[get_current_date, search_tool],
)
Speichere die Datei und kehre zu dem Tab zurück, auf dem die ADK-Web-UI ausgeführt wird.
Wir bei QuantumRoast möchten sicherstellen, dass unsere Website und Software vor Common Vulnerabilities and Exposures (CVEs) geschützt sind. CVEs sind öffentliche Cybersicherheitslücken. Wir können das neue Google-Suchtool unseres Agenten verwenden, um im Web nach den zuletzt entdeckten CVEs zu suchen.
Führen Sie die folgende Abfrage aus: Do a web search for 5 of the most recent CVEs?
.
Unser Agent sollte search_agent
aufrufen, um im Web zu suchen.
Unser Kundenservicemitarbeiter hat die Möglichkeit, im Web zu suchen, über das integrierte Tool des ADK für die Google Suche freigeschaltet. 🎉
Kommen wir zum nächsten ADK-Tooltyp.
8. Drittanbieter-Tool
Das ADK ist so konzipiert, dass es sich problemlos erweitern lässt. So können Sie Tools aus anderen KI-Agent-Frameworks von Drittanbietern wie CrewAI und LangChain nahtlos einbinden. Diese Interoperabilität ist entscheidend, da sie eine schnellere Entwicklung und die Wiederverwendung vorhandener Tools ermöglicht.
Um unseren Bug-Agent in die leistungsstarken Q&A-Daten von StackOverflow einzubinden, können wir auf die umfangreiche Tool-Bibliothek von LangChain zurückgreifen, insbesondere auf das StackExchange API Wrapper-Tool. Das ADK unterstützt Drittanbietertools wie LangChain. Das Hinzufügen dieses Tools zu unserem ADK-Agenten erfordert also nur wenige Zeilen Code.
Zuerst müssen wir unserem Projekt neue Abhängigkeiten für LangChain und StackOverflow (langchain-community
und stackapi
) hinzufügen:
uv add langchain-community==0.3.27 stackapi==0.3.1
Öffnen Sie die Datei tools.py
, um Unterstützung für das LangChain StackExchange-Tool hinzuzufügen.
cloudshell edit software_bug_assistant/tools.py
Fügen Sie am Ende von tools.py
Folgendes hinzu:
# ----- Example of a Third-Party Tool -----
from google.adk.tools.langchain_tool import LangchainTool
from langchain_community.tools import StackExchangeTool
from langchain_community.utilities import StackExchangeAPIWrapper
stack_exchange_tool = StackExchangeTool(api_wrapper=StackExchangeAPIWrapper())
langchain_tool = LangchainTool(stack_exchange_tool)
Jetzt können wir langchain_tool
in den Stamm-Agenten in agent.py
importieren und übergeben:
cloudshell edit software_bug_assistant/agent.py
Sie können agent.py
durch den folgenden Code ersetzen, um langchain_tool
einzufügen:
from google.adk.agents import Agent
from .tools import get_current_date, langchain_tool, search_tool
# --- Agent Definition (model, instructions, tools) ---
root_agent = Agent(
model="gemini-2.5-flash",
name="software_assistant",
instruction="""
You are a skilled expert in triaging and debugging software issues for a
coffee machine company, QuantumRoast.
""",
tools=[get_current_date, search_tool, langchain_tool],
)
Speichern Sie die Datei und kehren Sie zum geöffneten Tab mit der ADK-Web-UI zurück.
Fragen Sie den Agenten nach den vorherigen CVEs "Are there similar issues on stack exchange?"
oder nach etwas Neuem wie "Our database queries with SQLAlchemy seem to be timing out, is there anything on StackExchange relevant to this?"
.
Unser Agent hat jetzt erfolgreich ein LangChain-Tool im ADK verwendet, um StackOverflow abzufragen. 🥳
Zeit für den nächsten ADK-Tooltyp… MCP-Tools
9. MCP-Tool (Datenbank)
MCP steht für Model Context Protocol. Es handelt sich um ein offenes Protokoll, das 2024 von Anthropic eingeführt wurde. MCP bietet eine Abstraktionsebene zwischen Ihrem KI-Agenten und den Tool-Back-Ends (APIs, Datenbanken).
Für MCP gelten einige eigene Spezifikationen. Im Gegensatz zu Standard-HTTP bietet MCP eine zustandsbehaftete bidirektionale Verbindung zwischen Client und Server. Es hat eine eigene Methode zum Definieren von Tools und toolspezifischen Fehlermeldungen. Ein Toolanbieter kann dann MCP-Server auf Grundlage seiner APIs erstellen und ein oder mehrere vorgefertigte Tools für Entwickler und Nutzer bereitstellen. Anschließend können Agent-Frameworks MCP-Clients in einer Agent-Anwendung initialisieren, um diese Tools zu erkennen und aufzurufen.
Bei QuantumRoast haben wir eine Cloud SQL for PostgreSQL-Datenbank für interne Softwarefehler. Wir möchten ADK-Tools erstellen, damit unser Agent bestimmte Abfragen in unserer Datenbank ausführen kann.
Am einfachsten geht das mit der MCP Toolbox for Databases , einem Open-Source-MCP-Server für Datenbanken. Die Toolbox unterstützt mehr als 15 Datenbanken, darunter Cloud SQL.
Die Toolbox bietet:
- Vereinfachte Entwicklung: Sie können Tools mit weniger als 10 Codezeilen in Ihren Agenten einbinden, Tools für mehrere Agenten oder Frameworks wiederverwenden und neue Versionen von Tools einfacher bereitstellen.
- Bessere Leistung: Best Practices wie Verbindungs-Pooling und Authentifizierung.
- Mehr Sicherheit: Integrierte Authentifizierung für einen sichereren Zugriff auf Ihre Daten
- End-to-End-Beobachtbarkeit: Sofort einsatzbereite Messwerte und Tracing mit integrierter Unterstützung für OpenTelemetry.
Das ADK unterstützt MCP Toolbox for Database-Tools, was die Integration beschleunigt.
MCP Toolbox for Databases-Server in Cloud Run bereitstellen
Zuerst stellen wir den MCP Toolbox for Databases-Server in Cloud Run bereit und verweisen ihn auf unsere Cloud SQL-Instanz.
Für die Toolbox ist eine YAML-Datei zur Konfiguration erforderlich, in der Sie die Datenbankquelle und die zu konfigurierenden Tools angeben.
Erstellen Sie eine tools.yaml
-Datei für die Bereitstellung.
cloudshell edit tools.yaml
Fügen Sie den folgenden Inhalt in die tools.yaml
ein:
sources:
postgresql:
kind: cloud-sql-postgres
project: ${PROJECT_ID}
region: us-central1
instance: software-assistant
database: tickets-db
user: postgres
password: admin
tools:
search-tickets:
kind: postgres-sql
source: postgresql
description: Search for similar tickets based on their descriptions.
parameters:
- name: query
type: string
description: The query to perform vector search with.
statement: |
SELECT ticket_id, title, description, assignee, priority, status, (embedding <=> embedding('text-embedding-005', $1)::vector) as distance
FROM tickets
ORDER BY distance ASC
LIMIT 3;
get-ticket-by-id:
kind: postgres-sql
source: postgresql
description: Retrieve a ticket's details using its unique ID.
parameters:
- name: ticket_id
type: string
description: The unique ID of the ticket.
statement: SELECT * FROM tickets WHERE ticket_id = $1;
get-tickets-by-assignee:
kind: postgres-sql
source: postgresql
description: Search for tickets based on assignee (email).
parameters:
- name: assignee
type: string
description: The email of the assignee.
statement: SELECT * FROM tickets WHERE assignee ILIKE '%' || $1 || '%';
update-ticket-priority:
kind: postgres-sql
source: postgresql
description: Update the priority of a ticket based on its ID.
parameters:
- name: priority
type: string
description: The priority of the ticket. Can be one of 'P0 - Critical', 'P1 - High', 'P2 - Medium', or 'P3 - Low'.
- name: ticket_id
type: string
description: The ID of the ticket.
statement: UPDATE tickets SET priority = $1 WHERE ticket_id = $2;
update-ticket-status:
kind: postgres-sql
source: postgresql
description: Update the status of a ticket based on its ID.
parameters:
- name: status
type: string
description: The new status of the ticket (e.g., 'Open', 'In Progress', 'Closed', 'Resolved').
- name: ticket_id
type: string
description: The ID of the ticket.
statement: UPDATE tickets SET status = $1 WHERE ticket_id = $2;
get-tickets-by-status:
kind: postgres-sql
source: postgresql
description: Search for tickets based on their current status.
parameters:
- name: status
type: string
description: The status of the tickets to retrieve (e.g., 'Open', 'In Progress', 'Closed', 'Resolved').
statement: SELECT * FROM tickets WHERE status ILIKE '%' || $1 || '%';
get-tickets-by-priority:
kind: postgres-sql
source: postgresql
description: Search for tickets based on their priority.
parameters:
- name: priority
type: string
description: The priority of the tickets to retrieve (e.g., 'P0 - Critical', 'P1 - High', 'P2 - Medium', 'P3 - Low').
statement: SELECT * FROM tickets WHERE priority ILIKE '%' || $1 || '%';
create-new-ticket:
kind: postgres-sql
source: postgresql
description: Create a new software ticket.
parameters:
- name: title
type: string
description: The title of the new ticket.
- name: description
type: string
description: A detailed description of the bug or issue.
- name: assignee
type: string
description: (Optional) The email of the person to whom the ticket should be assigned.
- name: priority
type: string
description: (Optional) The priority of the ticket. Can be 'P0 - Critical', 'P1 - High', 'P2 - Medium', or 'P3 - Low'. Default is 'P3 - Low'.
- name: status
type: string
description: (Optional) The initial status of the ticket. Default is 'Open'.
statement: INSERT INTO tickets (title, description, assignee, priority, status) VALUES ($1, $2, $3, COALESCE($4, 'P3 - Low'), COALESCE($5, 'Open')) RETURNING ticket_id;
get-tickets-by-date-range:
kind: postgres-sql
source: postgresql
description: Retrieve tickets created or updated within a specific date range.
parameters:
- name: start_date
type: string
description: The start date (inclusive) for the range (e.g., 'YYYY-MM-DD').
- name: end_date
type: string
description: The end date (inclusive) for the range (e.g., 'YYYY-MM-DD').
- name: date_field
type: string
description: The date field to filter by ('creation_time' or 'updated_time').
statement: SELECT * FROM tickets WHERE CASE WHEN $3 = 'creation_time' THEN creation_time ELSE updated_time END BETWEEN $1::timestamp AND $2::timestamp;
toolsets:
tickets_toolset:
- search-tickets
- get-ticket-by-id
- get-tickets-by-assignee
- get-tickets-by-status
- get-tickets-by-priority
- get-tickets-by-date-range
- update-ticket-priority
- update-ticket-status
- create-new-ticket
In der YAML-Datei werden 9 Tools definiert, die sich auf die QuantumRoast-Tickets-Datenbank beziehen.
Jetzt müssen wir ein Dienstkonto für den Toolbox Cloud Run-Dienst konfigurieren, ihm die Berechtigung für den Zugriff auf Cloud SQL und Secret Manager gewähren und ein Secret Manager-Secret für unsere tools.yaml
-Datei erstellen.
Im Secret Manager wird die Datei tools.yaml
gespeichert, da sie vertrauliche Cloud SQL-Anmeldedaten enthält.
gcloud iam service-accounts create toolbox-identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/secretmanager.secretAccessor
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/cloudsql.client
gcloud secrets create tools --data-file=tools.yaml
Zeit, die MCP-Toolbox für Datenbanken in Cloud Run bereitzustellen. Wir verwenden die neueste Release-Version des MCP Toolbox-Container-Images.
gcloud run deploy toolbox \
--image us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest \
--service-account toolbox-identity \
--region us-central1 \
--set-secrets "/app/tools.yaml=tools:latest" \
--set-env-vars="PROJECT_ID=$PROJECT_ID" \
--args="--tools-file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--allow-unauthenticated
Warten Sie, bis die Bereitstellung abgeschlossen ist…
Prüfen Sie, ob Toolbox ausgeführt wird. Fragen Sie dazu die Cloud Run-Logs ab:
gcloud run services logs read toolbox --region us-central1 --limit 10
Hier sollten Sie dies sehen:
2025-08-20 18:03:55 2025-08-20T18:03:55.465847801Z INFO "Initialized 1 sources." 2025-08-20 18:03:55 2025-08-20T18:03:55.466152914Z INFO "Initialized 0 authServices." 2025-08-20 18:03:55 2025-08-20T18:03:55.466374245Z INFO "Initialized 9 tools." 2025-08-20 18:03:55 2025-08-20T18:03:55.466477938Z INFO "Initialized 2 toolsets." 2025-08-20 18:03:55 2025-08-20T18:03:55.467492303Z INFO "Server ready to serve!"
Speichern Sie die Cloud Run-URL für den Toolbox-Dienst als Umgebungsvariable, damit der ADK-Agent weiß, wo er sie findet.
export MCP_TOOLBOX_URL=$(gcloud run services describe toolbox --region us-central1 --format "value(status.url)")
echo MCP_TOOLBOX_URL=$MCP_TOOLBOX_URL >> software_bug_assistant/.env
QuantumRoast-Agent aktualisieren
Als Nächstes müssen wir unserem Projekt die Abhängigkeit für das MCP Toolbox for Databases SDK (toolbox-core
) hinzufügen:
uv add toolbox-core==0.5.0
Öffnen Sie die Datei tools.py
, um Unterstützung für die MCP Toolbox-Tools hinzuzufügen.
cloudshell edit software_bug_assistant/tools.py
Fügen Sie am Ende von tools.py
Folgendes hinzu:
# ----- Example MCP Toolbox for Databases tools -----
import os
from toolbox_core import ToolboxSyncClient
TOOLBOX_URL = os.getenv("MCP_TOOLBOX_URL", "http://127.0.0.1:5000")
# Initialize Toolbox client
toolbox = ToolboxSyncClient(TOOLBOX_URL)
# Load all the tools from toolset
toolbox_tools = toolbox.load_toolset("tickets_toolset")
Jetzt können wir toolbox_tools
in den Stamm-Agenten in agent.py
importieren und übergeben:
cloudshell edit software_bug_assistant/agent.py
Sie können agent.py
durch den folgenden Code ersetzen, um toolbox_tools
einzufügen:
from google.adk.agents import Agent
from .tools import get_current_date, langchain_tool, search_tool, toolbox_tools
# --- Agent Definition (model, instructions, tools) ---
root_agent = Agent(
model="gemini-2.5-flash",
name="software_assistant",
instruction="""
You are a skilled expert in triaging and debugging software issues for a
coffee machine company, QuantumRoast.
""",
tools=[get_current_date, search_tool, langchain_tool, *toolbox_tools],
)
Speichern Sie die Datei und kehren Sie zum geöffneten Tab mit der ADK-Web-UI zurück.
Sie können jetzt Fragen zu den Tickets stellen, die in unserer internen Cloud SQL-Tickets-Datenbank gespeichert sind.
Stellen Sie eine Frage wie eine der folgenden:
I am seeing an issue with database timeouts, has anyone else seen a similar issue?
How many bugs are assigned to samuel.green@example.com? Show a table.
Can you bump the priority of ticket with ID 6 to to P0 - Critical priority
Create a new ticket
(der Agent führt Sie durch die Erstellung des Fehlers)
Unser ADK-Agent hat unsere Datenbank jetzt erfolgreich über MCP Toolbox for Databases-Tools abgefragt. 🚀
10. Optional: MCP-Tool (API)
Wie sieht es aus, wenn wir unseren ADK-Agenten mit MCP-Tools verbinden möchten, die kein eigenes SDK haben, wie z. B. die MCP Toolbox for Databases?
Das ADK unterstützt generische MCP-Tools über die Klasse MCPToolset
. Die Klasse MCPToolset
ist der primäre Mechanismus des ADK zum Einbinden von Tools von einem MCP-Server.
MCPToolset
kann verwendet werden, um eine Verbindung zu lokalen oder Remote-MCP-Servern herzustellen. Bei QuantumRoast möchten wir unseren Agenten mit dem Remote-MCP-Server von GitHub verbinden, um die APIs von GitHub einfach aufrufen zu können. So kann unser Kundenservicemitarbeiter Informationen zu Problemen aus öffentlichen Software-Repositories oder sogar aus unseren eigenen Codebases abrufen. Der GitHub MCP-Server stellt verschiedene Teile der GitHub-Funktionalität zur Verfügung, von Problemen und Pull-Anfragen bis hin zu Benachrichtigungen und Codesicherheit.
Persönliches GitHub-Zugriffstoken (PAT)
Für die Authentifizierung beim GitHub-MCP-Server benötigen Sie ein persönliches GitHub-Zugriffstoken.
So erhalten Sie eine:
- Rufen Sie die GitHub-Entwicklereinstellungen auf.
- Klicken Sie auf „Personal access tokens“ –> „Tokens (classic)“ (Persönliche Zugriffstokens –> Tokens (klassisch)).
- Klicken Sie auf „Neues Token generieren“ –> „Neues Token generieren (klassisch)“.
- Geben Sie Ihrem Token einen aussagekräftigen Namen.
- Legen Sie ein Ablaufdatum für Ihr Token fest.
- Wichtig: Aus Sicherheitsgründen sollten Sie Ihrem Token nur die erforderlichen Bereiche zuweisen. Für den Lesezugriff auf Repositories sind häufig die Bereiche
repo:status
,public_repo
undread:user
ausreichend. Gewähren Sie nicht das gesamte Repository oder Administratorberechtigungen, es sei denn, dies ist unbedingt erforderlich. - Klicken Sie auf
Generate token
. - Kopieren Sie das generierte Token.
Führen Sie im Cloud Shell-Terminal den folgenden Befehl aus, um Ihren GitHub-PAT festzulegen, damit der Agent ihn verwenden kann. Ersetzen Sie YOUR_GITHUB_PAT
durch das generierte PAT.
export GITHUB_PAT=YOUR_GITHUB_PAT
QuantumRoast-Agent aktualisieren
Für unseren Bug-Assistenten stellen wir nur einige schreibgeschützte GitHub-Tools zur Verfügung, damit QuantumRoast-Mitarbeiter Probleme im Zusammenhang mit Open-Source-Abhängigkeiten finden und so die Ursache von Fehlern ermitteln können, die im internen Ticketsystem angezeigt werden. Wir verwenden das MCPToolset
des ADK mit einem tool_filter
, um das einzurichten. Die tool-filter
macht nur die GitHub-Tools verfügbar, die wir benötigen. Dadurch werden nicht nur die Tools ausgeblendet, auf die Nutzer nicht zugreifen sollen (z. B. sensible Repository-Aktionen), sondern auch das Modell des Agents wird geschützt, damit es nicht überfordert wird, wenn es das richtige Tool für die Aufgabe auswählen muss.
Öffnen Sie die Datei tools.py
, um Unterstützung für die GitHub-Tools hinzuzufügen.
cloudshell edit software_bug_assistant/tools.py
Fügen Sie am Ende von tools.py
Folgendes hinzu:
# ----- Example MCP Tools with MCPToolset (GitHub) -----
from google.adk.tools.mcp_tool import MCPToolset, StreamableHTTPConnectionParams
mcp_tools = MCPToolset(
connection_params=StreamableHTTPConnectionParams(
url="https://api.githubcopilot.com/mcp/",
headers={
"Authorization": "Bearer " + os.getenv("GITHUB_PAT"),
},
),
# Read only tools
tool_filter=[
"search_repositories",
"search_issues",
"list_issues",
"get_issue",
"list_pull_requests",
"get_pull_request",
],
)
Beachten Sie, dass wir auch das persönliche GitHub-Zugriffstoken (Personal Access Token, PAT) für unsere MCPToolset
-Definition angeben müssen, genau wie Sie ein Autorisierungstoken beim Einrichten eines Standard-API-Clients in Ihrem Code angeben würden. Dieses PAT ist so konfiguriert, dass nur auf öffentliche Repository-Daten zugegriffen werden kann. Es gibt keine Bereiche für vertrauliche Nutzer- oder Repository-Aktionen.
Jetzt können wir mcp_tools
in den Stamm-Agenten in agent.py
importieren und übergeben:
cloudshell edit software_bug_assistant/agent.py
Sie können agent.py
durch den folgenden Code ersetzen, um mcp_tools
einzufügen:
from google.adk.agents import Agent
from .tools import get_current_date, langchain_tool, mcp_tools, search_tool, toolbox_tools
# --- Agent Definition (model, instructions, tools) ---
root_agent = Agent(
model="gemini-2.5-flash",
name="software_assistant",
instruction="""
You are a skilled expert in triaging and debugging software issues for a
coffee machine company, QuantumRoast.
""",
tools=[get_current_date, search_tool, langchain_tool, *toolbox_tools, mcp_tools],
)
Speichern Sie die Datei und kehren Sie zum geöffneten Tab mit der ADK-Web-UI zurück.
Wir haben jetzt eine Reihe von GitHub MCP-Tools, die unser Agent aufrufen kann. Die Dienste von QuantumRoast basieren auf XZ Utils, einem Tool zur Datenkomprimierung. In unserem internen Bug-Ticketsystem wird ein CVE (Sicherheitslücke) aus dem letzten Jahr verfolgt, das wir mithilfe der StackOverflow- und Google-Suchtools auf das GitHub-Repository für XZ Utils zurückführen können. Wir können dann eines der MCP-Tools von GitHub, search_issues
, verwenden, um zu ermitteln, wann und wie das CVE gepatcht wurde:
Fragen Sie den Kundenservicemitarbeiter Folgendes:
Find the official XZ Utils GitHub repository
Search the repository for issues related to CVE-2024-3094
Sie sollten sehen, dass die GitHub-Tools vom Agent aufgerufen werden.
Der QuantumRoast ADK-Agent kann jetzt mit den GitHub MCP-Servertools interagieren. 🤩
11. Glückwunsch
Glückwunsch! Sie haben den QuantumRoast-Bug-Assistenten mit dem Agent Development Kit (ADK) erstellt und verschiedene Tooltypen integriert, um seine Funktionen zu erweitern. Sie haben mit einem einfachen Agent begonnen und nach und nach Funktions-, integrierte, Drittanbieter- und MCP-Tools hinzugefügt.
Behandelte Themen
- Ein Python-Projekt für die ADK-Entwicklung einrichten
- So erstellen Sie einen einfachen ADK-Agenten.
- Funktionstools implementieren und verwenden
- Integrierte Tools wie die Google Suche einbinden
- Wie Sie Drittanbieter-Tools aus Frameworks wie LangChain im ADK nutzen können.
- Verwendung von MCP-Tools für die Interaktion mit Datenbanken (Cloud SQL) und APIs
Bereinigen
Sie können Ihr Cloud-Projekt löschen, um zusätzliche Gebühren zu vermeiden.
Während für Cloud Run keine Kosten anfallen, wenn der Dienst nicht verwendet wird, wird Ihnen dennoch das Speichern des Container-Images in Artifact Registry möglicherweise in Rechnung gestellt. Durch das Löschen des Cloud-Projekts wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.
Wenn Sie möchten, können Sie das Projekt löschen:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Möglicherweise möchten Sie auch unnötige Ressourcen von Ihrer Cloud Shell-Festplatte löschen. Du hast folgende Möglichkeiten:
- Löschen Sie das Codelab-Projektverzeichnis:
rm -rf ~/quantum-roast
- Warnung! Diese Aktion kann nicht rückgängig gemacht werden. Wenn Sie alles in Cloud Shell löschen möchten, um Speicherplatz freizugeben, können Sie Ihr gesamtes Basisverzeichnis löschen. Achten Sie darauf, dass alles, was Sie behalten möchten, an einem anderen Ort gespeichert ist.
sudo rm -rf $HOME