上下文集包含特定数据库的信息,可帮助 QueryData 等工具生成高精确度的查询。上下文集可以包含模板、分面和值搜索,这些内容有助于 QueryData 了解您的数据库架构和应用的业务逻辑。
支持以下数据库:
- AlloyDB for PostgreSQL
- Cloud SQL for MySQL
- Cloud SQL for PostgreSQL
- Spanner
- 与 MongoDB 兼容的 Firestore
什么是上下文集
如需构建有效的代理应用,QueryData 等工具必须了解您的数据组织和业务逻辑。您以上下文集的形式提供此信息。
您可以在包含每种上下文类型的 JSON 对象的文件中定义上下文。您可以在上下文工程代理的帮助下编写这些上下文文件。然后,您 将上下文文件上传到在 Google Cloud 控制台中创建的上下文集。此过程使 QueryData 等工具能够了解数据库的特定架构和应用的业务逻辑。
上下文文件类似于以下内容:
{
"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"
}
]
}
上下文集文件格式
上下文集文件包含一组精选的模板、分面和值搜索,这些内容采用 JSON 格式,可指导 QueryData 等工具将自然语言问题转换为特定数据库的查询。定义上下文可确保针对常见查询句式生成高度准确的 MongoDB 兼容查询语言 (MQL)。
为最大限度地提高准确性,请确保上下文集准确且全面地涵盖预期应用查询。
可以在 us-central1、us-east1、europe-west4 和 asia-southeast1 区域中创建上下文集。
查询模板
查询模板是一组精选的代表性自然语言问题,其中包含相应的 MQL 查询。它们还包含说明,用于为自然语言到 MQL 的生成提供声明性依据。
查询模板对象类似于以下内容:
{
"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 } }});"
}
}
],
...
}
查询模板 JSON 对象的主要组成部分如下:
nl_query:QueryData 等工具处理的自然语言查询示例。sql:自然语言查询的 MQL 查询。尽管sql键的名称如此,但其中包含的是 MQL。intent:自然语言查询的目标或用途。如果未设置,此值默认为自然语言查询。manifest:意图的通用自动生成形式。parameterized_intent:意图的模板化自动生成形式,实体值替换为参数。parameterized_sql:与参数化意图对应的 MQL 查询的模板化自动生成形式。尽管parameterized_sql键的名称如此,但其中包含的是 MQL。
查询分面
查询分面是一组精选的代表性自然语言条件,其中包含相应的 MQL 谓词。分面管理过滤条件和条件,使查询模板能够执行分面搜索。
查询分面对象类似于以下内容:
{
...
"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 }"
}
}
]
}
分面 JSON 对象的主要组成部分如下:
sql_snippet:MQL 代码段。 尽管sql_snippet键的名称如此,但其中包含的是 MQL。 为避免歧义,请使用文档名称限定字段名称(例如doc_name.field_name)。intent:对 MQL 谓词的说明。manifest:意图的通用自动生成形式。parameterized_intent:意图的模板化自动生成形式,实体值替换为参数。parameterized_sql_snippet:与参数化意图对应的 sql_snippet 的模板化自动生成形式。尽管parameterized_sql_snippet键的名称如此,但其中包含的是 MQL。
值搜索查询
值搜索查询 是开发者定义的查询,使用匹配函数在数据库中查找值及其上下文。值关联使用这些查询的结果来识别哪些表和列包含匹配的值,了解值的概念类型,并纠正拼写错误。QueryData API 使用值关联将自然语言更准确地转换为 MQL。通过使用值搜索查询,API 可以根据数据库值纠正拼写错误并解析值类型,从而提高转换准确性。
值关联可提高自然语言到 MQL 的转换准确性。例如,如果用户问“有没有从希思罗机场起飞的航班?”,数据库可能会将机场名称存储为“London
Heathrow”。如果没有值关联,生成的 MQL 可能会按
{ "name": "Heathrow" }
进行过滤,并且不会返回任何结果。值搜索查询会引导代理将“Heathrow”映射到正确的数据库值“London
Heathrow”及其架构位置 (airports.name),确保生成的 MQL 准确无误。
值搜索查询示例:
{
...
"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"
}
]
}
值搜索 JSON 对象的主要组成部分如下:
query:参数化 MQL 语句,用于定义将值短语与数据库中存储的值进行匹配的逻辑。结果集通常会投影匹配的值、架构位置、概念类型和归一化距离指标(介于 0 和 1 之间)。concept_type:分配给值的语义标签,例如district或loan_status。此标签有助于值关联,并最终帮助 QueryData API 等工具了解值短语在架构中的作用。它还有助于生成针对值的概念的 MQL 语句,以及值短语在其中显示的表和列。description:对搜索逻辑的说明。
限制
上下文集具有以下限制:
- 数据库的上下文集仅支持模板、分面和值搜索。
- 数据库的上下文集仅由 Conversational Analytics API 中的
QueryData端点使用。
后续步骤
- 了解如何使用上下文工程代理构建上下文集。