Snowflake Cortex AISQL(包括 LLM 功能)¶
在 Snowflake 中,借助 OpenAI、Anthropic、Meta、Mistral AI 和 DeepSeek 提供的业界领先的 LLMs,使用 Cortex AISQL 对文本和图像进行非结构化分析。Cortex AISQL 支持以下用例:
提取实体以丰富元数据并简化验证
汇总客户工单洞察分析
使用自然语言对内容进行筛选和分类
基于情绪和方面进行分析以改进服务
翻译和本地化多语言内容
解析用于分析和 RAG 管道的文档
所有模型都完全托管在 Snowflake 中,可确保性能、可扩展性和治理,同时保持数据安全且到位。
可用函数¶
Snowflake Cortex 功能以 SQL 函数的形式提供,而且也可用于 Python 中。Cortex AISQL 函数可以分为以下几类:
AISQL 函数¶
特定于任务的函数是专门构建和管理的函数,可以自动执行日常任务,如简单的摘要和快速翻译,不需要任何自定义。
AI_COMPLETE:使用选定的 LLM 为给定的文本字符串或图像生成补全。将此函数用于大多数生成式 AI 任务。
这是 COMPLETE (SNOWFLAKE.CORTEX) 的更新版本。
AI_CLASSIFY:将文本或图像分类为用户定义的类别。
这是 CLASSIFY_TEXT (SNOWFLAKE.CORTEX) 的更新版本,支持多标签和图像分类。
AI_FILTER:对于给定的文本或图像输入,返回 True 或 False,允许您在
SELECT
、WHERE
或JOIN ... ON
子句中筛选结果。AI_AGG:聚合文本列,并根据用户定义的提示返回跨多行的洞察。此函数不受上下文窗口限制。
AI_SUMMARIZE_AGG:聚合文本列并返回跨多行的摘要。此函数不受上下文窗口限制。
AI_SIMILARITY:计算两个输入之间的嵌入相似度。
PARSE_DOCUMENT (SNOWFLAKE.CORTEX):从内部或外部暂存区的文档中提取文本(使用 OCR 模式)或带有布局信息的文本(使用 LAYOUT 模式)。
TRANSLATE (SNOWFLAKE.CORTEX):在支持的语言之间翻译文本。
SENTIMENT (SNOWFLAKE.CORTEX):从文本中提取情绪分数。
EXTRACT_ANSWER (SNOWFLAKE.CORTEX):从非结构化数据中提取问题的答案,前提是相关数据存在。
SUMMARIZE (SNOWFLAKE.CORTEX):返回您指定的文本摘要。
备注
以前称为“LLM 函数”的函数在“SNOWFLAKE.CORTEX”命名空间中列出
辅助函数¶
辅助函数是专门构建和管理的函数,用于减少运行其他 AISQL 函数时的故障情况,例如通过获取输入提示中的词元计数来确保调用不超过模型限制。
COUNT_TOKENS (SNOWFLAKE.CORTEX):在给定输入文本的情况下,根据指定的模型或 Cortex 函数返回词元计数。
TRY_COMPLETE (SNOWFLAKE.CORTEX):与 COMPLETE 函数类似,但在函数无法执行时返回 NULL,而不是返回错误代码。
Cortex Guard¶
Cortex Guard 是 COMPLETE 函数的一个选项,旨在筛选语言模型中可能存在的不安全和有害响应。Cortex Guard 目前采用 Meta 的 Llama Guard 3 构建。Cortex Guard 的工作原理是在将输出返回给应用程序之前,先评估语言模型的响应。激活 Cortex Guard 后,系统就会过滤可能与暴力犯罪、仇恨、性内容、自我伤害等相关的语言模型响应。有关语法和示例,请参阅 COMPLETE 实参。
备注
使用 Cortex Guard 会根据 处理的输入词元 数量产生计算费用。
性能注意事项¶
Cortex AISQL 函数针对吞吐量进行了优化。我们建议使用这些函数来处理大量输入,例如大型 SQL 表的文本。批处理通常更适用于 AISQL 函数。对于延迟很重要的更多交互式使用案例,请使用 REST API。这些可用于简单推理 (Complete API)、嵌入 (Embed API) 和代理应用程序 (Agents API)。
所需权限¶
SNOWFLAKE 数据库中的 CORTEX_USER 数据库角色包含了允许用户调用 Snowflake Cortex AI 函数的权限。默认情况下,CORTEX_USER 角色被授予给 PUBLIC 角色。PUBLIC 角色会自动授予给所有用户和角色,从而允许您账户中的所有用户使用 Snowflake Cortex AI 函数。
如果您不希望所有用户都拥有此权限,则可以撤销对 PUBLIC 角色的访问权限,并授予对特定角色的访问权限。
要从 PUBLIC 角色中撤销 CORTEX_USER 数据库角色,请使用 ACCOUNTADMIN 角色运行以下命令:
REVOKE DATABASE ROLE SNOWFLAKE.CORTEX_USER
FROM ROLE PUBLIC;
REVOKE IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE
FROM ROLE PUBLIC;
然后,您可以有选择地提供对特定角色的访问权限。不能直接向用户授予 SNOWFLAKE.CORTEX_USER 数据库角色。有关更多信息,请参阅 使用 SNOWFLAKE 数据库角色。具有 ACCOUNTADMIN 角色的用户可以将此角色授予自定义角色,以允许用户访问 Cortex AI 函数。在以下示例中,使用 ACCOUNTADMIN 角色,并通过您为此目的创建的账户角色 cortex_user_role
向用户 some_user
授予 CORTEX_USER 数据库角色。
USE ROLE ACCOUNTADMIN;
CREATE ROLE cortex_user_role;
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE cortex_user_role;
GRANT ROLE cortex_user_role TO USER some_user;
您还可以通过特定用户组通常使用的现有角色,授予对 Snowflake Cortex AI 函数的访问权限。(请参阅 用户角色。)例如,如果您创建了一个 analyst
角色(它被组织中的分析师用作默认角色),则可以使用一条 GRANT 语句,轻松地向这些用户授予对 Snowflake Cortex AISQL 函数的访问权限。
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE analyst;
控制模型访问¶
有两种方法可以控制 Snowflake Cortex 中模型的访问权限。您可以使用其中一种方法或同时使用两种方法,来结合使用广泛和细粒度的访问控制:
模型允许列表
基于角色的访问控制
模型允许列表为账户中的所有用户提供对模型的默认访问级别,可以使用 CORTEX_MODELS_ALLOWLIST
参数进行自定义。基于角色的访问控制允许通过应用程序角色授予或撤销特定模型对象的权限,从而实现细粒度的访问管理。
模型访问控制适用于以下服务:
精细的访问控制方法不适用于以下服务:
Cortex Search
Cortex Analyst
Cortex Copilot
Cortex Agents
文档 AI
模型允许列表¶
使用 ALTER ACCOUNT SET
命令中的 CORTEX_MODELS_ALLOWLIST
参数为账户中的所有用户设置模型访问权限。如果您需要为特定用户提供超出您在允许列表中指定的访问权限,则应改用基于角色的访问控制。有关基于角色的访问控制的更多信息,请参阅 基于角色的访问控制。
当用户发出请求时,Snowflake Cortex 会评估参数以确定用户是否可以访问模型。
对于 CORTEX_MODELS_ALLOWLIST
参与,您可以设置以下值:
CORTEX_MODELS_ALLOWLIST = 'All'
提供对所有模型的访问权限。以下命令为用户提供对所有模型的访问权限:
ALTER ACCOUNT SET CORTEX_MODELS_ALLOWLIST = 'All';
CORTEX_MODELS_ALLOWLIST = 'model1,model2,...'
向用户提供对以逗号分隔列表形式指定模型的访问权限。
以下命令为用户提供对
mistral-large2
和llama3.1-70b
模型的访问权限:ALTER ACCOUNT SET CORTEX_MODELS_ALLOWLIST = 'mistral-large2,llama3.1-70b';
CORTEX_MODELS_ALLOWLIST = 'None'
阻止用户访问任何模型。以下命令会阻止用户访问任何模型:
ALTER ACCOUNT SET CORTEX_MODELS_ALLOWLIST = 'None';
基于角色的访问控制¶
Snowflake Cortex 中的每个模型都是 SNOWFLAKE.MODELS 架构中一个唯一对象,并具有关联的应用程序角色。可以使用模型对象和应用程序角色来管理对模型对象的访问权限。
使用以下命令获得对最新模型的访问权限:
CALL SNOWFLAKE.MODELS.CORTEX_BASE_MODELS_REFRESH();
接下来,使用以下命令列出您的 Snowflake 账户中可用的模型:
SHOW MODELS IN SNOWFLAKE.MODELS;
该命令会返回类似如下的模型列表:
created_on |
name |
model_type |
database_name |
schema_name |
owner |
---|---|---|---|---|---|
2025-04-22 09:35:38.558 -0700 |
CLAUDE-3-5-SONNET |
CORTEX_BASE |
SNOWFLAKE |
MODELS |
SNOWFLAKE |
2025-04-22 09:36:16.793 -0700 |
LLAMA3.1-405B |
CORTEX_BASE |
SNOWFLAKE |
MODELS |
SNOWFLAKE |
2025-04-22 09:37:18.692 -0700 |
SNOWFLAKE-ARCTIC |
CORTEX_BASE |
SNOWFLAKE |
MODELS |
SNOWFLAKE |
使用以下命令列出这些模型的应用程序角色:
SHOW APPLICATION ROLES IN APPLICATION SNOWFLAKE;
该命令会返回类似如下的应用程序角色列表:
created_on |
name |
owner |
comment |
owner_role_type |
---|---|---|---|---|
2025-04-22 09:35:38.558 -0700 |
CORTEX-MODEL-ROLE-ALL |
SNOWFLAKE |
MODELS |
APPLICATION |
2025-04-22 09:36:16.793 -0700 |
CORTEX-MODEL-ROLE-LLAMA3.1-405B |
SNOWFLAKE |
MODELS |
APPLICATION |
2025-04-22 09:37:18.692 -0700 |
CORTEX-MODEL-ROLE-SNOWFLAKE-ARCTIC |
SNOWFLAKE |
MODELS |
APPLICATION |
重要
如果您看不到模型或其关联的应用程序角色,请确保 CALL SNOWFLAKE.MODELS.CORTEX_BASE_MODELS_REFRESH()
以获取最新模型的访问权限。
要授予对特定模型的访问权限,需要将该模型的应用程序角色授予用户角色。例如,您可以将 SNOWFLAKE.MODELS."LLAMA3.1-70B"
的应用程序角色 CORTEX-MODEL-ROLE-LLAMA3.1-70B
授予用户角色。以下命令将 CORTEX-MODEL-ROLE-LLAMA3.1-70B
应用程序角色授予 MY_ROLE
用户角色:
GRANT APPLICATION ROLE SNOWFLAKE."CORTEX-MODEL-ROLE-LLAMA3.1-70B" TO ROLE MY_ROLE;
要进行推理调用,请使用完全限定的模型名称。以下是用户可以进行的调用示例:
SELECT AI_COMPLETE('SNOWFLAKE.MODELS."LLAMA3.1-70B"', 'Hello');
重要
当用户提出请求时,Snowflake Cortex 首先使用基于角色的访问控制来确定用户是否有权访问模型。如果用户没有访问权限,Snowflake Cortex 会评估 CORTEX_MODELS_ALLOWLIST 以确定对模型的访问权限。如果模型在允许列表中(或者允许列表的值设置为 'All'
),则授予用户访问该模型的权限。要启用对模型的精细访问权限,请从 CORTEX_MODELS_ALLOWLIST 中移除模型名称或将其设置为 'None'
。
可用性¶
Snowflake Cortex AI 函数目前在以下区域可用。要从未列出的区域访问 LLMs,请使用 跨区域推理参数。
备注
TRY_COMPLETE 函数在相同区域以 COMPLETE 形式提供。
COUNT_TOKENS 函数在所有区域可用,但模型推理针对特定区域,如表所示。
函数
(模型)
|
AWS US
(跨区域)
|
AWS US 西部 2
(俄勒冈)
|
AWS US 东部 1
(弗吉尼亚北部)
|
AWS 欧洲中部 1
(法兰克福)
|
AWS 欧洲西部 1
(爱尔兰)
|
AWS AP 东南部 2
(悉尼)
|
AWS AP 东北部 1
(东京)
|
AWS US 东部
(商业政府 – 弗吉尼亚北部)
|
Azure 东部 US 2
(弗吉尼亚)
|
Azure 西欧
(荷兰)
|
AWS EU
(跨区域)
|
AWS AWS_APJ
(跨区域)
|
Azure US
(跨区域)
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
COMPLETE
(
claude-4-sonnet ) |
✔ |
||||||||||||
COMPLETE
(
claude-4-opus ) |
处于预览版 |
||||||||||||
COMPLETE
(
claude-3-7-sonnet ) |
✔ |
||||||||||||
COMPLETE
(
claude-3-5-sonnet ) |
✔ |
✔ |
✔ |
||||||||||
COMPLETE
(
llama4-maverick ) |
✔ |
✔ |
|||||||||||
COMPLETE
(
llama4-scout ) |
✔ |
✔ |
|||||||||||
COMPLETE
(
llama3.2-1b ) |
✔ |
✔ |
|||||||||||
COMPLETE
(
llama3.2-3b ) |
✔ |
✔ |
|||||||||||
COMPLETE
(
llama3.1-8b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
COMPLETE
(
llama3.1-70b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
COMPLETE
(
llama3.3-70b ) |
✔ |
✔ |
|||||||||||
COMPLETE
(
snowflake-llama-3.3-70b ) |
✔ |
✔ |
|||||||||||
COMPLETE
(
llama3.1-405b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
|||||||
COMPLETE
(
openai-gpt-4.1 ) |
处于预览版 |
处于预览版 |
|||||||||||
COMPLETE
(
openai-o4-mini ) |
处于预览版 |
处于预览版 |
|||||||||||
COMPLETE
(
snowflake-llama-3.1-405b ) |
✔ |
✔ |
|||||||||||
COMPLETE
(
snowflake-arctic ) |
✔ |
✔ |
✔ |
✔ |
|||||||||
COMPLETE
(
deepseek-r1 ) |
✔ |
✔ |
|||||||||||
COMPLETE
(
reka-core ) |
✔ |
✔ |
✔ |
||||||||||
COMPLETE
(
reka-flash ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
|||||||
COMPLETE
(
mistral-large2 ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
|
COMPLETE
(
mixtral-8x7b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
COMPLETE
(
mistral-7b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
COMPLETE
(
jamba-instruct ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
||||||
COMPLETE
(
jamba-1.5-mini ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
||||||
COMPLETE
(
jamba-1.5-large ) |
✔ |
✔ |
✔ |
||||||||||
COMPLETE
(
gemma-7b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
||||
EMBED_TEXT_768
(
e5-base-v2 ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
||
EMBED_TEXT_768
(
snowflake-arctic-embed-m ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
|
EMBED_TEXT_768
(
snowflake-arctic-embed-m-v1.5 ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
|
EMBED_TEXT_1024
(
snowflake-arctic-embed-l-v2.0 ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
|
EMBED_TEXT_1024
(
nv-embed-qa-4 ) |
✔ |
✔ |
|||||||||||
EMBED_TEXT_1024
(
multilingual-e5-large ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
|
EMBED_TEXT_1024
(
voyage-multilingual-2 ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
|
AI_CLASSIFY TEXT
|
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
AI_CLASSIFY IMAGE
|
✔ |
✔ |
✔ |
✔ |
|||||||||
AI_FILTER TEXT
|
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
AI_FILTER IMAGE
|
✔ |
✔ |
✔ |
✔ |
|||||||||
AI_AGG
|
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
AI_SIMILARITY TEXT
|
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
AI_SIMILARITY IMAGE
|
✔ |
✔ |
✔ |
✔ |
|||||||||
AI_SUMMARIZE_AGG
|
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
EXTRACT_ANSWER |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
SENTIMENT |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
ENTITY_SENTIMENT |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
||
SUMMARIZE |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
TRANSLATE |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
以下 Snowflake Cortex AI 函数目前在以下扩展区域可用。
函数
(模型)
|
AWS US 东部 2
(俄亥俄)
|
AWS CA 中部 1
(中部)
|
AWS SA 东部 1
(圣保罗)
|
AWS 欧洲西部 2
(伦敦)
|
AWS 欧洲中部 1
(法兰克福)
|
AWS 欧洲北部 1
(斯德哥尔摩)
|
AWS AP 东北部 1
(东京)
|
AWS AP 南部 1
(孟买)
|
AWS AP 东南部 2
(悉尼)
|
AWS AP 东南部 3
(雅加达)
|
Azure 中南部 US
(德克萨斯)
|
Azure 西部 US 2
(华盛顿)
|
Azure UK 南部
(伦敦)
|
Azure 北欧
(爱尔兰)
|
Azure 瑞士北部
(苏黎世)
|
Azure 印度中部
(浦那)
|
Azure 日本东部
(东京、琦玉)
|
Azure 东南亚
(新加坡)
|
Azure 澳大利亚东部
(新南威尔士)
|
GCP 欧洲西部 2
(伦敦)
|
GCP 欧洲西部 4
(荷兰)
|
GCP US 中部 1
(爱荷华)
|
GCP US 东部 4
(弗吉尼亚北部)
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
EMBED_TEXT_768
(
snowflake-arctic-embed-m-v1.5 ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
EMBED_TEXT_768
(
snowflake-arctic-embed-m ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
EMBED_TEXT_1024
(
multilingual-e5-large ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
下表列出了旧版模型。如果您刚刚开始使用,请先从前述表中的模型开始:
函数
(模型)
|
AWS US 西部 2
(俄勒冈)
|
AWS US 东部 1
(弗吉尼亚北部)
|
AWS 欧洲中部 1
(法兰克福)
|
AWS 欧洲西部 1
(爱尔兰)
|
AWS AP 东南部 2
(悉尼)
|
AWS AP 东北部 1
(东京)
|
Azure 东部 US 2
(弗吉尼亚)
|
Azure 西欧
(荷兰)
|
---|---|---|---|---|---|---|---|---|
COMPLETE
(
llama2-70b-chat ) |
✔ |
✔ |
✔ |
✔ |
✔ |
|||
COMPLETE
(
llama3-8b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
||
COMPLETE
(
llama3-70b ) |
✔ |
✔ |
✔ |
✔ |
✔ |
|||
COMPLETE
(
mistral-large ) |
✔ |
✔ |
✔ |
✔ |
✔ |
成本注意事项¶
Snowflake Cortex AI 函数根据处理的词元数产生计算成本。请参阅 Snowflake 服务使用表,以了解每个函数的每百万个词元消耗的 credit 成本。
词元是 Snowflake Cortex AI 函数处理的最小文本单位,大约等于四个字符。原始输入或输出文本与词元的等价性可能因模型而异。
对于在响应中生成新文本的函数(AI_COMPLETE、AI_CLASSIFY、AI_FILTER、AI_AGG、AI_SUMMARIZE 和 TRANSLATE),输入和输出词元都会统计在内。
对于 CORTEX GUARD,仅统计输入词元。输入词元的数量基于 COMPLETE 函数中使用的每个 LLM 模型的输出词元的数量。
对于 AI_SIMILARITY EMBED_* 函数,仅统计输入词元。
对于 EXTRACT_ANSWER,可计费词元的数量是
from_text
和question
字段中的词元数量之和。AI_CLASSIFY、AI_FILTER、AI_AGG、AI_SUMMARIZE_AGG、SUMMARIZE、TRANSLATE、EXTRACT_ANSWER、ENTITY_SENTIMENT 和 SENTIMENT 会向输入文本添加提示,以生成响应。因此,输入词元计数高于您提供的文本中的词元数。
AI_CLASSIFY 标签、描述和示例会作为每条已处理记录的输入词元进行计算,而不仅针对每次 AI_CLASSIFY 调用计算一次。
对于 PARSE_DOCUMENT (SNOWFLAKE.CORTEX),按处理的文档页数计费。
TRY_COMPLETE(SNOWFLAKE.CORTEX) 不会产生错误处理成本。这意味着如果 TRY_COMPLETE(SNOWFLAKE.CORTEX) 函数返回 NULL,则不会产生任何成本。
COUNT_TOKENS(SNOWFLAKE.CORTEX) 只会产生运行函数的计算成本。不会产生额外的词元成本。
Snowflake 建议在使用较小仓库(不大于 MEDIUM)的情况下执行调用 Snowflake Cortex AISQL 函数或 Cortex PARSE_DOCUMENT 函数的查询,因为较大的仓库不会提高性能。在执行调用 Snowflake Cortex LLM 函数的查询时,与保持仓库活动相关的成本将继续适用。有关计算成本的一般信息,请参阅 了解计算成本。
跟踪 AI 服务的成本¶
要跟踪账户中用于 AI 服务(包括 LLM 函数)的 credit,请使用 METERING_HISTORY 视图:
SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_DAILY_HISTORY
WHERE SERVICE_TYPE='AI_SERVICES';
跟踪 AISQL 函数的 credit 使用量¶
要查看每个 AISQL 函数调用的 credit 和词元使用量,请使用 CORTEX_FUNCTIONS_USAGE_HISTORY 视图:
SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FUNCTIONS_USAGE_HISTORY;
您还可以在 Snowflake 账户中查看每次查询的 credit 和令牌使用量。查看每次查询的 credit 和令牌使用量可帮助您确定使用 credit 和令牌最多的查询。
以下示例查询使用 CORTEX_FUNCTIONS_QUERY_USAGE_HISTORY 视图 以显示您账户中所有查询的 Credit 和词元使用量。
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FUNCTIONS_QUERY_USAGE_HISTORY;
您还可以使用同一视图查看特定查询的 Credit和词元使用量。
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FUNCTIONS_QUERY_USAGE_HISTORY
WHERE query_id='<query-id>';
备注
您无法获取 REST API 请求的详细使用信息。
查询使用历史记录按查询中使用的模型分组。例如,如果您运行了以下命令:
SELECT AI_COMPLETE('mistral-7b', 'Is a hot dog a sandwich'), AI_COMPLETE('mistral-large', 'Is a hot dog a sandwich');
查询使用历史记录将显示两行,一行是 mistral-7b
,一行是 mistral-large
。
使用量配额¶
为确保所有 Snowflake 客户都可以访问 LLM 功能,Snowflake Cortex AI 函数在高使用率期间可能会受到限流。使用量配额不会在账户级别应用。
受到限流的请求将收到一个 错误响应,并应稍后重试。
备注
没有有效支付方式的按需 Snowflake 账户(例如试用账户)在使用 Snowflake Cortex LLM 函数方面会受到限制,即每天只能使用大约一个 credit。要取消此限制,请 将试用账户转为付费账户。
管理成本和限流¶
在调用 Snowflake Cortex AISQL 函数时,Snowflake 建议使用不大于 MEDIUM 的仓库。使用不必要的较大仓库不会提高性能,但可能会导致不必要的成本和更高的限流风险。由于产品更新在即,此建议将来可能不适用。
模型限制¶
Snowflake Cortex 使用的模型具有大小限制,如下表所述。大小以词元数指定。词元通常表示大约四个字符的文本,因此限制对应的单词数小于词元数。超过限制的输入将导致错误。
模型可以生成的输出的最大大小受以下限制:
模型的输出词元限制。
模型使用输入词元后上下文窗口中的可用空间。
例如,claude-3-5-sonnet
具有 200,000 个词元的上下文窗口。如果使用 100,000 个词元进行输入,则模型最多可以生成 8,192 个词元。但是,如果使用 195,000 个词元作为输入,则模型最多只能生成 5,000 个词元,总共 200,000 个词元。
重要
在 AWS AP 东南部 2(悉尼)区域:
llama3-8b
和mistral-7b
的上下文窗口为 4,096 个词元。llama3.1-8b
的上下文窗口为 16,384 个词元。来自 SUMMARIZE 函数的 Snowflake 托管模型的上下文窗口为 4,096 个词元。
在 AWS 欧洲西部 1(爱尔兰)区域:
llama3.1-8b
的上下文窗口为 16,384 个词元。mistral-7b
的上下文窗口为 4,096 个词元。
函数 |
模型 |
上下文窗口(词元) |
最大输出 AISQL 函数(词元) |
---|---|---|---|
COMPLETE |
|
128,000 |
8,192 |
|
128,000 |
8,192 |
|
|
4,096 |
8,192 |
|
|
32,768 |
8,192 |
|
|
200,000 |
32,000 |
|
|
200,000 |
64,000 |
|
|
200,000 |
8,192 |
|
|
200,000 |
8,192 |
|
|
32,000 |
8,192 |
|
|
128,000 |
8,192 |
|
|
1,047,576 |
32,768 |
|
|
200,000 |
100,000 |
|
|
100,000 |
8,192 |
|
|
32,000 |
8,192 |
|
|
256,000 |
8,192 |
|
|
256,000 |
8,192 |
|
|
256,000 |
8,192 |
|
|
32,000 |
8,192 |
|
|
4,096 |
8,192 |
|
|
8,000 |
8,192 |
|
|
8,000 |
8,192 |
|
|
128,000 |
8,192 |
|
|
128,000 |
8,192 |
|
|
128,000 |
8,192 |
|
|
8,000 |
8,192 |
|
|
128,000 |
8,192 |
|
|
8,000 |
8,192 |
|
|
128,000 |
8,192 |
|
|
128,000 |
8,192 |
|
|
32,000 |
8,192 |
|
|
8,000 |
8,192 |
|
EMBED_TEXT_768 |
|
512 |
不适用 |
|
512 |
不适用 |
|
EMBED_TEXT_1024 |
|
512 |
不适用 |
|
512 |
不适用 |
|
|
32,000 |
不适用 |
|
AI_FILTER |
Snowflake 托管模型 |
128,000 |
不适用 |
AI_CLASSIFY / CLASSIFY_TEXT |
Snowflake 托管模型 |
128,000 |
不适用 |
AI_AGG |
Snowflake 托管模型 |
每行 128,000
可以跨多行使用
|
8,192 |
AI_SUMMARIZE_AGG |
Snowflake 托管模型 |
每行 128,000
可以跨多行使用
|
8,192 |
ENTITY_SENTIMENT |
Snowflake 托管模型 |
2,048 |
不适用 |
EXTRACT_ANSWER |
Snowflake 托管模型 |
2,048(对于文本)
64(对于问题)
|
不适用 |
SENTIMENT |
Snowflake 托管模型 |
512 |
不适用 |
SUMMARIZE |
Snowflake 托管模型 |
32,000 |
4,096 |
TRANSLATE |
Snowflake 托管模型 |
4,096 |
不适用 |
选择模型¶
Snowflake Cortex COMPLETE 函数支持多种不同功能、延迟和成本的模型。 这些模型经过精心挑选,符合常见的客户用例。要实现最佳的 每 credit 性能,请选择与任务的内容大小和复杂性正确匹配的模型。以下是可用模型的简要概述。
大型模型¶
如果您不确定从哪里开始,请先尝试功能最强大的模型,以建立评估其他模型的基准。claude-3-7-sonnet
、reka-core
和 mistral-large2
是 Snowflake Cortex 提供的最强大的模型,它们将让您很好地了解最先进的模型可以做什么。
Claude 3-7 Sonnet
在一般推理和多模态能力方面处于领先地位。它在需要跨领域和模态推理的任务中表现优于其前几代。您可以利用其庞大的输出容量,从结构化或非结构化查询中获取更多信息。它的推理能力和大型上下文窗口使其非常适合代理工作流程。deepseek-r1
是一个基于大规模强化学习 (RL) 训练的基础模型,未经过监督微调 (SFT)。它在数学、代码和推理任务上均能实现高性能表现。要访问模型,请将 跨区域推理参数 设为AWS_US
。mistral-large2
是 Mistral AI 先进的大型语言模型,具有极强的推理能力。与mistral-large
相比,它在代码生成、数学、推理方面的能力要强得多,并提供更强大的多语言支持,非常适合需要大量推理能力或高度专业化的复杂任务,例如合成文本生成、代码生成和多语言文本分析。llama3.1-405b
是来自 Meta 的llama3.1
模型系列的开源模型,具有 128000 的大型上下文窗口。它在长文档处理、多语言支持、合成数据生成和模型提取方面表现出色。snowflake-llama3.1-405b
是基于开源 llama3.1 模型衍生的模型。它使用由 Snowflake AI 研究团队开发的<SwiftKV optimizations https://www.snowflake.com/en/blog/up-to-75-lower-inference-cost-llama-meta-llm/>
,能够将推理成本降低高达 75%。SwiftKV 以最小的精度损失实现更高的吞吐量性能。
中型模型¶
llama3.1-70b
是一种开源模型,具有先进的性能,非常适合聊天应用程序、内容创建和企业应用程序。它是一种高性能、高性价比的模型,可通过 128000 的上下文窗口实现各种用例。llama3-70b
仍受支持,其上下文窗口为 8000。snowflake-llama3.3-70b
是基于开源 llama3.3 模型衍生的模型。它使用由 Snowflake AI 研究团队开发的<SwiftKV optimizations https://www.snowflake.com/en/blog/up-to-75-lower-inference-cost-llama-meta-llm/>
,能够将推理成本降低高达 75%。SwiftKV 以最小的精度损失实现更高的吞吐量性能。snowflake-arctic
是 Snowflake 侧重于企业的一流 LLM。Arctic 擅长执行企业任务,例如 SQL 生成、编码和指令遵循基准测试。mixtral-8x7b
非常适合文本生成、分类和问答用途。Mistral 模型针对低延迟和低内存要求进行了优化,从而能为企业用例带来更高吞吐量。jamba-Instruct
模型由 AI21 实验室构建,可有效满足企业需求。它经过优化,可提供一个 256000 的词元上下文窗口,具有低成本和低延迟特性,使其成为对冗长文档和广泛知识库进行总结、问答和实体提取等任务的理想选择。AI21 Jamba 1.5 系列模型是符合基础模型的先进混合型 SSM Transformer 指令。上下文长度为 256000 的
jamba-1.5-mini
和jamba-1.5-large
支持结构化输出 (JSON) 和有根据的生成等用例。
小型模型¶
llama3.2-1b
和llama3.2-3b
模型支持上下文长度为 128000 的词元,并且在摘要、指令遵循和重写任务等用例方面是同类产品中的佼佼者。Llama 3.2 模型提供多语言功能,支持英语、德语、法语、意大利语、葡萄牙语、印地语、西班牙语和泰语。llama3.1-8b
非常适合需要中低等推理的任务。它是一个轻量级、超快速模型,具有 128000 的上下文窗口。llama3-8b
和llama2-70b-chat
仍然是受支持的模型,可以提供较小的上下文窗口,以及相对较低的准确度。mistral-7b
非常适合需要快速完成的最简单的摘要、结构化和问答任务。它通过其 32000 上下文窗口为多页文本提供低延迟和高吞吐量处理。gemma-7b
适用于简单的代码和文本完成任务。它提供 8,000 个词元的上下文窗口,但在该限制内功能惊人强大,而且成本效益极高。
下表介绍了常见模型在各种基准测试中的表现,包括 Snowflake Cortex COMPLETE 提供的模型和其他一些常见模型。
模型 |
上下文窗口
(词元)
|
MMLU
(推理)
|
HumanEval
(编码)
|
GSM8K
(算术推理)
|
Spider 1.0
(SQL)
|
---|---|---|---|---|---|
GPT 4.o (https://openai.com/index/hello-gpt-4o/) |
128,000 |
88.7 |
90.2 |
96.4 |
- |
Claude 3.5 Sonnet (https://www.anthropic.com/claude) |
200,000 |
88.3 |
92.0 |
96.4 |
- |
llama3.1-405b (https://github.com/meta-llama/llama-models/blob/main/models/llama3_1/MODEL_CARD.md) |
128,000 |
88.6 |
89 |
96.8 |
- |
reka-core (https://arxiv.org/pdf/2404.12387) |
32,000 |
83.2 |
76.8 |
92.2 |
- |
llama3.1-70b (https://github.com/meta-llama/llama-models/blob/main/models/llama3_1/MODEL_CARD.md) |
128,000 |
86 |
80.5 |
95.1 |
- |
mistral-large2 (https://mistral.ai/news/mistral-large-2407/) |
128,000 |
84 |
92 |
93 |
- |
reka-flash (https://arxiv.org/pdf/2404.12387) |
100,000 |
75.9 |
72 |
81 |
- |
llama3.1-8b (https://github.com/meta-llama/llama-models/blob/main/models/llama3_1/MODEL_CARD.md) |
128,000 |
73 |
72.6 |
84.9 |
- |
mixtral-8x7b (https://mistral.ai/news/mixtral-of-experts/) |
32,000 |
70.6 |
40.2 |
60.4 |
- |
jamba-instruct (https://www.ai21.com/jamba) |
256,000 |
68.2 |
40 |
59.9 |
- |
jamba-1.5-mini (link removed) |
256,000 |
69.7 |
- |
75.8 |
- |
jamba-1.5-large (link removed) |
256,000 |
81.2 |
- |
87 |
- |
4,096 |
67.3 |
64.3 |
69.7 |
79 |
|
llama3.2-1b (https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/MODEL_CARD.md) |
128,000 |
49.3 |
- |
44.4 |
- |
llama3.2-3b (https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/MODEL_CARD.md) |
128,000 |
69.4 |
- |
77.7 |
- |
gemma-7b (link removed) |
8,000 |
64.3 |
32.3 |
46.4 |
- |
mistral-7b (https://mistral.ai/news/announcing-mistral-7b/) |
32,000 |
62.5 |
26.2 |
52.1 |
- |
GPT 3.5 Turbo* |
4,097 |
70 |
48.1 |
57.1 |
- |
以前的模型版本¶
Snowflake Cortex COMPLETE 函数还支持以下较旧的模型版本。我们建议使用最新的模型版本,而不是此表中列出的版本。
模型 |
上下文窗口
(词元)
|
MMLU
(推理)
|
HumanEval
(编码)
|
GSM8K
(算术推理)
|
Spider 1.0
(SQL)
|
---|---|---|---|---|---|
mistral-large (https://mistral.ai/news/mistral-large/) |
32,000 |
81.2 |
45.1 |
81 |
81 |
llama-2-70b-chat (link removed) |
4,096 |
68.9 |
30.5 |
57.5 |
- |
错误条件¶
Snowflake Cortex AI 函数可能会生成以下错误消息。
消息 |
解释 |
---|---|
|
由于系统负载过大,请求被拒绝。请重试您的请求。 |
|
传递给函数的 |
|
超出了模型消耗预算。 |
|
指定的模型不存在。 |
|
指定的语言不受 TRANSLATE 函数支持。 |
|
请求超出了模型支持的最大词元数(请参阅 模型限制)。 |
|
由于使用率很高,请求已受到限流。请稍后再试。 |
|
指定的类别数量超出 AI_CLASSIFY 限制。 |
|
指定的类型不受 AI_CLASSIFY 支持。 |
|
AI_CLASSIFY 的输入为空字符串或 null。 |
将 Snowflake Cortex AISQL 与 Python 一起使用¶
您可以在 Snowpark Python API 中使用 Snowflake Cortex AISQL 函数。在 API 中,您可以使用函数对文本和图像数据进行分类、汇总和筛选。
包括以下函数:
ai_agg()
– 使用自然语言指令汇总一列文本。有关更多信息,请参阅 AI_AGG。ai_classify()
– 将文本或图像分类为自定义类别。有关更多信息,请参阅 AI_CLASSIFY。ai_filter()
– 使用自然语言筛选数据。有关更多信息,请参阅 AI_FILTER。
ai_agg()
函数使用自然语言指令汇总一列文本,其方式与您要求分析师从分组或未分组的数据中汇总或提取结果的方式类似。
以下示例使用 ai_agg()
函数汇总了客户对每种产品的评论。该函数采用一列文本和自然语言指令来汇总评论。
from snowflake.snowpark.functions import ai_agg, col
df = session.create_dataframe([
[1, "Excellent product!"],
[1, "Great battery life."],
[1, "A bit expensive but worth it."],
[2, "Terrible customer service."],
[2, "Won’t buy again."],
], schema=["product_id", "review"])
# Summarize reviews per product
summary_df = df.group_by("product_id").agg(
ai_agg(col("review"), "Summarize the customer reviews in one sentence.")
)
summary_df.show()
备注
请使用围绕具体用例展开的详细任务描述。例如,“Summarize the customer feedback for an investor report”。
ai_classify()
函数获取文本或图像并将其分类到您定义的类别中。
以下示例将旅行评论分为“travel”和“cooking”等类别。该函数采用一列文本和一个类别列表来对文本进行分类。
from snowflake.snowpark.functions import ai_classify
df = session.create_dataframe([
["I dream of backpacking across South America."],
["I made the best pasta yesterday."],
], schema=["sentence"])
df = df.select(
"sentence",
ai_classify("sentence", ["travel", "cooking"]).alias("classification")
)
df.show()
备注
最多可以提供 500 个类别。可以对文本和图像进行分类。
ai_filter()
函数评估自然语言条件并返回 TRUE
或 FALSE
。可以使用它来筛选或标记行。
from snowflake.snowpark.functions import ai_filter, prompt, col
df = session.create_dataframe(["Canada", "Germany", "Japan"], schema=["country"])
filtered_df = df.select(
"country",
ai_filter(prompt("Is {0} in Asia?", col("country"))).alias("is_in_asia")
)
filtered_df.show()
备注
可以对字符串和文件进行筛选。对于动态提示,使用 prompt() 函数。有关更多信息,请参阅 `Snowpark Python 参考<https://docs.snowflake.com/developer-guide/snowpark/reference/python/latest/snowpark/index>`_。
在 Snowpark ML 版本 1.1.2 及更高版本中,仍然支持现有的 Snowpark ML 函数。请参阅 在本地使用 Snowflake ML,以了解有关设置 Snowpark ML 的说明。
如果在 Snowflake 之外运行 Python 脚本,则必须创建 Snowpark 会话才能使用这些函数。有关说明,请参阅 连接到 Snowflake。
以下 Python 示例演示了如何对单个值调用 Snowflake Cortex AI 函数:
from snowflake.cortex import Complete, ExtractAnswer, Sentiment, Summarize, Translate
text = """
The Snowflake company was co-founded by Thierry Cruanes, Marcin Zukowski,
and Benoit Dageville in 2012 and is headquartered in Bozeman, Montana.
"""
print(Complete("llama2-70b-chat", "how do snowflakes get their unique patterns?"))
print(ExtractAnswer(text, "When was snowflake founded?"))
print(Sentiment("I really enjoyed this restaurant. Fantastic service!"))
print(Summarize(text))
print(Translate(text, "en", "fr"))
在使用 COMPLETE 函数时,可以传递影响模型超参数的选项。以下 Python 示例说明调用 COMPLETE 函数的情况,调用时修改了模型可以生成的最大输出词元数:
from snowflake.cortex import Complete,CompleteOptions
model_options1 = CompleteOptions(
{'max_tokens':30}
)
print(Complete("llama3.1-8b", "how do snowflakes get their unique patterns?", options=model_options1))
您也可以对表列调用 AI 函数,如下所示。此示例需要一个会话对象(存储在 session
中)和一个包含文本列 abstract_text
的表 articles
,并会创建一个新列 ``abstract_summary``(包含摘要的汇总)。
from snowflake.cortex import Summarize
from snowflake.snowpark.functions import col
article_df = session.table("articles")
article_df = article_df.withColumn(
"abstract_summary",
Summarize(col("abstract_text"))
)
article_df.collect()
备注
高级聊天风格(多消息)形式的 COMPLETE 目前在 Python 中不受支持。
将 Snowflake Cortex AI 函数与 Snowflake CLI 一起使用¶
Snowflake Cortex AISQL 可在 Snowflake CLI 版本 2.4.0 及更高版本中使用。有关使用 Snowflake CLI 的更多信息,请参阅 隆重推出 Snowflake CLI。
以下示例说明了如何在单个值上使用 snow cortex
命令。-c
参数指定要使用的连接。
备注
高级聊天风格(多消息)形式的 COMPLETE 目前在 Snowflake CLI 中不受支持。
snow cortex complete "Is 5 more than 4? Please answer using one word without a period." -c "snowhouse"
snow cortex extract-answer "what is snowflake?" "snowflake is a company" -c "snowhouse"
snow cortex sentiment "Mary had a little Lamb" -c "snowhouse"
snow cortex summarize "John has a car. John's car is blue. John's car is old and John is thinking about buying a new car. There are a lot of cars to choose from and John cannot sleep because it's an important decision for John."
snow cortex translate herb --to pl
也可以使用包含要用于命令的文本的文件。对于此示例,假设文件 about_cortex.txt
包含以下内容:
Snowflake Cortex gives you instant access to industry-leading large language models (LLMs) trained by researchers at companies like Anthropic, Mistral, Reka, Meta, and Google, including Snowflake Arctic, an open enterprise-grade model developed by Snowflake.
Since these LLMs are fully hosted and managed by Snowflake, using them requires no setup. Your data stays within Snowflake, giving you the performance, scalability, and governance you expect.
Snowflake Cortex features are provided as SQL functions and are also available in Python. The available functions are summarized below.
COMPLETE: Given a prompt, returns a response that completes the prompt. This function accepts either a single prompt or a conversation with multiple prompts and responses.
EMBED_TEXT_768: Given a piece of text, returns a vector embedding that represents that text.
EXTRACT_ANSWER: Given a question and unstructured data, returns the answer to the question if it can be found in the data.
SENTIMENT: Returns a sentiment score, from -1 to 1, representing the detected positive or negative sentiment of the given text.
SUMMARIZE: Returns a summary of the given text.
TRANSLATE: Translates given text from any supported language to any other.
然后,您可以通过使用 --file
参数传入文件名来执行 snow cortex summarize
命令,如下所示:
snow cortex summarize --file about_cortex.txt
Snowflake Cortex offers instant access to industry-leading language models, including Snowflake Arctic, with SQL functions for completing prompts (COMPLETE), text embedding (EMBED\_TEXT\_768), extracting answers (EXTRACT\_ANSWER), sentiment analysis (SENTIMENT), summarizing text (SUMMARIZE), and translating text (TRANSLATE).
有关这些命令的更多信息,请参阅 snow cortex commands。
法律声明¶
输入和输出的 Data Classification 如下表所示。
输入 Data Classification |
输出 Data Classification |
名称 |
---|---|---|
Usage Data |
Customer Data |
正式发布的功能是涵盖的 AI 功能。预览版功能属于预览版 AI 功能。[1] |
有关更多信息,请参阅 Snowflake AI 和 ML。