上下文集概览

上下文集是为 QueryData 提供支持的领域知识。它定义了应用上线前业务逻辑的运作方式,以便 QueryData 能够以近乎 100% 的准确率和较低的在线延迟回答自然语言问题。

虽然网域上下文可以采用多种形式,但上下文集支持三种专用上下文类型:

  • 查询模板:针对常见业务问题的预批准 SQL 查询。
  • 查询分面:动态附加到模板的模块化过滤条件,例如“新家庭”或“海景”。
  • 值搜索:将用户短语映射到确切数据库值并消除歧义的实体查找。

支持以下数据库:

  • AlloyDB for PostgreSQL
  • Cloud SQL for MySQL
  • Cloud SQL for PostgreSQL
  • Spanner
  • 与 MongoDB 兼容的 Firestore
  • Bigtable

什么是上下文集

您可以在设计时使用上下文工程智能体编写和优化上下文集。上下文工程代理通过 QueryData 运行具有代表性的黄金基准,对结果进行评分,并以迭代方式优化(爬山)上下文集。然后,它会根据未见过的留出测试集检查最终版本,以避免过拟合,并自动将上下文集上传到Google Cloud。

将数据库与精选上下文集配对可带来两大核心生产优势:

  • 接近 100% 的准确率,且具有泛化能力:数据库架构描述了表和列,但无法告诉模型多远的距离算“近”,或者什么样的评分才算“好”学校。上下文集可让 QueryData 遵循贵组织经过验证的业务规则,而参数化模式可让紧凑的上下文集在措辞变体、过滤条件组合和实体值之间进行泛化。
  • 快速在线执行和低延迟:上下文工程将昂贵的架构推理移至离线设计时:
    • 使用上下文集进行上下文匹配执行:通过预编译模板匹配和索引值查找,实现快速单次执行。
    • 针对没有模板的意外查询进行零样本合成:由于模型必须在运行时探索架构元数据并合成 SQL,因此耗时会增加 2 到 3 倍。
    • 使用原始 SQL 工具进行开放式智能体探索:由于多轮试错查询和错误更正循环,通常需要 30 秒以上。

上下文集中的上下文类型

在运行时,QueryData 会一次性合并所有三种上下文类型。例如,如果用户询问:

“帮我在德尔马找一些靠近好学校、适合新家庭且拥有海景的房源”

QueryData 通过四个协调步骤来解析请求:

  1. 查询模板提供了“$1邻近好学校的房源”的核心查询结构,并应用了距离(2 英里以内)和学校排名(5 或更高)的业务规则。
  2. 查询分面会注入“新家庭”(3 到 4 间卧室、2 间或更多浴室)和“海景”的模块化过滤条件。
  3. 值搜索会在 cities.city_name 列中查找 'Del Mar' 并验证其概念类型。
  4. 意图说明会合并为一条经过认证的说明,并与查询结果一起返回:“德尔马房源,距离排名至少前 5 的学校 2 英里以内,有 3 到 4 间卧室,且有海景。”

查询模板

查询模板是一组精选的代表性自然语言问题,其中包含相应的 SQL 查询。它们还包含解释,为问题的解读方式提供经过认证的理由。

例如,如果用户向房地产应用询问“帮我找一下德尔马好学校附近的房源”,仅凭数据库架构无法定义多远的距离算“附近”、什么样的评分才算“好”学校,或者如何对匹配的房产进行排名。查询模板会捕获确切的业务解释,例如距离排名不低于 5 的学校 2 英里以内、按排名和邻近性的加权分数排序的房源,并将其泛化到任何城市。

查询模板的主要组成部分如下:

  • 示例自然语言问题:用普通英语提出的代表性问题,例如“帮我找找德尔马邻近好学校的房源”。
  • SQL 查询示例:根据您的业务规则回答问题的经过验证的 SQL 查询。
  • 泛化问题模式:一种自动生成的模式,其中特定值会被替换为通用描述,例如“查找指定城市中靠近好学校的房源”,用于匹配各种不同措辞的传入问题。
  • 意图说明:对查询所应用的业务规则进行经过认证的通俗易懂的说明,例如“在$1查找距离排名至少前 5 的学校 2 英里以内的房源”。
  • 参数化 SQL 查询:与 intent 说明对应的可执行 SQL 查询,使用 $1 或 ? 等参数。

查询分面

查询分面是一组精选的代表性自然语言条件,其中包含相应的 SQL 谓词。分面可管理过滤和条件,使查询模板能够执行分面搜索,而无需为每个过滤条件组合使用单独的模板。

例如,用户可以扩展“帮我找找德尔马靠近好学校的房源”,添加更多条件:

  • “…适合新家庭”,该短语会映射到结构化 SQL 过滤条件,例如 CAST(CAST(properties.cf['bedrooms'] AS STRING) AS INT64) BETWEEN 3 AND 4 AND CAST(CAST(properties.cf['bathrooms'] AS STRING) AS FLOAT64) >= 2.0。
  • “…with an ocean view,”,该查询与 listing_description 和 customer_reviews 等非结构化文本列匹配。

查询分面的主要组成部分如下:

  • SQL 代码段:可重复使用的 SQL 过滤条件,例如 CAST(CAST(properties.cf['bedrooms'] AS STRING) AS INT64) BETWEEN 3 AND 4 AND CAST(CAST(properties.cf['bathrooms'] AS STRING) AS FLOAT64) >= 2.0。
  • 通用条件模式:构面匹配的自然语言模式,例如“适合新家庭”。
  • 意图说明:过滤条件的认证说明,作为整体答案依据的一部分返回。
  • 参数化 SQL 代码段:与意图说明对应的可执行 SQL 片段。

值搜索查询

值搜索查询是开发者定义的查询,使用匹配函数(例如完全匹配、模糊三元组相似度或语义向量搜索)在数据库中查找值及其上下文。QueryData 会对这些结果使用值关联,以识别哪些表和列包含匹配值、了解值的概念类型、更正拼写错误,并在执行 SQL 之前检测歧义。

例如,如果用户向房地产应用询问“Westwod 过去一个月内售出的房产”,仅使用架构的模型可能会按 `WHERE name = 'Westwod'` 进行过滤,并且不返回任何结果。值搜索查询使用模糊匹配将拼写错误的“Westwod”解析为数据库值 'Westwood'。此外,如果 'Westwood' 存在于数据库中的多个概念类型(例如 City、Municipality 和 Brokerage)中,值关联会检测到歧义,以便 QueryData 可以要求用户澄清他们指的是哪个概念,而不是猜测。

值搜索查询的主要组成部分如下:

  • 查找查询:一种参数化 SQL 查询,使用完全匹配在列中查找值。
  • 概念类型:语义标签,例如 City、Municipality 或 Brokerage,用于指定值所代表的内容以及要过滤的列。
  • 说明:对查找逻辑的简要说明。

后续步骤