API REST de LLM Cortex

As funções baseadas em LLM do Snowflake Cortex fornecem recursos de processamento de linguagem natural alimentados por uma variedade de grandes modelos de linguagem (LLMs) usando SQL ou Python. Para obter mais informações, consulte Funções de Large Language Model (LLM) (Snowflake Cortex).

O Snowflake Cortex LLM REST API dá acesso à função COMPLETE a partir de qualquer linguagem de programação que possa fazer solicitações HTTP POST, permitindo que você traga funcionalidade de AI de última geração para seus aplicativos. Para usar isso API, não é necessário um warehouse.

O Cortex LLMRESTAPI transmite os tokens gerados de volta ao usuário como eventos enviados pelo servidor.

Considerações sobre custo

As solicitações do Snowflake Cortex LLM REST API incorrem em custos de computação com base no número de tokens processados. Consulte a Tabela de consumo do serviço Snowflake para o custo de cada função em créditos por milhão de tokens. 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.

A função COMPLETE gera um novo texto a partir de um prompt de entrada. Tanto os tokens de entrada quanto os de saída incorrem em custo de computação. Se você usa COMPLETE para fornecer uma experiência de usuário de conversação ou bate-papo, todos os prompts e respostas anteriores são processados para gerar cada nova resposta, com custos correspondentes.

Cotas de uso

Para garantir um alto padrão de desempenho para todos os clientes do Snowflake, as solicitações do Snowflake Cortex LLM REST API 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 e são aplicadas independentemente para cada modelo.

Função
(Modelo)
Tokens processados
por minuto (TPM)
Solicitações por
Minuto (RPM)
COMPLETE
(llama2-70b-chat)

200,000

100

COMPLETE
(llama3-8b)

400,000

200

COMPLETE
(llama3-70b)

200,000

100

COMPLETE
(llama3.1-8b)

400,000

200

COMPLETE
(llama3.1-70b)

200,000

100

COMPLETE
(llama3.1-405b)

100,000

50

COMPLETE
(reka-core)

200,000

100

COMPLETE
(reka-flash)

200,000

100

COMPLETE
(mistral-large)

200,000

100

COMPLETE
(mixtral-8x7b)

200,000

100

COMPLETE
(mistral-7b)

400,000

200

COMPLETE
(jamba-instruct)

100,000

50

COMPLETE
(gemma-7b)

400,000

200

Ponto de extremidade COMPLETE

O ponto de extremidade /api/v2/cortex/inference:complete executa a função SQL COMPLETE. Ele assume a forma:

POST https://<account_identifier>.snowflakecomputing.com/api/v2/cortex/inference:complete

em que account_identifier é o identificador de conta que você usa para acessar o Snowsight.

Nota

Atualmente, apenas a função COMPLETE é suportada. Funções adicionais podem ser suportadas em uma versão futura do Cortex LLM REST API.

Configuração da autenticação

A autenticação no Cortex LLM REST API usa autenticação de par de chaves.. Isso requer a criação de um par de chaves RSA e a atribuição de sua chave pública a um usuário, o que deve ser feito usando a função SECURITYADMIN (ou outra função que tenha recebido SECURITYADMIN, como ACCOUNTADMIN). Para obter instruções passo a passo, consulte Configuração da autenticação do par de chaves.

Dica

Considere criar um usuário dedicado para solicitações do Cortex LLM REST API.

Para fazer solicitações de API, use a chave pública para criar um token JSON Web (JWT) e passá-lo em seus cabeçalhos da solicitação.

Configuração da autorização

Depois de criar um par de chaves e atribuir sua chave pública a um usuário, a função padrão desse usuário precisa ter a função de banco de dados snowflake.cortex_user, que contém os privilégios para usar as funções de LLM. Na maioria dos casos, os usuários já têm esse privilégio, porque ele é concedido à função PUBLIC automaticamente, e todas as funções herdam PUBLIC.

Se o administrador do Snowflake preferir aceitar usuários individuais, ele poderá ter revogado snowflake.cortex_user de PUBLIC e deverá conceder essa função aos usuários que devem poder usar o Cortex LLM REST API da seguinte maneira.

GRANT DATABASE ROLE snowflake.cortex_user TO ROLE MY_ROLE;
GRANT ROLE MY_ROLE TO USER MY_USER;
Copy

Importante

As solicitações REST API usam a função padrão do usuário, portanto, essa função deve ter os privilégios necessários. Você pode alterar a função padrão de um usuário com ALTER USER … SET DEFAULT ROLE.

ALTER USER MY_USER SET DEFAULT_ROLE=MY_ROLE
Copy

Envio de solicitações

Você faz uma solicitação ao Cortex LLM REST API pelo POSTing para o ponto de extremidade REST da API. O cabeçalho Authorization deve conter um token JSON Web gerado a partir da sua chave pública, o que você pode fazer usando snowsql pelo seguinte comando. O JWT gerado expira após uma hora.

snowsql -a <account_identifier> -u <user> --private-key-path <path>/rsa_key.p8 --generate-jwt
Copy

O corpo da solicitação é um objeto JSON que especifica o modelo, o prompt ou histórico de conversas e as opções. Veja a seguinte referência de API para mais detalhes.

Referência de API

POST /api/v2/cortex/inference:complete

Conclui um prompt ou conversa usando o modelo de linguagem grande especificado. O corpo da solicitação é um objeto JSON que contém os argumentos.

Este ponto de extremidade corresponde à função COMPLETE SQL.

Cabeçalhos obrigatórios

X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT

Define o tipo de token de autorização.

Authorization: Bearer jwt.

Autorização para a solicitação. jwt é um token JSON da Web válido.

Content-Type: application/json

Especifica que o corpo da solicitação está no formato JSON.

Accept: application/json, text/event-stream

Especifica que a resposta conterá JSON (caso de erro) ou eventos enviados pelo servidor.

Argumentos JSON exigidos

Argumento

Tipo

Descrição

model

cadeia de caracteres

O identificador do modelo a ser usado (consulte Escolha de um modelo). Deve ser um dos seguintes valores.

  • gemma-7b

  • jamba-1.5-mini

  • jamba-1.5-large

  • jamba-instruct

  • llama2-70b-chat

  • llama3-8b

  • llama3-70b

  • llama3.1-8b

  • llama3.1-70b

  • llama3.1-405b

  • llama3.2-1b

  • llama3.2-3b

  • mistral-large

  • mistral-large2

  • mistral-7b

  • mixtral-8x7b

  • reka-core

  • reka-flash

  • snowflake-arctic

messages

matriz

O histórico de prompt ou conversa a ser usado para gerar uma conclusão. Uma matriz de objetos que representam uma conversa em ordem cronológica. Cada objeto deve conter uma chave content e também pode conter uma chave role.

  • content: uma cadeia de caracteres contendo uma mensagem do sistema, um prompt do usuário ou uma resposta anterior do modelo.

  • role: uma cadeia de caracteres que indica a função da mensagem, uma de 'system', 'user' ou 'assistant'.

Consulte a tabela de funções COMPLETE para obter uma descrição mais detalhada dessas funções.

Para prompts que consistem em uma única mensagem de usuário, role pode ser omitido; então, é assumido como user.

Argumentos JSON opcionais

Argumento

Tipo

Padrão

Descrição

top_p

número

1.0

Um valor de 0 a 1 (inclusive) que controla a diversidade do modelo de linguagem restringindo o definir de tokens possíveis que o modelo produz.

temperature

número

0,0

Um valor de 0 a 1 (inclusive) que controla a aleatoriedade da saída do modelo de linguagem influenciando qual token possível é escolhido em cada etapa.

max_tokens

inteiro

4096

O número máximo de tokens a serem saída. A saída é truncada após esse número de tokens.

Nota

Você pode definir max_tokens com um número maior que 4.096, mas não maior que o limite do modelo. Consulte Restrições de modelo para o limite de token de cada modelo.

Saída

Os tokens são enviados à medida que são gerados usando eventos enviados pelo servidor (SSEs). Cada evento SSE usa o tipo message e contém um objeto JSON com a seguinte estrutura.

Chave

Tipo de valor

Descrição

'id'

cadeia de caracteres

ID único da solicitação, o mesmo valor para todos os eventos enviados em resposta à solicitação.

'created'

número

Carimbo de data/hora UNIX (segundos desde meia-noite de 1 de janeiro de 1970) quando a resposta foi gerada.

'model'

cadeia de caracteres

Identificador do modelo.

'choices'

matriz

As respostas do modelo. Cada resposta é um objeto que contém uma chave 'delta' cujo valor é um objeto, cuja chave 'content' contém os novos tokens gerados pelo modelo. Atualmente, apenas uma resposta é fornecida.

Códigos de status

O Snowflake Cortex LLM REST API usa os seguintes códigos de status HTTP para indicar conclusão bem-sucedida ou várias condições de erro.

200 OK

Solicitação concluída com sucesso. O corpo da resposta contém a saída do modelo.

400 invalid options object

Os argumentos opcionais têm valores inválidos.

400 unknown model model_name

O modelo especificado não existe.

400 max tokens of count exceeded

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

400 all requests were throttled by remote service

A solicitação foi limitada devido ao alto nível de utilização. Tente novamente mais tarde.

402 budget exceeded

O orçamento de consumo do modelo foi excedido.

403 Not Authorized

Conta não habilitada para REST API, ou a função padrão para o usuário que efetuou a chamada não tem a função de banco de dados snowflake.cortex_user.

429 too many requests

A solicitação foi rejeitada porque a cota de uso foi excedida. Tente fazer sua solicitação mais tarde.

503 inference timed out

A solicitação demorou muito.

Exemplo

O exemplo a seguir usa curl para fazer uma solicitação COMPLETE. Substitua jwt, prompt e account_identifier pelos valores apropriados nesse comando.

curl -X POST \
    -H 'X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT' \
    -H "Authorization: Bearer <jwt>" \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json, text/event-stream' \
    -d '{
    "model": "mistral-large",
    "messages": [
        {
            "content": "<prompt>"
        }
    ],
    "top_p": 0,
    "temperature": 0
    }' \
https://<account_identifier>.snowflakecomputing.com/api/v2/cortex/inference:complete
Copy

Saída

data: {
data:  "id": "65c5e2ac-529b-461e-8a8c-f80655e6bd3f",
data:  "created": 1723493954,
data:  "model": "mistral-7b",
data:  "choices": [
data:    {
data:      "delta": {
data:        "content": "Cor"
data:        }
data:      }
data:     ],
data:  "usage": {
data:    "prompt_tokens": 57,
data:    "completion_tokens": 1,
data:    "total_tokens": 58
data:  }
data: }

data: {
data:  "id": "65c5e2ac-529b-461e-8a8c-f80655e6bd3f",
data:  "created": 1723493954,
data:  "model": "mistral-7b",
data:  "choices": [
data:    {
data:      "delta": {
data:        "content": "tex"
data:        }
data:      }
data:     ],
data:  "usage": {
data:    "prompt_tokens": 57,
data:    "completion_tokens": 2,
data:    "total_tokens": 59
data:  }
data: }

API de Python

Para instalar a API de Python, use:

pip install snowflake-ml-python
Copy

A API Python está incluído no pacote snowflake-ml-python a partir da versão 1.6.1.

Exemplo

Para usar a API Python, primeiro crie uma sessão Snowflake (consulte Como criar uma sessão para o Snowpark Python). Então chame a API completa. O REST backend é usado somente quando stream=True é especificado.

from snowflake.snowpark import Session
from snowflake.cortex import Complete

session = Session.builder.configs(...).create()

stream = Complete(
  "mistral-7b",
  "What are unique features of the Snowflake SQL dialect?",
  session=session,
  stream=True)

for update in stream:
  print(update)
Copy

Nota

O modo de streaming da API Python atualmente não funciona em procedimentos armazenados e no Snowsight.