Questo tutorial descrive come configurare e utilizzare i set di contesto in Cloud SQL per PostgreSQL utilizzando la console Google Cloud e come integrarli con la tua applicazione. Scopri come creare il file del set di contesto, creare un set di contesto che utilizza il file del set di contesto, utilizzare MCP Toolbox per chiamare l'API QueryData per generare query SQL per domande in linguaggio naturale e integrarlo con la tua applicazione.
Per saperne di più, consulta Panoramica dei set di contesti.
Obiettivi
- Crea tabelle di database e compilale con i dati.
- Crea un file di set di contesto con Gemini CLI e MCP Toolbox.
- Crea un insieme di contesti e carica il file dell'insieme di contesti.
- Testa il set di contesto e genera query SQL in Studio.
- Integra il set di contesto con la tua applicazione utilizzando lo strumento QueryData di Gemini Data Analytics in MCP Toolbox.
- Aggiungi informazioni di base alle risposte LLM utilizzando query di ricerca di valori.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.
I nuovi utenti di Google Cloud potrebbero avere diritto a una prova senza costi.
Per evitare l'addebito di ulteriori costi, elimina le risorse che hai creato al termine delle attività descritte in questo documento. Per ulteriori informazioni, consulta Esegui la pulizia.
Prima di iniziare
Completa i seguenti prerequisiti prima di creare un insieme di contesto.
Attivare i servizi richiesti
Attiva i seguenti servizi per il tuo progetto:Prepara un'istanza Cloud SQL
Assicurati di avere accesso a un'istanza Cloud SQL esistente o creane una nuova. Per saperne di più, consulta Creare istanze per Cloud SQL.Questo tutorial richiede un database nell'istanza Cloud SQL. Per ulteriori informazioni, vedi Creare un database sull'istanza Cloud SQL.
Ruoli e autorizzazioni richiesti
- Aggiungi un utente IAM o account di servizio all'istanza. Per maggiori informazioni, consulta Gestire gli utenti con l'autenticazione IAM dei database per Cloud SQL.
- Concedi i ruoli
cloudsql.studioUser,cloudsql.instanceUseregeminidataanalytics.queryDataUserall'utente IAM a livello di progetto. Per saperne di più, consulta Aggiungere un'associazione di policy IAM per un progetto. - Devi anche concedere privilegi di database di sola lettura a un utente IAM o account di servizio accedendo come utente con privilegi di superuser, ad esempio l'utente
postgres.GRANT SELECT ON ALL TABLES IN SCHEMA public TO USER_NAME;
Sostituisci USER_NAME con l'indirizzo email dell'utente. Devi utilizzare le virgolette intorno all'email perché contiene caratteri speciali (@ e .).
Per saperne di più, consulta Concedere privilegi di database a un service account o a un utente IAM individuale.
Concedi l'autorizzazione executesql all'istanza Cloud SQL
Per concedere l'autorizzazione executesql all'istanza Cloud SQL e abilitare l'API Cloud SQL
Data, esegui questo comando:
gcloud config set project PROJECT_ID gcloud components update gcloud beta sql instances patch INSTANCE_ID --data-api-access=ALLOW_DATA_API
PROJECT_ID: l'ID del tuo Google Cloud progetto.INSTANCE_ID: l'ID dell'istanza Cloud SQL.
Crea lo schema e le tabelle flights e airports
In questa sezione creerai le tabelle di database flights e airports per questo tutorial.
Nella console Google Cloud , vai alla pagina Cloud SQL.
Seleziona un'istanza dall'elenco.
Nel menu di navigazione, fai clic su Cloud SQL Studio.
Accedi a Studio utilizzando l'autenticazione Identity and Access Management.
Fai clic su Authenticate (Autentica). Il riquadro Explorer mostra un elenco degli oggetti nel database.
Fai clic su Nuova scheda dell'editor SQL o Nuova scheda per aprire una nuova scheda.
Per creare la tabella e lo schema
airports, esegui la seguente istruzione SQL:CREATE TABLE IF NOT EXISTS airports ( id INT PRIMARY KEY, iata TEXT, name TEXT, city TEXT, country TEXT );Crea la tabella e lo schema
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) );
Compila le tabelle flights e airports
In questa sezione, devi compilare le tabelle flights e airports utilizzando gli script SQL forniti.
Compila la tabella
airports.Compila la tabella
flights.Esegui la seguente query per verificare che le tabelle siano popolate:
SELECT * FROM "public"."flights" LIMIT 10; SELECT * FROM "public"."airports" LIMIT 10;
Creare un insieme di contesto in Studio
In questa sezione, crea un insieme di contesti denominato flights-assistant. Questo insieme di contesti non include alcun file di insieme di contesti caricato.
Nella console Google Cloud , vai alla pagina Cloud SQL.
Seleziona un'istanza dall'elenco.
Nel menu di navigazione, fai clic su Cloud SQL Studio.
Accedi a Studio utilizzando l'autenticazione IAM.
Nel riquadro Explorer, accanto a Set di contesti, fai clic su Visualizza azioni.
Fai clic su Crea set di contesti.
In Nome set di contesto, inserisci
flights-assistant.Fai clic su Crea.
Testare il contesto impostato in Studio
In questa sezione, chiedi al contesto flights-assistant di porre una domanda in linguaggio naturale per generare una query SQL. Poiché il set di contesto non ha alcun file di contesto caricato, anche dopo aver posto una domanda con un contesto come nighttime traffic, QueryData genera una query non ottimale.
- Nel riquadro Explorer, accanto al set di contesto, fai clic su Visualizza azioni.
- Fai clic su Testa set di contesto.
- Nell'editor di query, fai clic su Genera SQL utilizzando QueryData con: flights-assistant.
Inserisci la seguente domanda in linguaggio naturale per generare una query SQL e fai clic su Genera.
Find flights from SFO to JFK.Esamina la query SQL. Tieni presente che QueryData genera l'SQL corretto per questa domanda univoca.
SELECT * FROM "flights" WHERE "departure_airport" = 'SFO' AND "arrival_airport" = 'JFK';Nella finestra Genera SQL utilizzando QueryData con: flights-assistant, fai clic su Modifica.
Inserisci la seguente domanda in linguaggio naturale per generare una query SQL e fai clic su Aggiorna.
Tell me flights that can help me beat nighttime traffic if traveling from New YorkIl database non riconosce il termine traffico
nighttime. Ciò potrebbe impedire la generazione di una query SQL o causare la generazione di una query che ignora il termine, come mostrato nella query seguente.-- 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;Nella finestra Genera SQL utilizzando QueryData con: flights-assistant, fai clic su Modifica.
Inserisci la seguente domanda in linguaggio naturale per generare una query SQL e fai clic su Aggiorna.
flight to disney worldLa logica del contesto impostato genera una query per trovare un aeroporto con "disney world" nel nome. Poiché nel database non esiste un aeroporto o una città di questo tipo, la query non restituirà righe.
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%';
Genera il contesto per il set di contesto
In questa sezione, crei un file di contesto che contribuisce a migliorare le funzionalità di query del set di contesto.Configura l'ambiente
Prima di poter iniziare a generare il contesto, devi preparare l'ambiente.
Per configurare l'ambiente:
- Installa Gemini CLI. Per saperne di più, consulta la guida rapida di Gemini CLI.
- Installa gcloud CLI.
Configura le Credenziali predefinite dell'applicazione (ADC). Esegui questi comandi nel terminale per autenticarti e selezionare il tuo progetto:
gcloud auth application-default loginInstalla l'estensione DB Context Enrichment, che include i workflow per la generazione del contesto.
gemini extensions install https://github.com/GoogleCloudPlatform/db-context-enrichmentAssicurati che la versione sia
0.4.2o successiva. Per aggiornare l'estensione DB Context Enrichment, esegui questo comando:gemini extensions update mcp-db-context-enrichmentPer aggiornare l'estensione DB Context Enrichment o per sostituire
GEMINI_API_KEY, esegui questo comando:gemini extensions config mcp-db-context-enrichment GEMINI_API_KEYSostituisci
GEMINI_API_KEYcon la tua chiave API Gemini.Nel terminale, avvia Gemini CLI.
geminiCompleta la configurazione dell'autenticazione Gemini CLI.
Configura la connessione al database. L'estensione richiede una connessione al database per la generazione del contesto, supportata da MCP Toolbox e definita nel file di configurazione tools.yaml.
Per creare il file di configurazione
tools.yamlnella directory corrente, inserisci un prompt comeHelp me set up the database connectione segui le istruzioni fornite dalla competenza. Per ulteriori informazioni sul filetools.yaml, consulta la documentazione di MCP Toolbox.Per ricaricare la configurazione dopo aver creato il file
tools.yaml, esegui questo comando nella Gemini CLI:/mcp reloadVerifica che la cassetta degli attrezzi MCP e l'estensione per l'arricchimento del database siano connesse e pronte all'uso.
/mcp list
Genera il contesto del modello
In questa sezione, per risolvere il problema della sezione precedente in cui QueryData non riconosceva il termine nighttime traffic, definisci il termine nel file di set di contesto come traffico che si verifica tra 5:00 PM e 7:00 PM.
Per generare il contesto del modello:
Esegui il comando
/generate_targeted_templatese segui il flusso di lavoro:/generate_targeted_templatesFornisci la query in linguaggio naturale che vuoi aggiungere al modello di query nel terminale.
Tell me flights that can help me beat nighttime traffic if traveling from New YorkFornisci una query SQL corrispondente che vuoi aggiungere al modello di query. Questo modello di query definisce il termine
nighttimecome compreso tra5:00 PMe7: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;Premi Invio. Gemini converte l'input in un formato specifico che migliora il rendimento del contesto impostato in un'ampia gamma di query utente. Per saperne di più, consulta Panoramica dei set di contesti.
Se vuoi, esegui il workflow
/generate_bulk_templatesper consentire a Gemini CLI di generare più contesto analizzando lo schema del database e suggerendo un contesto correlato.Esamina il modello di query generato. Puoi salvare il modello di query come nuovo file di contesto dell'agente o aggiungerlo a un file di contesto dell'agente esistente.
Seleziona l'opzione per creare un nuovo file di contesto dell'agente. Gemini crea un file denominato
INSTANCE_ID_DATABASE_ID_context_set_TIMESTAMP.jsonnella stessa directory, con il seguente contenuto:{ "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 ?" } } ] }
Genera il contesto di ricerca dei valori
In questa sezione, generi il contesto di ricerca dei valori per aiutare la logica di impostazione del contesto a mappare le frasi dei valori su valori specifici memorizzati nelle colonne del database. Ad esempio, se un utente chiede "Voli per Disney World", la ricerca di valori può mappare questa richiesta a Disney World nella città di "Orlando" in base al tipo di concetto correlato alla colonna airports.city del database.
Per generare il contesto di ricerca del valore:
Esegui il comando
/generate_targeted_value_searches:/generate_targeted_value_searchesInserisci
postgresqlper selezionare Cloud SQL come motore del database.Inserisci la configurazione di ricerca dei valori nel seguente modo:
Table: airports Column: city Concept: Airport City Match Function: SEMANTIC_SIMILARITY_MATCHConferma se vuoi generare la definizione di ricerca dei valori.
Esamina la definizione di ricerca dei valori generata. Puoi salvare la definizione di ricerca dei valori come nuovo file di set di contesto o aggiungerla a un file di set di contesto esistente.
Seleziona l'opzione per aggiungere un file a un insieme di contesti esistente. In questo modo, la definizione di ricerca del valore viene aggiunta al file di contesto creato nella sezione precedente.
Inserisci l'istanza del database e il nome del database per cui è stato generato il file del set di contesti.
Il file di contesto esistente viene aggiornato con la definizione di ricerca del valore. Gemini crea un file denominato
INSTANCE_ID_DATABASE_ID_context_set_TIMESTAMP.jsonnella stessa directory, con il seguente contenuto:{ "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" } ] }
Carica il file del set di contesto in QueryData
In questa sezione, carichi il file del set di contesto in QueryData, in modo che migliori le funzionalità di generazione SQL di QueryData sul tuo database.
Per caricare il contesto, segui questi passaggi:
Nella console Google Cloud , vai alla pagina Cloud SQL.
Seleziona un'istanza dall'elenco.
Nel menu di navigazione, fai clic su Cloud SQL Studio.
Accedi a Studio utilizzando l'autenticazione Identity and Access Management.
Nel riquadro Explorer, accanto a Set di contesti, fai clic sull'icona Azioni ().
Fai clic su Modifica insieme di contesti.
(Facoltativo) Modifica la descrizione del set di contesto.
Fai clic su Sfoglia nella sezione Carica file del set di contesto e seleziona il file del set di contesto generato in precedenza.
Fai clic su Salva.
Genera query SQL utilizzando il set di contesto
In questa sezione utilizzerai il file di contesto che hai caricato per porre domande in linguaggio naturale. In questo modo puoi verificare che QueryData comprenda e applichi correttamente le definizioni di termini come nighttime traffic e altre frasi correlate e che la ricerca di valori mappi le frasi di valori a valori specifici memorizzati nelle colonne del database (ad esempio, la mappatura di "Disney World" a "Orlando")
Per generare query SQL, segui questi passaggi:
- Nel riquadro Explorer, accanto al set di contesto, fai clic su Visualizza azioni.
- Fai clic su Testa set di contesto.
- Nell'editor di query, fai clic su Genera SQL utilizzando QueryData con: assistente per i voli.
Inserisci la seguente domanda in linguaggio naturale per generare una query SQL e fai clic su Genera.
Tell me flights that can help me beat nighttime traffic if traveling from New YorkLa query SQL generata è simile alla seguente:
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;Si tratta della stessa domanda che hai aggiunto al contesto di QueryData. Tieni presente che QueryData ora può interpretare con precisione il termine
nighttime traffic.Sebbene il contesto provenga da una domanda specifica, QueryData lo utilizza per migliorare la generazione di SQL per un'ampia gamma di domande simili.
Nella finestra Genera SQL utilizzando QueryData con: flights-assistant, fai clic su Modifica.
Inserisci la seguente domanda simile per generare una query SQL e fai clic su Aggiorna.
What are the flights that can help me avoid evening traffic if departing from BostonPoiché la domanda sostituisce il termine
nighttime trafficcon un termine simile,evening traffic, QueryData fornisce una risposta coerente a questa domanda applicando la stessa interpretazione.La query SQL generata è simile alla seguente:
-- 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;Nella finestra Genera SQL utilizzando QueryData con: flights-assistant, fai clic su Modifica.
Inserisci la seguente domanda per generare una query SQL e fai clic su Aggiorna.
flights to disney worldLa query SQL generata è simile alla seguente:
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';Nota che QueryData ora può interpretare con precisione che "disney world" si riferisce alla città di "Orlando".
Integra il contesto impostato con la tua applicazione
In questa sezione, creerai un agente QueryData per un'applicazione di ricerca voli. Questo agente QueryData fornisce un'interfaccia conversazionale alla tabella flights e airports che hai creato in precedenza. Spiega anche come creare e integrare questo agente QueryData nella tua applicazione utilizzando Agent Development Kit (ADK), lo strumento MCP QueryData di Gemini Data Analytics e il contesto impostato per migliorare la qualità delle risposte.
Scarica MCP Toolbox versione 0.31.0 o successive. MCP Toolbox espone l'agente QueryData come strumento a cui le applicazioni possono connettersi. La toolbox MCP è diversa dall'estensione Gemini CLI della toolbox MCP che hai installato in precedenza, che genera il contesto.
Configura le credenziali predefinite dell'applicazione (ADC).
gcloud auth application-default loginTrova l'ID del set di contesti. Per saperne di più su come trovare l'ID insieme di contesti, vedi Trovare l'ID insieme di contesti.
Crea la configurazione
tools.yamlper connetterti all'agente QueryData utilizzando MCP Toolbox. Per saperne di più, consulta Origine Gemini Data Analytics e lo strumento QueryData di Gemini Data Analytics.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: trueSostituisci quanto segue:
PROJECT_ID: l'ID progetto Google Cloud .REGION_ID: la regione dell'istanza Cloud SQL (ad es. us-central1).INSTANCE_ID: l'ID dell'istanza Cloud SQL.DATABASE_ID: il nome del database a cui connettersi.CONTEXT_SET_ID: l'ID del set di contesto. Per saperne di più su come trovare l'ID insieme di contesti, vedi Trovare l'ID insieme di contesti.
Esegui il server MCP Toolbox con il file
tools.yaml../toolbox --config "tools.yaml"Crea un'applicazione ADK che richiama lo strumento QueryData di Gemini Data Analytics utilizzando l'SDK Python di MCP Toolbox. Per saperne di più su come utilizzare l'SDK Python di MCP Toolbox, consulta la guida rapida per Toolbox e per Python ADK, consulta la guida rapida per ADK.
- Crea una directory per archiviare l'applicazione, ad esempio
flight-assistant-app. Passa alla directory
flight-assistant-app.mkdir flight-assistant-appcd flight-assistant-appEsegui questi comandi nella directory
flight-assistant-appper creare un ambiente virtuale e installare i componenti richiesti.python3 -m venv .venvsource .venv/bin/activatepip install toolbox-corepip install google-genaipip install google-adkConfigura un agente ADK.
Crea un agente ADK.
adk create my_agentSeleziona il modello
gemini-2.5-flash.Seleziona Google AI e inserisci la chiave API Gemini. Per saperne di più su come trovare la chiave API, consulta Utilizzo delle chiavi API Gemini.
Sostituisci i contenuti del file
agent.pycon il seguente codice dell'applicazione di esempio Flight Data Assistant.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]), )
- Crea una directory per archiviare l'applicazione, ad esempio
Esegui i seguenti comandi nella directory
flight-assistant-appper avviare l'applicazione e accedere al server web ADK all'indirizzohttp://127.0.0.1:8000.adk web --port 8000Inserisci un testo qualsiasi, ad esempio
hello, per iniziare a interagire con l'agente.L'agente ADK risponde a domande generali e chiama gli strumenti MCP richiesti.
Inserisci la seguente domanda relativa al volo.
How many flights depart from the west side?Lo strumento MCP viene chiamato per rispondere a questa domanda. Tuttavia, poiché il termine
the westè ambiguo e non specifica alcun aeroporto, lo strumento MCP restituisce una domanda di disambiguazione che l'agente utilizza per costruire una risposta.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?Inserisci una domanda simile a quella nel modello di query generato per l'agente.
Help me find flights from San Francisco that avoid the evening rush hour.In base al contesto QueryData aggiunto in precedenza, lo strumento MCP comprende che
evening trafficsi verifica tra le 17:00 e le 19:00. Lo strumento MCP restituisce i dati associati che l'agente può utilizzare per costruire la sua risposta.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:00Inserisci una domanda in base al tipo di concetto che hai aggiunto nel contesto dell'agente QueryData.
Get me flights to disney worldIn base al contesto di ricerca dei valori aggiunto in precedenza, l'agente QueryData comprende che
disney worldsi riferisce alla cittàOrlandoe restituisce i dati associati che l'agente QueryData può utilizzare per costruire la sua risposta.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.
Migliorare le prestazioni dell'agente
L'interfaccia utente web dell'ADK ti consente di esaminare la richiesta e la risposta dello strumento MCP QueryData di Gemini Data Analytics. Puoi utilizzare questa risposta per osservare le risposte dello strumento, ad esempio la query SQL generata, il set di risultati, la spiegazione dell'intent, la domanda di disambiguazione e la risposta in linguaggio naturale, per verificare la correttezza delle risposte dell'agente.
Ad esempio, per il testo di input How many flights depart from the west side? inserito in precedenza, fai clic sul fumetto dell'agente. Nella scheda Evento nel pannello di navigazione a sinistra, espandi functionResponse per visualizzare la seguente risposta.
"{"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?"]}"
Migliorare l'accuratezza delle risposte
Puoi perfezionare continuamente l'accuratezza delle risposte dello strumento QueryData di Gemini Data Analytics aggiungendo ulteriore contesto. Utilizza Gemini CLI per generare il contesto, quindi carica il file del set di contesto aggiornato nell'agente QueryData flights-assistant esistente. Per maggiori informazioni, consulta la sezione Creare contesti utilizzando Gemini CLI. La console acquisisce immediatamente il nuovo contesto dopo il caricamento, consentendoti di migliorare l'accuratezza dell'agente senza tempi di inattività dell'applicazione.
Più agenti
Nell'ambiente di sviluppo, puoi eseguire test A/B su più contesti dell'agente QueryData assegnando nomi distinti agli strumenti nel file tools.yaml. Ad esempio, puoi creare configurazioni tools.yaml uniche definendo due strumenti cloud-gemini-data-analytics-query con nomi diversi, ad esempio cloud_gda_query_tool_v1 e cloud_gda_query_tool_v2. Questa configurazione ti consente di implementare la logica dell'applicazione che seleziona a livello di programmazione la versione del contesto richiesta scegliendo il nome dello strumento corrispondente.
L'esempio tools.yaml seguente mostra come configurare più agenti QueryData per un'origine 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: ...
Sostituisci quanto segue:
PROJECT_ID: l'ID progetto Google Cloud .V1_YOUR_CONTEXT_SET_ID: l'ID del set di contesto per la versione 1.V2_YOUR_CONTEXT_SET_ID: L'ID del set di contesto per la versione 2
Esegui la pulizia
Le sezioni seguenti descrivono come eliminare queste risorse e questi oggetti.
Eliminare il set di contesti
Prima di eliminare l'istanza, elimina il set di contesto che hai creato.
Nella console Google Cloud , vai alla pagina Cloud SQL.
Seleziona un'istanza dall'elenco.
Nel menu di navigazione, fai clic su Cloud SQL Studio.
Accedi a Studio utilizzando l'autenticazione Identity and Access Management.
Nel riquadro Explorer, accanto al set di contesto, fai clic su Visualizza azioni.
Nella finestra Elimina set di contesto, inserisci
flight-assistantnella casella di conferma.Fai clic su Conferma.
Elimina l'istanza
Quando elimini l'istanza che hai creato nella sezione Prima di iniziare, vengono eliminati anche tutti gli oggetti che hai creato.
Nella console Google Cloud , vai alla pagina Cloud SQL.
Seleziona un'istanza dall'elenco.
Fai clic su Elimina.
Conferma di voler eliminare l'istanza inserendo il nome dell'istanza e facendo clic su Elimina.
Passaggi successivi
- Scopri di più sui set di contesto.
- Scopri come definire il contesto creato per le origini dati del database.