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.
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
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 |
---|---|---|
|
cadeia de caracteres |
O identificador do modelo a ser usado (consulte Escolha de um modelo). Deve ser um dos seguintes valores.
|
|
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
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, |
Argumentos JSON opcionais¶
Argumento |
Tipo |
Padrão |
Descrição |
---|---|---|---|
|
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. |
|
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. |
|
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 |
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 |
---|---|---|
|
cadeia de caracteres |
ID único da solicitação, o mesmo valor para todos os eventos enviados em resposta à solicitação. |
|
número |
Carimbo de data/hora UNIX (segundos desde meia-noite de 1 de janeiro de 1970) quando a resposta foi gerada. |
|
cadeia de caracteres |
Identificador do modelo. |
|
matriz |
As respostas do modelo. Cada resposta é um objeto que contém uma chave |
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
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
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)
Nota
O modo de streaming da API Python atualmente não funciona em procedimentos armazenados e no Snowsight.