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 函数

特定于任务的函数是专门构建和管理的函数,可以自动执行日常任务,如简单的摘要和快速翻译,不需要任何自定义。

备注

以前称为“LLM 函数”的函数在“SNOWFLAKE.CORTEX”命名空间中访问

辅助函数

辅助函数是专门构建和管理的函数,用于减少运行其他 AISQL 函数时的故障情况,例如通过获取输入提示中的词元计数来确保调用不超过模型限制。

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;
Copy

然后,您可以有选择地提供对特定角色的访问权限。不能直接向用户授予 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;
Copy

您还可以通过特定用户组通常使用的现有角色,授予对 Snowflake Cortex AI 函数的访问权限。(请参阅 用户角色。)例如,如果您创建了一个 analyst 角色(它被组织中的分析师用作默认角色),则可以使用一条 GRANT 语句,轻松地向这些用户授予对 Snowflake Cortex AISQL 函数的访问权限。

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE analyst;
Copy

控制模型访问

Snowflake Cortex 提供了两种独立机制来强制访问模型:

  • :ref:`账户级别的允许列表参数 <label-cortex_llm_allowlist>`(简单、广泛的控制)

  • :ref:`基于角色的访问控制 (RBAC) <label-cortex_llm_rbac>`(精细控制)

您可以使用账户级允许列表来控制整个账户的模型访问权限,也可以使用 RBAC 控制每个角色的模型访问权限。为了最大限度地提高灵活性,如果可以接受额外的复杂性,也可以 同时使用这两种机制

账户级别的允许列表参数

您可以使用 CORTEX_MODELS_ALLOWLIST 参数控制整个账户的模型访问权限。支持的功能 将遵循此参数值,并阻止使用未在允许列表中的模型。

可以将 CORTEX_MODELS_ALLOWLIST 参数设置为 'All''None' 或以逗号分隔的型号名称列表。此参数只能在账户级别设置,不能在用户或会话级别设置。只有 ACCOUNTADMIN 角色可以使用 ALTER ACCOUNT 命令设置参数。

示例:

  • 要允许访问所有模型,请执行以下操作:

    ALTER ACCOUNT SET CORTEX_MODELS_ALLOWLIST = 'All';
    
    Copy
  • 要允许访问 mistral-large2llama3.1-70b 模型,请执行以下操作:

    ALTER ACCOUNT SET CORTEX_MODELS_ALLOWLIST = 'mistral-large2,llama3.1-70b';
    
    Copy
  • 要防止访问任何模型,请执行以下操作:

    ALTER ACCOUNT SET CORTEX_MODELS_ALLOWLIST = 'None';
    
    Copy

如下一节所述,使用 RBAC 为特定角色提供超出您在允许列表中指定的访问权限。

基于角色的访问控制 (RBAC)

尽管 Cortex 模型本身并非 Snowflake 对象,但 Snowflake 允许您在 SNOWFLAKE.MODELS 架构中创建代表 Cortex 模型的模型对象。通过对这些对象应用 RBAC,您可以像控制其他 Snowflake 对象一样管理模型访问权限。支持的功能 可在任何需要指定模型的场景中,接受 SNOWFLAKE.MODELS 架构内对象的标识符。

小技巧

如需独占使用 RBAC,请将 CORTEX_MODELS_ALLOWLIST 设置为 'None'

刷新模型对象和应用程序角色

SNOWFLAKE.MODELS 不会自动填充代表 Cortex 模型的对象。首次设置模型 RBAC 时必须创建这些对象,若需对新模型应用 RBAC 功能则需刷新对象。

作为 ACCOUNTADMIN,运行 SNOWFLAKE.MODELS.CORTEX_BASE_MODELS_REFRESH 存储过程,以使用代表当前可用 Cortex 模型的对象填充 SNOWFLAKE.MODELS 模式,并创建与模型对应的应用角色。该存储过程还会创建一个覆盖所有模型的 CORTEX-MODEL-ROLE-ALL 角色。

小技巧

您可以随时安全地调用 CORTEX_BASE_MODELS_REFRESH;它不会创建重复的对象或角色。

CALL SNOWFLAKE.MODELS.CORTEX_BASE_MODELS_REFRESH();
Copy

刷新模型对象后,您可按下述方式验证模型是否已出现在 SNOWFLAKE.MODELS 架构中:

SHOW MODELS IN SNOWFLAKE.MODELS;
Copy

返回的模型列表类似于以下内容:

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 命令,如下例所示:

SHOW APPLICATION ROLES IN APPLICATION SNOWFLAKE;
Copy

应用程序角色列表类似于以下内容:

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

将应用程序角色授予用户角色

创建模型对象和应用程序角色后,您可以将应用程序角色授予账户中的特定用户角色。

  • 要授予角色访问特定模型的权限,请执行以下操作:

    GRANT APPLICATION ROLE SNOWFLAKE."CORTEX-MODEL-ROLE-LLAMA3.1-70B" TO ROLE MY_ROLE;
    
    Copy
  • 要向角色授予所有模型(当前和未来模型)的访问权限,请执行以下操作:

    GRANT APPLICATION ROLE SNOWFLAKE."CORTEX-MODEL-ROLE-ALL" TO ROLE MY_ROLE;
    
    Copy

使用具有支持功能的模型对象

若要将模型对象与支持的 Cortex 功能结合使用,请在 SNOWFLAKE.MODELS 中将模型对象的标识符指定为模型参数。您可以使用限定标识符或部分标识符,具体取决于您当前的数据库和架构上下文。

  • 使用完全限定的标识符:

    SELECT AI_COMPLETE('SNOWFLAKE.MODELS."LLAMA3.1-70B"', 'Hello');
    
    Copy
  • 使用部分标识符:

    USE DATABASE SNOWFLAKE;
    USE SCHEMA MODELS;
    SELECT AI_COMPLETE('LLAMA3.1-70B', 'Hello');
    
    Copy

使用 RBAC 搭配账户级允许列表

多项 Cortex 功能接受字符串形式的模型名称作为实参,例如 AI_COMPLETE('model', 'prompt')。Cortex 会首先将其视为架构级模型对象的标识符。若找到该模型对象,则应用 RBAC 以判定用户是否可使用该模型。若未找到模型对象,该实参将被解释为普通模型名称,并与账户级允许列表进行匹配。

以下示例说明了允许列表和 RBAC 组合的用法。在此示例中,允许列表设置为允许 mistral-large2 模型,且用户通过 RBAC 拥有 LLAMA3.1-70B 模型对象的访问权限。

-- set up access
USE SECONDARY ROLES NONE;
USE ROLE ACCOUNTADMIN;
ALTER ACCOUNT SET CORTEX_MODELS_ALLOWLIST = 'MISTRAL-LARGE2';
CALL SNOWFLAKE.MODELS.CORTEX_BASE_MODELS_REFRESH();
GRANT APPLICATION ROLE SNOWFLAKE."CORTEX-MODEL-ROLE-LLAMA3.1-70B" TO ROLE PUBLIC;

-- test access
USE ROLE PUBLIC;

-- this succeeds because mistral-large2 is in the allowlist
SELECT AI_COMPLETE('MISTRAL-LARGE2', 'Hello');

-- this succeeds because the role has access to the model object
SELECT AI_COMPLETE('SNOWFLAKE.MODELS."LLAMA3.1-70B"', 'Hello');

-- this fails because the first argument is
-- neither an identifier for an accessible model object
-- nor is it a model name in the allowlist
SELECT AI_COMPLETE('SNOWFLAKE-ARCTIC', 'Hello');
Copy

常见陷阱

  • 访问模型(无论是通过允许列表还是 RBAC)并不总是意味着可以使用该模型。该模型可能仍受跨区域限制、版本弃用或其他可用性约束。这些限制可能导致与模型访问错误相似的信息提示。

  • 模型访问控制仅管控模型的使用权限,不涉及功能本身的使用,功能可能设有独立的访问控制机制。例如,AI_COMPLETE 访问权限由 CORTEX_USER 数据库角色控制。有关更多信息,请参阅 所需权限

  • 并非所有功能都支持模型访问控制。请参阅 支持的功能 表,查看给定功能支持哪些访问控制方法。

  • 次要角色可能造成权限模糊。例如,若用户将 ACCOUNTADMIN 设为次要角色,所有模型对象可能显示为可访问状态。验证权限时暂时禁用次要角色。

  • 请注意:使用 RBAC 时必须采用模型对象标识符,且这些标识符需加引号,故区分大小写。有关更多信息,请参阅 QUOTED_IDENTIFIERS_IGNORE_CASE

支持的功能

以下功能支持模型访问控制:

特征

账户级别允许列表

基于角色的访问控制

备注

AI_COMPLETE

AI_CLASSIFY

若支撑此功能的模型未获允许,错误信息将包含修改允许列表的指引。

AI_FILTER

若支撑此功能的模型未获允许,错误信息将包含修改允许列表的指引。

AI_AGG

若支撑此功能的模型未获允许,错误信息将包含修改允许列表的指引。

AI_SUMMARIZE_AGG

若支撑此功能的模型未获允许,错误信息将包含修改允许列表的指引。

COMPLETE (SNOWFLAKE.CORTEX)

TRY_COMPLETE (SNOWFLAKE.CORTEX)

Cortex REST API

Cortex Playground

可用性

Snowflake Cortex AI 函数目前已在以下区域原生提供。如果您的区域未列出特定函数,请使用 跨区域推理

备注

  • TRY_COMPLETE 函数在相同区域以 COMPLETE 形式提供。

  • COUNT_TOKENS 函数在所有区域支持任意模型可用,但模型本身仅限下表中指定的区域提供。

以下模型通过 跨区域推理 在所有区域提供。

函数
(模型)
跨云(任何区域)
AWS US
(跨区域)
AWS EU
(跨区域)
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
(openai-gpt-5)

处于预览版

处于预览版

COMPLETE
(openai-gpt-5-mini)

处于预览版

处于预览版

COMPLETE
(openai-gpt-5-nano)

处于预览版

处于预览版

COMPLETE
(openai-gpt-5-chat)

处于预览版

COMPLETE
(openai-gpt-oss-120b)

处于预览版

COMPLETE
(openai-gpt-oss-20b)

处于预览版

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
(snowflake-arctic-embed-l-v2.0-8k)

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_SENTIMENT

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,仅统计输入词元。输入词元的数量基于 LLM 函数中使用的每个 COMPLETE 模型的输出词元的数量。

  • 对于 AI_SIMILARITY 和 EMBED_* 函数,仅统计输入词元。

  • 对于 EXTRACT_ANSWER,可计费词元的数量是 from_textquestion 字段中的词元数量之和。

  • AI_CLASSIFY、AI_FILTER、AI_AGG、AI_SENTIMENT、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) 只会产生运行函数的计算成本。不会产生额外的令牌成本。

对于支持图像或音频等媒体文件的模型:

  • 音频文件按每秒钟音频 50 个令牌计费。

  • 图像的令牌等价性由所用模型决定。有关更多信息,请参阅 AI图像成本注意事项

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';
Copy

跟踪 AISQL 函数的 credit 使用量

要查看每个 AISQL 函数调用的 credit 和词元使用量,请使用 CORTEX_FUNCTIONS_USAGE_HISTORY 视图

SELECT *
  FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FUNCTIONS_USAGE_HISTORY;
Copy

您还可以在 Snowflake 账户中查看每次查询的 credit 和令牌使用量。查看每次查询的 credit 和令牌使用量可帮助您确定使用 credit 和令牌最多的查询。

以下示例查询使用 CORTEX_FUNCTIONS_QUERY_USAGE_HISTORY 视图 以显示您账户中所有查询的 Credit 和词元使用量。

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FUNCTIONS_QUERY_USAGE_HISTORY;
Copy

您还可以使用同一视图查看特定查询的 Credit和词元使用量。

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_FUNCTIONS_QUERY_USAGE_HISTORY
WHERE query_id='<query-id>';
Copy

备注

您无法获取 REST API 请求的详细使用信息。

查询使用历史记录按查询中使用的模型分组。例如,如果您运行了以下命令:

SELECT AI_COMPLETE('mistral-7b', 'Is a hot dog a sandwich'), AI_COMPLETE('mistral-large', 'Is a hot dog a sandwich');
Copy

查询使用历史记录将显示两行,一行是 mistral-7b,一行是 mistral-large

使用量配额

备注

没有有效付款方式(例如试用账户)的按需 Snowflake 账户每天只能使用 10 个 Credit,用于使用 Snowflake Cortex AISQL。要取消此限制,请 将试用账户转为付费账户

管理成本

在调用 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-8bmistral-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

llama4-maverick

128,000

8,192

llama4-scout

128,000

8,192

snowflake-arctic

4,096

8,192

deepseek-r1

32,768

8,192

claude-4-opus

200,000

8,192

claude-4-sonnet

200,000

32,000

claude-3-7-sonnet

200,000

32,000

claude-3-5-sonnet

200,000

8,192

mistral-large

32,000

8,192

mistral-large2

128,000

8,192

openai-gpt-4.1

128,000

32,000

openai-o4-mini

200,000

32,000

openai-gpt-5

272,000

8,192

openai-gpt-5-mini

272,000

8,192

openai-gpt-5-nano

272,000

8,192

openai-gpt-5-chat

128,000

8,192

openai-gpt-oss-120b

128,000

8,192

openai-gpt-oss-20b

128,000

8,192

reka-flash

100,000

8,192

reka-core

32,000

8,192

jamba-instruct

256,000

8,192

jamba-1.5-mini

256,000

8,192

jamba-1.5-large

256,000

8,192

mixtral-8x7b

32,000

8,192

llama2-70b-chat

4,096

8,192

llama3-8b

8,000

8,192

llama3-70b

8,000

8,192

llama3.1-8b

128,000

8,192

llama3.1-70b

128,000

8,192

llama3.3-70b

128,000

8,192

snowflake-llama-3.3-70b

8,000

8,192

llama3.1-405b

128,000

8,192

snowflake-llama-3.1-405b

8,000

8,192

llama3.2-1b

128,000

8,192

llama3.2-3b

128,000

8,192

mistral-7b

32,000

8,192

gemma-7b

8,000

8,192

EMBED_TEXT_768

e5-base-v2

512

不适用

snowflake-arctic-embed-m

512

不适用

EMBED_TEXT_1024

nv-embed-qa-4

512

不适用

multilingual-e5-large

512

不适用

voyage-multilingual-2

32,000

不适用

AI_FILTER

Snowflake 托管模型

128,000

不适用

AI_CLASSIFY / CLASSIFY_TEXT

Snowflake 托管模型

128,000

不适用

AI_AGG

Snowflake 托管模型

每行 128,000
可以跨多行使用

8,192

AI_SENTIMENT

Snowflake 托管模型

2,048

不适用

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-sonnetreka-coremistral-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-minijamba-1.5-large 支持结构化输出 (JSON) 和有根据的生成等用例。

小型模型

  • llama3.2-1bllama3.2-3b 模型支持上下文长度为 128000 的词元,并且在摘要、指令遵循和重写任务等用例方面是同类产品中的佼佼者。Llama 3.2 模型提供多语言功能,支持英语、德语、法语、意大利语、葡萄牙语、印地语、西班牙语和泰语。

  • llama3.1-8b 非常适合需要中低等推理的任务。它是一个轻量级、超快速模型,具有 128000 的上下文窗口。llama3-8bllama2-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

-

Snowflake Arctic

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 AISQL 与 Python 一起使用

您可以在 Snowpark Python API 中使用 Snowflake Cortex AISQL 函数。在 API 中,您可以使用函数对文本和图像数据进行分类、汇总和筛选。

包括以下函数:

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()
Copy

备注

请使用围绕具体用例展开的详细任务描述。例如,“Summarize the customer feedback for an investor report”。

ai_classify() 函数获取文本或图像并将其分类到您定义的类别中。

以下示例将旅行评论分为“travel”和“cooking”等类别。该函数采用一列文本和一个类别列表来对文本进行分类。

from snowflake.snowpark.functions import ai_classify, col

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(col("sentence"), ["travel", "cooking"]).alias("classification")
)
df.show()
Copy

备注

最多可以提供 500 个类别。可以对文本和图像进行分类。

ai_filter() 函数评估自然语言条件并返回 TRUEFALSE。可以使用它来筛选或标记行。

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()
Copy

备注

可以对字符串和文件进行筛选。对于动态提示,使用 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"))
Copy

在使用 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))
Copy

您也可以对表列调用 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()
Copy

备注

高级聊天风格(多消息)形式的 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"
Copy
snow cortex extract-answer "what is snowflake?" "snowflake is a company" -c "snowhouse"
Copy
snow cortex sentiment "Mary had a little Lamb" -c "snowhouse"
Copy
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."
Copy
snow cortex translate herb --to pl
Copy

也可以使用包含要用于命令的文本的文件。对于此示例,假设文件 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
Copy
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

语言: 中文