Cortex Agent 评估¶
Cortex Agent 评估允许您监控代理的行为和性能。根据标准答案的评估指标和无参考评估指标来评估您的代理。在评估过程中,您的代理活动会被追踪和监控,从而确保流程中的每个步骤都有助于达成最终目标。
Snowflake 提供以下指标来评估您的代理:
答案正确性 – 代理对您准备好的查询的回答与预期答案的匹配程度。当为 Cortex Agent 提供支持的数据集是静态时,此指标最有用。
逻辑一致性 – 衡量代理指令、规划和工具调用之间的一致性。此指标是 无参考的,这意味着您无需在数据集中为评估准备任何参考信息。
Snowflake 还允许您创建自定义评估指标,使用 LLM 评判流程来衡量对 Agent 领域和用例至关重要的上下文。自定义指标使用 LLM 提示和评分方法,这些内容被传递给评估评判系统以生成评分。
有关在 Snowflake 上进行 Agent 评估的更多详细信息,包括用于无参考评估的 LLM 评判系统,请参阅 Snowflake 工程博客 你的智能体 GPA 是多少?一种评估 AI 智能体可靠性的框架。有关以编程方式运行代理评估的示例,请参阅指南 Cortex Agent 评估入门。
访问控制要求¶
运行 Cortex Agent 评估需要具有以下权限的角色:
DATABASE ROLE SNOWFLAKE.CORTEX_USER 角色
EXECUTE TASK ON ACCOUNT 权限
对包含您代理的数据库的 USAGE 权限
对包含您代理的架构具有以下权限:
USAGE
CREATE FILE FORMAT ON SCHEMA
CREATE TASK
EXECUTE TASK
对包含您评估数据的数据库的 USAGE 权限
对包含您评估数据的架构具有以下权限:
USAGE
EXECUTE TASK
如果从输入表创建数据集,则需要 CREATE DATASET ON SCHEMA
代理的 USAGE 或 OWNERSHIP 权限
代理的 MONITOR 或 OWNERSHIP 权限
如果使用代理评估配置,则需要包含配置文件的暂存区的 READ 权限。
如果正在评估的代理使用工具,您的角色还需要拥有所有这些工具的访问权限。
此外,如果在 Snowsight 中进行评估操作,您用于运行或检查评估的角色需要对默认仓库具有 USAGE 权限。
准备评估数据集¶
在开始 Cortex Agent 评估之前,请准备一个包含评估输入的表。此表用于创建一个数据集,供您的评估运行参考。要了解有关 Snowflake 上数据集的更多信息,请参阅 Snowflake 数据集。
Cortex Code¶
要由 Cortex Code 协助您创建评估数据集,请使用 Cortex Code cortex-agent 技能的 dataset-curation 子技能。有关 Cortex Code 技能的更多信息,请参阅 Cortex Code CLI – 技能。
数据集格式¶
用于创建评估数据集的表有一个类型为 VARCHAR 的输入查询列(表示您的查询),以及一个类型为 VARIANT 的输出列(包含对预期代理行为的描述)。该单一输出列被 LLM 评估器用作标准答案。
输出列中的值只有一个键,ground_truth_output。该键的值用于评估答案的正确性。LLM 评估器通过将标准答案纳入其提示中来评估代理的输出。
小技巧
利用标准答案被纳入 LLM 提示这一特性,除了精确或语义响应匹配之外,还可以使用自然语言描述期望的响应类型。例如,您可以提供一个 Output is in the following JSON format ... 的标准答案,后跟一个包含结构描述或 JSON 示例本身的字符串。如果您需要根据完整的自定义提示对输出进行更严格的检查,请创建自定义指标。
要将 JSON 数据集导入 Snowflake 表,请使用 PARSE_JSON SQL 函数。以下示例创建一个新表 agent_evaluation_data 用于评估数据集,并为输入查询 What was the temperature in San Francisco on August 2nd 2019? 插入一行,其标准答案为 The temperature was 14 degrees Celsius in San Francisco on August 2nd, 2019.。
重要
函数 OBJECT_CONSTRUCT 和 ARRAY_CONSTRUCT 返回非 VARIANT 结果。使用一个函数从您的原始输入(如 PARSE_JSON)生成 VAIRANT,或调用 TO_VARIANT 来确保值类型。
您在 ground_truth 列中提供的、未被所选指标使用的数据将被忽略。当仅使用无参考指标进行评估运行时,您可以将输出列留空。
在运行首次评估时,您将可以选择从现有表创建新数据集。
开始代理评估¶
Cortex Code¶
要由 Cortex Code 运行评估,请使用 Cortex Code cortex-agent 技能的 evaluate-cortex-agent 子技能。有关 Cortex Code 技能的更多信息,请参阅 Cortex Code CLI – 技能。
Snowsight¶
备注
代理评估在 Snowsight 中以您当前选中的角色运行,而非您的默认角色。在开始评估之前,请确保具有正确权限的角色处于活动状态。
通过执行以下操作开始评估 Cortex Agent:
登录 Snowsight。
在导航菜单中,选择 AI & ML » Agents。
选择要进行评估的代理。
选择 Evaluations 选项卡。
选择 New evaluation run。
New evaluation run 模式窗口打开。
在 Name 字段中,为您的评估提供一个名称。对于正在评估的代理,此名称应该是唯一的。
可选:在 Description 字段中,为评估提供任意注释。
选择 Next。
这将进入 Select dataset 模式窗口。
选择用于评估代理的数据集。您可以选择 Existing dataset 或 Create new dataset。
要使用现有数据集,请执行以下操作:
在 Database and schema 列表中,选择包含数据集的数据库和架构。
在 Select dataset 列表中,选择您的数据集。
要创建新数据集,请执行以下操作:
在 Source table - Database and schema 列表中,选择包含您要导入到数据集中的表的数据库和架构。
在 Select source table 列表中,选择源表。
在 New dataset location - Database and schema 列表中,选择用于放置新数据集的数据库和架构。
在 Dataset name 字段中,输入数据集名称。此名称在所选架构的架构级对象中必须唯一。
选择 Next。
这将进入 Select metrics 模式窗口。
在 Input query 列表中,选择包含输入查询的数据集列。
对于每个 System metrics,将您希望在评估中包含的任何指标的开关切换为启用状态。选择数据集中包含评估标准答案的列
(可选)要进行自定义评估,请打开 Custom metrics。
选择包含存储自定义评估配置的暂存区的数据库和架构。
选择存储自定义评估配置的暂存区。
选择自定义评估的 YAML 配置文件。
备注
在 Snowsight 中,仅从您的 YAML 配置加载自定义评估定义。YAML 文件的其余部分必须仍然有效。有关评估 YAML 规范,请参阅 代理评估 YAML 规范。
对于每个自定义指标,如果您希望将其包含在评估中,请将开关切换为启用状态。选择数据集中包含本次评估标准答案的列。
选择 Create 以创建评估并开始评估过程。
您随时可以选择 Cancel 来取消创建评估,或选择 Prev 返回上一个模式窗口。
SQL¶
要使用 SQL 启动评估或检索评估信息,请使用 EXECUTE_AI_EVALUATION 函数。此函数具有以下必填实参:
evaluation_job:选择使用 时默认使用的角色和仓库。“START”或“STATUS”的字符串值run_parameters:选择使用 时默认使用的角色和仓库。一个 SQL OBJECT,包含键run_name,其值为您的运行名称。config_file_path:指向您的运行配置 YAML 文件的暂存区文件路径。此路径不能是已签名 URL。有关评估 YAML 规范,请参阅 代理评估 YAML 规范。
使用 evaluation_job 值“START”开始评估。以下示例使用来自 @eval_db.eval_schema.metrics/agent_evaluation_config.yaml 的代理评估配置启动名为 run-1 的运行:
运行启动后,您可以使用 evaluation_job 值“STATUS”查询其进度。此调用返回一个采用 AI 可观测性运行 所用格式的表。以下示例展示如何查询在前一个示例中启动的代理评估的状态。
小技巧
您可以从 任务 中调用 EXECUTE_AI_EVALUATION 函数,以定期运行评估或检查评估状态。
检查评估结果¶
评估结果包括所请求指标的信息、代理推理线程的详细信息,以及线程中每个执行轨迹的 LLM 规划阶段的信息。
Cortex Code¶
Cortex Code 提供了 cortex-agent 技能的两个子技能。使用 investigate-cortex-agent-evals 子技能检查评估并发现配置或数据中的任何问题。使用 optimize-cortex-agent 子技能从已完成的评估中获取结果并改进您的代理的性能。
Snowsight¶
Snowsight 中代理的 Evaluations 选项卡为您提供每次评估运行及其摘要结果的概览。
要在 Snowsight 中查看评估结果,请执行以下操作:
登录 Snowsight。
在导航菜单中,选择 AI & ML » Agents。
选择要进行评估的代理。
选择 Evaluations 选项卡。
评估运行列表¶
每次运行的运行信息摘要包括:
RUN NAME– 评估运行的名称。# OF RECORDS– 作为运行的一部分执行和回答的查询数。STATUS– 评估运行的状态,为以下之一:DATASET– 用于评估的数据集的名称。AVG DURATION– 该运行中执行输入查询所花费的平均时间。LOGICAL CONSISTENCY– 如果请求了逻辑一致性评估,则为该运行所有输入的逻辑一致性评估平均值。DESCRIPTION– 评估运行的描述。CREATED– 创建和开始运行的时间。
为该运行评估的每个自定义指标也都有其自己的列,由评估指标的 name 值定义。有关自定义指标的更多信息,请参阅 定义自定义指标。
评估运行概述¶
当您在 Snowsight 中选择某个运行时,将看到该运行的概览。此概览包括运行期间评估的每个指标的汇总平均值,以及每次输入执行的摘要。每个输入执行的概述包括:
STATUS– 评估运行的状态,为以下之一:INPUT– 用于评估的输入查询。OUTPUT– 代理生成的输出。DURATION– 处理输入和生成输出所需的时间长度。LOGICAL CONSISTENCY– 如果请求了逻辑一致性评估,则为该输入的逻辑一致性评估结果。EVALUATED– 处理输入的时间。
为该运行评估的每个自定义指标也都有其自己的列,由评估指标的 name 值定义。有关自定义指标的更多信息,请参阅 定义自定义指标。
记录详细信息¶
当您在 Snowsight 中选择单个输入时,将看到 Record details 视图。此视图包括三个窗格:Evaluation results、Thread details 和 Trace details。
评估结果¶
此处详细介绍了您的评估结果。每个指标都有其自己的展示框,显示所有输入的整体平均值,您可以选择该展示框以显示包含更多信息的弹出窗口。该弹出窗口包含按高准确度(80% 及以上准确)、中等准确度(30% 及以上但未达到高准确度)以及失败分类的运行数量明细。
线程详细信息¶
在每个代理线程执行期间记录的信息。这包括默认情况下的规划和响应生成,以及代理在该线程期间调用的每个工具的线程跟踪。
跟踪详细信息¶
每个跟踪窗格都包含与该代理执行阶段相关的输入、处理和输出信息。此信息与 代理监控 提供的信息相同。
SQL¶
要检索原始评估详细信息,请使用 GET_AI_EVALUATION_DATA (SNOWFLAKE.LOCAL) 函数。此函数具有以下必填实参:
database:选择使用 时默认使用的角色和仓库。包含代理的数据库。schema:选择使用 时默认使用的角色和仓库。包含代理的架构。agent_name:选择使用 时默认使用的角色和仓库。代理的名称。agent_type:选择使用 时默认使用的角色和仓库。字符串常量“CORTEX AGENT”。此值不区分大小写。run_name:选择使用 时默认使用的角色和仓库。要检索的评估运行的名称。
此函数返回 评估结果表格式 中所述的事件数据表。以下示例显示了名为 run-1 的运行的完整评估详情,其中代理名为 evaluated_agent,存储在 eval_db.eval_schema 架构中:
单个记录的查询追踪¶
要访问评估跟踪中的单个记录,请使用 GET_AI_RECORD_TRACE (SNOWFLAKE.LOCAL) 函数。此函数具有以下必填实参:
database:选择使用 时默认使用的角色和仓库。包含代理的数据库。schema:选择使用 时默认使用的角色和仓库。包含代理的架构。agent_name:选择使用 时默认使用的角色和仓库。代理的名称。agent_type:选择使用 时默认使用的角色和仓库。字符串常量“CORTEX AGENT”。此值不区分大小写。record_id:选择使用 时默认使用的角色和仓库。用于筛选的记录 ID。
此函数返回 评估结果表格式 中所述的事件数据表。以下示例展示了记录 9346efc3-5dd6-4038-9b1a-72ca3d3b768c 的追踪信息,其中代理名为 evaluated_agent,存储于架构 eval_db.eval_schema 中:
查询运行的评估错误和警告¶
要访问评估运行期间发生的警告和错误的日志,请使用 GET_AI_OBSERVABILITY_LOGS (SNOWFLAKE.LOCAL) 函数。此函数具有以下必填实参:
database:选择使用 时默认使用的角色和仓库。包含代理的数据库。schema:选择使用 时默认使用的角色和仓库。包含代理的架构。agent_name:选择使用 时默认使用的角色和仓库。代理的名称。agent_type:选择使用 时默认使用的角色和仓库。字符串常量“CORTEX AGENT”。此值不区分大小写。
此函数返回 评估结果表格式 中所述的事件数据表。以下示例检查名为 run-1 的运行中的错误和警告,其中代理名为 evaluated_agent,存储在架构 eval_db.eval_schema 中:
备注
record 和 record_attributes 的字段可能会发生变化,但 record:"severity_text" 和 record_attributes:"snow.ai.observability.run.name" 字段保证会出现在 AI 可观察性日志中。
代理评估 YAML 规范¶
要定义用于配置代理评估(包括定义自定义指标)的 YAML 文件,有三个顶级键:
(可选)``dataset``:关于如何为评估创建数据集的定义。当在 Snowsight 中使用 YAML 规范启动评估或使用现有数据集时,此值为可选。
evaluation:选择使用 时默认使用的角色和仓库。要评估的代理的设置。metrics:选择使用 时默认使用的角色和仓库。评估运行期间记录的指标,包括自定义指标的定义。
数据集定义¶
dataset 值根据现有表数据定义一个新数据集,映射输入查询列和标准答案列。有关 ground_truth 列所需的结构,请参阅 数据集格式。dataset 值的键为:
dataset_type:选择使用 时默认使用的角色和仓库。字符串常量“CORTEX AGENT”。此值不区分大小写。table_name:选择使用 时默认使用的角色和仓库。用于数据集内容的表的完全限定名称。dataset_name:选择使用 时默认使用的角色和仓库。创建的数据集的名称。column_mapping:选择使用 时默认使用的角色和仓库。将所需的评估输入列query_text和输出列ground_truth映射到用于创建数据集的表的列。
生成的数据集存储在与构建它所依据的表相同的数据库和架构中。
以下示例数据集定义显示了一个名为 evaluation_input 的数据集,该数据集由 evals_db.evals_schema.evaluation_data 表创建,使用 user_question 作为输入,使用 expected_outcome 定义标准答案:
代理配置¶
evaluation 值设置用于进行评估的代理的配置。evaluation 值的键为:
agent_params:选择使用 时默认使用的角色和仓库。描述要评估的代理的字典。此值使用以下键:agent_name:选择使用 时默认使用的角色和仓库。要评估的代理的名称。agent_type:选择使用 时默认使用的角色和仓库。字符串常量“CORTEX AGENT”。此值不区分大小写。
(可选)``run_params``:用于标识此评估运行的元数据。此值使用以下键:
(可选)``label``:此评估的标签。
(可选)``description``:对评估的详细描述。
source_metadata:选择使用 时默认使用的角色和仓库。描述要评估的代理的字典。此值使用以下键:type:选择使用 时默认使用的角色和仓库。字符串常量“DATASET”。此值不区分大小写。dataset_name:选择使用 时默认使用的角色和仓库。要使用的数据集的名称。
以下示例代理配置运行一个名为 evaluated_agent、标签为 Basic evaluation 的代理,使用数据集 evaluation_input:
指标选择¶
metrics 值是要评估的指标序列,包括您自己的自定义指标定义。预定义指标的可接受值为:
answer_correctness:选择使用 时默认使用的角色和仓库。根据标准答案输出衡量代理的响应正确性。logical_consistency:选择使用 时默认使用的角色和仓库。衡量代理指令、规划和工具调用之间的一致性。此指标是 无参考的,不使用数据集。
定义自定义指标¶
您可以通过提供标识符、提示和分数范围来定义自己的自定义指标。您提供的提示将与运行轨迹一起传递给 LLM 评估器,以执行您的自定义评估。自定义指标具有以下必需的键值对:
name:选择使用 时默认使用的角色和仓库。指标的名称。score_ranges:选择使用 时默认使用的角色和仓库。定义低、中和高质量分数范围的映射。此映射使用以下键:min_score:选择使用 时默认使用的角色和仓库。用于识别低质量结果的分数范围,作为一个包含下限、排除上限的双元素序列。median_score:选择使用 时默认使用的角色和仓库。用于标识中等质量结果的评分范围,以一个包含两个元素的序列表示,分别为包含的下限和上限。max_score:选择使用 时默认使用的角色和仓库。用于识别高质量结果的分数范围,作为一个排除下限、包含上限的双元素序列。
prompt:选择使用 时默认使用的角色和仓库。与代理运行轨迹数据一起传递给 LLM 评估器的提示模板。重要
此模板必须包含一个评分机制,该机制产生一个数值,该数值落在为
score_ranges提供的范围内。
自定义指标的提示能够引用代理在评估运行期间生成的跟踪数据。Snowflake 会将整个轨迹作为输入传递给 LLM 评判器,但您可以通过使用直接引用 GET_AI_RECORD_TRACE 列中数据的替换字符串来强调某些信息。以下替换字符串可用:
替换字符串 |
GET_AI_RECORD_TRACE 列 |
|---|---|
|
INPUT |
|
OUTPUT |
|
GROUND_TRUTH |
|
TOOL |
|
START_TIMESTAMP |
|
DURATION_MS |
|
SPAN_ID |
|
SPAN_TYPE |
|
SPAN_NAME |
|
LLM_MODEL |
|
ERROR |
|
STATUS |
指标配置示例¶
以下示例定义了一个指标配置,用于启用答案正确性和逻辑一致性检查,并定义了一个自定义的 relevance 指标,该指标根据真实值与代理输出的对比情况返回 1–10 之间的评分。
完整示例配置¶
结合前面的所有示例部分,可以得到完整的代理评估配置:
将配置上传到暂存区¶
代理评估配置需要具有特定的文件格式,以便 Snowflake 解析它们。以下代码片段演示了在架构 evals_db.evals_schema 上创建所需的 yaml_file_format,然后创建暂存区 evaluation_config 以将代理配置上传至:
通过 Snowsight 将您的配置上传到已创建的暂存区:在导航菜单中,选择 Ingestion » Add Data,然后选择 Load files into a Stage。您还可以使用 SQL PUT 命令上传本地 YAML 文件。以下示例演示如何将本地文件 /Users/dev/evaluation_config.yaml 复制到暂存区 evals_db.evals_schema.evaluation_config:
如果您在 工作区 中创建 YAML,则可以将其从活动工作区复制到暂存区。以下示例将文件 evaluation_config.yaml 从您的工作区复制到暂存区 evals_db.evals_schema.evaluation_config:
小技巧
Snowflake 建议保留 YAML 文件为未压缩状态。
评估结果表格式¶
返回 Cortex Agent 评估相关信息的函数都会生成一个包含以下列的表:
列 |
数据类型 |
描述 |
|---|---|---|
RECORD_ID |
VARCHAR |
Snowflake 为此评估记录分配的唯一标识符。 |
INPUT_ID |
VARCHAR |
Snowflake 为此评估输入分配的唯一标识符。 |
REQUEST_ID |
VARCHAR |
Snowflake 为此请求分配的唯一标识符。 |
TIMESTAMP |
TIMESTAMP_TZ |
请求发起的时间(以 UTC 为单位)。 |
DURATION_MS |
INT |
代理返回响应所花费的时间(以毫秒为单位)。 |
INPUT |
VARCHAR |
用作此评估记录输入的查询字符串。 |
OUTPUT |
VARCHAR |
Cortex Agent 为此评估记录返回的响应。 |
ERROR |
VARCHAR |
请求期间发生的任何错误的相关信息。 |
GROUND_TRUTH |
VARCHAR |
用于评估此记录 Cortex Agent 输出的真实基准信息。 |
METRIC_NAME |
VARCHAR |
为此记录评估的指标名称。 |
EVAL_AGG_SCORE |
NUMBER |
为此记录分配的评估分数。 |
METRIC_TYPE |
VARCHAR |
所评估指标的类型。对于内置指标,值为 |
METRIC_STATUS |
VARIANT |
一个映射,包含有关此记录的代理 HTTP 响应的信息,包含以下键:
|
METRIC_CALLS |
ARRAY |
一个 VARIANT 值数组,包含有关计算后指标的信息。数组中的每个条目包含该指标的判定标准、指标分数的说明以及元数据。每个条目的键包括:
|
TOTAL_INPUT_TOKENS |
INT |
用于处理输入查询的令牌总数。 |
TOTAL_OUTPUT_TOKENS |
INT |
Cortex Agent 生成的输出令牌总数。 |
LLM_CALL_COUNT |
INT |
统计代理或评估器调用任意 LLM 的次数。 |
模型可用性¶
代理评估当前仅支持 claude-4-sonnet 和 claude-3-5-sonnet 模型,并使用跨区域推理。Snowflake 会根据您的账户设置自动从这些模型中进行选择。
模型 |
跨云(任何区域) |
AWS US |
AWS US 商业政府 |
AWS EU |
AWS APJ |
|---|---|---|---|---|---|
|
✔ |
✔ |
✔ |
✔ |
✔ |
|
✔ |
✔ |
已知限制¶
Cortex Agent 评估存在以下限制:
代理响应时间和吞吐量:评估期间可以处理的输入数量受代理响应时间和跟踪详细信息量的限制。如果您在评估中遇到超时或长时间延迟,请拆分评估数据。例如,如果您有保证会调用许多不同工具的查询,您可以按常用工具调用来对数据进行分区。如果您的自定义评估导致超时,请完善或缩短提示。您可能还需要考虑拆分自定义评估,仅关注代理输出的一个特定元素。
标准答案过期:根据您输入查询的措辞方式,结果可能会随时间漂移,导致评估结果的准确性降低。特别是,您应该尝试将输入查询的范围限定为特定的绝对日期和时间。例如,输入查询
What was our revenue?和What was our revenue for the first quarter?都会经历漂移,而查询What was our revenue between January and March of 2025?则限定在特定的时间窗口内,该窗口可以在评估数据中被一致地引用。
成本注意事项¶
代理评估运行 Cortex Agent 以生成用于评估的输出,并由 LLM 评估器计算评估指标。每次针对标准答案查询运行代理时,您都需要付费。评估的 LLM 评估器由 AI_COMPLETE 函数运行,您将根据 Snowflake 为评估所选用的模型产生费用。此外,您还需要支付以下费用:
用于管理评估任务的仓库费用
用于计算评估指标的查询的仓库费用
数据集和评估结果的存储费用
在 Snowsight 中查看评估结果所产生的仓库计算费用
有关估算成本的更多信息,请参阅 了解总体费用。请参阅 Snowflake 服务消耗表,获取完整的成本信息。