API REST d’intégration vectorielle

L’API REST Cortex vous donne accès à un point de terminaison pour exécuter des intégrations vectorielles, à l’aide de la fonction AI_EMBED.

Configuration de l’authentification

Pour vous authentifier auprès de l’API REST de Cortex , vous pouvez utiliser les méthodes décrites dans Authentification d”Snowflake REST APIs avec Snowflake.

Définissez l’en-tête Authorization pour inclure votre jeton (par exemple, un jeton Web JSON (JWT), un jeton OAuth ou un jeton d’accès programmatique).

Astuce

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

Configuration de l’autorisation

Pour envoyer une demande d’API REST, votre rôle par défaut doit se voir accorder le rôle de base de données SNOWFLAKE.CORTEX_USER. Dans la plupart des cas, les utilisateurs disposent déjà de ce privilège, car SNOWFLAKE.CORTEX_USER est accordé au rôle PUBLIC automatiquement et tous les rôles héritent de PUBLIC.

Si votre administrateur Snowflake a révoqué cette autorisation, il doit la réaccorder :

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE my_role;
GRANT ROLE my_role TO USER my_user;

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

Format du point de terminaison

Vous pouvez adresser des requêtes au point de terminaison /api/v2/cortex/inference:embed afin de créer des éléments d’intégration pour votre texte. La requête se présente sous la forme suivante :

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

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

Disponibilité du modèle

Le tableau suivant présente les modèles de fonction EMBED que vous pouvez solliciter à l’aide de l’API REST.

Modèles de fonction EMBED
Modèle
AWS US West 2
(Oregon)
AWS US East 1
(Virginie du Nord)
AWS Europe Central 1
(Francfort)
AWS Europe Ouest 1
(Irlande)
AWS AP Sud-Est 2
(Sydney)
AWS AP Nord-Est 1
(Tokyo)
Azure Est US 2
(Virginie)
Azure Europe de l’Ouest
(Pays-Bas)
snowflake-arctic-embed-m-v1.5

snowflake-arctic-embed-m

e5-base-v2

snowflake-arctic-embed-l-v2.0

Le tableau suivant indique le nombre de dimensions que chaque modèle peut renvoyer.

Modèles de fonction EMBED
Modèle
Nombre de
dimensions
snowflake-arctic-embed-m-v1.5

768

snowflake-arctic-embed-m

768

e5-base-v2

768

snowflake-arctic-embed-l-v2.0

1024

Référence API

POST /api/v2/cortex/inference:embed

Crée une insertion pour le texte que vous spécifiez.

En-têtes obligatoires

Authorization: Bearer token.

Autorisation pour la demande. token est un jeton Web JSON (JWT), un jeton OAuth ou un jeton d’accès programmatique). Pour plus de détails, voir Authentification d”Snowflake REST APIs avec Snowflake.

Content-Type: application/json

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

Accept: application/json

Spécifie que la réponse contient JSON.

En-têtes facultatifs

X-Snowflake-Authorization-Token-Type: type

Définit le type de jeton d’autorisation.

Si vous omettez l’en-tête X-Snowflake-Authorization-Token-Type, Snowflake détermine le type de jeton en examinant le jeton.

Bien que cet en-tête soit facultatif, vous pouvez choisir de le spécifier. Vous pouvez définir l’en-tête sur l’une des valeurs suivantes :

Arguments JSON obligatoires

Argument

Type

Description

text

tableau

Une liste de chaînes de texte pour lesquelles vous générez des intégrations. La liste peut contenir jusqu’à 1 280 chaînes, chacune pouvant comporter jusqu’à 4 096 caractères.

model

string

Le modèle que vous utilisez pour créer les intégrations.

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 schema validation failed

Erreurs liées à une structure incorrecte du schéma de réponse. Corrigez le schéma et réessayez.

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 embed timed out

La requête a pris trop de temps.

Exemple de requête CURL

L’exemple suivant utilise curl pour effectuer une requête EMBED vers le modèle e5-base-v2. Remplacez token et account_identifier avec les valeurs appropriées dans cette commande.

curl --location "<account_url>/api/v2/cortex/inference:embed" \
--header 'X-Snowflake-Authorization-Token-Type: KEYPAIR_JWT' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer <token>" \
--data '{
"text": ["foo", "bar"],
"model": "e5-base-v2"
}'

Sortie

Voici la sortie de la requête, avec le contenu du tableau d’intégration tronqué :

{
  "object" : "list",
  "data" : [ {
    "object" : "embedding",
    "embedding" : [ [ -0.02102863, 0.0051381723, -0.0071509206, -0.032512695, 0.056507032, ... ] ],
    "index" : 0
  }, {
    "object" : "embedding",
    "embedding" : [ [ -0.03859099, -0.0025452692, 0.002827513, -0.023107057, 0.039019972, ... ] ],
    "index" : 1
  } ],
  "model" : "e5-base-v2",
  "usage" : {
    "total_tokens" : 6
  }
}

Chaque intégration possède un index qui correspond à la chaîne de texte dans une liste de la requête. L’index est basé sur 0, de sorte que la première chaîne de texte de la liste a un index de 0, la deuxième chaîne de texte a un index de 1, et ainsi de suite.

Dans l’exemple précédent, « foo » correspond à l’index 0 et « bar » à l’index 1. L’intégration de « foo » est le premier élément de la liste des intégrations, et l’intégration de « bar » est le deuxième élément de la liste des intégrations.

Exemple de requête Python

L’exemple suivant utilise l’API de Python pour effectuer une requête EMBED vers le modèle e5-base-v2. Remplacez token et account_identifier avec les valeurs appropriées dans cette commande.

from snowflake.core import Root
from snowflake.snowpark.context import get_active_session

def embed_service():
    # Initialize Snowflake session and root
    session = get_active_session()
    root = Root(session)

    # Send embed_request request and process response
    response = root.cortex_embed_service.embed("e5-base-v2", ['foo', 'bar'])
    print(response)

if __name__ == "__main__":
    embed_service()

Sortie

Voici la sortie de la requête, avec le contenu du tableau d’intégration tronqué :

{
  "object" : "list",
  "data" : [ {
    "object" : "embedding",
    "embedding" : [ [ -0.02102863, 0.0051381723, -0.0071509206, -0.032512695, 0.056507032, ... ] ],
    "index" : 0
  }, {
    "object" : "embedding",
    "embedding" : [ [ -0.03859099, -0.0025452692, 0.002827513, -0.023107057, 0.039019972, ... ] ],
    "index" : 1
  } ],
  "model" : "e5-base-v2",
  "usage" : {
    "total_tokens" : 6
  }
}

Chaque intégration possède un index qui correspond à la chaîne de texte dans une liste de la requête. L’index est basé sur 0, de sorte que la première chaîne de texte de la liste a un index de 0, la deuxième chaîne de texte a un index de 1, et ainsi de suite.

Dans l’exemple précédent, « foo » correspond à l’index 0 et « bar » à l’index 1. L’intégration de « foo » est le premier élément de la liste des intégrations, et l’intégration de « bar » est le deuxième élément de la liste des intégrations.

Quotas d’utilisation

Le tableau suivant indique les quotas d’utilisation de la fonction EMBED.

Quotas de la fonction EMBED
Modèle
Jetons traités
par minute (TPM)
Requêtes par
Minute (RPM)
Sortie maximale (jetons)
snowflake-arctic-embed-m-v1.5

400,000

200

4,096

snowflake-arctic-embed-m

400,000

200

4,096

e5-base-v2

400,000

200

4,096

nv-embed-qa-4

400,000

200

4,096

multilingual-e5-large

400,000

200

4,096

voyage-multilingual-2

400,000

200

4,096