QueryData – Übersicht

Ein Kontextset ist eine Sammlung datenbankspezifischer Informationen, mit denen Tools wie QueryData Abfragen mit hoher Genauigkeit generieren können. Der Kontextsatz umfasst Vorlagen, Facetten und Wertesuchen, die QueryData helfen, Ihr Datenbankschema und die Geschäftslogik Ihrer Anwendungen zu verstehen.

Die folgenden Datenbanken werden unterstützt:

  • AlloyDB for PostgreSQL
  • Cloud SQL for MySQL
  • Cloud SQL for PostgreSQL
  • Spanner

Was sind Kontextgruppen?

Um effektive Agent-Anwendungen zu erstellen, müssen Tools wie QueryData Ihre Datenorganisation und Geschäftslogik verstehen. Sie stellen diese Informationen in Form eines Kontextsets bereit.

Sie definieren den Kontext in Dateien, die JSON-Objekte für jeden Kontexttyp enthalten. Sie erstellen diese Kontextdateien mit der Gemini CLI. Anschließend laden Sie die Kontextdatei in ein Kontextset hoch, das Sie in der Google Cloud-Konsole erstellen. So können Tools wie QueryData das spezifische Schema der Datenbank und die Geschäftslogik der Anwendung kennenlernen.

Die Kontextdatei sieht in etwa so aus:

Die Datei mit dem Agent-Kontext sieht in etwa so aus:

{
  "templates": [
    {
      "nl_query": "Count prague loan accounts",
      "sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = 'Prague'",
      "intent": "How many accounts associated with loans are located in the Prague region?",
      "manifest": "How many accounts associated with loans are located in a given city?",
      "parameterized": {
        "parameterized_intent": "How many accounts associated with loans are located in $1",
        "parameterized_sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = $1"
      }
    }
  ],
  "facets": [
    {
      "sql_snippet": "T.\"A11\" BETWEEN 6000 AND 10000",
      "intent": "Average salary between 6000 and 10000",
      "manifest": "Average salary between a given number and a given number",
      "parameterized": {
         "parameterized_intent": "Average salary between $1 and $2",
         "parameterized_sql_snippet": "T.\"A11\" BETWEEN $1 AND $2"
      }
    }
  ]
}

Dateiformat für Kontextsets

Die Datei mit dem Kontextset besteht aus einer kuratierten Gruppe von Vorlagen und Facetten im JSON-Format, die Tools wie QueryData dabei helfen, Fragen in natürlicher Sprache in Abfragen für eine bestimmte Datenbank zu übersetzen. Durch die Definition von Kontext wird eine hohe Genauigkeit bei der SQL-Generierung für gängige Abfragemuster erreicht.

Achten Sie darauf, dass der festgelegte Kontext genau und umfassend ist, um die Genauigkeit zu maximieren.

Kontextsets können in den Regionen us-central1, us-east1, europe-west4 und asia-southeast1 erstellt werden.

Abfragevorlagen

Abfragevorlagen sind eine kuratierte Sammlung repräsentativer Fragen in natürlicher Sprache mit entsprechenden SQL-Abfragen. Sie enthalten auch Erklärungen, um eine deklarative Begründung für die Generierung von natürlicher Sprache in SQL zu liefern.

Ein Abfragevorlagenobjekt sieht etwa so aus:

{
  "templates": [
    {
      "nl_query": "Count prague loan accounts",
      "sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = 'Prague'",
      "intent": "How many accounts associated with loans are located in the Prague region?",
      "manifest": "How many accounts associated with loans are located in a given city?",
      "parameterized": {
        "parameterized_intent": "How many accounts associated with loans are located in $1",
        "parameterized_sql": "SELECT COUNT(T1.account_id) FROM bird_dev_financial.account AS T1 INNER JOIN bird_dev_financial.loan AS T2 ON T1.account_id = T2.account_id INNER JOIN bird_dev_financial.district AS T3 ON T1.district_id = T3.district_id WHERE T3.\"A3\" = $1"
      }
    }
  ]
},
...

Die Hauptkomponenten des JSON-Objekts für die Abfragevorlage sind:

  • nl_query: Ein Beispiel für eine Abfrage in natürlicher Sprache, die von Tools wie QueryData verarbeitet wird.
  • sql: Die SQL-Abfrage für die Abfrage in natürlicher Sprache.
  • intent: Das Ziel oder der Zweck der Abfrage in natürlicher Sprache. Wenn nicht festgelegt, wird standardmäßig die natürliche Sprachabfrage verwendet.
  • manifest: Eine verallgemeinerte, automatisch generierte Form der Intention.
  • parameterized_intent: Eine automatisch generierte Vorlage des Intents, bei der die Werte von Entitäten durch Parameter ersetzt werden.
  • parameterized_sql: Eine auf Vorlagen basierende, automatisch generierte Form der SQL-Abfrage, die dem parametrisierten Intent entspricht.

Abfragefacetten

Abfragefacetten sind eine kuratierte Gruppe repräsentativer Bedingungen in natürlicher Sprache mit entsprechenden SQL-Prädikaten. Mit Facetten werden Filter und Bedingungen verwaltet, sodass mit Abfragevorlagen Attributsuchen durchgeführt werden können.

Ein Abfragefacettenobjekt sieht in etwa so aus:

{
...
"facets": [
    {
      "sql_snippet": "T.\"A11\" BETWEEN 6000 AND 10000",
      "intent": "Average salary between 6000 and 10000",
      "manifest": "Average salary between a given number and a given number",
      "parameterized": {
         "parameterized_intent": "Average salary between $1 and $2",
         "parameterized_sql_snippet": "T.\"A11\" BETWEEN $1 AND $2"
      }
    }
  ]
}

Die Hauptkomponenten des Facetten-JSON-Objekts sind:

  • sql_snippet: Ein SQL-Snippet.
  • intent: Eine Erklärung des SQL-Prädikats.
  • manifest: Eine verallgemeinerte, automatisch generierte Form der Intention.
  • parameterized_intent: Eine automatisch generierte Vorlage des Intents, bei der die Werte von Entitäten durch Parameter ersetzt werden.
  • parameterized_sql_snippet: Eine auf Vorlagen basierende, automatisch generierte Form des sql_snippet, die dem parametrisierten Intent entspricht.

Abfragen zur Wertsuche

[Wertsuchanfragen](/sql/docs/mysql/build-context-gemini-cli#generate-value-searches) sind von Entwicklern definierte Anfragen, die Match-Funktionen verwenden, um Werte und ihren Kontext in einer Datenbank zu finden. Bei der Wertverknüpfung werden die Ergebnisse dieser Abfragen verwendet, um zu ermitteln, in welchen Tabellen und Spalten ein übereinstimmender Wert enthalten ist, den Konzepttyp des Werts zu ermitteln und Rechtschreibfehler zu korrigieren.

Bei der QueryData API wird die Wertverknüpfung verwendet, um natürliche Sprache genauer in SQL zu konvertieren. Mithilfe von Wertsuchanfragen kann die API Rechtschreibfehler korrigieren und Werttypen basierend auf Datenbankwerten auflösen. So wird die Conversion-Genauigkeit verbessert.

Durch die Verknüpfung von Werten wird die Genauigkeit der Umwandlung von natürlicher Sprache in SQL verbessert. Wenn ein Nutzer beispielsweise fragt: „Gibt es Flüge ab Heathrow?“, wird der Flughafenname in der Datenbank möglicherweise als „London Heathrow“ gespeichert. Ohne die Verknüpfung von Werten wird in der generierten SQL-Abfrage möglicherweise nach WHERE name = 'Heathrow' gefiltert und es werden keine Ergebnisse zurückgegeben. Durch die Wertsuchanfragen wird der KI-Agent angewiesen, „Heathrow“ dem richtigen Datenbankwert „London Heathrow“ und dem zugehörigen Schemaspeicherort (airports.name) zuzuordnen. So wird sichergestellt, dass das generierte SQL korrekt ist.

Ein Beispiel für eine Suchanfrage nach einem Wert:

{
  ...
  "value_searches": [
    {
      "query": "SELECT $value as value, 'airports.iata' as columns, 'Airport IATA Code' as concept_type, 0 as distance, '{}'::text as context FROM \"airports\" T WHERE T.\"iata\" = $value",
      "concept_type": "Airport IATA Code",
      "description": "Exact match (Standard SQL) for 3-letter airport codes"
    },
    {
      "query": "WITH TrigramMetrics AS ( SELECT T.\"name\" AS original_value, (T.\"name\" <-> $value::text) AS normalized_dist FROM \"airports\" T WHERE T.\"name\" % $value::text ) SELECT original_value AS value, 'airports.name' AS columns, 'Airport Name' AS concept_type, normalized_dist AS distance, '{}'::text AS context FROM TrigramMetrics",
      "concept_type": "Airport Name",
      "description": "Fuzzy match using standard trigram for partial airport names"
    },
    {
      "query": "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 on string values for airport city names"
    }
  ]
}

Die Hauptkomponenten des JSON-Objekts für die Wertsuche sind:

  • query: Eine parametrisierte SQL-Anweisung, die die Logik für den Abgleich eines Wertes mit den in einer Spalte einer Datenbanktabelle gespeicherten Werten definiert. Das Ergebnis-Set enthält in der Regel den abgeglichenen Wert, den Schemaspeicherort, den Konzepttyp und einen normalisierten Distanzmesswert (zwischen 0 und 1).
  • concept_type: Ein dem Wert zugewiesenes semantisches Label, z. B. district oder loan_status. Dieses Label hilft beim Verknüpfen von Werten und letztendlich den Tools wie der QueryData API, die Rolle des Wertbegriffs im Schema zu verstehen. Außerdem wird eine SQL-Anweisung erstellt, die auf das Konzept für den Wert sowie auf die Tabelle und Spalte abzielt, in denen der Wertausdruck vorkommt.
  • description: Eine Beschreibung der Suchlogik.

Beschränkungen

Für Kontextsets gelten die folgenden Einschränkungen:

  • Cloud SQL for SQL Server wird nicht unterstützt.
  • Kontextsets für Datenbanken unterstützen nur Vorlagen, Facetten und die Suche nach Werten.
  • Kontextsets für Datenbanken werden nur vom QueryData-Endpunkt in der Conversational Analytics API verwendet.

Nächste Schritte