Descripción general de los conjuntos de contexto

Un conjunto de contextos es una colección de información específica de la base de datos que permite que herramientas como QueryData generen consultas con precisión alta. Los conjuntos de contextos pueden incluir plantillas, facetas y búsquedas de valores que ayudan a QueryData a comprender el esquema de tu base de datos y la lógica empresarial de tus aplicaciones.

Se admiten las siguientes bases de datos:

  • AlloyDB para PostgreSQL
  • Cloud SQL para MySQL
  • Cloud SQL para PostgreSQL
  • Spanner
  • Firestore compatible con MongoDB

¿Qué son los conjuntos de contextos?

Para crear aplicaciones de agentes eficaces, las herramientas como QueryData deben comprender la organización de tus datos y la lógica empresarial. Proporcionas esta información en forma de un conjunto de contextos.

Defines el contexto en archivos que contienen objetos JSON para cada tipo de contexto. Puedes crear estos archivos de contexto con la ayuda del agente de ingeniería de contexto. Luego, subes el archivo de contexto a un conjunto de contextos que creas en la Google Cloud consola. Este proceso permite que herramientas como QueryData aprendan el esquema específico de la base de datos y la lógica empresarial de la aplicación.

El archivo de contexto se ve de la siguiente manera:

{
  "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"
    }
  ]
}

Formato del archivo de conjunto de contextos

Un archivo de conjunto de contextos consta de un conjunto seleccionado de plantillas, facetas y búsquedas de valores en formato JSON que guían a herramientas como QueryData para traducir preguntas en lenguaje natural a consultas para una base de datos específica. La definición de contexto garantiza la generación de lenguaje de consulta de MongoDB (MQL) de alta precisión para patrones de consulta comunes.

Para maximizar la precisión, asegúrate de que el conjunto de contextos sea preciso y completo en su cobertura de las consultas de aplicaciones esperadas.

Los conjuntos de contextos se pueden crear en las regiones us-central1, us-east1, europe-west4 y asia-southeast1.

Plantillas de consulta

Las plantillas de consulta son un conjunto seleccionado de preguntas representativas en lenguaje natural con las consultas de MQL correspondientes. También incluyen explicaciones para proporcionar una justificación declarativa para la generación de lenguaje natural a MQL.

Un objeto de plantilla de consulta se ve de la siguiente manera:

{
  "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 } }});"
      }
    }
  ],
  ...
}

Los componentes principales del objeto JSON de la plantilla de consulta son los siguientes:

  • nl_query: Un ejemplo de una consulta en lenguaje natural que manejan herramientas como QueryData.
  • sql: La consulta de MQL para la consulta en lenguaje natural. A pesar del nombre de la clave sql, esta contiene MQL.
  • intent: El objetivo o propósito de la consulta en lenguaje natural. Si no se configura, este valor se establece de forma predeterminada en la consulta en lenguaje natural.
  • manifest: Una forma generalizada y generada de forma automática de la intención.
  • parameterized_intent: Una forma de plantilla generada de forma automática de la intent, con valores de entidad reemplazados por parámetros.
  • parameterized_sql: Una forma de plantilla generada de forma automática de la consulta de MQL que corresponde a la intención parametrizada. A pesar del nombre de la clave parameterized_sql, esta contiene MQL.

Facetas de consulta

Las facetas de consulta son un conjunto seleccionado de condiciones representativas en lenguaje natural con los predicados de MQL correspondientes. Las facetas administran el filtrado y las condiciones, lo que permite que las plantillas de consulta realicen búsquedas por facetas.

Un objeto de faceta de consulta se ve de la siguiente manera:

{
  ...
  "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 }"
      }
    }
  ]
}

Los componentes principales del objeto JSON de la faceta son los siguientes:

  • sql_snippet: Un fragmento de MQL. A pesar del nombre de la clave sql_snippet, esta contiene MQL. Para evitar la ambigüedad, califica los nombres de los campos con nombres de documentos (por ejemplo, doc_name.field_name).
  • intent: Una explicación del predicado de MQL.
  • manifest: Una forma generalizada y generada de forma automática de la intención.
  • parameterized_intent: Una forma de plantilla generada de forma automática de la intent, con valores de entidad reemplazados por parámetros.
  • parameterized_sql_snippet: Una forma de plantilla generado de forma automática del sql_snippet que corresponde a la intención parametrizada. A pesar del nombre de la clave parameterized_sql_snippet, esta contiene MQL.

Consultas de búsqueda de valores

Las consultas de búsqueda de valores son consultas definidas por el desarrollador que usan funciones de coincidencia para encontrar valores y su contexto dentro de una base de datos. La vinculación de valores usa los resultados de estas consultas para identificar qué tablas y columnas contienen un valor coincidente, comprender el tipo de concepto del valor y corregir errores ortográficos.

La API de QueryData usa la vinculación de valores para convertir el lenguaje natural en MQL con mayor precisión. Cuando se usan consultas de búsqueda de valores, la API puede corregir errores ortográficos y resolver tipos de valores en función de los valores de la base de datos, lo que mejora la precisión de la conversión.

La vinculación de valores mejora la precisión de la conversión de lenguaje natural a MQL. Por ejemplo, si un usuario pregunta "¿Hay vuelos desde Heathrow?", la base de datos podría almacenar el nombre del aeropuerto como "London Heathrow". Sin la vinculación de valores, el MQL generado podría filtrar por { "name": "Heathrow" } y no mostrar ningún resultado. Las consultas de búsqueda de valores guían al agente para asignar "Heathrow" al valor correcto de la base de datos "London Heathrow" y su ubicación de esquema (airports.name), lo que garantiza que el MQL generado sea preciso.

Un ejemplo de consulta de búsqueda de valores es el siguiente:

{
  ...
  "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"

    }
  ]
}

Los componentes principales del objeto JSON de búsqueda de valores son los siguientes:

  • query: Una instrucción de MQL parametrizada que define la lógica para hacer coincidir una frase de valor con los valores almacenados en una base de datos. Por lo general, el conjunto de resultados proyecta el valor coincidente, la ubicación del esquema, el tipo de concepto y una métrica de distancia normalizada (entre 0 y 1).
  • concept_type: Una etiqueta semántica asignada al valor, por ejemplo, el district o el loan_status. Esta etiqueta ayuda a la vinculación de valores y, finalmente, a las herramientas como la API de QueryData a comprender el rol de la frase de valor en el esquema. También ayuda a producir una instrucción de MQL que se oriente al concepto del valor, así como a la tabla y la columna en las que aparece la frase de valor.
  • description: Una descripción de la lógica de búsqueda.

Limitaciones

Los conjuntos de contextos tienen las siguientes limitaciones:

  • Los conjuntos de contextos para bases de datos solo admiten plantillas, facetas y búsquedas de valores.
  • Los conjuntos de contextos para bases de datos solo los usa el extremo QueryData en la API de Conversational Analytics.

¿Qué sigue?