Tutorial ini menjelaskan cara menyiapkan dan menggunakan set konteks di Cloud SQL untuk PostgreSQL menggunakan konsol Google Cloud dan mengintegrasikannya dengan aplikasi Anda. Pelajari cara membuat file set konteks, membuat set konteks yang menggunakan file set konteks, menggunakan MCP Toolbox untuk memanggil QueryData API guna membuat kueri SQL untuk pertanyaan bahasa alami, dan mengintegrasikannya dengan aplikasi Anda.
Untuk mengetahui informasi selengkapnya, lihat Ringkasan set konteks.
Tujuan
- Buat tabel database dan isi dengan data.
- Buat file set konteks dengan Gemini CLI dan MCP Toolbox.
- Buat set konteks dan upload file set konteks.
- Uji set konteks dan buat kueri SQL di Studio.
- Integrasikan set konteks dengan aplikasi Anda menggunakan alat Gemini Data Analytics QueryData di MCP Toolbox.
- Menambahkan perujukan ke respons LLM menggunakan kueri penelusuran nilai.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.
Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.
Untuk menghindari penagihan berkelanjutan, hapus resource yang Anda buat setelah menyelesaikan tugas dalam dokumen ini. Untuk informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Selesaikan prasyarat berikut sebelum membuat set konteks.
Mengaktifkan layanan yang diperlukan
Aktifkan layanan berikut untuk project Anda:Siapkan instance Cloud SQL
Pastikan Anda memiliki akses ke instance Cloud SQL yang ada atau buat instance baru. Untuk mengetahui informasi selengkapnya, lihat Membuat instance untuk Cloud SQL.Tutorial ini mengharuskan Anda memiliki database di instance Cloud SQL. Untuk informasi selengkapnya, lihat Membuat database pada instance Cloud SQL.
Peran dan izin yang diperlukan
- Tambahkan akun pengguna atau layanan IAM ke instance. Untuk informasi selengkapnya, lihat Mengelola pengguna dengan autentikasi database IAM untuk Cloud SQL.
- Berikan peran
cloudsql.studioUser,cloudsql.instanceUser, dangeminidataanalytics.queryDataUserkepada pengguna IAM di tingkat project. Untuk mengetahui informasi selengkapnya, lihat Menambahkan binding kebijakan IAM untuk project. - Anda juga harus memberikan hak istimewa database hanya baca kepada pengguna atau akun layanan IAM dengan login sebagai pengguna yang memiliki hak istimewa superuser, seperti pengguna
postgres.GRANT SELECT ON ALL TABLES IN SCHEMA public TO USER_NAME;
Ganti USER_NAME dengan alamat email pengguna. Anda harus menggunakan tanda kutip di sekitar email karena berisi karakter khusus (@ dan .).
Untuk mengetahui informasi selengkapnya, lihat Memberikan hak istimewa database kepada akun layanan atau pengguna IAM perorangan.
Memberikan izin executesql ke instance Cloud SQL
Untuk memberikan izin executesql ke instance Cloud SQL dan mengaktifkan Cloud SQL Data API, jalankan perintah berikut:
gcloud config set project PROJECT_ID gcloud components update gcloud beta sql instances patch INSTANCE_ID --data-api-access=ALLOW_DATA_API
PROJECT_ID: ID Google Cloud project Anda.INSTANCE_ID: ID instance Cloud SQL Anda.
Membuat skema dan tabel flights dan airports
Di bagian ini, Anda akan membuat tabel database flights dan airports untuk tutorial ini.
Di konsol Google Cloud , buka halaman Cloud SQL.
Pilih instance dari daftar.
Di menu navigasi, klik Cloud SQL Studio.
Login ke Studio menggunakan autentikasi Identity and Access Management.
Klik Autentikasi. Panel Explorer menampilkan daftar objek di database Anda.
Klik New SQL editor tab atau New tab untuk membuka tab baru.
Untuk membuat tabel dan skema
airports, jalankan pernyataan SQL berikut:CREATE TABLE IF NOT EXISTS airports ( id INT PRIMARY KEY, iata TEXT, name TEXT, city TEXT, country TEXT );Buat tabel dan skema
flights:CREATE TABLE IF NOT EXISTS flights ( id INT PRIMARY KEY, airline VARCHAR(10), flight_number INT, departure_airport VARCHAR(5), arrival_airport VARCHAR(5), departure_time TIMESTAMP, arrival_time TIMESTAMP, departure_gate VARCHAR(10), arrival_gate VARCHAR(10) );
Mengisi tabel flights dan airports
Di bagian ini, Anda akan mengisi tabel flights dan airports menggunakan skrip SQL yang disediakan.
Isi tabel
airports.Isi tabel
flights.Jalankan kueri berikut untuk memverifikasi bahwa tabel telah diisi:
SELECT * FROM "public"."flights" LIMIT 10; SELECT * FROM "public"."airports" LIMIT 10;
Membuat set konteks di Studio
Di bagian ini, buat set konteks bernama flights-assistant. Set konteks ini tidak menyertakan file set konteks yang diupload ke dalamnya.
Di konsol Google Cloud , buka halaman Cloud SQL.
Pilih instance dari daftar.
Di menu navigasi, klik Cloud SQL Studio.
Login ke Studio menggunakan autentikasi IAM.
Di panel Explorer, di samping Context sets, klik View actions.
Klik Buat set konteks.
Di Context set name, masukkan
flights-assistant.Klik Create.
Menguji set konteks di Studio
Di bagian ini, minta set konteks flights-assistant mengajukan pertanyaan bahasa alami untuk membuat kueri SQL. Karena set konteks tidak memiliki file set konteks yang diupload ke dalamnya, bahkan setelah mengajukan pertanyaan dengan konteks seperti nighttime traffic, QueryData akan menghasilkan kueri yang kurang optimal.
- Di panel Explorer, di samping set konteks Anda, klik View actions.
- Klik Uji set konteks.
- Di editor kueri, klik Generate SQL using QueryData with: flights-assistant.
Masukkan pertanyaan bahasa alami berikut untuk membuat kueri SQL, lalu klik Generate.
Find flights from SFO to JFK.Tinjau kueri SQL. Perhatikan bahwa QueryData menghasilkan SQL yang benar untuk pertanyaan yang tidak ambigu ini.
SELECT * FROM "flights" WHERE "departure_airport" = 'SFO' AND "arrival_airport" = 'JFK';Di jendela Generate SQL using QueryData with: flights-assistant, klik Edit.
Masukkan pertanyaan bahasa alami berikut untuk membuat kueri SQL, lalu klik Update.
Tell me flights that can help me beat nighttime traffic if traveling from New YorkDatabase gagal memahami istilah traffic
nighttime. Hal ini dapat mencegahnya membuat kueri SQL atau menyebabkannya membuat kueri yang mengabaikan istilah tersebut, seperti yang ditunjukkan oleh kueri berikut.-- The database schema does not contain information about traffic. -- Returning all flights departing from New York airports. SELECT f.airline, f.flight_number, a.name AS departure_airport_name, f.departure_time, b.name AS arrival_airport_name, f.arrival_time FROM flights AS f JOIN airports AS a ON f.departure_airport = a.iata JOIN airports AS b ON f.arrival_airport = b.iata WHERE a.city = 'New York' ORDER BY f.departure_time;Di jendela Generate SQL using QueryData with: flights-assistant, klik Edit.
Masukkan pertanyaan bahasa alami berikut untuk membuat kueri SQL, lalu klik Update.
flight to disney worldLogika set konteks menghasilkan kueri untuk menemukan bandara dengan "disney world" dalam namanya. Karena tidak ada bandara atau kota seperti itu dalam database, kueri tidak akan menampilkan baris apa pun.
SELECT "flights"."id", "flights"."airline", "flights"."flight_number", "flights"."departure_airport", "flights"."arrival_airport", "flights"."departure_time", "flights"."arrival_time", "flights"."departure_gate", "flights"."arrival_gate" FROM "flights" INNER JOIN "airports" ON "flights"."arrival_airport" = "airports"."iata" WHERE "airports"."name" ILIKE '%Disney World%';
Buat konteks untuk set konteks
Di bagian ini, Anda akan membuat file konteks yang membantu meningkatkan kemampuan kueri set konteks.Menyiapkan lingkungan Anda
Sebelum dapat mulai membuat konteks, Anda harus menyiapkan lingkungan.
Untuk menyiapkan lingkungan Anda, lakukan langkah-langkah berikut:
- Instal Gemini CLI. Untuk mengetahui informasi selengkapnya, lihat Panduan memulai Gemini CLI.
- Instal gcloud CLI.
Siapkan Kredensial Default Aplikasi (ADC). Jalankan perintah berikut di terminal Anda untuk mengautentikasi dan memilih project Anda:
gcloud auth application-default loginInstal ekstensi DB Context Enrichment, yang mencakup alur kerja untuk pembuatan konteks.
gemini extensions install https://github.com/GoogleCloudPlatform/db-context-enrichmentPastikan versinya adalah
0.4.2atau yang lebih tinggi. Untuk mengupdate ekstensi Pengayaan Konteks DB, jalankan perintah berikut:gemini extensions update mcp-db-context-enrichmentUntuk mengupdate ekstensi DB Context Enrichment atau mengganti
GEMINI_API_KEY, jalankan perintah berikut:gemini extensions config mcp-db-context-enrichment GEMINI_API_KEYGanti
GEMINI_API_KEYdengan kunci Gemini API Anda.Di terminal, mulai Gemini CLI.
geminiSelesaikan Penyiapan Autentikasi Gemini CLI.
Siapkan Koneksi Database. Ekstensi memerlukan koneksi database untuk pembuatan konteks, yang didukung oleh MCP Toolbox dan ditentukan dalam file konfigurasi tools.yaml.
Untuk membuat file konfigurasi
tools.yamldi direktori saat ini, masukkan perintah sepertiHelp me set up the database connectiondan ikuti petunjuk yang diberikan oleh skill. Untuk mengetahui informasi selengkapnya tentang filetools.yaml, lihat dokumentasi MCP Toolbox.Untuk memuat ulang konfigurasi setelah file
tools.yamldibuat, jalankan perintah berikut di Gemini CLI:/mcp reloadPastikan toolbox MCP dan ekstensi pengayaan database terhubung dan siap digunakan.
/mcp list
Membuat konteks template
Di bagian ini, untuk mengatasi masalah dari bagian sebelumnya saat QueryData tidak mengenali istilah nighttime traffic, tentukan istilah dalam file set konteks sebagai traffic yang terjadi antara 5:00 PM dan 7:00 PM.
Untuk membuat konteks template, lakukan langkah-langkah berikut:
Jalankan perintah
/generate_targeted_templatesdan ikuti alur kerja:/generate_targeted_templatesBerikan kueri bahasa alami yang ingin Anda tambahkan ke template kueri di terminal.
Tell me flights that can help me beat nighttime traffic if traveling from New YorkBerikan kueri SQL terkait yang ingin Anda tambahkan ke template kueri. Template kueri ini mendefinisikan istilah
nighttimesebagai terjadi antara5:00 PMdan7:00 PM.SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND ( EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19 ) ORDER BY f.departure_time;Tekan Enter. Gemini mengonversi input Anda ke dalam format tertentu yang meningkatkan performa set konteks di berbagai kueri pengguna. Untuk mengetahui informasi selengkapnya, lihat Ringkasan set konteks.
Secara opsional, jalankan alur kerja
/generate_bulk_templatesagar Gemini CLI membuat lebih banyak konteks dengan memindai skema database Anda dan menyarankan konteks terkait.Tinjau template kueri yang dihasilkan. Anda dapat menyimpan template kueri sebagai file konteks agen baru atau menambahkannya ke file konteks agen yang ada.
Pilih opsi untuk membuat file konteks agen baru. Gemini membuat nama file
INSTANCE_ID_DATABASE_ID_context_set_TIMESTAMP.jsondi direktori yang sama, dengan konten berikut:{ "templates": [ { "nl_query": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "intent": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "manifest": "Tell me flights that can help me beat nighttime traffic if traveling from a given city", "parameterized": { "parameterized_sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = ? AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "parameterized_intent": "Tell me flights that can help me beat nighttime traffic if traveling from ?" } } ] }
Buat konteks penelusuran nilai
Di bagian ini, Anda akan membuat konteks penelusuran nilai untuk membantu logika set konteks memetakan frasa nilai ke nilai tertentu yang disimpan di kolom database Anda. Misalnya, jika pengguna meminta "Penerbangan ke Disney World", penelusuran nilai dapat memetakan ini ke Disney World di kota "Orlando" berdasarkan jenis konsep yang berkorelasi dengan kolom airports.city di database Anda.
Untuk membuat konteks penelusuran nilai, lakukan langkah-langkah berikut:
Jalankan perintah
/generate_targeted_value_searches:/generate_targeted_value_searchesMasukkan
postgresqluntuk memilih Cloud SQL sebagai mesin database.Masukkan konfigurasi penelusuran nilai sebagai berikut:
Table: airports Column: city Concept: Airport City Match Function: SEMANTIC_SIMILARITY_MATCHKonfirmasi apakah Anda ingin membuat definisi penelusuran nilai.
Tinjau definisi penelusuran nilai yang dihasilkan. Anda dapat menyimpan definisi penelusuran nilai sebagai file set konteks baru atau menambahkannya ke file set konteks yang ada.
Pilih opsi untuk menambahkan ke file set konteks yang ada. Tindakan ini menambahkan definisi penelusuran nilai ke file konteks yang dibuat di bagian sebelumnya.
Masukkan instance database dan nama database yang file set konteksnya dibuat.
File konteks yang ada diperbarui dengan definisi penelusuran nilai. Gemini membuat nama file
INSTANCE_ID_DATABASE_ID_context_set_TIMESTAMP.jsondi direktori yang sama, dengan konten berikut:{ "templates": [ { "nl_query": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "intent": "Tell me flights that can help me beat nighttime traffic if traveling from New York", "manifest": "Tell me flights that can help me beat nighttime traffic if traveling from a given city", "parameterized": { "parameterized_sql": "SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = $1 AND (EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19) ORDER BY f.departure_time;", "parameterized_intent": "Tell me flights that can help me beat nighttime traffic if traveling from $1" } } ], "value_searches": [ { "query": "/* Requires extensions: vector, google_ml_integration */ WITH SemanticMetrics AS ( SELECT T.city AS original_value, ( (google_ml.embedding('gemini-embedding-001', $value)::vector <=> google_ml.embedding('gemini-embedding-001', T.city)::vector) / 2.0 ) AS normalized_dist FROM airports T WHERE T.city IS NOT NULL) SELECT original_value AS value, 'airports.city' AS columns, 'Airport City' AS concept_type, normalized_dist AS distance, ''::text AS context FROM SemanticMetrics", "concept_type": "Airport City", "description": "Semantic search for airport city name" } ] }
Mengupload file set konteks ke QueryData
Di bagian ini, Anda akan mengupload file set konteks ke QueryData, sehingga meningkatkan kemampuan pembuatan SQL QueryData di database Anda.
Untuk mengupload konteks, lakukan langkah-langkah berikut:
Di konsol Google Cloud , buka halaman Cloud SQL.
Pilih instance dari daftar.
Di menu navigasi, klik Cloud SQL Studio.
Login ke Studio menggunakan autentikasi Identity and Access Management.
Di panel Explorer, di samping Kumpulan konteks, klik ikon Tindakan ().
Klik Edit set konteks.
Opsional: Edit Deskripsi set konteks.
Klik Browse di bagian Upload file set konteks, lalu pilih file set konteks yang dibuat sebelumnya.
Klik Simpan.
Membuat kueri SQL menggunakan set konteks
Di bagian ini, Anda akan menggunakan file set konteks yang diupload untuk mengajukan pertanyaan dalam bahasa alami. Dengan begitu, Anda dapat memverifikasi bahwa QueryData memahami dan menerapkan definisi untuk istilah seperti nighttime traffic dan frasa terkait lainnya dengan benar, serta penelusuran nilai memetakan frasa nilai ke nilai tertentu yang disimpan di kolom database Anda (misalnya, memetakan "Disney World" ke "Orlando")
Untuk membuat kueri SQL, lakukan langkah-langkah berikut:
- Di panel Explorer, di samping set konteks Anda, klik View actions.
- Klik Uji set konteks.
- Di editor kueri, klik Generate SQL using QueryData with: flights assistant.
Masukkan pertanyaan bahasa alami berikut untuk membuat kueri SQL, lalu klik Generate.
Tell me flights that can help me beat nighttime traffic if traveling from New YorkKueri SQL yang dihasilkan akan terlihat mirip dengan berikut ini:
SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'New York' AND ( EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19 ) ORDER BY f.departure_time;Ini adalah pertanyaan yang sama yang Anda tambahkan ke konteks QueryData. Perhatikan bahwa QueryData kini dapat menafsirkan istilah
nighttime trafficsecara akurat.Meskipun konteks berasal dari satu pertanyaan tertentu, QueryData menggunakannya untuk meningkatkan pembuatan SQL untuk berbagai pertanyaan serupa.
Di jendela Generate SQL using QueryData with: flights-assistant, klik Edit.
Masukkan pertanyaan serupa berikut untuk membuat kueri SQL, lalu klik Perbarui.
What are the flights that can help me avoid evening traffic if departing from BostonKarena pertanyaan mengganti istilah
nighttime trafficdengan istilah serupa,evening traffic, QueryData memberikan jawaban yang konsisten untuk pertanyaan ini dengan menerapkan interpretasi yang sama.Kueri SQL yang dihasilkan akan terlihat mirip dengan berikut ini:
-- What are the flights that can help me avoid evening traffic if departing from Boston SELECT f.airline, f.flight_number, a.name AS airport_name, f.departure_time FROM flights f JOIN airports a ON f.departure_airport = a.iata WHERE a.city = 'Boston' AND ( EXTRACT(HOUR FROM f.departure_time) < 17 OR EXTRACT(HOUR FROM f.departure_time) >= 19 ) ORDER BY f.departure_time;Di jendela Generate SQL using QueryData with: flights-assistant, klik Edit.
Masukkan pertanyaan berikut untuk membuat kueri SQL, lalu klik Update.
flights to disney worldKueri SQL yang dihasilkan akan terlihat mirip dengan berikut ini:
SELECT "flights"."id", "flights"."airline", "flights"."flight_number", "flights"."departure_airport", "flights"."arrival_airport", "flights"."departure_time", "flights"."arrival_time", "flights"."departure_gate", "flights"."arrival_gate" FROM "flights" JOIN "airports" ON "flights"."arrival_airport" = "airports"."iata" WHERE "airports"."city" = 'Orlando';Perhatikan bahwa QueryData kini dapat menafsirkan secara akurat bahwa "disney world" berkaitan dengan kota "Orlando".
Mengintegrasikan set konteks dengan aplikasi Anda
Di bagian ini, Anda akan membuat agen QueryData untuk aplikasi pencarian penerbangan. Agen QueryData ini menyediakan antarmuka percakapan ke tabel flights dan airports yang Anda buat sebelumnya. Dokumen ini juga menjelaskan cara membuat dan mengintegrasikan agen QueryData ini ke dalam aplikasi Anda menggunakan Agent Development Kit (ADK), alat QueryData MCP Gemini Data Analytics, dan set konteks untuk meningkatkan kualitas respons.
Download MCP Toolbox versi 0.31.0 atau yang lebih baru. Toolbox MCP mengekspos agen QueryData sebagai alat yang dapat digunakan aplikasi untuk terhubung. MCP toolbox berbeda dengan ekstensi Gemini CLI MCP Toolbox yang Anda instal sebelumnya, yang menghasilkan konteks.
Siapkan Kredensial Default Aplikasi (ADC).
gcloud auth application-default loginTemukan ID set konteks. Untuk mengetahui informasi selengkapnya tentang cara menemukan ID set konteks, lihat Menemukan ID set konteks.
Buat konfigurasi
tools.yamluntuk terhubung ke agen QueryData menggunakan toolbox MCP. Untuk mengetahui informasi selengkapnya, lihat Sumber Analisis Data Gemini dan Alat QueryData Analisis Data Gemini.kind: source name: gda-api-source type: cloud-gemini-data-analytics projectId: "PROJECT_ID" --- kind: tool name: cloud_gda_query_tool type: cloud-gemini-data-analytics-query source: gda-api-source description: Use this tool to send natural language queries to the Gemini Data Analytics API and receive SQL, natural language answers, and explanations. location: "REGION_ID" context: datasourceReferences: cloudSqlReference: databaseReference: engine: "POSTGRESQL" projectId: "PROJECT_ID" region: "REGION_ID" instanceId: "INSTANCE_ID" databaseId: "DATABASE_ID" agentContextReference: contextSetId: "CONTEXT_SET_ID" generationOptions: generateQueryResult: true generateNaturalLanguageAnswer: true generateExplanation: true generateDisambiguationQuestion: trueGanti kode berikut:
PROJECT_ID: Project ID Google Cloud Anda.REGION_ID: Region instance Cloud SQL Anda (misalnya, us-central1).INSTANCE_ID: ID instance Cloud SQL Anda.DATABASE_ID: Nama database yang akan dihubungkan.CONTEXT_SET_ID: ID set konteks. Untuk mengetahui informasi selengkapnya tentang cara menemukan ID set konteks, lihat Menemukan ID set konteks.
Jalankan server MCP Toolbox dengan file
tools.yaml../toolbox --config "tools.yaml"Buat aplikasi ADK yang memanggil alat Gemini Data Analytics QueryData menggunakan Python SDK MCP Toolbox. Untuk mengetahui informasi selengkapnya tentang cara menggunakan Python SDK MCP Toolbox, lihat panduan memulai Toolbox dan untuk Python ADK, lihat panduan memulai ADK.
- Buat direktori untuk menyimpan aplikasi, misalnya
flight-assistant-app. Ubah direktori ke direktori
flight-assistant-app.mkdir flight-assistant-appcd flight-assistant-appJalankan perintah berikut di direktori
flight-assistant-appuntuk membuat lingkungan virtual dan menginstal komponen yang diperlukan.python3 -m venv .venvsource .venv/bin/activatepip install toolbox-corepip install google-genaipip install google-adkSiapkan agen ADK.
Buat agen ADK.
adk create my_agentPilih model
gemini-2.5-flash.Pilih Google AI, lalu masukkan kunci Gemini API Anda. Untuk mengetahui informasi selengkapnya tentang cara menemukan kunci API Anda, lihat Menggunakan kunci API Gemini.
Ganti konten file
agent.pydengan kode aplikasi contoh Flight Data Assistant berikut.from typing import cast from google.adk.agents.llm_agent import Agent from google.adk.agents.llm_agent import ToolUnion from toolbox_core import ToolboxSyncClient TOOLBOX_URL = "http://127.0.0.1:5000" INSTRUCTION = """ # ROLE You are a friendly and factual flight data assistant. Your goal is to help users find the best flights for their needs by providing accurate information with a helpful, professional tone. - use the Query Data Tool to answer the user's question, if the tool fails to generate a valid query, ask the user to clarify their question. # OPERATIONAL CONSTRAINTS - TOOL LIMITATION: You only have access to the Query Data Tool. Do not claim to have capabilities beyond what this tool provides. - TRANSPARENCY POLICY: Maintain a seamless user experience. Never mention that you are using a tool, querying a database, or generating SQL. Frame all responses as your own direct assistance. - SCOPE MANAGEMENT: If a user asks for something beyond your capabilities, politely state that you cannot perform that specific task. Guide the user towards what you can help with. # COMMUNICATION STYLE - Be concise and scannable when listing answers. - Maintain a helpful, professional persona. ===== # QUERY DATA TOOL Inputs: 1. query: A natural language formulation of a database query. Outputs: (all optional) 1. disambiguation_question: Clarification questions or comments where the tool needs the users' input. 2. generated_query: The generated query for the user query. 3. intent_explanation: An explanation for why the tool produced `generated_query`. 4. query_result: The result of executing `generated_query`. 5. natural_language_answer: The natural language answer that summarizes the `query` and `query_result`. Usage guidance: 1. If `disambiguation_question` is produced, then solicit the needed inputs from the user and try the tool with a new `query` that has the needed clarification. 2. If `natural_language_answer` is produced, use `intent_explanation` and `generated_query` to see if you need to clarify any assumptions for the user. 3. If the tool output indicates failure or empty results, explain that clearly using the provided reasoning. """ client = ToolboxSyncClient(TOOLBOX_URL) mcp_tool = client.load_tool("cloud_gda_query_tool") root_agent = Agent( model="gemini-2.5-flash", name="root_agent", instruction=INSTRUCTION, tools=cast(list[ToolUnion], [mcp_tool]), )
- Buat direktori untuk menyimpan aplikasi, misalnya
Jalankan perintah berikut di direktori
flight-assistant-appuntuk memulai aplikasi dan mengakses server web ADK dihttp://127.0.0.1:8000.adk web --port 8000Masukkan teks apa pun, seperti
hello, untuk mulai berinteraksi dengan agen.Agen ADK menjawab pertanyaan umum dan memanggil alat MCP yang diperlukan.
Masukkan pertanyaan terkait penerbangan berikut.
How many flights depart from the west side?Alat MCP dipanggil untuk menjawab pertanyaan ini. Namun, karena istilah
the westambigu dan tidak menentukan bandara mana pun, alat MCP akan menampilkan pertanyaan disambiguasi yang digunakan agen untuk menyusun respons.I cannot determine how many flights depart from the 'west side' as the database does not contain information about which airports are considered to be on the 'west side'. However, I can help you with questions like: 1. How many flights depart from a specific airport? 2. What are the departure airports for all flights? 3. How many flights depart from each airport? Would you like to rephrase your question based on these options?Masukkan pertanyaan yang mirip dengan pertanyaan dalam template kueri yang dibuat untuk agen.
Help me find flights from San Francisco that avoid the evening rush hour.Berdasarkan konteks QueryData yang ditambahkan sebelumnya, alat MCP memahami bahwa
evening trafficterjadi antara pukul 17.00 dan 19.00. Alat MCP menampilkan data terkait yang akan digunakan agen untuk menyusun responsnya.Here are the flights departing from San Francisco that avoid the evening rush hour (defined as 5 PM to 7 PM): * UA 1532 departing at 05:50:00 * UA 1158 departing at 05:57:00 * CY 922 departing at 06:38:00 * OO 5441 departing at 07:08:00 * UA 616 departing at 07:14:00 * AA 24 departing at 07:14:00 * B6 434 departing at 08:00:00 * AA 242 departing at 08:18:00 * UA 1739 departing at 08:22:00 * OO 6336 departing at 08:32:00 * US 1784 departing at 08:47:00 * DL 1631 departing at 09:00:00 * DL 1106 departing at 09:06:00 * OO 5427 departing at 09:06:00 * CY 352 departing at 09:25:00Masukkan pertanyaan berdasarkan jenis konsep yang Anda tambahkan dalam konteks agen QueryData.
Get me flights to disney worldBerdasarkan konteks penelusuran nilai yang ditambahkan sebelumnya, agen QueryData memahami bahwa
disney worldberkaitan dengan kotaOrlandodan menampilkan data terkait untuk digunakan agen QueryData dalam menyusun responsnya.Here are the flights heading to Orlando, which is the location of Disney World: * Flight UA 1249 departs from SFO and arrives at MCO on 2025-01-02 at 18:15:00Z. * Flight UA 698 departs from SFO and arrives at MCO on 2025-01-02 at 22:33:00Z. * Flight UA 292 departs from SFO and arrives at MCO on 2025-01-03 at 06:37:00Z.
Mengulangi performa agen
UI web ADK memungkinkan Anda memeriksa permintaan dan respons dari alat MCP QueryData Analisis Data Gemini. Anda dapat menggunakan respons ini untuk mengamati respons alat seperti kueri SQL yang dihasilkan, set hasil, penjelasan maksud, pertanyaan disambiguasi, dan jawaban natural language, untuk membantu Anda mengonfirmasi kebenaran respons agen.
Misalnya, untuk teks input How many flights depart from the west side? yang Anda masukkan sebelumnya, klik balon agen. Di tab Peristiwa di navigasi kiri, luaskan functionResponse untuk melihat respons berikut.
"{"disambiguationQuestion": ["[NOT_ENOUGH_INFO] The database schema does not
contain information about which airports are on the 'west side'. Therefore, I
cannot determine how many flights depart from the west side.Possible alternative
questions: 1. How many flights depart from a specific airport? 2. What are the
departure airports for all flights? 3. How many flights depart from each
airport?"]}"
Memperbaiki akurasi respons
Anda dapat terus meningkatkan akurasi respons dari alat QueryData Analisis Data Gemini dengan menambahkan konteks tambahan. Gunakan Gemini CLI untuk membuat konteks, lalu upload file set konteks yang telah diperbarui ke agen QueryData flights-assistant yang ada. Untuk mengetahui informasi selengkapnya, lihat Membangun konteks menggunakan Gemini CLI. Konsol akan segera menyerap konteks baru setelah Anda menguploadnya, sehingga Anda dapat meningkatkan akurasi agen tanpa waktu non-operasional aplikasi.
Beberapa agen
Di lingkungan pengembangan, Anda dapat melakukan pengujian A/B pada beberapa konteks agen QueryData dengan menetapkan nama yang berbeda untuk alat di file tools.yaml. Misalnya, Anda dapat membuat konfigurasi tools.yaml yang unik dengan menentukan dua alat cloud-gemini-data-analytics-query dengan nama yang berbeda, seperti cloud_gda_query_tool_v1 dan cloud_gda_query_tool_v2. Penyiapan ini memungkinkan Anda menerapkan logika aplikasi yang secara terprogram memilih versi konteks yang diperlukan dengan memilih nama alat yang sesuai.
Contoh tools.yaml berikut menunjukkan cara menyiapkan beberapa agen QueryData untuk sumber database:
kind: source
name: gda-api-source
type: cloud-gemini-data-analytics
projectId: <var>PROJECT_ID</var>
---
kind: tool
name: cloud_gda_query_tool_v1
type: cloud-gemini-data-analytics-query
source: gda-api-source
context:
datasourceReferences:
<var>DB_SOURCE</var>:
databaseReference: ...
agentContextReference:
contextSetId: "V1_YOUR_CONTEXT_SET_ID"
generationOptions: ...
---
kind: tool
name: cloud_gda_query_tool_v2
type: cloud-gemini-data-analytics-query
source: gda-api-source
context:
datasourceReferences:
<var>DB_SOURCE</var>:
databaseReference: ...
agentContextReference:
contextSetId: "V2_YOUR_CONTEXT_SET_ID"
generationOptions: ...
Ganti kode berikut:
PROJECT_ID: Project ID Google Cloud Anda.V1_YOUR_CONTEXT_SET_ID: ID set konteks untuk versi 1.V2_YOUR_CONTEXT_SET_ID: ID set konteks untuk versi 2
Pembersihan
Bagian berikut menjelaskan cara menghapus resource dan objek ini.
Menghapus set konteks
Sebelum menghapus instance, hapus set konteks yang Anda buat.
Di konsol Google Cloud , buka halaman Cloud SQL.
Pilih instance dari daftar.
Di menu navigasi, klik Cloud SQL Studio.
Login ke Studio menggunakan autentikasi Identity and Access Management.
Di panel Explorer, di samping set konteks Anda, klik View actions.
Di jendela Hapus set konteks, masukkan
flight-assistantdi kotak konfirmasi.Klik Konfirmasi.
Menghapus instance
Saat Anda menghapus instance yang Anda buat di bagian sebelum memulai, Anda juga menghapus semua objek yang Anda buat.
Di konsol Google Cloud , buka halaman Cloud SQL.
Pilih instance dari daftar.
Klik Hapus.
Konfirmasi bahwa Anda ingin menghapus instance dengan memasukkan nama instance dan mengklik Hapus.
Langkah berikutnya
- Pelajari lebih lanjut set konteks.
- Pelajari cara menentukan konteks penulisan untuk sumber data database.