Cortex LLM REST API

Les fonctions LLM de Snowflake Cortex fournissent des fonctionnalités de traitement du langage naturel alimentées par une variété de grands modèles de langage (LLMs) en utilisant SQL ou Python. Pour plus d’informations, voir Fonctions Large Language Model (LLM) (Cortex de Snowflake).

Le Snowflake Cortex LLM REST API vous donne accès à la fonction COMPLETE à partir de n’importe quel langage de programmation qui peut effectuer des requêtes HTTP POST, vous permettant d’apporter des fonctionnalités AI de pointe à vos applications. Utiliser cette API ne nécessite pas d’entrepôt.

Le cortex LLM REST API renvoie les jetons générés à l’utilisateur sous forme d’événements envoyés par le serveur.

Considérations relatives aux clients

Les requêtes Snowflake Cortex LLMRESTAPI ont un coût de calcul basé sur le nombre de jetons traités. Reportez-vous à la table de consommation des services Snowflake pour le coût de chaque fonction en crédits par million de jetons. Un jeton est la plus petite unité de texte traitée par les fonctions Snowflake Cortex LLM, correspondant approximativement à quatre caractères de texte. L’équivalence du texte brut d’entrée ou de sortie en jetons peut varier selon le modèle.

La fonction COMPLETE génère un nouveau texte à partir d’une invite de saisie. Les jetons d’entrée et de sortie entraînent tous deux des coûts de calcul. Si vous utilisez COMPLETE pour offrir une expérience utilisateur conversationnelle ou de chat, toutes les invites et réponses précédentes sont traitées pour générer chaque nouvelle réponse, avec les coûts correspondants.

Quotas d’utilisation

Afin de garantir un niveau de performance élevé à tous les clients de Snowflake, les requêtes Snowflake Cortex LLMRESTAPI sont soumises à des quotas d’utilisation au-delà desquels les requêtes peuvent être limitées. Snowflake peut ajuster ces quotas de temps à autre. Les quotas indiqués dans la table ci-dessous sont appliqués par compte et sont indépendamment appliqués pour chaque modèle.

Fonction
(Modèle)
Jetons traités
par minute (TPM)
Requêtes par
Minute (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

point de terminaison COMPLETE

Le point de terminaison /api/v2/cortex/inference:complete exécute la fonction SQL COMPLETE. Cela prend la forme :

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

account_identifier est le l’identificateur de compte que vous utilisez pour accéder à Snowsight.

Note

Actuellement, seule la fonction COMPLETE est prise en charge. Des fonctions supplémentaires pourraient être prises en charge dans une future version du Cortex LLM REST API.

Configuration de l’authentification

L’authentification auprès du Cortex LLM REST API utilise l’authentification par paire de clés. Cela nécessite la création d’une paire de clés RSA et l’attribution de sa clé publique à un utilisateur, ce qui doit être fait à l’aide du rôle SECURITYADMIN (ou un autre rôle auquel SECURITYADMIN a été accordé, comme ACCOUNTADMIN). Pour des instructions étape par étape, consultez Configuration de l’authentification par paire de clés.

Astuce

Envisagez de créer un utilisateur dédié pour les requêtes Cortex LLM REST API.

Pour effectuer des requêtes API, utilisez la clé publique pour créer un Jeton Web JSON (JWT) et transmettez-le dans les en-têtes de la requête.

Configuration de l’autorisation

Une fois que vous avez créé une paire de clés et attribué sa clé publique à un utilisateur, le rôle par défaut de cet utilisateur doit avoir le rôle de base de données snowflake.cortex_user, qui contient les privilèges permettant d’utiliser les fonctions LLM. Dans la plupart des cas, les utilisateurs disposent déjà de ce privilège, car il est accordé au rôle PUBLIC automatiquement, et tous les rôles héritent de PUBLIC.

Si votre administrateur Snowflake préfère inscrire des utilisateurs individuels, il ou elle a peut-être révoqué snowflake.cortex_user du rôle PUBLIC, et doit accorder ce rôle aux utilisateurs qui devraient pouvoir utiliser le Cortex LLM REST API comme suit.

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

Important

Les requêtes REST API utilisent le rôle par défaut de l’utilisateur, donc ce rôle doit disposer des privilèges nécessaires. Vous pouvez modifier le rôle par défaut d’un utilisateur avec ALTER USER … SET DEFAULT ROLE.

ALTER USER MY_USER SET DEFAULT_ROLE=MY_ROLE
Copy

Soumission de requêtes

Vous faites une demande au Cortex LLM REST API par POSTing au point de terminaison de l’API REST. L’en-tête Authorization doit contenir un Jeton JSON Web généré à partir de votre clé publique, ce que vous pouvez faire en utilisant snowsql via la commande suivante. Le JWT généré expire après une heure.

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

Le corps de la requête est un objet JSON qui spécifie le modèle, l’historique des invites ou des conversations et les options. Consultez les références API suivantes pour plus de détails.

Référence API

POST /api/v2/cortex/inference:complete

Termine une invite ou une conversation en utilisant le modèle de langage volumineux spécifié. Le corps de la requête est un objet JSON contenant les arguments.

Ce point de terminaison correspond à la fonction COMPLETE SQL.

En-têtes obligatoires

X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT

Définit le type de jeton d’autorisation.

Authorization: Bearer jwt.

Autorisation de la requête. jwt est un Jeton JSON Web valide.

Content-Type: application/json

Spécifie que le corps de la requête est en format JSON.

Accept: application/json, text/event-stream

Spécifie que la réponse contiendra soit du JSON (en cas d’erreur), soit des événements envoyés par le serveur.

Arguments JSON obligatoires

Argument

Type

Description

model

chaîne

L’identificateur du modèle à utiliser (consultez Choix d’un modèle). Doit être l’une des valeurs suivantes :

  • 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

tableau

L’invite ou l’historique de la conversation à utiliser pour générer un achèvement. Un tableau d’objets représentant une conversation dans l’ordre chronologique. Chaque objet doit contenir une clé content et peut aussi contenir une clé role.

  • content : Une chaîne contenant un message système, une invite de l’utilisateur ou une réponse précédente du modèle.

  • role : Une chaîne indiquant le rôle du message, l’un de 'system', 'user', ou 'assistant'.

Consultez la table COMPLETE des rôles pour une description plus détaillée de ces rôles.

Pour les invites constituées d’un seul message utilisateur, role peut être omis ; il est alors supposé être user.

Arguments JSON facultatifs

Argument

Type

Par défaut

Description

top_p

nombre

1,0

Une valeur comprise entre 0 et 1 (inclus) qui contrôle la diversité du modèle de langage en limitant l’ensemble des jetons possibles que le modèle génère.

temperature

nombre

0,0

Une valeur comprise entre 0 et 1 (inclusivement) qui contrôle le caractère aléatoire de la sortie du modèle de langage en influençant quel jeton possible est choisi à chaque étape.

max_tokens

entier

4096

Le nombre maximal de jetons à générer. La sortie est tronquée après ce nombre de jetons.

Note

Vous pouvez définir max_tokens à un nombre supérieur à 4 096, mais pas supérieur à la limite du modèle. Consultez Restrictions du modèle pour la limite de jetons de chaque modèle.

Sortie

Les jetons sont envoyés au fur et à mesure qu’ils sont générés à l’aide d’événements envoyés par le serveur (SSEs). Chaque événement SSE utilise le type message et contient un objet JSON avec la structure suivante.

Clé

Value type

Description

'id'

chaîne

ID unique de la requête, la même valeur pour tous les événements envoyés en réponse à la requête.

'created'

nombre

Horodatage UNIX (secondes depuis minuit, 1er janvier 1970) à laquelle la réponse a été générée.

'model'

chaîne

Identificateur du modèle.

'choices'

tableau

Les réponses du modèle. Chaque réponse est un objet contenant un clé 'delta' dont la valeur est un objet, dont la clé 'content' contient les nouveaux jetons générés par le modèle. Actuellement, une seule réponse est fournie.

Codes de statut

Le Snowflake Cortex LLM REST API utilise les codes de statut HTTP pour indiquer la réussite ou diverses conditions d’erreur.

200 OK

La requête a été complétée avec succès. Le corps de la réponse contient la sortie du modèle.

400 invalid options object

Les arguments facultatifs ont des valeurs non valides.

400 unknown model model_name

Le modèle spécifié n’existe pas.

400 max tokens of count exceeded

La requête a dépassé le nombre maximum de jetons pris en charge par le modèle (voir Restrictions du modèle).

400 all requests were throttled by remote service

La requête a été limitée en raison d’un niveau d’utilisation élevé. Veuillez réessayer plus tard.

402 budget exceeded

Le budget de consommation du modèle a été dépassé.

403 Not Authorized

Compte non activé pour REST API, ou le rôle par défaut de l’utilisateur appelant n’a pas le rôle de base de données snowflake.cortex_user.

429 too many requests

La demande a été rejetée car le quota d’utilisation a été dépassé. Veuillez réessayer votre requête plus tard.

503 inference timed out

La requête a pris trop de temps.

Exemple

L’exemple suivant utilise curl pour effectuer une requête COMPLETE. Remplacer jwt, prompt, et account_identifier avec les valeurs appropriées dans cette commande.

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

Sortie

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: }

Python API

Pour installer l’API Python, utiliser :

pip install snowflake-ml-python
Copy

L’API Python est incluse dans le paquet snowflake-ml-python avec la version 1.6.1.

Exemple

Pour utiliser l’API Python, créez d’abord une session Snowflake (consultez Création d’une session pour Snowpark Python). Appelez ensuite l’API Complete. Le back-end REST est utilisé uniquement lorsque stream=True est spécifié.

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

Note

Le mode streaming de l’API de Python ne fonctionne actuellement pas dans les procédures stockées et dans Snowsight.