Visão geral dos conjuntos de contexto

O conjunto de contexto é uma coleção de informações específicas do banco de dados que permite que ferramentas como o QueryData gerem consultas com alta precisão. Os conjuntos de contexto podem incluir modelos, facetas e pesquisas de valor que ajudam o QueryData a entender o esquema do banco de dados e a lógica de negócios dos seus aplicativos.

Os seguintes bancos de dados são compatíveis:

  • AlloyDB para PostgreSQL
  • Cloud SQL para MySQL
  • Cloud SQL para PostgreSQL
  • Spanner
  • Firestore com compatibilidade com o MongoDB
  • Bigtable

O que são conjuntos de contexto

Para criar aplicativos agênticos eficazes, ferramentas como o QueryData precisam entender a organização dos dados e a lógica de negócios. Você fornece essas informações na forma de um conjunto de contexto.

Você define o contexto em arquivos que contêm objetos JSON para cada tipo de contexto. É possível criar esses arquivos de contexto com a ajuda do agente de engenharia de contexto. Em seguida, faça upload do arquivo de contexto para um conjunto de contexto criado no console do Google Cloud. Esse processo permite que ferramentas como o QueryData aprendam o esquema específico do banco de dados e a lógica de negócios do aplicativo.

O arquivo de contexto é semelhante ao seguinte:

{
  "templates": [
    {
      "nl_query": "List all luxury hotels",
      "sql": "SELECT CAST(_key AS STRING) AS hotel_id, CAST(cf['name'] AS STRING) AS name, CAST(cf['location'] AS STRING) AS location FROM `hotels` WHERE CAST(cf['price_tier'] AS STRING) = 'Luxury' ORDER BY _key ASC",
      "intent": "hotels in Luxury tier",
      "manifest": "hotels in a given product tier",
      "parameterized": {
        "parameterized_intent": "hotels in ? tier",
        "parameterized_sql": "SELECT CAST(_key AS STRING) AS hotel_id, CAST(cf['name'] AS STRING) AS name, CAST(cf['location'] AS STRING) AS location FROM `hotels` WHERE CAST(cf['price_tier'] AS STRING) = ? ORDER BY _key ASC"
      }
    }
  ],
  "facets": [
    {
      "sql_snippet": "CAST(CAST(hotels.cf['rating'] AS STRING) AS FLOAT64) >= 4.5",
      "intent": "hotels with rating at least 4.5",
      "manifest": "hotels with rating at least a given number",
      "parameterized": {
        "parameterized_intent": "hotels with rating at least ?",
        "parameterized_sql_snippet": "CAST(CAST(hotels.cf['rating'] AS STRING) AS FLOAT64) >= ?"
      }
    }
  ],
  "value_searches": [
    {
      "query": "SELECT CAST(T.cf['location'] AS STRING) AS value, 'hotels.location' AS `columns`, 'City' AS concept_type, 0 AS distance, '' AS context FROM `hotels` AS T WHERE CAST(T.cf['location'] AS STRING) = CAST($value AS STRING)",
      "concept_type": "City",
      "description": "Exact match for hotel city in hotels table"
    }
  ]
}

Formato do arquivo do conjunto de contexto

Um arquivo de conjunto de contexto consiste em um conjunto selecionado de modelos, facetas e pesquisas de valor no formato JSON que orientam ferramentas como o QueryData na tradução de perguntas em linguagem natural em consultas para um banco de dados específico. Definir o contexto garante a geração de SQL de alta precisão para padrões de consulta comuns.

Para maximizar a precisão, verifique se o conjunto de contexto é preciso e abrangente na cobertura das consultas de aplicativo esperadas.

Os conjuntos de contexto podem ser criados nas regiões us-central1, us-east1, europe-west4 e asia-southeast1. É preciso selecionar uma região ao criar o primeiro conjunto de contexto em um projeto. Os conjuntos de contexto posteriores usam a mesma região.

Modelos de consulta

Os modelos de consulta são um conjunto selecionado de perguntas representativas em linguagem natural com consultas SQL correspondentes. Eles também incluem explicações para fornecer uma justificativa declarativa para a geração de linguagem natural para SQL.

Um objeto de modelo de consulta é semelhante a este:

{
  "templates": [
    {
      "nl_query": "List all luxury hotels",
      "sql": "SELECT CAST(_key AS STRING) AS hotel_id, CAST(cf['name'] AS STRING) AS name, CAST(cf['location'] AS STRING) AS location FROM `hotels` WHERE CAST(cf['price_tier'] AS STRING) = 'Luxury' ORDER BY _key ASC",
      "intent": "hotels in Luxury tier",
      "manifest": "hotels in a given product tier",
      "parameterized": {
        "parameterized_intent": "hotels in ? tier",
        "parameterized_sql": "SELECT CAST(_key AS STRING) AS hotel_id, CAST(cf['name'] AS STRING) AS name, CAST(cf['location'] AS STRING) AS location FROM `hotels` WHERE CAST(cf['price_tier'] AS STRING) = ? ORDER BY _key ASC"
      }
    }
  ],
  ...
}

Os principais componentes do objeto JSON do modelo de consulta são os seguintes:

  • nl_query: um exemplo de consulta em linguagem natural que ferramentas como QueryData processam.
  • sql: a consulta SQL para a consulta em linguagem natural.
  • intent: o objetivo ou propósito da consulta em linguagem natural. Se não for definido, esse valor será padronizado para a consulta em linguagem natural.
  • manifest: uma forma generalizada e gerada automaticamente da intent.
  • parameterized_intent: um formulário de intent gerado automaticamente com base em um modelo, com valores de entidade substituídos por parâmetros.
  • parameterized_sql: uma forma de modelo gerada automaticamente da consulta SQL que corresponde à intent parametrizada.

Facetas de consulta

As facetas de consulta são um conjunto selecionado de condições representativas de linguagem natural com predicados SQL correspondentes. Os atributos gerenciam filtros e condições, o que permite que os modelos de consulta realizem pesquisas de atributos.

Um objeto de atributo de consulta é semelhante a este:

{
  ...
  "facets": [
    {
      "sql_snippet": "CAST(CAST(hotels.cf['rating'] AS STRING) AS FLOAT64) >= 4.5",
      "intent": "hotels with rating at least 4.5",
      "manifest": "hotels with rating at least a given number",
      "parameterized": {
        "parameterized_intent": "hotels with rating at least ?",
        "parameterized_sql_snippet": "CAST(CAST(hotels.cf['rating'] AS STRING) AS FLOAT64) >= ?"
      }
    }
  ]
}

Os principais componentes do objeto JSON de atributo são os seguintes:

  • sql_snippet: um snippet SQL. Para evitar ambiguidade, qualifique os nomes das colunas com os nomes das tabelas (por exemplo, table_name.column_name).
  • intent: uma explicação do predicado SQL.
  • manifest: uma forma generalizada e gerada automaticamente da intent.
  • parameterized_intent: um formulário de intent gerado automaticamente com base em um modelo, com valores de entidade substituídos por parâmetros.
  • parameterized_sql_snippet: uma forma de modelo gerada automaticamente do sql_snippet que corresponde à intent parametrizada.

Valorizar as consultas de pesquisa

Consultas de pesquisa de valor são consultas definidas pelo desenvolvedor que usam funções de correspondência para encontrar valores e o contexto deles em um banco de dados. A vinculação de valores usa os resultados dessas consultas para identificar quais tabelas e colunas contêm um valor correspondente, entender o tipo de conceito do valor e corrigir erros de ortografia.

A API QueryData usa a vinculação de valores para converter linguagem natural em SQL com mais precisão. Ao usar consultas de pesquisa de valor, a API pode corrigir erros de ortografia e resolver tipos de valor com base nos valores do banco de dados, melhorando a precisão da conversão.

A vinculação de valores melhora a precisão da conversão de linguagem natural em SQL. Por exemplo, se um usuário perguntar "Há voos saindo de Heathrow?", o banco de dados poderá armazenar o nome do aeroporto como "London Heathrow". Sem a vinculação de valores, o SQL gerado pode filtrar por WHERE name = 'Heathrow' e não retornar resultados. As consultas de pesquisa de valor orientam o agente a mapear "Heathrow" para o valor correto do banco de dados "London Heathrow" e o local do esquema (airports.name), garantindo que o SQL gerado seja preciso.

Veja um exemplo de consulta de pesquisa de valor:

{
  ...
  "value_searches": [
    {
      "query": "SELECT CAST(T.cf['location'] AS STRING) AS value, 'hotels.location' AS `columns`, 'City' AS concept_type, 0 AS distance, '' AS context FROM `hotels` AS T WHERE CAST(T.cf['location'] AS STRING) = CAST($value AS STRING)",
      "concept_type": "City",
      "description": "Exact match for hotel city in hotels table"
    }
  ]
}

Os principais componentes do objeto JSON de pesquisa de valor são os seguintes:

  • query: uma instrução SQL parametrizada que define a lógica para comparar uma frase de valor com os valores armazenados em um banco de dados. O conjunto de resultados normalmente projeta o valor correspondente, o local do esquema, o tipo de conceito e uma métrica de distância normalizada (entre 0 e 1).
  • concept_type: um rótulo semântico atribuído ao valor, por exemplo, district ou loan_status. Esse rótulo ajuda a vincular valores e, por fim, as ferramentas, como a API QueryData, a entender o papel da frase de valor no esquema. Ele também ajuda a produzir uma instrução SQL que segmenta o conceito do valor, bem como a tabela e a coluna em que a frase de valor aparece.
  • description: uma descrição da lógica de pesquisa.

Limitações

Os conjuntos de contexto têm as seguintes limitações:

  • Os conjuntos de contexto para bancos de dados só aceitam modelos, atributos e pesquisas de valor.
  • O GoogleSQL para Bigtable não é compatível com operações de conjunto (UNION ALL), portanto, a vinculação de valores em várias consultas de pesquisa de valor não é compatível. Essa solicitação é bem-sucedida, mas os valores não são vinculados para conjuntos de contexto com mais de uma pesquisa de valor.
  • Os conjuntos de contexto para bancos de dados são usados apenas pelo endpoint QueryData na API Conversational Analytics.

A seguir