Um 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 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
O que são conjuntos de contexto
Para criar aplicativos de agentes 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 Google Cloud console. 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 a este:
{
"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 do arquivo de 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 para consultas de um banco de dados específico. A definição de contexto garante a geração de linguagem de consulta compatível com o MongoDB (MQL, na sigla em inglês) 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 aplicativos esperadas.
Os conjuntos de contexto podem ser criados nas regiões us-central1, us-east1, europe-west4 e asia-southeast1.
Modelos de consulta
Os modelos de consulta são um conjunto selecionado de perguntas representativas em linguagem natural com consultas MQL correspondentes. Eles também incluem explicações para fornecer uma justificativa declarativa para a geração de linguagem natural para MQL.
Um objeto de modelo de consulta é semelhante a este:
{
"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 } }});"
}
}
],
...
}
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 o QueryData processam.sql: a consulta MQL para a consulta em linguagem natural. Apesar do nome da chavesql, ela contém MQL.intent: o objetivo ou finalidade da consulta em linguagem natural. Se não for definido, esse valor será padrão para a consulta em linguagem natural.manifest: uma forma generalizada e gerada automaticamente da intenção.parameterized_intent: uma forma de modelo gerada automaticamente da intenção, com valores de entidade substituídos por parâmetros.parameterized_sql: uma forma de modelo gerada automaticamente da consulta MQL que corresponde à intenção parametrizada. Apesar do nome da chaveparameterized_sql, ela contém MQL.
Facetas de consulta
As facetas de consulta são um conjunto selecionado de condições representativas em linguagem natural com predicados MQL correspondentes. As facetas gerenciam a filtragem e as condições, o que permite que os modelos de consulta realizem pesquisas facetadas.
Um objeto de faceta de consulta é semelhante a este:
{
...
"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 }"
}
}
]
}
Os principais componentes do objeto JSON de faceta são os seguintes:
sql_snippet: um snippet MQL. Apesar do nome da chavesql_snippet, ela contém MQL. Para evitar ambiguidades, qualifique os nomes de campos com nomes de documentos (por exemplo,doc_name.field_name).intent: uma explicação do predicado MQL.manifest: uma forma generalizada e gerada automaticamente da intenção.parameterized_intent: uma forma de modelo gerada automaticamente da intenção, com valores de entidade substituídos por parâmetros.parameterized_sql_snippet: uma forma de modelo gerada automaticamente do sql_snippet que corresponde à intenção parametrizada. Apesar do nome da chaveparameterized_sql_snippet, ela contém MQL.
Consultas de pesquisa de valor
As 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 a linguagem natural em MQL 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 para MQL. 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, a MQL gerada poderá filtrar por
{ "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 a MQL gerada seja precisa.
Um exemplo de consulta de pesquisa de valor é:
{
...
"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"
}
]
}
Os principais componentes do objeto JSON de pesquisa de valor são os seguintes:
query: uma instrução MQL parametrizada que define a lógica para corresponder uma frase de valor aos 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, odistrictou oloan_status. Esse rótulo ajuda a vinculação de 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 MQL 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ó são compatíveis com modelos, facetas e pesquisas de valor.
- Os conjuntos de contexto para bancos de dados só são usados pelo endpoint
QueryDatana API Conversational Analytics.