上下文集是为 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邻近好学校的房源”的核心查询结构,并应用了距离(2 英里以内)和学校排名(5 或更高)的业务规则。 - 查询分面会注入“入门家庭”(3 到 4 间卧室、2 间或更多浴室)和“海景”(向量相似度搜索)的模块化过滤条件。
- 值搜索会在
cities.city_name列中查找'Del Mar'并验证其概念类型。 - 意图说明会合并为一条经过认证的说明,并与查询结果一起返回:“德尔马房源,距离排名至少前 5 的学校 2 英里以内,有 3 到 4 间卧室,且有海景。”
查询模板
查询模板是一组精选的代表性自然语言问题,其中包含相应的 SQL 查询。它们还包含解释,为问题的解读方式提供经过认证的理由。
例如,如果用户向房地产应用询问“帮我找一下德尔马好学校附近的房源”,仅凭数据库架构无法定义多远的距离算“附近”、什么样的评分才算“好”学校,或者如何对匹配的房产进行排名。查询模板会捕获确切的业务解释,例如距离排名不低于 5 的学校 2 英里以内、按排名和邻近性的加权分数排序的房源,并将其泛化到任何城市。
查询模板的主要组成部分如下:
- 示例自然语言问题:用普通英语提出的代表性问题,例如“帮我找找德尔马邻近好学校的房源”。
- SQL 查询示例:根据您的业务规则回答问题的经过验证的 SQL 查询。
- 泛化问题模式:一种自动生成的模式,其中特定值会被替换为通用描述,例如“查找指定城市中靠近好学校的房源”,用于匹配各种不同措辞的传入问题。
- 意图说明:对查询所应用的业务规则进行经过认证的通俗易懂的说明,例如“在
$1查找距离排名至少前 5 的学校 2 英里以内的房源”。 - 参数化 SQL 查询:与 intent 说明对应的可执行 SQL 查询,使用
$1等参数。
查询分面
查询分面是一组精选的代表性自然语言条件,其中包含相应的 SQL 谓词。分面可管理过滤和条件,使查询模板能够执行分面搜索,而无需为每个过滤条件组合使用单独的模板。
例如,用户可以扩展“帮我找找德尔马靠近好学校的房源”,添加更多条件:
- “…适合新家庭”,该短语会映射到结构化 SQL 过滤条件,例如
properties.bedrooms BETWEEN 3 AND 4 AND properties.bathrooms >= 2.0。 - "…with an ocean view," which
uses vector similarity search (
<=>) across unstructured columns such aslisting_description,listing_image_embeddings, andcustomer_reviews.
查询分面的主要组成部分如下:
- SQL 代码段:可重复使用的 SQL 过滤条件,例如
properties.bedrooms BETWEEN 3 AND 4 AND properties.bathrooms >= 2.0。 - 通用条件模式:构面匹配的自然语言模式,例如“适合新家庭”。
- 意图说明:过滤条件的认证说明,作为整体答案依据的一部分返回。
- 参数化 SQL 代码段:与意图说明对应的可执行 SQL 片段。
值搜索查询
值搜索查询是开发者定义的查询,使用匹配函数(例如完全匹配、模糊三元组相似度或语义向量搜索)在数据库中查找值及其上下文。QueryData 会对这些结果使用值关联,以识别哪些表和列包含匹配值、了解值的概念类型、更正拼写错误,并在执行 SQL 之前检测歧义。
例如,如果用户向房地产应用询问“Westwod 过去一个月内售出的房产”,仅使用架构的模型可能会按 `WHERE name = 'Westwod'` 进行过滤,并且不返回任何结果。值搜索查询使用模糊匹配将拼写错误的“Westwod”解析为数据库值 'Westwood'。此外,如果 'Westwood' 存在于数据库中的多个概念类型(例如 City、Municipality 和 Brokerage)中,值关联会检测到歧义,以便 QueryData 可以要求用户澄清他们指的是哪个概念,而不是猜测。
值搜索查询的主要组成部分如下:
- 查找查询:一种参数化 SQL 查询,使用完全匹配、三元语法相似度 (
pg_trgm) 或 Vector Search 来查找列中的值。 - 概念类型:语义标签,例如
City、Municipality或Brokerage,用于指定值所代表的内容以及要过滤的列。 - 说明:对查找逻辑的简要说明。
后续步骤