Kontextsets – Übersicht

Ein Kontextset ist eine Sammlung datenbankspezifischer Informationen, mit denen Tools wie QueryData Abfragen mit hoher Genauigkeit generieren können. Kontextsets können Vorlagen, Facetten und Wertesuchen enthalten, mit denen QueryData Ihr Datenbankschema und die Geschäftslogik Ihrer Anwendungen besser verstehen kann.

Die folgenden Datenbanken werden unterstützt:

  • AlloyDB for PostgreSQL
  • Cloud SQL for MySQL
  • Cloud SQL for PostgreSQL
  • Spanner
  • Firestore mit MongoDB-Kompatibilität

Was sind Kontextsets?

Um effektive Agentenanwendungen zu erstellen, müssen Tools wie QueryData Ihre Datenorganisation und Geschäftslogik verstehen. Sie stellen diese Informationen in Form eines Kontextsets zur Verfügung.

Sie definieren den Kontext in Dateien, die JSON-Objekte für jeden Kontexttyp enthalten. Sie können diese Kontextdateien mit dem Kontext-Engineering-Agenten erstellen. Anschließend laden Sie die Kontextdatei in ein Kontextset hoch, das Sie in der Google Cloud Console 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:

{
  "templates": [
    {
      "nl_query": "Count prague loan accounts",
      "sql": "db.accounts.countDocuments({ \"district.region\": \"Prague\", \"loans\": { $exists: true, $not: { $size: 0 } }});",
      "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": "db.accounts.countDocuments({ \"district.region\": $1, \"loans\": { $exists: true, $not: { $size: 0 } }});",
      }
    }
  ],
  "facets": [
    {
      "sql_snippet": "\"district.average_salary\": { $gt: 6000, $lt: 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": "\"district.average_salary\": { $gt: $1, $lt: $2 }"
      }
    }
  ],
  "value_searches": [
    {
      "query": "db.airports.aggregate([{ '$match': { 'iata': $value } }, { '$project': { 'value': '$iata', 'columns': 'airports.iata', 'concept_type': 'Airport IATA Code', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
      "concept_type": "Airport IATA Code",
      "description": "Exact match (standard MQL) for 3-letter airport codes"
    },
    {
      "query": "db.airports.aggregate([{ '$match': { 'name': { '$regex': $value, '$options': 'i' } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
      "concept_type": "Airport Name",
      "description": "Regex match for partial airport names"
    },
    {
      "query": "db.products.aggregate([{ '$match': { '$text': { '$search': $value } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': { '$meta': 'textScore' }, 'context': '', '_id': 0 } }, { '$sort': { 'distance': -1 } }, { '$limit': 1 }])",
      "concept_type": "Airport Name",
      "description": "Full-text search for airport names"
    }
  ]
}

Dateiformat für Kontextsets

Eine Kontextsetdatei besteht aus einer kuratierten Sammlung von Vorlagen, Facetten und Wertesuchen 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 des Kontexts wird eine hochgenaue MongoDB-kompatible Abfragesprache (MongoDB Query Language, MQL) für häufige Abfragemuster generiert.

Um die Genauigkeit zu maximieren, muss das Kontextset genau und umfassend sein und alle erwarteten Anwendungsabfragen abdecken.

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 MQL-Abfragen. Sie enthalten auch Erklärungen, um eine deklarative Begründung für die Generierung von natürlicher Sprache zu MQL zu liefern.

Ein Abfragevorlagenobjekt sieht in etwa so aus:

{
  "templates": [
    {
      "nl_query": "Count prague loan accounts",
      "sql": "db.accounts.countDocuments({ \"district.region\": \"Prague\", \"loans\": { $exists: true, $not: { $size: 0 } }});",
      "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": "db.accounts.countDocuments({ \"district.region\": $1, \"loans\": { $exists: true, $not: { $size: 0 } }});"
      }
    }
  ],
  ...
}

Die Hauptkomponenten des JSON-Objekts für Abfragevorlagen sind:

  • nl_query: Ein Beispiel für eine Abfrage in natürlicher Sprache, die von Tools wie QueryData verarbeitet wird.
  • sql: Die MQL-Abfrage für die Abfrage in natürlicher Sprache. Trotz des Namens des Schlüssels sql enthält dieser MQL.
  • intent: Das Ziel oder der Zweck der Abfrage in natürlicher Sprache. Wenn nicht festgelegt, wird dieser Wert standardmäßig auf die Abfrage in natürlicher Sprache gesetzt.
  • manifest: Eine verallgemeinerte, automatisch generierte Form der Absicht.
  • parameterized_intent: Eine vorlagenbasierte, automatisch generierte Form der Absicht, bei der Entitätswerte durch Parameter ersetzt werden.
  • parameterized_sql: Eine vorlagenbasierte, automatisch generierte Form der MQL-Abfrage, die der parametrisierten Absicht entspricht. Trotz des Namens des Schlüssels parameterized_sql enthält dieser MQL.

Abfragefacetten

Abfragefacetten sind eine kuratierte Sammlung repräsentativer Bedingungen in natürlicher Sprache mit entsprechenden MQL-Prädikaten. Facetten verwalten Filter und Bedingungen, sodass mit Abfragevorlagen Facettensuchen durchgeführt werden können.

Ein Abfragefacettenobjekt sieht in etwa so aus:

{
  ...
  "facets": [
    {
      "sql_snippet": "\"district.average_salary\": { $gt: 6000, $lt: 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": "\"district.average_salary\": { $gt: $1, $lt: $2 }"
      }
    }
  ]
}

Die Hauptkomponenten des Facetten-JSON-Objekts sind:

  • sql_snippet: Ein MQL-Snippet. Trotz des Namens des Schlüssels sql_snippet enthält dieser MQL. Um Mehrdeutigkeiten zu vermeiden, qualifizieren Sie Feldnamen mit Dokumentnamen (z. B. doc_name.field_name).
  • intent: Eine Erklärung des MQL-Prädikats.
  • manifest: Eine verallgemeinerte, automatisch generierte Form der Absicht.
  • parameterized_intent: Eine vorlagenbasierte, automatisch generierte Form der Absicht, bei der Entitätswerte durch Parameter ersetzt werden.
  • parameterized_sql_snippet: Eine vorlagenbasierte, automatisch generierte Form des sql_snippet, das der parametrisierten Absicht entspricht. Trotz des Namens des Schlüssels parameterized_sql_snippet enthält dieser MQL.

Wertesuchabfragen

Wertesuchanfragen sind von Entwicklern definierte Suchanfragen, die Übereinstimmungsfunktionen verwenden, um Werte und ihren Kontext in einer Datenbank zu finden. Bei der Werteverknüpfung werden die Ergebnisse dieser Abfragen verwendet, um zu ermitteln, welche Tabellen und Spalten einen übereinstimmenden Wert enthalten, den Konzepttyp des Werts zu verstehen und Rechtschreibfehler zu korrigieren.

Die QueryData API verwendet die Werteverknüpfung, um natürliche Sprache genauer in MQL zu konvertieren. Mithilfe von Wertesuchabfragen kann die API Rechtschreibfehler korrigieren und Wertetypen basierend auf Datenbankwerten auflösen, wodurch die Konvertierungsgenauigkeit verbessert wird.

Die Werteverknüpfung verbessert die Genauigkeit der Konvertierung von natürlicher Sprache in MQL. Wenn ein Nutzer beispielsweise fragt: „Gibt es Flüge ab Heathrow?“, kann der Flughafenname in der Datenbank als „London Heathrow“ gespeichert sein. Ohne Werteverknüpfung würde die generierte MQL-Abfrage nach { "name": "Heathrow" } filtern und keine Ergebnisse zurückgeben. Wertesuchabfragen weisen den Agenten an, „Heathrow“ dem korrekten Datenbankwert „London Heathrow“ und seinem Schemaspeicherort (airports.name) zuzuordnen, um sicherzustellen, dass die generierte MQL-Abfrage korrekt ist.

Eine Beispielabfrage für die Wertesuche ist:

{
  ...
  "value_searches": [
    {
      "query": "db.airports.aggregate([{ '$match': { 'iata': $value } }, { '$project': { 'value': '$iata', 'columns': 'airports.iata', 'concept_type': 'Airport IATA Code', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
      "concept_type": "Airport IATA Code",
      "description": "Exact match (standard MQL) for 3-letter airport codes"
    },
    {
      "query": "db.airports.aggregate([{ '$match': { 'name': { '$regex': $value, '$options': 'i' } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': 0, 'context': '', '_id': 0 } }, { '$limit': 1 }])",
      "concept_type": "Airport Name",
      "description": "Regex match for partial airport names"
    },
    {
      "query": "db.products.aggregate([{ '$match': { '$text': { '$search': $value } } }, { '$project': { 'value': '$name', 'columns': 'airports.name', 'concept_type': 'Airport Name', 'distance': { '$meta': 'textScore' }, 'context': '', '_id': 0 } }, { '$sort': { 'distance': -1 } }, { '$limit': 1 }])",
      "concept_type": "Airport Name",
      "description": "Full-text search for airport names"

    }
  ]
}

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

  • query: Eine parametrisierte MQL-Anweisung, die die Logik für den Abgleich einer Wertphrase mit den in einer Datenbank gespeicherten Werten definiert. Das Ergebnis-Set projiziert in der Regel den übereinstimmenden Wert, den Schemaspeicherort, den Konzepttyp und einen normalisierten Entfernungs-Messwert (zwischen 0 und 1).
  • concept_type: Ein semantisches Label, das dem Wert zugewiesen wird, z. B. district oder loan_status. Dieses Label hilft bei der Werteverknüpfung und schließlich bei Tools wie der QueryData API, die Rolle der Wertphrase im Schema zu verstehen. Außerdem wird eine MQL-Anweisung erstellt, die auf das Konzept für den Wert sowie auf die Tabelle und Spalte abzielt, in der die Wertphrase vorkommt.
  • description: Eine Beschreibung der Suchlogik.

Beschränkungen

Für Kontextsets gelten die folgenden Einschränkungen:

  • Kontextsets für Datenbanken unterstützen nur Vorlagen, Facetten und Wertesuchen.
  • Kontextsets für Datenbanken werden nur vom Endpunkt QueryData in der Conversational Analytics API verwendet.

Nächste Schritte