改进字面量搜索以增强 Cortex Analyst 响应¶
本主题介绍如何改进字面量字符串搜索的方法,以帮助 Cortex Analyst 生成更准确的 SQL 查询。有时在编写正确的 SQL 查询来回答问题时,需要知道要过滤的确切字面量值。由于这些值不能总是直接从问题中提取,因此可能需要进行某种类型的搜索。
例如,如果用户问以下这样的问题:
What was my overall sales of iced tea in Q1?
您可以尝试以下查询:
SELECT DISTINCT name FROM product WHERE name LIKE '%iced%tea%'
如果您亲自经历过这个过程,您就会知道这不是一个完美的解决方案。例如,此查询不会向您显示任何名为“Ice Tea”的产品,但会向您显示一些“调味茶”。
Cortex Analyst 提供两种解决方案来帮助提高字面量使用率:
对语义模型 </user-guide/snowflake-cortex/cortex-analyst/semantic-model-spec>` 中提供的样本值进行语义搜索 :doc:`。
使用 Cortex Search 服务 进行语义搜索。
这就是与 Cortex Search 集成的好处所在。Cortex Search 是一项可以对文本数据执行低延迟、高质量的“模糊”搜索的功能。您可以创建一个 Cortex Search 服务,对底层数据库列进行语义搜索,以查找 Cortex Analyst 在用于回答用户问题的 SQL 查询中需要使用的任何字面量值。
对样本值进行语义搜索¶
对于基数相对较低的维度(约 1-10 个不同值),建议通过指定足够的样本值来使用样本值搜索,以显示该维度的响应结构。除了语义模型大小会稍微增加外,该解决方案不需要额外的存储空间。
在 Cortex Analyst 为问题生成 SQL 查询前,它会在问题和提供的示例值之间进行语义相似性搜索,以确定编写查询可能需要的任何适当的字面量值。请注意,语义相似性搜索可能比上面提到的模糊字符串匹配查询方法检索出更多相关的字面量。
只有固定大小的检索样本值才会作为编写 SQL 查询所需的字面量呈现给 LLM。这意味着添加更多的样本值不会导致面临超出 LLM 上下文窗口的风险。
使用 Cortex Search 服务进行语义搜索¶
对于基数较高(超过 10 个不同值)的维度或值频繁变化的维度,您可以使用 Cortex Search 服务来搜索字面量。该解决方案减少了数据重复,并使语义模型保持简洁。
Cortex Search 服务确实需要额外的存储和计算成本。有关详细信息,请参阅 成本注意事项。
备注
在此预览版中,每个逻辑维度仅支持一个 Cortex Search 服务。
在 Cortex Analyst 语义模型中,为逻辑维度创建 Cortex Search 服务有两种方式:
使用 Cortex Analyst UI 创建 Cortex Search Service。这是推荐的方法,因为相比手动设置,它更简单且更不易出错。
使用 SQL 代码手动创建 Cortex Search Service。这种方法更灵活,但需要编写代码。
选项 1:使用 Cortex Analyst UI¶
您可以在 Snowsight 中,通过 Cortex Analyst 语义模型创建 UI 来创建 Cortex Search Service。这种方法无需编写或编辑 SQL 或 YAML,适用于大多数用途。
在 Snowsight 中,导航至 AI/ML> Cortex Analyst > Create new model。按照模型创建流程创建 Cortex Analyst 语义模型。在该流程的最后,会显示用于设置 Cortex Search Services 的界面。
在 UI 中定义维度时,选择包含要改善文字匹配的文本值的列。向导会自动为您选择高基数列,但您也可以选择其他列。接下来,UI 允许您为新服务选择设置,然后在完成流程后自动创建服务。
该服务是在您选择的数据库和架构中进行配置。创建后,该服务将自动链接到您的语义模型。(向导还会生成用于链接服务的 YAML。)
选项 2:手动创建 Cortex Search Service¶
以下步骤展示如何在 Cortex Analyst 语义模型中为逻辑维度手动设置 Cortex Search Service:
创建 Cortex Search 服务
CREATE OR REPLACE CORTEX SEARCH SERVICE my_logical_dimension_search_service ON my_dimension WAREHOUSE = xsmall TARGET_LAG = '1 hour' AS ( SELECT DISTINCT my_dimension FROM my_logical_dimension_landing_table );`
使用以下 yaml 代码片段将 Cortex Search 服务添加到语义模型中:
tables: - name: my_table base_table: database: my_database schema: my_schema table: my_table dimensions: - name: my_dimension expr: my_column cortex_search_service: service: my_logical_dimension_search_service literal_column: my_column # optional database: my_search_database # optional schema: my_search_schema # optional
以下字段在
cortex_search_service
下是可选的:literal_column
:默认为搜索索引。database
:默认为指定基表的数据库。schema
:默认为指定基表的架构。