Funções de Large Language Model (LLM) (Snowflake Cortex)

Snowflake Cortex gives you instant access to industry-leading large language models (LLMs) trained by researchers at companies like Mistral, Meta, and Google. It also offers models that Snowflake has fine-tuned for specific use cases.

Como esses LLMs são totalmente hospedados e gerenciados pelo Snowflake, usá-los não requer configuração. Seus dados permanecem no Snowflake, proporcionando o desempenho, a escalabilidade e a governança que você espera.

Os recursos do Snowflake Cortex são fornecidos como funções SQL e também estão disponíveis em Python. As funções disponíveis estão resumidas abaixo.

  • COMPLETE: dado um prompt, retorna uma resposta que completa o prompt. Esta função aceita um único prompt ou uma conversa com vários prompts e respostas.

  • EXTRACT_ANSWER: dada uma pergunta e dados não estruturados, retorna a resposta à pergunta se ela puder ser encontrada nos dados.

  • SENTIMENT: retorna uma pontuação de sentimento, de -1 a 1, representando o sentimento positivo ou negativo detectado de um determinado texto.

  • SUMMARIZE: retorna um resumo do texto fornecido.

  • TRANSLATE: traduz determinado texto de qualquer idioma suportado para qualquer outro.

Privilégios obrigatórios

The CORTEX_USER database role in the SNOWFLAKE database includes the privileges that allow users to call Snowflake Cortex LLM functions. By default, this database role is granted to only the ACCOUNTADMIN role. ACCOUNTADMIN must propagate this role to user roles in order to allow users to access Cortex LLM Functions.

The SNOWFLAKE.CORTEX_USER database role cannot be granted directly to a user. A user with the ACCOUNTADMIN role must first grant it to an account role, and then grant the account role to users. For more information, see Uso das funções de banco de dados SNOWFLAKE.

In the following example, you assume ACCOUNTADMIN and grant the user some_user the CORTEX_USER database role via the account role cortex_user_role, which you create for this purpose.

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

Você também pode conceder acesso às funções de LLM do Snowflake Cortex por meio de funções existentes comumente usadas por grupos específicos de usuários. (Consulte Funções do usuário.) Por exemplo, se você criou uma função analyst usada como função padrão pelos analistas da sua organização, poderá conceder facilmente a esses usuários acesso às funções de LLM do Snowflake Cortex com uma única instrução GRANT.

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE analyst;
Copy

The PUBLIC pseudo-role is automatically granted to all users and roles, so granting cortex_user_role to PUBLIC allows all users in your account to use the Snowflake Cortex LLM functions.

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE PUBLIC;
Copy

Dica

Be mindful of the number of users to whom you are granting access and the impact their usage of Snowflake Cortex LLM functions may have on compute consumption. Establish policies around purpose of use (particularly of the most costly models) before granting widespread access to these features.

Expect users to explore the new features, potentially driving a temporary surge in cost, before settling into a more stable usage pattern.

Disponibilidade

As funções de LLM do Snowflake Cortex estão atualmente disponíveis nas seguintes regiões.

Função
(Modelo)
AWS US East
(N. Virginia)
AWS US West
(Oregon)
AWS Europe
(Frankfurt)
Azure East US 2
(Virginia)
Azure West Europe
(Países Baixos)
COMPLETE
(mistral-large)

COMPLETE
(mixtral-8x7b)

COMPLETE
(llama2-chat-70b)

COMPLETE
(mistral-7b)

COMPLETE
(gemma-7b)

EXTRACT_ANSWER

SENTIMENT

SUMMARIZE

TRANSLATE

Considerações sobre custo

Snowflake Cortex LLM functions incur compute cost based on the number of tokens processed. The table below shows the cost in credits per 1 million tokens for each function.

Nota

Um token é a menor unidade de texto processada pelas funções de LLM do Snowflake Cortex, aproximadamente igual a quatro caracteres de texto. A equivalência do texto bruto de entrada ou saída com tokens pode variar de acordo com o modelo.

  • Para funções que geram novo texto na resposta (COMPLETE, SUMMARIZE e TRANSLATE), os tokens de entrada e de saída são contados.

  • Para funções que extraem apenas informações da entrada (EXTRACT_ANSWER e SENTIMENT), apenas os tokens de entrada são contados.

  • Para EXTRACT_ANSWER, o número de tokens faturáveis é a soma do número de tokens nos campos from_text e question.

For general information on compute costs, see Explicação dos custos de computação.

Nota

Snowflake recommends executing queries that call a Snowflake Cortex LLM Function with a smaller warehouse (no larger than MEDIUM) because larger warehouses do not increase performance. The cost associated with keeping a warehouse active will continue to apply when executing a query that calls a Snowflake Cortex LLM Function.

Function (Model)

Snowflake credits per million tokens

COMPLETE (mistral-large)

5.10

COMPLETE (mixtral-8x7b)

0.50

COMPLETE (llama2-70b-chat)

0.45

COMPLETE (mistral-7b)

0.12

COMPLETE (gemma-7b)

0.12

EXTRACT_ANSWER

0.08

SENTIMENT

0.08

SUMMARIZE

0.10

TRANSLATE

0.33

Usage of Snowflake Cortex LLM functions appears in the Snowflake Organization Usage’s METERING_DAILY_HISTORY view with a service type of AI_SERVICES. To view credit consumption for AI services for all accounts in an organization, use the following query.

SELECT * FROM SNOWFLAKE.ORGANIZATION_USAGE.METERING_DAILY_HISTORY
    WHERE service_type ILIKE '%ai_services%';
Copy

Nota

The SNOWFLAKE.ORGANIZATION_USAGE.METERING_DAILY_HISTORY view may take up to four hours to update.

Cotas de uso

To ensure a high standard of performance for all Snowflake customers, Snowflake Cortex LLM functions are subject to usage quotas beyond which requests may be throttled. Snowflake may adjust these quotas from time to time. The quotas in the table below are applied per account.

Function (Model)

Tokens processed per minute (TPM)

Rows processed per minute (RPM)

COMPLETE (mistral-large)

200,000

100

COMPLETE (mixtral-8x7b)

300,000

400

COMPLETE (llama2-70b-chat)

300,000

400

COMPLETE (mistral-7b)

300,000

500

COMPLETE (gemma-7b)

300,000

500

EXTRACT_ANSWER

1,000,000

3,000

SENTIMENT

1,000,000

5,000

SUMMARIZE

300,000

500

TRANSLATE

1,000,000

2,000

Nota

As contas Snowflake sob demanda sem um método de pagamento válido (como contas de avaliação) são limitadas a aproximadamente um crédito por dia no uso da função de LLM do Snowflake Cortex. Para remover essa restrição, converta sua conta de avaliação em uma conta paga.

Gerenciamento de custos e limitação

During this preview, Snowflake recommends using a warehouse size no larger than MEDIUM when calling Snowflake Cortex LLM functions. Using a larger warehouse than necessary does not increase performance, but can result in unnecessary costs and a higher risk of throttling. This recommendation may not apply in the future due to upcoming product updates.

Restrições de modelo

Os modelos usados pelo Snowflake Cortex têm limitações de tamanho conforme descrito na tabela abaixo. Os tamanhos são fornecidos em tokens. Os tokens geralmente correspondem a palavras, mas nem todos os tokens são palavras, portanto o número de palavras correspondentes a um limite é ligeiramente menor que o número de tokens. As entradas que excedem o limite resultam em erro.

Função

Modelo

Janela de contexto (tokens)

COMPLETE

mistral-large

32,000

mixtral-8x7b

32,000

llama-2-70b-chat

4,096

mistral-7b

32,000

gemma-7b

8,000

EXTRACT_ANSWER

Modelo gerenciado do Snowflake

2,048 para texto
64 para pergunta

SENTIMENT

Modelo gerenciado do Snowflake

512

SUMMARIZE

Modelo gerenciado do Snowflake

32,000

TRANSLATE

Modelo gerenciado do Snowflake

1,024

Escolha de um modelo

A função COMPLETE do Snowflake Cortex oferece suporte a vários modelos de capacidade, latência e custo variados. Esses modelos foram cuidadosamente escolhidos para se alinharem aos casos de uso comuns dos clientes. Para obter o melhor desempenho por crédito, escolha um modelo que corresponda bem ao tamanho do conteúdo e à complexidade da sua tarefa. Aqui estão breves visões gerais dos modelos disponíveis.

  • mistral-large is a top-tier model that scores well on a variety of metrics (see table below). It features a context window of 32,000 tokens (about 24,000 words), allowing it to engage in complex reasoning across extended conversations. It is also the most compute-intensive of the models offered by Snowflake Cortex and thus the most costly to run.

  • mixtral-8x7b provides low latency and high quality results, while also supporting a context length of 32,000 tokens. It is ideal for many enterprise production use cases.

  • llama2-70b-chat is well-suited to complex, large-scale tasks that require a moderate amount of reasoning, like extracting data or helping you to write job descriptions.

  • mistral-7b and gemma-7b are capable of executing simple tasks quickly and with better cost efficiency.

    • mistral-7b is ideal for your simplest summarization and classification tasks that require a smaller degree of customization. Its 32,000 token limit gives it the ability to process multiple pages of text.

    • gemma-7b é adequado para tarefas simples de conclusão de código e texto. Ele tem uma janela de contexto de 8.000 tokens, mas é surpreendentemente capaz dentro desse limite e bastante econômico.

If you’re not sure where to start, try mistral-large first, whether you are already using another top-tier model or are new to LLMs. It is the most broadly capable model offered by Snowflake Cortex, and will give you a good idea what a state-of-the-art model can do. Its results can be used as a baseline in evaluating the other models.

To help you decide, the following table provides information on how popular models perform on various benchmarks, including the models offered by Snowflake Cortex COMPLETE as well as a few other popular models.

Modelo

Janela de contexto
(Tokens)
MMLU
(Raciocínio)
MT-Bench
(Instruções a seguir)
HumanEval
(Codificação)
Spider 1.0
(SQL)

GPT 4 Turbo *

32,000

86,4

8,96

67

86,6

mistral-large

32,000

81,2

-

45,1

81

Claude 2 *

100,000

78,5

8,06

71,2

-

mixtral-8x7b

32,000

70,6

8,30

40,2

-

GPT 3.5 Turbo *

4,097

70

8,39

48,1

-

llama-2-70b-chat

4,096

68,9

6,86

30,5

-

mistral-7b

32,000

62,5

6,84

26,2

-

gemma-7b

8,000

64,3

-

32,3

-

llama2-7b *

4,096

45,3

6,27

12,2

-

*Fornecido para comparação; não disponível no Snowflake Cortex COMPLETE.

Visão geral das funções de LLM

COMPLETE

Dado um prompt, a função COMPLETE de instrução gera uma resposta usando o modelo de linguagem de sua escolha. No caso de uso mais simples, o prompt é uma única cadeia de caracteres. Você também pode fornecer uma conversa incluindo vários prompts e respostas para uso interativo no estilo de bate-papo e, nesta forma de função, você também pode especificar opções de hiperparâmetros para personalizar o estilo e o tamanho da saída.

The COMPLETE function supports the following models. Different models can have different costs and quotas.

  • mistral-large

  • mixtral-8x7b

  • llama2-70b-chat

  • mistral-7b

  • gemma-7b

Consulte COMPLETE (SNOWFLAKE.CORTEX) para sintaxe e exemplos.

EXTRACT_ANSWER

A função EXTRACT_ANSWER extrai uma resposta a uma determinada pergunta de um documento de texto. O documento pode ser um documento em inglês simples ou uma representação da cadeia de caracteres de um objeto de dados semiestruturados (JSON).

See EXTRACT_ANSWER (SNOWFLAKE.CORTEX) for syntax and examples.

SENTIMENT

A função SENTIMENT retorna o sentimento como uma pontuação entre -1 e 1 (com -1 sendo o mais negativo e 1 o mais positivo, com valores em torno de 0 neutros) para o texto de entrada em inglês fornecido.

See SENTIMENT (SNOWFLAKE.CORTEX) for syntax and examples.

SUMMARIZE

A função SUMMARIZE retorna um resumo do texto em inglês fornecido.

See SUMMARIZE (SNOWFLAKE.CORTEX) for syntax and examples.

TRANSLATE

A função TRANSLATE traduz texto do idioma de origem indicado ou detectado para um idioma de destino.

See TRANSLATE (SNOWFLAKE.CORTEX) for syntax and examples.

Condições de erro

As funções de LLM do Snowflake Cortex podem produzir as seguintes mensagens de erro.

Mensagem

Explicação

too many requests

A solicitação foi rejeitada devido à carga excessiva do sistema. Tente sua solicitação novamente.

invalid options object

O objeto options passado para a função contém opções ou valores inválidos.

budget exceeded

O orçamento de consumo do modelo foi excedido.

unknown model "<nome do modelo>"

O modelo especificado não existe.

invalid language "<idioma>"

O idioma especificado não é compatível com a função TRANSLATE.

max tokens of <contagem> exceeded

A solicitação excedeu o número máximo de tokens suportados pelo modelo (consulte Restrições de modelo).

all requests were throttled by remote service

The number of requests exceeds the limit. Try again later.

Uso das funções de LLM do Snowflake Cortex com Python

Snowflake Cortex LLM functions are available in Snowpark ML version 1.1.2 and later. See Instalação do Snowpark ML for instructions on setting up Snowpark ML.

Se você executar seu script Python fora do Snowflake, deverá criar uma sessão do Snowpark para usar essas funções. Consulte Conexão ao Snowflake para obter instruções.

O exemplo Python a seguir ilustra a chamada de funções de LLM do Snowflake Cortex em valores únicos:

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

Você também pode chamar uma função de LLM em uma coluna da tabela, conforme mostrado abaixo. Este exemplo requer um objeto de sessão (armazenado em session) e uma tabela articles contendo uma coluna de texto abstract_text e cria uma nova coluna abstract_summary contendo um resumo do abstract.

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

Nota

O formato de bate-papo avançado (várias mensagens) de COMPLETE não é atualmente compatível com Python.