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

Snowflake Cortex oferece acesso instantâneo a grandes modelos de linguagem (LLMs) líderes do setor, treinados por pesquisadores de empresas como Mistral, Meta e Google. Ele também oferece modelos que o Snowflake ajustou para casos de uso específicos.

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

A função de banco de dados CORTEX_USER no banco de dados SNOWFLAKE inclui os privilégios que permitem aos usuários chamar funções de LLM do Snowflake Cortex. Por padrão, essa função de banco de dados é concedida apenas à função ACCOUNTADMIN. ACCOUNTADMIN deve propagar esta função para funções de usuário para permitir que os usuários acessem as funções de LLM do Cortex.

A função de banco de dados SNOWFLAKE.CORTEX_USER não pode ser concedida diretamente a um usuário. Um usuário com a função ACCOUNTADMIN deve primeiro concedê-la a uma função de conta e, em seguida, conceder a função de conta aos usuários. Para obter mais informações, consulte Uso das funções de banco de dados SNOWFLAKE.

No exemplo a seguir, você assume ACCOUNTADMIN e concede ao usuário some_user a função de banco de dados CORTEX_USER por meio da função de conta cortex_user_role, que você cria para essa finalidade.

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

A pseudofunção PUBLIC é concedida automaticamente a todos os usuários e funções, portanto, conceder cortex_user_role a PUBLIC permite que todos os usuários em sua conta usem as funções de LLM do Snowflake Cortex.

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE PUBLIC;
Copy

Dica

Tenha atenção ao número de usuários aos quais você está concedendo acesso e ao impacto que o uso das funções de LLM do Snowflake Cortex pode ter no consumo de computação. Estabeleça políticas em torno da finalidade de utilização (especialmente dos modelos mais dispendiosos) antes de conceder acesso generalizado a estas funcionalidades.

Espere que os usuários explorem os novos recursos, potencialmente gerando um aumento temporário nos custos, antes de se estabelecerem em um padrão de uso mais estável.

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

As funções de LLM do Snowflake Cortex incorrem em custos de computação com base no número de tokens processados. A tabela abaixo mostra o custo em créditos por 1 milhão de tokens para cada função.

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.

Para obter informações gerais sobre custos de computação, consulte Explicação dos custos de computação.

Nota

Snowflake recomenda executar consultas que chamam uma função de LLM do Snowflake Cortex com um warehouse menor (não maior que MEDIUM) porque warehouses maiores não aumentam o desempenho. O custo associado à manutenção de um warehouse ativo continuará a ser aplicado ao executar uma consulta que chama uma função de LLM do Snowflake Cortex.

Função (Modelo)

Créditos Snowflake por milhão de 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

O uso das funções de LLM do Snowflake Cortex aparece na exibição METERING_DAILY_HISTORY do Organization Usage do Snowflake com um tipo de serviço de AI_SERVICES. Para visualizar o consumo de crédito dos serviços de AI para todas as contas de uma organização, use a consulta a seguir.

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

Nota

A exibição SNOWFLAKE.ORGANIZATION_USAGE.METERING_DAILY_HISTORY pode levar até quatro horas para ser atualizada.

Cotas de uso

Para garantir um alto padrão de desempenho para todos os clientes do Snowflake, as funções de LLM do Snowflake Cortex estão sujeitas a cotas de uso além das quais as solicitações podem ser limitadas. A Snowflake pode ajustar essas cotas de tempos em tempos. As cotas na tabela abaixo são aplicadas por conta.

Função (Modelo)

Tokens processados por minuto (TPM)

Linhas processadas por minuto (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

Durante esta versão preliminar, Snowflake recomenda usar um tamanho de warehouse não maior que MEDIUM ao chamar funções de LLM do Snowflake Cortex. Utilizar um warehouse maior do que o necessário não aumenta o desempenho, mas pode resultar em custos desnecessários e num maior risco de limitação. Esta recomendação pode não se aplicar no futuro devido a futuras atualizações do produto.

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 é um modelo de primeira linha com boa pontuação em uma variedade de métricas (veja a tabela abaixo). Ele apresenta uma janela de contexto de 32.000 tokens (cerca de 24.000 palavras), permitindo que ele se envolva em raciocínios complexos em conversas extensas. É também o modelo que exige mais computação dos modelos oferecidos pelo Snowflake Cortex e, portanto, o mais caro de operar.

  • mixtral-8x7b fornece baixa latência e resultados de alta qualidade, além de oferecer suporte a um comprimento de contexto de 32.000 tokens. É ideal para muitos casos de uso de produção empresarial.

  • llama2-70b-chat é adequado para tarefas complexas e de grande escala que exigem uma quantidade moderada de raciocínio, como extrair dados ou ajudá-lo a escrever descrições de cargos.

  • mistral-7b e gemma-7b são capazes de executar tarefas simples com rapidez e melhor eficiência de custos.

    • mistral-7b é ideal para tarefas mais simples de resumo e classificação que exigem um menor grau de personalização. Seu limite de token 32.000 permite processar várias páginas de texto.

    • 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.

Se você não sabe por onde começar, experimente mistral-large primeiro, mesmo que já esteja usando outro modelo de nível superior ou seja novo em LLMs. É o modelo com maior capacidade oferecido pelo Snowflake Cortex e lhe dará uma boa ideia do que um modelo de última geração pode fazer. Seus resultados podem ser usados como base na avaliação de outros modelos.

Para ajudar você a decidir, a tabela a seguir fornece informações sobre o desempenho dos modelos populares em vários benchmarks, incluindo os modelos oferecidos pelo Snowflake Cortex COMPLETE, bem como alguns outros modelos populares.

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.

A função COMPLETE oferece suporte aos modelos a seguir. Diferentes modelos podem ter diferentes custos e cotas.

  • 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).

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

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.

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

SUMMARIZE

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

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

TRANSLATE

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

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

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

O número de solicitações excede o limite. Tente novamente mais tarde.

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

As funções de LLM do Snowflake Cortex estão disponíveis no Snowpark ML versão 1.1.2 e posterior. Consulte Instalação do Snowpark ML para obter instruções sobre como configurar o 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.