1. Giriş
Bu laboratuvarda, Agent Development Kit (ADK) ile bir aracı oluşturacaksınız. ADK'yı ve çeşitli araç türlerini kullanarak yazılım hatası asistanı aracısı oluşturmayı öğreneceksiniz. Temel bir asistanla başlayıp işlev araçları, yerleşik araçlar, üçüncü taraf araçları ve Model Context Protocol (MCP) araçları gibi araçları kademeli olarak ekleyerek asistanın özelliklerini geliştireceksiniz.
Neler öğreneceksiniz?
- ADK geliştirme için Python projesi oluşturma
- Temel bir ADK aracısı oluşturma
- İşlev araçlarını uygulama ve kullanma
- Google Arama gibi yerleşik araçları entegre etme
- ADK'da LangChain gibi çerçevelerdeki üçüncü taraf araçlarından nasıl yararlanılacağı.
- Veritabanları (Cloud SQL) ve API'lerle etkileşim kurmak için MCP Araçları'nı kullanma
2. Genel Bakış
Küresel bir kahve makinesi şirketi olan QuantumRoast'ta proje yöneticisi olduğunuzu düşünün.
Ekip arkadaşlarınızın mühendislik yol haritaları, ani strateji değişiklikleri (artık matcha yapıyoruz!) ve müşterilerden gelen destek talepleri (hatalı fatura sistemlerinden 7/24 tiz ses çıkaran kahve makinesine kadar her şey) arasında yolunu bulmasına yardımcı olursunuz.
Normal bir günde yaklaşık elli açık tarayıcı sekmeniz var: dahili destek kaydı sistemi, e-posta, sohbet, GitHub, Google Arama, StackOverflow ve daha fazlası. İşinizi ve iş arkadaşlarınızı seviyorsunuz ancak bazı günler kendinizi bunalmış hissediyorsunuz.
Yazılım destek kaydı oluşturmanıza ve önceliklendirmenize, ayrıca sorunları ayıklamanıza yardımcı olacak bir yardımcı oluşturabilseydik? Yapay zeka temsilcisi bunu mümkün kılar.
Agent Development Kit (ADK)
Agent Development Kit (ADK), yapay zeka aracı geliştirme ve dağıtma için esnek ve modüler bir çerçevedir. ADK, Gemini ve Google ekosistemi için optimize edilmiş olsa da modelden ve dağıtımdan bağımsızdır ve diğer çerçevelerle uyumlu olacak şekilde tasarlanmıştır. ADK, geliştiricilerin basit görevlerden karmaşık iş akışlarına kadar değişen aralıklarda, yazılım geliştirmeye benzer bir şekilde, kolayca aracı mimarileri oluşturmasına, dağıtmasına ve düzenlemesine olanak tanımak için tasarlanmıştır.
ADK, QuantumRoast yazılım hatası asistanımızı oluşturmak için kullanacağımız çerçevedir.
Araçlara Giriş
Yapay zeka temsilcileri, bir sorunu çözmek için yalnızca sabit kodlanmış mantığı değil, modelleri de kullanır. Ancak yapay zeka aracıları, yalnızca LLM tabanlı akıl yürütme yapmakla kalmaz. Aynı zamanda harici veriler toplama ve ardından kullanıcı adına işlem yapma konusunda da benzersiz bir güce sahiptir. Yapay zeka temsilcisi, bir sorunu nasıl çözeceğinizi söylemek yerine sorunu çözmenize yardımcı olabilir. Bunu nasıl yapabiliriz? Araçlarla!
Araç, yapay zeka aracısının dünyayla etkileşim kurmasına yardımcı olan bir özelliktir. Araçlar neredeyse her şey olabilir: satır içi işlev, barındırılan veritabanı, üçüncü taraf API'si veya hatta başka bir aracı. Agent Development Kit (ADK) gibi yapay zeka aracısı çerçeveleri, araçlar için yerleşik destek sunar ve birazdan bahsedeceğimiz çeşitli araç türlerini destekler.
Peki bir aracı ne zaman ve nasıl arayacağını temsilci nasıl bilir? Aracının modeli burada birkaç önemli rol oynar.
Bunlardan ilki araç seçimidir. Temsilcimize bir araç listesi ve bu araçların nasıl kullanılacağına dair bazı talimatlar veriyoruz. Kullanıcı, temsilciye istem gönderdiğinde temsilcinin modeli, kullanıcıya yardımcı olmak için hangi araçların neden çağrılacağını belirlemeye yardımcı olur.
İkinci önemli adım işlev çağrısıdır. Model aslında aracı çağırmadığı, bunun yerine istek gövdesini biçimlendirerek aracı çağırmaya hazırlandığı için işlev çağrısı biraz yanlış bir adlandırmadır. Çerçeve daha sonra aracı çağırmak için bu biçimlendirilmiş istek gövdesini kullanır.
Son olarak, model bu araçtan gelen yanıtı (ör. veritabanındaki açık hataların listesi) yorumlamaya yardımcı olur ve daha fazla işlem yapılıp yapılmayacağına veya kullanıcıya bu bilgilerle yanıt verilip verilmeyeceğine karar verir.
Tüm bunları uygulamalı olarak görmek için ADK Python'u kullanarak QuantumRoast hata asistanı aracını oluşturma zamanı.
3. Başlamadan önce
Google Cloud projesi kurulumu
- Google Hesabınız yoksa Google Hesabı oluşturmanız gerekir.
- İş veya okul hesabı yerine kişisel hesap kullanıyorsanız. İş ve okul hesaplarında, bu laboratuvar için gereken API'leri etkinleştirmenizi engelleyen kısıtlamalar olabilir.
- Google Cloud Console'da oturum açın.
- Cloud Console'da faturalandırmayı etkinleştirin.
- Bu laboratuvarı tamamlamak için 1 ABD dolarından daha az tutarda bulut kaynağı kullanmanız gerekir.
- Daha fazla ödeme alınmaması için bu laboratuvarın sonundaki adımları uygulayarak kaynakları silebilirsiniz.
- Yeni kullanıcılar 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
- Yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanmayı seçin.
Cloud Shell Düzenleyici'yi açma
- Cloud Shell Düzenleyici'ye gidin.
- Terminal ekranın alt kısmında görünmüyorsa açın:
- Hamburger menüsünü
tıklayın.
- Terminal'i tıklayın.
- Yeni Terminal'i tıklayın.
- Hamburger menüsünü
- Terminalde, projenizi şu komutla ayarlayın (
YOUR_PROJECT_ID
yerine kendi projenizi girin):- Biçim:
gcloud config set project YOUR_PROJECT_ID
- Örnek:
gcloud config set project lab-project-id-example
- Proje kimliğinizi hatırlamıyorsanız:
- Tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
- Tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
- Biçim:
- Yetkilendirmeniz istenirse devam etmek için Yetkilendir'i tıklayın.
- Şu mesajı görmeniz gerekir:
Updated property [core/project].
WARNING
simgesini görüyorsanız veDo you want to continue (Y/N)?
soruluyorsa proje kimliğini yanlış girmiş olabilirsiniz.N
tuşuna,Enter
tuşuna basın vegcloud config set project
komutunu tekrar çalıştırmayı deneyin. - Terminalde, sonraki adımlarda kullanılacak
PROJECT_ID
ortam değişkenini ayarlayın.export PROJECT_ID=$(gcloud config get project)
API'leri etkinleştir
Terminalde, gerekli Google Cloud API'lerini etkinleştirmek için aşağıdaki komutu çalıştırın:
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
PostgreSQL için Cloud SQL örneği oluşturma
QuantumRoast, tüm dahili destek kayıtlarını içeren bir hata kaydı veritabanına sahiptir. PostgreSQL için Cloud SQL örneği oluşturarak kurulumu yapalım.
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
Örneğin oluşturulmasını bekleyin (birkaç dakika sürebilir).
Oluşturulduktan sonra örneğinizi Cloud Console'da buradan görüntüleyebilirsiniz.
Cloud SQL veritabanı oluşturma
SQL veritabanı oluşturun (tickets-db
) ve Cloud SQL hizmet hesabına Vertex AI'a erişim izni verin (böylece benzerlik araması yapmak için yerleştirmeler oluşturabiliriz).
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"
tickets
tablosunu ayarlama
Cloud Console'dan (Cloud SQL), software-assistant
örneği için Cloud SQL Studio'yu açın.
tickets-db
kullanıcısını ve admin
şifresini kullanarak tickets-db
veritabanına giriş yapın.postgres
Yeni bir Editor
sekmesi açın.
Ardından, tabloyu ayarlamak ve vektör yerleştirmeleri oluşturmak için aşağıdaki SQL kodunu yapıştırın. Komutu yürütmek için Run
düğmesine basın.
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.
);
tickets
tablosu oluşturuldu. Eski sorguyu temizlemek için Clear
simgesini tıklayın.
Şimdi örnek verileri ekleyin ve Run
düğmesine tekrar basın.
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');
QuantumRoast'ta bir hatanın/talebin en son ne zaman güncellendiğini bilmek isteyebiliriz.
Bunun için, bir kayıt her güncellendiğinde updated_time
alanını güncelleyecek bir tetikleyici oluşturabiliriz.
Clear
simgesini tıklayın ve ardından tetikleyici uygulamak için aşağıdaki SQL'i yapıştırın.
Yürütmek için Run
düğmesine basın.
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();
description
alanından vektör yerleştirmeleri oluşturun. Bu sayede temsilcimiz, veritabanımızda benzerlik araması yapabilir. Örneğin, "Web sitelerinin ana sayfasıyla ilgili açık sorunlar var mı?".
ALTER TABLE tickets ADD COLUMN embedding vector(768) GENERATED ALWAYS AS (embedding('text-embedding-005',description)) STORED;
Artık veritabanının hazır olup olmadığını doğrulamak için sorgu gönderebilirsiniz.
SELECT * FROM tickets;
Aşağıdakine benzeyen 10 satır döndürülür:
Şimdi de işin eğlenceli kısmına, yani koda geçmeye hazırsınız.
4. Python Proje Ayarları
Ajanımızı oluşturmaya başlamadan önce uygun bir Python projesi kurulumumuz olduğundan emin olmalıyız. Tüm işlemleri Cloud Shell'de yapacağız.
Öncelikle bir quantum-roast
klasörü oluşturun ve cd
içine gidin:
mkdir quantum-roast && cd quantum-roast
Projemiz için bir klasör oluşturduğumuza göre artık projemizi başlatıp ihtiyacımız olan ilgili dosyaları oluşturabiliriz.
Projemizi ve bağımlılıklarımızı yönetmek için uv
(Python'ın son derece hızlı paket ve proje yöneticisi) kullanacağız. Bu araç, Cloud Shell'e önceden yüklenmiş olarak gelir. Uv, dosyalarımızın bir kısmını ayarlamamıza ve sanal ortamları, bağımlılıkları vb. yönetmemize yardımcı olur. Böylece bunları bizim yapmamıza gerek kalmaz.
uv init
ile yeni bir proje başlatın:
uv init --description "QuantumRoast Software Bug Assistant with ADK" --bare --python 3.10
Komutu çalıştırdıktan sonra projemiz için bir pyproject.toml
dosyamız olmalıdır. Doğrulamak için Cloud Shell terminalinde cat pyproject.toml
komutunu çalıştırın:
cat pyproject.toml
Aşağıdaki çıkış gösterilmelidir:
[project] name = "quantum-roast" version = "0.1.0" description = "QuantumRoast Software Bug Assistant with ADK" requires-python = ">=3.10" dependencies = []
uv add
kullanarak projemize bağımlılık olarak google-adk
(ADK) eklemenin zamanı geldi.
uv add google-adk==1.11.0
Bu işlem, google-adk
öğesini pyproject.toml
içindeki dependencies
listesine ekler.
ADK, en iyi sonuçları elde etmek için belirli bir proje yapısı bekler.
quantum-roast/ software_bug_assistant/ __init__.py agent.py .env
software_bug_assistant
klasörünü ve içindeki dosyaları oluşturun:
mkdir software_bug_assistant && touch software_bug_assistant/__init__.py \
software_bug_assistant/agent.py \
software_bug_assistant/tools.py \
software_bug_assistant/.env
ls
kullanarak dosyaların oluşturulduğunu doğrulayın:
ls -a software_bug_assistant/
Aşağıdaki ekranı görmeniz gerekir:
__init__.py . .. .env agent.py tools.py
ADK'nın Gemini modellerini düzgün şekilde çağırması için gereken ortam değişkenlerini .env
dosyasına doldurma zamanı. Gemini'a Vertex API üzerinden erişeceğiz.
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
.env
öğesinin doğru şekilde doldurulduğunu doğrulamak için aşağıdakileri çalıştırın:
cat software_bug_assistant/.env
your-project-id
, proje kimliğiniz olmak üzere aşağıdakileri görmeniz gerekir:
GOOGLE_GENAI_USE_VERTEXAI=TRUE GOOGLE_CLOUD_PROJECT=your-project-id GOOGLE_CLOUD_LOCATION=us-central1
Artık ADK aracımızı oluşturmaya başlayabiliriz.
5. Base ADK Agent
Bu atölye çalışması sırasında, güçlü bir hata asistanı oluşturmak için tek tek araçlar ekleyebileceğimiz temel bir ADK aracısı oluşturalım.
agent.py
dosyasını Cloud Shell Düzenleyici'de açın:
cloudshell edit software_bug_assistant/agent.py
Aşağıdaki kodu agent.py
içine yapıştırın ve dosyayı Ctrl + s
olarak kaydedin:
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=[],
)
ADK'nın geliştirme kullanıcı arayüzünü (adk web
) başlatarak yeni oluşturduğunuz aracınızı çalıştırın. Bunu uv run
ile yaptığınızda, ADK'nın yüklü olduğu bir sanal ortam otomatik olarak oluşturulur.
uv run adk web --port 8080 --reload_agents
Konsolda ADK web sunucusunun başarılı bir şekilde başlatıldığını görmeniz gerekir.
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)
Kullanıcı arayüzünü görmek için Cloud Shell'in web önizlemesini açın.
ADK web kullanıcı arayüzünü görürsünüz.
Devam edin ve ADK temsilcisiyle sohbet etmeyi deneyin.
Aracıya sorun What day is it today?
.
Yanıtı incelediğinizde temsilcinin bu temel soruyu yanıtlayamadığını göreceksiniz. LLM'lerin geçmiş verilerle eğitilmiş izole sistemler olduğunu hatırlatırız. Araçlar vermediğiniz sürece, son olaylar veya hatta güncel tarih hakkında gerçek zamanlı bağlam bilgisine sahip değildirler.
ADK'nın ilk araç türü olan İşlev Aracı'nı uygulama zamanı.
6. Function Tool
İlk ve en basit ADK araç türü işlev aracıdır. Adından da anlaşılacağı gibi, aracı tarafından çağrılan bir Python işlevidir.
İşlev araçları, aracı için araç olarak çağırılacak özel kod yazmanıza olanak tanıdığından (ör. hesaplama yapma, API çağırma, veritabanı sorgulama) oldukça güçlüdür. Basit veya karmaşık işlevler olabilir. Bu tamamen size bağlıdır.
QuantumRoast'ta, "Geçen haftaki hataları göster" veya "Bugün hangi gün?" gibi sorguları daha sonra bu laboratuvarda işlemek için geçerli günün tarihini alacak temel bir işlev tanımlamak istiyoruz. (Bu durum hepimizin başına gelebilir.)
/software_bug_assistant
klasöründeki tools.py
dosyası, bu laboratuvar boyunca oluşturduğumuz tüm araçları düzenleyeceğimiz yerdir.
+
simgesini tıklayarak YENİ bir terminal açın.
Şimdi yeni terminalde PROJECT_ID
değerini ayarlayın ve tools.py
dosyasını açın:
cd quantum-roast
export PROJECT_ID=$(gcloud config get project)
cloudshell edit software_bug_assistant/tools.py
Şimdi İşlev aracı olarak kullanılacak get_current_date
işlevini tanımlayın.
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")}
İşlev artık tanımlı. Aracı temsilciye iletme zamanı.
agent.py
dosyasını Cloud Shell Düzenleyici'de açın:
cloudshell edit software_bug_assistant/agent.py
get_current_date
işlevini tools.py
dosyasından içe aktarmak ve işlevi temsilcinin tools
bağımsız değişkenine iletmek istiyoruz.
Güncellenen agent.py
aşağıdaki gibi görünür:
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],
)
Şimdi ADK Web kullanıcı arayüzünü çalıştıran Web Önizleme sekmesine dönüp What day is it today?
sorusunu tekrar sorarsanız...
Aracı, get_current_date
Function Tool'u çağırarak tarihi başarıyla söyleyebilir. 🎉
Bir sonraki ADK aracı türünü keşfetme zamanı.
7. Yerleşik Araç
Bir diğer ADK aracı türü yerleşik araçlardır. Bunlar, modelin kendisinde kod yürütme gibi Google'ın amiral gemisi model özellikleriyle çalışan araçlardır. Web'de arama yapma erişimi vererek temsilciyi alakalı bağlamda temellendirmek için Google Arama yerleşik aracını hata asistanı temsilcimize ekleyebiliriz. Bu sayede temsilci, bir hata veya iyi bilinen güvenlik açığı hakkında daha güncel bilgiler toplayabilir.
Google Arama yerleşik aracına destek eklemek için tools.py
dosyasını açın.
cloudshell edit software_bug_assistant/tools.py
tools.py
alanının en altına aşağıdakileri ekleyin:
# ----- 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)
Burada, Google Arama aracını kendi sistem talimatlarına sahip kendi aracısına sarmalayarak aracıları araç olarak kullanıyoruz.
Artık search_tool
değerini agent.py
içindeki kök aracıya aktarabilir ve iletebiliriz:
cloudshell edit software_bug_assistant/agent.py
agent.py
yerine aşağıdaki kodu kullanarak search_tool
'yi ekleyebilirsiniz:
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],
)
Dosyayı kaydedin ve ADK Web kullanıcı arayüzünün çalıştığı açık pencerenize geri dönün.
QuantumRoast olarak, web sitemizin ve yazılımımızın, kamuya açık siber güvenlik açıkları olan Genel Güvenlik Açıkları ve Riskler'e (CVE'ler) karşı korunmasını sağlamak istiyoruz. Web'de en son keşfedilen CVE'leri aramak için aracımızın yeni Google Arama aracını kullanabiliriz.
Aşağıdaki sorguyu çalıştırın: Do a web search for 5 of the most recent CVEs?
.
Temsilcimiz, web'de arama yapmak için search_agent
'ı aramalı.
Temsilcimiz, Google Arama için ADK'nın yerleşik aracı aracılığıyla web'de arama yapma özelliğini başarıyla etkinleştirdi. 🎉
Bir sonraki ADK araç türüne geçelim.
8. Üçüncü taraf aracı
ADK, yüksek oranda genişletilebilir olacak şekilde tasarlanmıştır. Bu sayede, CrewAI ve LangChain gibi diğer üçüncü taraf yapay zeka aracısı çerçevelerindeki araçları sorunsuz bir şekilde entegre edebilirsiniz. Bu birlikte çalışabilirlik, daha hızlı geliştirme süresi ve mevcut araçları yeniden kullanma olanağı sağladığı için çok önemlidir.
Hata aracımızı StackOverflow'un güçlü soru-cevap verilerine bağlamak için LangChain'in kapsamlı araç kitaplığından, özellikle de StackExchange API Wrapper aracından yararlanabiliriz. ADK, LangChain gibi üçüncü taraf araçları destekler. Bu nedenle, bu aracı ADK aracımıza eklemek için yalnızca birkaç satır kod gerekir.
Öncelikle, LangChain ve StackOverflow (langchain-community
ve stackapi
) için yeni bağımlılıkları projemize eklememiz gerekir:
uv add langchain-community==0.3.27 stackapi==0.3.1
LangChain StackExchange aracı için destek eklemek üzere tools.py
dosyasını açın.
cloudshell edit software_bug_assistant/tools.py
tools.py
alanının en altına aşağıdakileri ekleyin:
# ----- 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)
Artık langchain_tool
değerini agent.py
içindeki kök aracıya aktarabilir ve iletebiliriz:
cloudshell edit software_bug_assistant/agent.py
agent.py
yerine aşağıdaki kodu kullanarak langchain_tool
'yi ekleyebilirsiniz:
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],
)
Dosyayı kaydedin ve ADK web kullanıcı arayüzünün bulunduğu açık sekmenize geri dönün.
Temsilciye önceki CVE'ler ("Are there similar issues on stack exchange?"
) veya "Our database queries with SQLAlchemy seem to be timing out, is there anything on StackExchange relevant to this?"
gibi yeni bir konu hakkında soru sormayı deneyin.
Temsilcimiz artık StackOverflow'a sorgu göndermek için ADK'da LangChain aracını başarıyla kullanıyor. 🥳
Bir sonraki ADK araç türüne geçelim... MCP Tools!
9. MCP Aracı (Veritabanı)
MCP, Model Context Protocol (Model Bağlam Protokolü) anlamına gelir. Bu, Anthropic tarafından 2024'te kullanıma sunulan açık bir protokoldür. MCP, yapay zeka aracınız ile araç "arka uçları" (API'ler, veritabanları) arasında bir soyutlama katmanı sağlar.
MCP'nin bazı benzersiz özellikleri vardır. MCP, standart HTTP'nin aksine istemci ile sunucu arasında durum bilgisi içeren iki yönlü bir bağlantı sağlar. Araçları ve araca özgü hata mesajlarını tanımlamak için kendi yöntemini kullanır. Ardından bir araç sağlayıcı, API'lerinin üzerine MCP sunucuları oluşturarak geliştiriciler ve kullanıcılar için bir veya daha fazla önceden oluşturulmuş araç sunabilir. Ardından, aracı çerçeveleri bu araçları keşfetmek ve çağırmak için bir aracı uygulamasında MCP istemcilerini başlatabilir.
QuantumRoast'ta, dahili yazılım hataları için PostgreSQL İçin Cloud SQL veritabanı kullanıyoruz. Temsilcimizin veritabanımızda belirli sorgular gerçekleştirebilmesi için ADK araçları oluşturmak istiyoruz.
Bunu yapmanın en kolay yolu , veritabanları için açık kaynaklı bir MCP sunucusu olan MCP Toolbox for Databases'i kullanmaktır. Araç kutusu, Cloud SQL de dahil olmak üzere 15'ten fazla veritabanını destekler.
Araç kutusu şunları sağlar:
- Basitleştirilmiş geliştirme: Araçları 10 satırdan daha az kodla aracınıza entegre edin, araçları birden fazla aracı veya çerçeve arasında yeniden kullanın ve araçların yeni sürümlerini daha kolay dağıtın.
- Daha iyi performans: Bağlantı havuzu oluşturma ve kimlik doğrulama gibi en iyi uygulamalar.
- Gelişmiş güvenlik: Verilerinize daha güvenli erişim için entegre kimlik doğrulama
- Uçtan uca gözlemlenebilirlik: OpenTelemetry için yerleşik destekle birlikte kullanıma hazır metrikler ve izleme.
ADK, MCP Toolbox for Database Tools'u destekler. Bu sayede entegrasyon hızlı bir şekilde yapılabilir.
Veritabanları için MCP Toolbox sunucusunu Cloud Run'a dağıtma
İlk olarak, Veritabanları için MCP Araç Kutusu Sunucusu'nu Cloud Run'a dağıtıp Cloud SQL örneğimize yönlendireceğiz.
Araç kutusu, yapılandırma için bir YAML dosyası gerektirir. Bu dosyada, veritabanı kaynağını ve yapılandırılacak araçları belirtirsiniz.
Dağıtım için bir tools.yaml
dosyası oluşturun.
cloudshell edit tools.yaml
Aşağıdaki içeriği tools.yaml
içine yapıştırın:
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
YAML dosyası, QuantumRoast biletleri veritabanıyla ilgili 9 araç tanımlar.
Toolbox Cloud Run hizmeti için bir hizmet hesabı yapılandırma, bu hesaba Cloud SQL ve Secret Manager'a erişim izni verme ve tools.yaml
dosyamız için bir Secret Manager sırrı oluşturma zamanı.
Secret Manager, hassas Cloud SQL kimlik bilgilerini içerdiğinden tools.yaml
dosyamızı depolayacağımız yerdir.
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
MCP Toolbox for Databases'i Cloud Run'a dağıtma zamanı. MCP Toolbox kapsayıcı görüntüsünün en son yayınlanan sürümünü kullanırız.
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
Dağıtımın tamamlanmasını bekleyin...
Cloud Run günlüklerini sorgulayarak Toolbox'ın çalıştığını doğrulayın:
gcloud run services logs read toolbox --region us-central1 --limit 10
Aşağıdaki bilgileri görürsünüz:
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!"
ADK aracısının nerede bulacağını bilmesi için Toolbox hizmetinin Cloud Run URL'sini ortam değişkeni olarak kaydedin.
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 aracısını güncelleme
İkinci olarak, MCP Toolbox for Databases SDK'sının (toolbox-core
) bağımlılığını projemize eklememiz gerekir:
uv add toolbox-core==0.5.0
MCP Toolbox araçları için destek eklemek üzere tools.py
dosyasını açın.
cloudshell edit software_bug_assistant/tools.py
tools.py
alanının en altına aşağıdakileri ekleyin:
# ----- 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")
Artık toolbox_tools
değerini agent.py
içindeki kök aracıya aktarabilir ve iletebiliriz:
cloudshell edit software_bug_assistant/agent.py
agent.py
yerine aşağıdaki kodu kullanarak toolbox_tools
'yi ekleyebilirsiniz:
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],
)
Dosyayı kaydedin ve ADK web kullanıcı arayüzünün bulunduğu açık sekmenize geri dönün.
Artık Cloud SQL dahili bilet veritabanımızda depolanan biletlerle ilgili sorular sorabilirsiniz.
Aşağıdakilere benzer bir soru sorun:
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
(temsilcinin hata oluşturma sürecinde size rehberlik etmesine izin verin)
ADK aracımız artık MCP Toolbox for Databases araçları aracılığıyla veritabanımıza başarıyla sorgu gönderebiliyor.🚀
10. İsteğe bağlı: MCP aracı (API)
ADK aracımızı, MCP Toolbox for Database gibi kendi SDK'sı olmayan MCP araçlarına bağlama konusunda ne yapabiliriz?
ADK, MCPToolset
sınıfı aracılığıyla genel MCP araçlarını destekler. MCPToolset
sınıfı, ADK'nın MCP sunucusundaki araçları entegre etmek için kullandığı birincil mekanizmadır.
MCPToolset
, yerel veya uzak MCP sunucularına bağlanmak için kullanılabilir. QuantumRoast'ta, aracımızı GitHub'ın uzak MCP sunucusuna bağlamak istiyoruz. Böylece GitHub'ın API'lerini kolayca çağırabiliriz. Bu sayede temsilcimiz, sorunlarla ilgili bilgileri herkese açık yazılım depolarından veya kendi kod tabanlarımızdan çekebilir. GitHub MCP sunucusu, GitHub'ın işlevselliğinin farklı bölümlerini (ör. sorun ve çekme istekleri, bildirimler ve kod güvenliği) kullanıma sunar.
GitHub kişisel erişim jetonu (PAT)
GitHub MCP sunucusunda kimliğinizi doğrulamak için GitHub kişisel erişim jetonuna ihtiyacınız vardır.
Bir tane edinmek için şu adımları uygulayın:
- GitHub geliştirici ayarlarınıza gidin.
- "Kişisel erişim jetonları" -> "Jetonlar (klasik)"i tıklayın.
- "Yeni jeton oluştur" -> "Yeni jeton oluştur (klasik)"i tıklayın.
- Jetonunuza açıklayıcı bir ad verin.
- Jetonunuz için geçerlilik bitiş tarihi belirleyin.
- Önemli: Güvenlik için jetonunuza gerekli olan en sınırlı kapsamları verin. Depolara salt okuma erişimi için genellikle
repo:status
,public_repo
veread:user
kapsamları yeterlidir. Kesinlikle gerekli olmadığı sürece tam depo veya yönetici izinleri vermeyin. Generate token
simgesini tıklayın.- Oluşturulan jetonu kopyalayın.
Cloud Shell terminalinde, aracının kullanabilmesi için GitHub PAT'nizi ayarlamak üzere aşağıdaki komutu çalıştırın. YOUR_GITHUB_PAT
kısmını oluşturduğunuz PAT ile değiştirin.
export GITHUB_PAT=YOUR_GITHUB_PAT
QuantumRoast aracısını güncelleme
Hata asistanımız için yalnızca bazı salt okunur GitHub araçlarını kullanıma sunacağız. Böylece QuantumRoast çalışanları açık kaynaklı bağımlılıklarla ilgili sorunları bulabilecek ve dahili bilet sisteminde gördükleri hataların temel nedenini belirleyebilecek. Bunun kurulumunu yapmak için ADK'nın MCPToolset
cihazını tool_filter
ile birlikte kullanacağız. tool-filter
yalnızca ihtiyacımız olan GitHub araçlarını kullanıma sunar. Bu sayede, kullanıcıların erişmesini istemediğimiz araçlar (ör. hassas depo işlemleri) gizlenir ve aracının modeli, iş için doğru aracı seçmeye çalışırken aşırı yüklenmeye karşı korunur.
GitHub araçları için destek eklemek üzere tools.py
dosyasını açın.
cloudshell edit software_bug_assistant/tools.py
tools.py
alanının en altına aşağıdakileri ekleyin:
# ----- 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",
],
)
Kodunuzda standart bir API istemcisi ayarlarken kimlik doğrulama jetonu sağladığınız gibi, MCPToolset
tanımımıza GitHub kişisel erişim jetonunu (PAT) da sağlamamız gerektiğini unutmayın. Bu PAT, hassas kullanıcı veya depo işlemleriyle ilgili kapsamlar olmadan yalnızca herkese açık depo verilerine erişecek şekilde kapsamlandırılmıştır.
Artık mcp_tools
değerini agent.py
içindeki kök aracıya aktarabilir ve iletebiliriz:
cloudshell edit software_bug_assistant/agent.py
agent.py
yerine aşağıdaki kodu kullanarak mcp_tools
'yi ekleyebilirsiniz:
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],
)
Dosyayı kaydedin ve ADK web kullanıcı arayüzünün bulunduğu açık sekmenize geri dönün.
Artık aracımızın çağırabileceği bir dizi GitHub MCP aracı var. QuantumRoast'ın hizmetleri, bir veri sıkıştırma aracı olan XZ utils'e dayanır. Dahili hata destek kaydı sistemimiz, geçen yıldan kalma bir CVE'yi (güvenlik açığı) takip ediyor. StackOverflow ve Google Arama araçlarını kullanarak bu CVE'nin XZ Utils GitHub deposuna kadar izini sürebiliyoruz. Daha sonra, bu CVE'nin ne zaman ve nasıl düzeltildiğini belirlemek için GitHub'ın MCP araçlarından birini (search_issues
) kullanabiliriz:
Temsilciye şunları sorun:
Find the official XZ Utils GitHub repository
Search the repository for issues related to CVE-2024-3094
GitHub araçlarının aracı tarafından çağrıldığını görmelisiniz.
QuantumRoast ADK aracısı artık GitHub MCP sunucu araçlarıyla etkileşim kurabiliyor. 🤩
11. Tebrikler
Tebrikler! Agent Development Kit (ADK)'yi kullanarak QuantumRoast hata asistanı aracısını başarıyla oluşturdunuz ve özelliklerini geliştirmek için çeşitli araç türlerini entegre ettiniz. Temel bir aracıyla başladınız ve kademeli olarak işlev araçları, yerleşik araçlar, üçüncü taraf araçları ve MCP araçları eklediniz.
İşlediğimiz konular
- ADK geliştirme için Python projesi oluşturma
- Temel bir ADK aracısı oluşturma
- İşlev araçlarını uygulama ve kullanma
- Google Arama gibi yerleşik araçları entegre etme
- ADK'da LangChain gibi çerçevelerdeki üçüncü taraf araçlarından nasıl yararlanılacağı.
- Veritabanları (Cloud SQL) ve API'lerle etkileşim kurmak için MCP Araçları'nı kullanma
Temizleme
Ek ücret ödememek için Cloud projenizi silebilirsiniz.
Cloud Run, hizmet kullanılmadığında ücret almaz ancak container görüntüsünü Artifact Registry'de depoladığınız için ücretlendirilebilirsiniz. Cloud projenizi sildiğinizde, bu projede kullanılan tüm kaynaklar için faturalandırma durdurulur.
İsterseniz projeyi silebilirsiniz:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Ayrıca gereksiz kaynakları cloudshell diskinizden de silebilirsiniz. Şunları yapabilirsiniz:
- Codelab proje dizinini silin:
rm -rf ~/quantum-roast
- Uyarı! Bu işlem geri alınamaz. Yer açmak için Cloud Shell'inizdeki her şeyi silmek istiyorsanız tüm ana dizininizi silebilirsiniz. Saklamak istediğiniz her şeyin başka bir yere kaydedildiğinden emin olun.
sudo rm -rf $HOME