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
où 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.
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
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 |
---|---|---|
|
chaîne |
L’identificateur du modèle à utiliser (consultez Choix d’un modèle). Doit être l’une des valeurs suivantes :
|
|
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é
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, |
Arguments JSON facultatifs¶
Argument |
Type |
Par défaut |
Description |
---|---|---|---|
|
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. |
|
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. |
|
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 |
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 |
---|---|---|
|
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. |
|
nombre |
Horodatage UNIX (secondes depuis minuit, 1er janvier 1970) à laquelle la réponse a été générée. |
|
chaîne |
Identificateur du modèle. |
|
tableau |
Les réponses du modèle. Chaque réponse est un objet contenant un clé |
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
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
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)
Note
Le mode streaming de l’API de Python ne fonctionne actuellement pas dans les procédures stockées et dans Snowsight.