Cortex Analyst 评估

您可以通过 Cortex Analyst 评估测量和改进用于 SQL 生成的语义视图的性能。评估的工作原理是将其自身经过验证的查询作为标准答案对语义视图进行测试。这让您确信语义视图能够处理用户所依赖的查询,这通常也意味着 SQL 能够获得更高的准确性。

评估通过执行由 Cortex Analyst 生成的 SQL,并将结果与经过验证的查询进行比较来衡量准确性。通过汇总回归指标,可以追踪那些之前能正确回答、但现在却执行失败的已验证查询。除了这些正确性指标外,还会记录延迟情况以追踪查询的性能。这些指标可用于识别薄弱环节,并迭代优化语义视图,从而在防止回归的同时提高 SQL 的准确性。

访问控制要求

若要运行 Cortex Analyst 评估,所使用的角色必须具备以下权限:

  • DATABASE ROLE SNOWFLAKE.CORTEX_USER

  • EXECUTE TASK ON ACCOUNT 全局权限

  • 对包含语义视图的模式具有 CREATE TASK 权限

  • 对包含语义视图的模式具有 CREATE DATASET ON SCHEMA 权限

  • 对语义视图以及语义视图中引用的表具有 SELECT 权限

  • 对语义视图具有 MONITOR 权限

备注

上述所有权限必须通过同一个主要角色来授予。评估运行使用 Snowflake 任务执行,不考虑次要角色权限。

准备评估集

Cortex Analyst 评估使用已验证查询 (VQs) 作为评估集。每个已验证查询会将一个自然语言问题与其预期的 SQL 答案配对。在运行评估之前,您至少需要拥有一个与您的语义视图关联的已验证查询。

如果您还没有任何已验证查询,请通过 Snowsight 中的语义视图编辑器添加它们。有关更多信息,请参阅 Cortex Analyst 验证查询存储库

在评估期间如何使用已验证查询

为一次评估运行选择已验证查询时,Cortex Analyst 会创建语义视图的一个临时副本,并从该副本中移除所选的那些已验证查询。然后 Cortex Analyst 会使用这个不包含评估查询的临时副本来生成 SQL。这可以防止评估查询影响 SQL 的生成,从而确保评估能够衡量 Cortex Analyst 在不依赖已验证查询精确匹配的情况下回答问题的能力。

选择用于评估的已验证查询会保留在临时语义视图中,并在评估运行期间继续指导 Cortex Analyst,就像它们在正常使用期间所做的那样。

备注

已验证查询要么在运行时指导 Cortex Analyst,要么被用作评估的标准答案,但无法同时承担两种职责。选择将某个已验证查询用于评估,会将其临时从语义视图中移除,从而使评估结果能够反映出真实的 SQL 生成能力。

启动 Cortex Analyst 评估

Snowsight

通过执行以下操作开始评估语义视图:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 AI & ML » Cortex Analyst

  3. 从列表中选择要运行评估的语义视图。

  4. 选择 Evaluations 选项卡。

  5. 选择 Create evaluation run

  6. Name 字段中,为您的评估提供一个名称。该名称对于被评估的语义视图来说应当是唯一的。

  7. 选择 Next

    这将进入 Select verified queries 模式窗口。

  8. 选择要包含在评估中的已验证查询。您可以选择所有已验证查询,也可以通过勾选相应的复选框来选择特定的集合。

  9. 选择 Run evaluation

SQL

Cortex Analyst 评估运行也可以使用 SQL 通过 EXECUTE_AI_EVALUATION 函数启动。此函数接受以下 evaluation_job 值:

  • 'START':选择使用 时默认使用的角色和仓库。开始评估运行。

  • 'STATUS':选择使用 时默认使用的角色和仓库。查询评估运行的进度。

  • 'CANCEL':选择使用 时默认使用的角色和仓库。取消正在运行的评估。

  • 'DELETE':选择使用 时默认使用的角色和仓库。删除已完成的评估运行及其结果。

每次调用都需要以下附加实参:

  • run_parameters:选择使用 时默认使用的角色和仓库。一个 SQL OBJECT,包含键 run_name,其值为您的运行名称。

  • config_file_path:选择使用 时默认使用的角色和仓库。指向您的运行配置 YAML 文件的暂存区文件路径。关于 YAML 规范,请参阅 分析人员评估 YAML 规范

以下示例启动了名为 Evaluation run 1 的评估运行:

CALL EXECUTE_AI_EVALUATION(
  'START',
  OBJECT_CONSTRUCT('run_name', 'Evaluation run 1'),
  '@EVAL_DB.EVAL_SCHEMA.METRICS/analyst_evaluation_config.yaml'
);

运行启动后,您可以查询其进度:

CALL EXECUTE_AI_EVALUATION(
  'STATUS',
  OBJECT_CONSTRUCT('run_name', 'Evaluation run 1'),
  '@EVAL_DB.EVAL_SCHEMA.METRICS/analyst_evaluation_config.yaml'
);

要取消或删除运行,请将 'STATUS' 替换为 'CANCEL''DELETE'

检查评估结果

Snowsight

在 Snowsight 的语义视图中,通过 Evaluations 选项卡可概览所有评估运行及其摘要,包括查询回归次数。

要查看评估结果,请执行以下操作:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 AI & ML » Cortex Analyst

  3. 从列表中选择要查看其评估的语义视图。

  4. 选择 Evaluations 选项卡。

  5. 选择某个运行记录,即可查看详细结果。

运行详细信息页面显示如下内容:

  • 准确性 – 生成的 SQL 在已验证查询中所占的百分比被判定为正确,同时可以选择 Improve 语义视图。

  • 回归 – 那些原本正确、但当前执行失败的已验证查询的数量。

  • 延迟 – Cortex Analyst 的平均响应时间和每次查询响应时间。

  • 按查询结果 – 对于每个经过验证的查询,显示以下内容:自然语言问题、预期 SQL,生成的 SQL,以及结果是否正确。选择一个查询以查看详细比较。

SQL

要检索评估运行的结果,请使用 GET_ANALYST_AI_EVALUATION_DATA 函数。此函数具有以下必填实参:

  • database:选择使用 时默认使用的角色和仓库。包含语义视图的数据库。

  • schema:选择使用 时默认使用的角色和仓库。包含语义视图的模式。

  • object_name:选择使用 时默认使用的角色和仓库。语义视图的名称。

  • object_type:选择使用 时默认使用的角色和仓库。字符串常量 'SEMANTIC VIEW'

  • run_name:选择使用 时默认使用的角色和仓库。要检索的评估运行的名称。

以下示例显示了名为 Evaluation run 1 的运行的完整评估详情,其中语义视图名为 SEMANTIC_VIEW_EVAL,存储在 EVAL_DB.EVAL_SCHEMA 模式中:

SELECT * FROM TABLE(SNOWFLAKE.LOCAL.GET_ANALYST_AI_EVALUATION_DATA(
  'EVAL_DB',
  'EVAL_SCHEMA',
  'SEMANTIC_VIEW_EVAL',
  'SEMANTIC VIEW',
  'Evaluation run 1')
);

评估结果表格式

GET_ANALYST_AI_EVALUATION_DATA 函数返回一个包含以下列的表:

数据类型

描述

RECORD_ID

VARCHAR

Snowflake 为此评估记录分配的唯一标识符。

INPUT_ID

VARCHAR

Snowflake 为此评估输入分配的唯一标识符。

REQUEST_ID

VARCHAR

Snowflake 为此请求分配的唯一标识符。

TIMESTAMP

TIMESTAMP_LTZ

请求发起的时间。

DURATION_MS

INT

Cortex Analyst 返回响应所花费的时间(以毫秒为单位)。

INPUT

VARCHAR

用作此评估记录输入的查询字符串。

OUTPUT

VARCHAR

Cortex Analyst 为此评估记录返回的响应。

ERROR

VARCHAR

请求期间发生的任何错误的相关信息。

GROUND_TRUTH

VARCHAR

用于评估此记录的 Cortex Analyst 输出的标准答案信息。

METRIC_NAME

VARCHAR

为此记录评估的指标名称。

EVAL_AGG_SCORE

NUMBER

为此记录分配的评估分数。

METRIC_TYPE

VARCHAR

所评估指标的类型。对于内置指标,值为 system。对于自定义指标,值为 custom

METRIC_STATUS

VARIANT

一个映射,包含有关此记录的评估的 HTTP 响应的信息,包含以下键:

  • status:选择使用 时默认使用的角色和仓库。响应的 HTTP 状态码。

  • message:选择使用 时默认使用的角色和仓库。状态响应中发送的 HTTP 消息。

METRIC_CALLS

ARRAY

一个 VARIANT 值数组,包含有关计算后指标的信息。数组中的每个条目包含该指标的判定标准,以及指标分数的说明。每个条目的键包括:

  • criteria:选择使用 时默认使用的角色和仓库。用于计算 SQL 正确性的标准。

  • explanation:选择使用 时默认使用的角色和仓库。比较结果集的详细信息。

分析人员评估 YAML 规范

要以编程方式触发评估运行,您需要上传到 Snowflake 暂存区的 YAML 配置文件。本节介绍 YAML 格式及其上传方法。

YAML 格式

evaluation:
  analyst_params:
    analyst_name: "SEMANTIC_VIEW_EVAL"
    analyst_type: "SEMANTIC VIEW"
  source_metadata:
    type: "verified_queries"
    # Optional: list specific verified queries by their question text.
    # If omitted, all verified queries are used.
    verified_queries:
      - "What are our top 10 customers from the last 30 days?"
      - "What is the total revenue by region for Q1 2025?"

metrics:
  - "sql_correctness"

analyst_params

  • analyst_name:选择使用 时默认使用的角色和仓库。要对其运行评估的语义视图的名称。

  • analyst_type:选择使用 时默认使用的角色和仓库。字符串常量 SEMANTIC VIEW

source_metadata

  • type:选择使用 时默认使用的角色和仓库。用作评估数据的源类型。对于 Cortex Analyst,唯一受支持的源类型为 verified_queries

  • verified_queries``(可选):每个已验证查询中与 ``question 字段匹配的问题列表应当被用作评估的标准答案。如果未提供,则使用所有已验证查询。

指标

要为评估计算的指标。sql_correctness 是 Cortex Analyst 评估唯一受支持的指标。

将配置上传到暂存区

将您的 YAML 配置上传到 Snowflake 暂存区。以下示例会创建文件格式、创建暂存区并上传本地配置文件:

CREATE OR REPLACE FILE FORMAT evals_db.evals_schema.yaml_file_format
  TYPE = 'CSV'
  FIELD_DELIMITER = NONE
  RECORD_DELIMITER = '\n'
  SKIP_HEADER = 0
  FIELD_OPTIONALLY_ENCLOSED_BY = NONE
  ESCAPE_UNENCLOSED_FIELD = NONE;

CREATE OR REPLACE STAGE evals_db.evals_schema.metrics
  FILE_FORMAT = evals_db.evals_schema.yaml_file_format;

PUT file:///Users/dev/analyst_evaluation_config.yaml @evals_db.evals_schema.metrics
  AUTO_COMPRESS='false'
  OVERWRITE=TRUE;

小技巧

Snowflake 建议保留 YAML 文件为未压缩状态。

改进语义视图

使用评估结果,以迭代方式改进语义视图。推荐的工作流程如下所示:

  1. 运行评估,以建立基线准确性分数。

  2. Evaluations 选项卡选择运行,查看每个查询的预期和实际生成的 SQL,检查已完成的运行

  3. 通过在 Accuracy 摘要框中选择 Improve优化您的语义视图。这将启动语义视图优化,该优化会分析评估失败项,并自动建议对语义视图进行更改。有关更多信息,请参阅 使用已验证查询优化现有语义视图或模型

  4. 重新运行评估,以衡量变更带来的影响。

重复此循环以逐步提高语义视图的准确性。通过追踪各次运行的准确性,您可以在更改意外破坏了先前正确的查询时检测到回归问题。

已知限制

Cortex Analyst 评估存在以下限制:

  • 每次运行仅支持单个语义视图:每次评估运行会评估一个语义视图。不支持在单次运行中评估多个语义视图。

  • 不支持多轮评估::评估查询是独立处理的。不支持跟进或多轮对话评估。

  • 不支持自动生成评估数据集::评估集必须通过已验证查询手动编辑。不支持通过查询历史、仪表板或合成生成的方式自动生成。

  • 标准答案过期:如果您的已验证查询引用了时间相对概念(例如 last quarter 而不是 Q1 2025),评估结果可能会随时间推移而产生偏差。将查询限定在特定的绝对日期和时间范围内,以便获得一致的结果。

成本注意事项

Cortex Analyst 评估会针对语义视图运行查询,并使用评估判断来对正确性进行评分。您需要支付以下费用:

  • 使用为评估运行所选的虚拟仓库,对 Cortex Analyst 运行评估查询产生的 虚拟仓库费用

  • 用于计算 sql_correctness 指标的 AI_COMPLETE 函数调用所产生的 评估 Credit 数

  • 在账户中存储数据集和评估结果产生的 存储费用

有关估算成本的更多信息,请参阅 了解总体费用