Cortex AISQL Images

Avec Cortex AI Images, vous pouvez accomplir les tâches suivantes :

  • Comparer des images

  • Ajouter une légende à des images

  • Classer des images

  • Extraire des entités à partir d’images

  • Générer des vecteurs d’intégration à utiliser dans des systèmes de récupération

  • Répondre aux questions en utilisant des données dans des graphiques et des tables

Vous pouvez effectuer ces tâches à l’aide des fonctions suivantes :

Exigences en matière d’entrées

COMPLETE Multimodal peut traiter des images présentant les caractéristiques suivantes :

Exigence

Valeur

Extensions de noms de fichiers

.jpg, .jpeg, .png, .webp, .gif

Chiffrement de la zone de préparation

Chiffrement côté serveur

Type de données

FILE

Note

Le traitement des fichiers à partir des zones de préparation est actuellement incompatible avec les politiques réseau personnalisées.

Créer une zone de préparation pour le traitement des images

Créez une zone de préparation adaptée au stockage des images à traiter. La zone de préparation doit disposer d’une table de répertoire et d’un chiffrement côté serveur.

Le SQL ci-dessous permet de créer une zone de préparation interne adaptée.

CREATE OR REPLACE STAGE input_stage
    DIRECTORY = ( ENABLE = true )
    ENCRYPTION = ( TYPE = 'SNOWFLAKE_SSE' );
Copy

Le SQL suivant crée une zone de préparation externe sur Amazon S3. Les zones de préparation externes Azure et GCP sont également prises en charge.

CREATE OR REPLACE STAGE input_stage
    URL='s3://<s3-path>/'
    DIRECTORY = ( ENABLE = true )
    CREDENTIALS = (AWS_KEY_ID = <aws_key_id>
    AWS_SECRET_KEY = <aws_secret_key>)
    ENCRYPTION = ( TYPE = 'AWS_SSE_S3' );
Copy

Note

Pour actualiser automatiquement la table de répertoire de la zone de préparation externe lorsque des fichiers nouveaux ou mis à jour sont disponibles, passez l’option AUTO_REFRESH = true lors de la création de la zone de préparation. Pour plus d’informations, voir CREATE STAGE.

Analyser les images

La fonction COMPLETE traite soit une seule image, soit plusieurs images (par exemple, pour extraire les différences entre les entités sur plusieurs images). L’appel de la fonction spécifie ce qui suit :

  • Le modèle multimodal à utiliser

  • Un prompt

  • Le chemin de la zone de préparation du ou des fichiers image via un objet FILE

Exemple de questions-réponses sur la vision

L’exemple suivant utilise le modèle Claude Sonnet 3.5 d’Anthropic pour résumer un diagramme circulaire science-employment-slide.jpeg stocké dans la zone de préparation @myimages.

Diagramme circulaire montrant la répartition des professions où les mathématiques sont considérées comme "extrêmement importantes" en 2023

Répartition des professions où les mathématiques sont considérées comme « extrêmement importantes » en 2023

SELECT AI_COMPLETE('claude-3-5-sonnet',
    'Summarize the insights from this pie chart in 100 words',
    TO_FILE('@myimages', 'science-employment-slide.jpeg'));
Copy

Réponse :

This pie chart shows the distribution of occupations where mathematics is considered "extremely important" in 2023.
Data scientists dominate with nearly half (48.7%) of all such positions, followed by operations research analysts
at 29.6%. The remaining positions are distributed among statisticians (7.8%), actuaries (7.2%), physicists (5.1%),
mathematicians (0.6%), and other mathematical science occupations (1.1%). This distribution highlights the growing
importance of data science in mathematics-intensive careers, while traditional mathematics roles represent a smaller
share of the workforce.

Exemple de comparaison d’images

Note

Actuellement, seuls les modèles Anthropic (claude) et Meta (llama) peuvent faire référence à plusieurs images dans un seul prompt. La prise en charge de plusieurs images pour d’autres modèles pourrait être disponible dans une prochaine version.

Utilisez la fonction d’aide PROMPT pour traiter plusieurs images en un seul appel COMPLETE. L’exemple suivant utilise le modèle Claude Sonnet 3.5 d’Anthropic pour comparer deux créations publicitaires différentes à partir de la zone de préparation @myimages.

Images de deux publicités pour des voitures électriques

Image de deux publicités pour des voitures électriques

SELECT AI_COMPLETE('claude-3-5-sonnet',
    PROMPT('Compare this image {0} to this image {1} and describe the ideal audience for each in two concise bullets no longer than 10 words',
    TO_FILE('@myimages', 'adcreative_1.png'),
    TO_FILE('@myimages', 'adcreative_2.png')
));
Copy

Réponse :

First image ("Discover a New Energy"):
• Conservative luxury SUV buyers seeking a subtle transition to electrification

Second image ("Electrify Your Drive"):
• Young, tech-savvy urbanites attracted to bold, progressive automotive design

Exemple de catégorisation des images

l’exemple suivant utilise AI_CLASSIFY pour catégoriser une image pour une application immobilière.

Image d’un salon mis en scène pour l’immobilier

le SQL suivant utilise la fonction AI_CLASSIFY pour catégoriser l’image en tant qu’image d’un espace de vie, d’une cuisine, d’une salle de bain, d’un jardin ou d’une suite parentale.

SELECT AI_CLASSIFY(TO_FILE('@my_images', 'REAL_ESTATE_STAGING.PNG'),
    ['Living Area', 'Kitchen', 'Bath', 'Garden', 'Master Bedroom']) AS room_classification;
Copy

Réponse :

{ "labels": [ "Living Area" ] }

le SQL ci-dessous catégorise les objets trouvés dans l’image ci-dessus comme un canapé, une fenêtre, une table, une télé ou une œuvre d’art.

SELECT AI_CLASSIFY (TO_FILE ('@my_images', 'REAL_ESTATE_STAGING.PNG'),
    ['Couch', 'Window', 'Table', 'Television', 'Art'],  {'output_mode': 'multi'} )
    AS living_room_objects;
Copy

Réponse :

{
  "labels": [
    "Art",
    "Couch",
    "Table",
    "Window"
  ]
}

Rechercher des images

Vous pouvez utiliser AI_EMBED pour rechercher des images similaires à une image cible. tout d’abord, utilisez la fonction AI_EMBED pour générer un vecteur d’intégration pour l’image cible, mappant ses caractéristiques visuelles dans un espace vectoriel abstrait, une représentation numérique des caractéristiques de l’image. Vous pouvez ensuite utiliser des fonctions de similarité vectorielle pour comparer ce vecteur d’intégration aux vecteurs d’intégration d’autres images, et produire un score de similarité basé sur leurs caractéristiques visuelles communes ou similaires. Ce score peut être utilisé pour catégoriser, classer ou filtrer les images en fonction de leur similarité avec l’image cible.

Image de groupe de personnes dans une ville
Image de groupe de personnes dans une ville

par exemple, au vu des images ci-dessus, le SQL suivant génère un vecteur d’intégration pour chaque image, puis compare les vecteurs à l’aide de la similarité cosinus. Le résultat, environ 0,5, indique que les images sont relativement similaires. Les deux clichés sont pris en ville, et montrent des foules en arrière-plan, mais les sujets principaux sont différents.

WITH ai_image_embeddings as (
    SELECT
        AI_EMBED('voyage-multimodal-3',
            TO_FILE ('@my_images', 'CITY_WALKING1.PNG')) as image1_embeddings,
        AI_EMBED('voyage-multimodal-3',
            TO_FILE ('@my_images', 'CITY_WALKING2.PNG')) as image2_embeddings
)
SELECT VECTOR_COSINE_SIMILARITY(image1_embeddings,image2_embeddings) as similarity FROM ai_image_embeddings;
Copy
0.5359029029

Pour trouver des images similaires à une image cible, vous pouvez utiliser AI_SIMILARITY. L’exemple ci-dessous calcule un score de similarité pour éventuellement des milliers d’images et renvoie les créations publicitaires les plus similaires à la publicité pour les motos ci-dessous.

Image d’une publicité pour les motos pour la recherche d’images
SELECT
    TO_FILE('@ad_images', relative_path) as ALL_ADS
    FROM DIRECTORY(@ad_images)
WHERE AI_SIMILARITY(TO_FILE('@ad_images', 'image_226.jpg'), ALL_ADS) >= 0.5;
Copy

La requête renvoie les images depuis une table multimodale dont le score de similarité est supérieur à 0,50. Une des images identifiées (image_226.jpg) est celle que nous avons utilisée comme référence.

+-----------------------------------------------------------+
| {} ALL_ADS                                                |
+-----------------------------------------------------------+
|  { "CONTENT_TYPE": "image/jpeg",                          |
|    "ETAG": "686897696a7c876b7e",                          |
|    "LAST_MODIFIED": "Wed, 26 Mar 2025 18:11:45 GMT",      |
|    "RELATIVE_PATH": "image_226.jpg",                      |
|    "SIZE": 39086,                                         |
|    "STAGE": "@ad_images" }                                |
+-----------------------------------------------------------+
|  { "CONTENT_TYPE": "image/jpeg",                          |
|    "ETAG": "e7b678c7a696798686",                          |
|    "LAST_MODIFIED": "Wed, 26 Mar 2025 18:11:57 GMT",      |
|    "RELATIVE_PATH": "image_441.jpg",                      |
|    "SIZE": 12650,                                         |
|    "STAGE": "@ad_images" },                               |
+-----------------------------------------------------------+

Limites du modèle

Tous les modèles disponibles pour Snowflake Cortex ont des limites sur le nombre total de jetons d’entrée et de sortie. C’est ce que l’on appelle la fenêtre contextuelle du modèle. La taille de la fenêtre contextuelle est mesurée en jetons. Les entrées dépassant la limite de la fenêtre contextuelle entraînent une erreur.

Pour les modèles de texte, les jetons représentent généralement environ quatre caractères de texte, de sorte que le nombre de mots correspondant à une limite est inférieur au nombre de jetons.

Pour les modèles d’image, le nombre de jetons par image dépend de l’architecture du modèle de vision. Les jetons contenus dans un prompt (par exemple, « Quel est cet animal ? ») contribuent également à la fenêtre contextuelle du modèle.

Modèle

Fenêtre contextuelle (jetons)

Types de fichiers

Taille du fichier

Images par prompt

openai-gpt-4.1

1,047,576

.jpg, .jpeg, .png, .webp, .gif

10MB

5

openai-o4-mini

1,047,576

.jpg, .jpeg, .png, .webp, .gif

10MB

5

claude-4-opus

200,000

.jpg, .jpeg, .png, .webp, .gif

3,75 MB [L1]

20

claude-4-sonnet

200,000

.jpg, .jpeg, .png, .webp, .gif

3,75 MB [L1]

20

claude-3-7-sonnet

200,000

.jpg, .jpeg, .png, .webp, .gif

3,75 MB [L1]

20

claude-3-5-sonnet

200,000

.jpg, .jpeg, .png, .webp, .gif

3,75 MB [L1]

20

llama4-maverick

128,000

.jpg, .jpeg, .png, .webp, .gif, .bmp

10 MB

10

llama-4-scout

128,000

.jpg, .jpeg, .png, .webp, .gif, .bmp

10 MB

10

pixtral-large

128,000

.jpg, .jpeg, .png, .webp, .gif, .bmp

10 MB

1

voyage-multimodal-3

32,768

.jpg, .png, .pg, .gif, .bmp

10 MB

1

[L1] (1,2,3,4)

Les images doivent être plus petites que 8 000 x 8 000 pixels. Les limites s’appliquent à chaque image individuelle.

Considérations relatives aux clients

La facturation s’adapte au nombre de jetons traités. Le nombre de jetons par image dépend de l’architecture du modèle de vision.

  • La formule des modèles d’Anthropic (claude) est en gros : jetons = (largeur en pixels x hauteur en pixels) / 750.

  • Les modèles Mistral (pixtral) divisent chaque image en lots de 16 x 16 pixels et convertissent chaque lot en jeton. Le nombre total de jetons équivaut approximativement à (Largeur en pixels / 16) * (Hauteur en pixels / 16).

  • Les modèles Meta (llama) tentent de couvrir l’image de vignettes carrées. En fonction du format et de la taille de l’image, le nombre de vignettes peut aller jusqu’à 16, chacune étant représentée par environ 153 jetons.

  • Les modèles Open AI redimensionnent l’image et lui superposent des correctifs carrés. pour openai-gpt-4.1, en fonction du ratio et de la taille de l’image, le nombre de jetons peut être de 211 (images jusqu’à 512x512 px), 352 (images non carrées avec des côtés plus longs 1024 px), ou de 630 jetons (images carrées d’au moins 1024x1024 px) et de 913 jetons (images non carrées avec une longueur de côté plus courte de 1 024 px). Pour openai-o4-mini, la logique de redimensionnement est plus utilisée et le nombre de jetons varie de 86 (128x51 2px) à 1428 (2048x1024 px), et ne suit pas un modèle linéaire.

  • voyage-multimodal-3 cible des correctifs d’images d’une taille d’environ 14x14 px. L’image est redimensionnée de manière à ce qu’elle soit couverte par une grille, qui comporte un minimum de 64 correctifs et un maximum de 2 500 correctifs. Deux jetons d’image supplémentaires sont ajoutés, de sorte que l’entrée va de 66 à 2 502 jetons, en fonction de la taille de l’image et du rapport d’aspect.

Note

La fonction COUNT_TOKENS ne prend pas actuellement en charge les entrées d’images.

Choisir un modèle de vision

La fonction COMPLETE prend en charge plusieurs modèles dont la capacité, le temps de latence et le coût varient. Pour obtenir une performance optimale par crédit, choisissez un modèle adapté à la taille du contenu et à la complexité de la tâche.

Modèle

MMMU

Mathvista

ChartQA

DocVQA

VQAv2

GPT-4o

68,6

64,6

85,1

88,9

77,8

openai-gpt-4.1

75,0

72,0

openai-o4-mini

81,6

84,3

claude-3-5-sonnet

68,0

64,4

87,6

90,3

70,7

llama-4-maverick

73,4

73,7

90

94,4

llama-4-scout

69,4

70,7

88,8

94,4

pixtral-large

64,0

69,4

88,1

85,7

67

Les critères de comparaison sont les suivants :

  • MMMU : Évalue les modèles multimodaux sur des tâches multidisciplinaires qui nécessitent un raisonnement de niveau collégial.

  • Mathvista : Critère de comparaison du raisonnement mathématique dans un contexte visuel.

  • ChartQA: Évalue des questions de raisonnement complexes sur des graphiques.

  • DocVQA et VQv2 : Critères de comparaison pour les questions-réponses visuelles sur des documents.

pour les intégrations multimodales, seul le modèle voyage-multimodal-3 est actuellement disponible. voyage-multimodal-3 est un modèle d’intégration multimodale de pointe capable d’intégrer du texte et des images. il permet d’extraire des fonctionnalités visuelles clés à partir de sources telles que des captures d’écran de PDFs, des diapositives, des tables et des diagrammes, réduisant ainsi la nécessité de workflows complexes d’analyse de documents. Selon les benchmarks internes de Voyage AI, le modèle voyage-multimodal-3 est plus performant que les modèles concurrents tels que OpenAI CLIP Large, Amazon Titan Multimodal et Cohere Multimodal v3.

Disponibilité régionale

Cette fonction est prise en charge nativement pour les comptes des régions Snowflake suivantes :

Modèle
AWS US West 2
(Oregon)
AWS US East 1
(Virginie du Nord)
AWS Europe Central 1
(Francfort)

claude-3-5-sonnet

claude-3-7-sonnet [A1]

claude-4-sonnet [A1]

claude-4-opus [A1]

pixtral-large

llama4-maverick

llama4-scout

voyage-multimodal-3 [A1]

[A1] (1,2,3,4)

Le modèle n’est disponible que par inférence interrégionale.

AI_COMPLETE est disponible dans d’autres régions via l’inférence interrégionale.

Conditions d’erreur

Message

Explication

Échec de la requête pour la fonction externe SYSTEM$COMPLETE_WITH_IMAGE_INTERNAL avec une erreur de service distant : 400 “« invalid image path »

L’extension du fichier ou le fichier lui-même n’est pas accepté par le modèle. Le message peut également signifier que le chemin d’accès au fichier est incorrect, c’est-à-dire que le fichier n’existe pas à l’emplacement spécifié. Les noms de fichiers sont sensibles à la casse.

Erreur dans l’objet sécurisé

Peut indiquer que la zone de préparation n’existe pas. Vérifiez le nom de la zone de préparation et assurez-vous qu’elle existe et est accessible. Veillez à utiliser le signe at (@) au début du chemin de la zone de préparation, par exemple @myimages.

Échec de la requête pour la fonction externe _COMPLETE_WITH_PROMPT avec une erreur de service distant : 400 “« paramètres de requête non valides : format d’image non pris en charge : image/**

Format d’image non pris en charge donné à claude-3-5-sonnet, c’est-à-dire autre que .jpeg, .png, .webp ou .gif.

Échec de la requête pour la fonction externe _COMPLETE_WITH_PROMPT avec une erreur de service distant : 400 “« paramètres de requête non valides : Les données de l’image dépassent la limite de 5 MB »

L’image fournie à claude-3-5-sonnet dépasse 5 MB.