使用 Account Usage 管理 Cortex AI 函数成本¶
Snowflake Cortex AI 函数(AI_COMPLETE、AI_SUMMARIZE、AI_TRANSLATE、AI_SENTIMENT 等)根据词元或页面使用情况计算消耗的 Credit。如果没有监控和控制,使用这些函数的成本可能会迅速上升,原因如下:
未优化的提示会生成过多词元
长时间运行或失控的查询
缺乏针对每个用户的支出限额
使用模式的可见性不足
本主题提供策略建议,帮助您监控、管理和控制与 Snowflake Cortex AI 函数相关的成本。使用 CORTEX_AI_FUNCTIONS_USAGE_HISTORY 视图,您可以跟踪使用模式并实施自动成本控制。这些方式可以帮助您监控使用情况,在超出支出限额时接收警报,根据每月限额控制对函数的访问,并阻止失控的查询。
使用历史记录视图¶
SNOWFLAKE.ACCOUNT_USAGE CORTEX_AI_FUNCTIONS_USAGE_HISTORY 视图通过 SQL 提供所有 Cortex AI 函数的详细遥测数据。虽然最短可能会在函数开始执行后的 10 分钟内提供数据,但该视图的最大延迟为 60 分钟。有关此视图的详细信息,请参阅 CORTEX_AI_FUNCTIONS_USAGE_HISTORY 视图。
基本使用情况监控¶
以下查询可帮助您了解 AI 函数使用模式。自行定期运行这些函数,或将其集成到仪表板中以持续监控。
按功能和模型划分的每日 Credit 使用量¶
跟踪每日支出趋势,以确定使用量峰值,并了解哪些函数和模型消耗的 Credit 最多。
按用户统计的每月 Credit 使用量¶
确定主要使用者并跟踪每个用户在一段时间内的支出。此查询会与 USERS 视图联接,以提供用户详细信息,包括电子邮件和默认角色,以便于识别和跟进。
成本控制¶
定义自动机制来检测过度支出并采取纠正措施。这些查询可以彼此独立使用,也可以组合使用以进行全面的成本治理。
账户级每月支出警报¶
设置自动警报,监控整个账户每月的 AI 函数 Credit 使用总量。当支出超过定义的阈值时,警报会向指定管理员发送电子邮件通知。设置警报需要满足以下先决条件:
首先,创建一项通知集成(如果还没有)。此示例会替换任何名为 ai_cost_alerts 的现有集成。
接下来,创建一个表来跟踪每个月的警报发送时间。这有助于防止一个月内重复发送警报。
现在,创建一个存储过程来检查本月是否已发送警报、记录警报状态,并发送电子邮件通知。
最后,创建警报,根据每小时支出阈值检查使用情况,并在需要时调用过程来发送通知。您应该将 1000 个 Credit 的限额(在以下示例中出现在两个位置)调整为所需的阈值。
小技巧
为了进行测试,请先将限额设置为 0,以立即触发警报。确认警报按预期工作后,使用所需阈值重新创建警报。
使用阈值 0 进行测试后,运行以下 SQL 以允许在当月再次触发警报。
您可以通过查询警报历史记录和警报状态表,来确保警报正在运行,如下所示:
每用户每月支出限额¶
此示例会实施每用户每月支出限额。用户被授予专用的自定义 AI_FUNCTIONS_USER_ROLE,该角色提供对 Cortex AI 函数的访问权限。表存储单个用户的每月词元预算。当用户超出当月预算时,一个每小时任务会通过移除 AI_FUNCTIONS_USER_ROLE,撤销其对 AI 函数的访问权限。每月任务会在下月初恢复角色。
重要
默认情况下,所有用户都有权访问 AI 函数(以及其他 Snowflake Cortex 功能),因为 SNOWFLAKE.CORTEX_USER 数据库角色会获授 PUBLIC 角色。要强制执行每用户限额,您必须撤销来自PUBLIC 的 SNOWFLAKE.CORTEX_USER,并仅通过AI_FUNCTIONS_USER_ROLE 授予。使用以下 SQL 撤销来自 PUBLIC 的角色:
确保仅授予所有需要访问 Cortex 功能的用户 AI_FUNCTIONS_USER_ROLE。使用包含 SNOWFLAKE.CORTEX_USER 的任何其他角色,都允许用户绕过本示例中实施的支出限额控制。在某些情况下,您可以使用更具体的角色;例如,可向只需要访问 Cortex Analyst 的用户授予 SNOWFLAKE.CORTEX_ANALYST_USER 角色,而不是 SNOWFLAKE.CORTEX_USER。
要设置每用户支出限额,请先创建一个角色来控制对 AI 函数的访问,以便允许此访问权限与其他权限分开管理。
现在,设置访问控制表,该表跟踪哪些用户具有 AI 函数访问权限、其个人支出限额及其撤销历史记录。它充当自动监控和访问恢复过程的事实来源。
接下来,创建一个存储过程以向用户授予 AI 函数访问权限,并在访问控制表中注册其支出限额。该代码会从 Account Usage 视图中查找用户的 ID,以启用监控查询中的高效联接。
使用此存储过程将用户及其 Credit 配额添加到访问控制表中。
接下来创建每月访问刷新任务。此任务在每月的第一天运行,以恢复所有授权用户的 AI 函数访问权限。当用户的访问权限因超出其上个月的限额而被撤销时,此任务将为他们授予新月份的新预算。
最后,创建一个每小时任务来监控用户支出,并撤销任何超出每月限额的用户的访问权限。
失控查询检测和取消¶
长时间运行的 AI 函数查询会累积巨额成本。此示例实施了一个自动化系统,用于检测超过 Credit 阈值的查询,并在查询消耗更多资源之前将其取消。将发送包含完整查询详细信息的电子邮件警报。
备注
取消查询后,客户端仍需为取消前使用的所有资源付费。取消失控查询可防止进一步累积成本,但不会退还已花费的 Credit。
此过程会查找过去 48 小时超出 Credit 阈值但仍在运行的 AI 函数查询,将其取消,并向管理员报告。
小技巧
If you already know that some of your queries will run a long time, define a special role for these queries, and then exclude that role from the cancellation logic. For example, to create the role:
将以下条件添加到该过程的 WHERE 子句,以排除由具有此角色的用户运行的查询,防止其被取消。
现在,用户可以承担该角色来运行长时间运行的查询,该查询不会被取消:
最佳实践¶
在针对 AI 函数使用情况制定成本管理策略时,请牢记以下最佳实践: