Snowflake AI 可观察性参考¶
本文档为使用 Snowflake Cortex AI 可观察性来评估和监控生成式 AI 应用程序性能提供了全面参考。
本文档涵盖了以下概念:
数据集和属性
评估指标
运行
访问控制和存储
数据集和属性¶
数据集是一组用于测试应用程序的输入。它还可以包含一组预期的输出(基本事实)。
您可以使用 TruLens Python SDK 将数据集指定为 Snowflake 表 或 Pandas 数据框 (https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html)。数据集中的每列都必须映射到以下保留属性之一:
输入属性 |
描述 |
---|---|
RECORD_ROOT.INPUT |
将提示输入到 LLM。 类型:字符串 |
RECORD_ROOT.INPUT_ID |
输入提示的唯一标识符。 如果您不提供输入 ID,则 ID 会自动生成并分配给每个输入。 类型:字符串 |
RETRIEVAL.QUERY_TEXT |
RAG 应用程序的用户查询 类型:字符串 |
RECORD_ROOT.GROUND_TRUTH_OUTPUT |
输入提示的预期响应。 类型:字符串 |
要对应用程序进行检测,必须将检测函数(或方法)的输入和输出参数映射到相关的输入和输出属性。使用 @instrument
装饰器映射参数并计算指标。除了作为数据集一部分指定的输入属性外,还可以使用以下输出属性来检测相关函数:
输出属性 |
描述 |
---|---|
RETRIEVAL.RETRIEVED_CONTEXTS |
LLM 生成的输出。 类型:列表 [字符串] |
RECORD_ROOT.OUTPUT |
从 LLM 生成的响应。 类型:字符串 |
评估指标¶
评估指标为衡量应用程序的准确性和性能提供了一种可量化的方法。这些指标是使用应用程序的特定输入、LLM 生成的输出以及任何中间信息(例如,从 RAG 应用程序检索到的结果)进行计算的。您还可以使用实况数据集来计算指标。
您可以使用“LLM-as-a-judge”方法计算指标。通过这种方法,使用 LLM 来根据所提供的信息生成一个分数(介于 0 到 1 之间),并对应用程序输出进行解释。您可以选择 Cortex AI 中可用的任何 LLM 作为裁判。如果未指定 LLM 裁判,则使用 llama3.1-70b 作为默认裁判。AI 可观察性支持各种评估指标。
上下文相关性¶
上下文相关性可确定从检索器或搜索服务检索到的上下文是否与用户查询相关。根据用户查询和检索到的上下文,使用 LLM 裁判根据查询来确定检索到的上下文的相关性。
必要属性:
RETRIEVAL.QUERY_TEXT
:RAG 或搜索应用程序中的用户查询RETRIEVAL.RETRIEVED_CONTEXTS
:从搜索服务或检索器中检索到的上下文
锚定性¶
锚定性决定生成的响应是否得到检索器或搜索服务的检索上下文的支持和依据。根据生成的响应和检索到的上下文,使用 LLM 裁判来确定锚定性。底层实现会在生成锚定性分数时使用思维链推理。
必要属性:
RETRIEVAL.RETRIEVED_CONTEXTS
:RAG 或搜索应用程序中的用户查询RECORD_ROOT.OUTPUT
:由 LLM 生成的最终响应
答案相关性¶
答案相关性决定生成的响应是否与用户查询相关。根据用户的查询和生成的响应,使用 LLM 裁判来确定回答用户查询时响应的相关性。请注意,这不依赖于真实答案参考,因此这并不等同于评估答案的正确性。
必要属性:
RECORD_ROOT.INPUT
:RAG 或搜索应用程序中的用户查询RECORD_ROOT.OUTPUT
:由 LLM 生成的最终响应
正确性¶
正确性决定了生成的响应与真实情况的一致程度。正确性分数越高表示响应越准确,与真实情况的对应度越大。
必要属性:
RECORD_ROOT.INPUT
:用户查询或对 LLM 的提示RECORD_ROOT.GROUND_TRUTH_OUTPUT
:基于用户查询的预期响应RECORD_ROOT.OUTPUT
:由 LLM 生成的响应
连贯性¶
连贯性用于衡量模型生成的响应是否具有连贯性,是否不存在逻辑漏洞、不一致之处或矛盾之处。较高的连贯性分数表示的是高度连贯的响应。
必要属性:
RECORD_ROOT.OUTPUT
:由 LLM 生成的响应
成本和延迟¶
使用量成本¶
每次调用依赖于 Cortex LLMs 的 LLM,都会根据 COMPLETE (SNOWFLAKE.CORTEX) 函数返回的词元使用量信息(输入的 prompt_tokens 和输出的 completion_tokens)来计算成本。在跟踪信息中,可以查看词元使用量以及与每次 LLM 调用相关的相应成本。
延迟¶
延迟是通过测量完成应用程序中每个函数调用所花费的时间来确定的。应用程序跟踪提供了对使用 TruLens SDK 检测的每个函数延迟的精细可见性。汇总各个函数的延迟,以计算与每个输入对应的整个应用程序的总体延迟。每次运行还提供所有输入的平均延迟,以便在多个应用程序配置之间进行比较。
运行¶
运行是一项评估任务,用于衡量应用程序的准确性和性能。它可以帮助您选择最佳的应用程序配置。构建生成式 AI 应用程序需要尝试各种 LLMs、提示和推理参数。您可以衡量其准确性、延迟和使用情况,以找到最佳的生产组合。每种组合对应一个应用程序版本。
运行使用您指定的数据集对应用程序版本执行批量评估。对于不同的版本,您可以使用相同的数据集触发多次运行。您可以比较各版本之间的汇总差异和记录级别差异,以确定需要进行的改进,并选择最佳版本进行部署。
创建和执行运行包括四个主要步骤:
创建:创建应用程序和版本后,通过指定数据集为版本添加新的运行版本。
调用:开始运行,从数据集中读取输入,为每个输入调用应用程序,生成跟踪,并将信息存储在 Snowflake 账户中。
计算:调用后,通过指定要计算的指标来触发计算。您可以触发多次计算,并稍后为现有运行添加新指标。
可视化:登录 Snowflake 账户,在 Snowsight 中可视化运行结果。在 AI & ML 的相关应用程序内的 Evaluations 下列出运行。
您可以对每次运行进行标记,以便对具有相同数据集的不同应用程序版本之间的可比运行进行分类。使用标签来管理和筛选运行。
运行可能具有以下状态之一:
状态 |
描述 |
---|---|
CREATED |
运行已创建但尚未启动。 |
INVOCATION_IN_PROGRESS |
运行调用正在生成输出和跟踪。 |
INVOCATION_COMPLETED |
运行调用已完成,所有输出和跟踪均已创建。 |
INVOCATION_PARTIALLY_COMPLETED |
由于应用程序调用和跟踪生成出现故障,运行调用已部分完成。 |
COMPUTATION_IN_PROGRESS |
正在进行指标计算。 |
COMPLETED |
指标计算已完成,并附有详细的输出和跟踪。 |
PARTIALLY_COMPLETED |
由于指标计算期间出现故障,运行已部分完成。 |
CANCELLED |
运行已取消。 |
访问控制和存储¶
所需权限¶
需要以下权限才能使用 AI 可观察性。
应用程序¶
创建用于评估的应用程序会在 Snowflake 中创建一个 EXTERNAL AGENT 对象来代表该应用程序。创建和修改应用程序所需的角色必须具有以下访问控制要求。
用于创建应用程序的角色必须至少具有以下权限:
权限 |
对象 |
备注 |
---|---|---|
OWNERSHIP |
External Agent |
OWNERSHIP 是对象上的特殊权限,会自动授予创建该对象的角色,但也可以通过拥有者角色或任何具有 MANAGE GRANTS 权限的角色,使用 GRANT OWNERSHIP 命令将权限转移给其他角色。 |
CREATE EXTERNAL AGENT |
架构 |
要对架构中的任何对象执行操作,需要对父数据库和架构具有 USAGE 权限。
需要对 EXTERNAL AGENT 对象的 OWNERSHIP 权限才能修改和删除应用程序。
如果用户的角色具有对某个应用程序 (EXTERNAL AGENT) 的 USAGE 或 OWNERSHIP 权限,则在 Snowsight 的 AI & ML 下的 Evaluations 中会显示该应用程序。
运行¶
用于向应用程序添加、修改或删除运行的角色必须具有对 EXTERNAL AGENT 对象的 USAGE 权限,该对象在 Snowflake 中代表该应用程序。
删除运行会删除与运行相关联的元数据。运行过程中创建的记录不会删除,并会继续存储。有关记录和跟踪存储的更多信息,请参阅“可观察性数据”。
有关创建具有指定权限集的自定义角色的说明,请参阅“创建自定义角色”。有关对安全对象执行 SQL 操作的相应角色和权限授予的一般信息,请参阅 访问控制概述。
LLMs 作为裁判¶
AI 可观察性使用 Cortex LLMs 作为裁判来计算评估应用程序的指标。要成功计算这些指标,需要拥有访问 Cortex LLMs 的权限。要授予用户角色访问 Cortex LLMs 的权限,请参阅“所需权限”。用户必须有权访问配置为 LLM 裁判的模型。用于 LLM 裁判的默认模型是 llama3.1-70b。默认的 LLM 裁判模型将来可能会发生变化。
可观察性数据¶
AI 可观察性数据表示包含生成式 AI 应用程序的输入、输出、评估分数和相关跟踪的记录。所有记录都存储在账户中的 SNOWFLAKE.LOCAL 架构下的专用事件表 AI_OBSERVABILITY_EVENTS 中。
无法修改已引入到事件表中的 AI 可观察性数据。具有 AI_OBSERVABILITY_ADMIN 应用程序角色的管理员拥有删除 SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS 事件表中数据的专属权限。
可以使用 Trulens Python SDK 或 Snowsight 访问 AI 可观察性数据。要查看应用程序和相关运行的记录,需要具有以下权限:
用户角色必须具有应用程序角色 SNOWFLAKE.AI_OBSERVABILITY_ADMIN 或 SNOWFLAKE.AI_OBSERVABILITY_EVENTS_LOOKUP
用户角色必须具有对 EXTERNAL AGENT 对象的 USAGE 权限,该对象代表应用程序。
例如,要查看外部检测的 RAG 应用程序的运行,用户角色需要具有对“my-db.my-schema.rag-application1”的 USAGE 权限,其中 rag-application1 是在 Snowflake 中代表外部 RAG 应用程序的 EXTERNAL AGENT 对象。
与运行和外部代理相关联的元数据(如运行名称、描述、数据集名称等)被归类为元数据。