Qu'est-ce que Cortex Analyst ?
Cortex Analyst est le service text-to-SQL entièrement managé de Snowflake : il permet aux utilisateurs métier de poser des questions en langage naturel et d'obtenir des réponses générées par SQL sans écrire la moindre requête. Deux modes d'interaction sont possibles : via Snowflake Intelligence (l'interface d'agent IA intégrée à Snowflake), ou via l'API REST que vous intégrez à vos applications maison (applications Streamlit, bots Slack, Microsoft Teams, interfaces de chat web sur mesure ou tout autre outil métier déjà utilisé par vos équipes). Le service s'appuie sur de grands modèles de langage — principalement Claude Sonnet, Mistral Large et Llama — et exploite des modèles sémantiques pour comprendre votre contexte métier.
Ce guide vous propose un tour d'horizon de Cortex Analyst, puis détaille comment en suivre et maîtriser les coûts.
Comment fonctionne Cortex Analyst ?
Cortex Analyst transforme les questions en langage naturel en requêtes SQL précises en combinant grands modèles de langage et modèles sémantiques. Le modèle sémantique fait le pont entre la terminologie métier et les schémas de base de données, en apportant au LLM le contexte nécessaire pour générer un SQL correct.
Créer des modèles sémantiques
Deux options s'offrent à vous pour créer des modèles sémantiques :
- Passer par l'assistant Snowsight : rendez-vous dans AI & ML " Cortex Analyst dans Snowsight et suivez la configuration guidée pour créer une vue sémantique. L'assistant vous accompagne dans la sélection des tables, la définition des dimensions et des métriques, et l'ajout d'exemples de questions. C'est la voie la plus simple pour démarrer.
- Téléverser un fichier YAML sur un stage : si vous préférez définir votre modèle sémantique sous forme de code, créez un fichier YAML conforme à la spécification du modèle sémantique et téléversez-le sur un stage Snowflake.
Les deux approches sont compatibles avec Cortex Analyst. L'assistant crée une vue sémantique (un objet au niveau du schéma), tandis que l'approche YAML stocke le fichier modèle dans un stage.
Utiliser Cortex Analyst
Une fois votre modèle sémantique prêt, ouvrez l'accès aux utilisateurs :
-- Accorder le rôle CORTEX_USER aux utilisateurs qui en ont besoin
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE analyst_role;
Ensuite, depuis votre application, appelez l'API Cortex Analyst avec une question en langage naturel :
1import requests
2import json
3
4response = requests.post(
5 f"https://{account}.snowflakecomputing.com/api/v2/cortex/analyst/message",
6 headers={
7 "Authorization": f"Bearer {token}",
8 "Content-Type": "application/json"
9 },
10 json={
11 "messages": [{\
\
12 "role": "user",\
\
13 "content": [{\
\
14 "type": "text",\
\
15 "text": "Quels ont été nos 5 meilleurs produits par chiffre d'affaires au dernier trimestre ?"\
```\
\
Dérouler le code\
\
Cortex Analyst prend en charge les conversations multi-tours : les utilisateurs peuvent enchaîner des questions de suivi qui s'appuient sur les requêtes précédentes.\
\
Pour utiliser Cortex Analyst dans Snowflake Intelligence, vous devrez également créer un agent. Le sujet est traité [ici](/blog/snowflake-intelligence-overview-pricing-cost-monitoring).\
\
Comment fonctionne la tarification de Cortex Analyst ?\
Cortex Analyst applique une tarification au message, et non au token. Seules les réponses HTTP 200 réussies sont facturables, et le coût est identique quel que soit le nombre de tokens dans chaque message. Selon le Snowflake Service Consumption Table, chaque message coûte un nombre fixe de crédits. Actuellement, le tarif est de 6,7 crédits pour 100 messages.
Les deux principaux facteurs de coût :
\
- Chaque requête en langage naturel = 1 message : poser la question Quel est mon chiffre d'affaires ? correspond à un message facturable.\
- À 3 $ le crédit, 10 questions reviennent à 2 $. La facture peut sembler grimper vite, mais il faut la mettre en regard de la valeur métier obtenue. L'objectif n'est pas toujours de minimiser les dépenses Snowflake, mais bien de maximiser la valeur métier.\
- Coûts de warehouse liés à l'exécution SQL : le coût du message ne couvre que la génération text-to-SQL par l'IA. Des coûts de calcul supplémentaires s'appliquent lors de l'exécution du SQL généré.
\
Comment suivre l'utilisation de Cortex Analyst\
Snowflake propose une vue principale pour suivre les coûts de Cortex Analyst :
CORTEX_ANALYST_USAGE_HISTORY : les données sont agrégées par tranches horaires et ne contiennent donc pas l'ID de requête.
Cette vue affiche la consommation de crédits pour Cortex Analyst, agrégée par tranches d'une heure. Elle indique le nombre de messages et de crédits consommés par utilisateur.
\
1-- Visualiser l'utilisation quotidienne de Cortex Analyst par utilisateur sur les 30 derniers jours\
\
2SELECT\
\
3 DATE_TRUNC('day', START_TIME) AS usage_date,\
\
4 USERNAME,\
\
5 SUM(REQUEST_COUNT) AS total_messages,\
\
6 SUM(CREDITS) AS total_credits\
\
7FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_ANALYST_USAGE_HISTORY\
\
8WHERE START_TIME >= DATEADD('day', -30, CURRENT_TIMESTAMP())\
\
9GROUP BY 1, 2\
\
10ORDER BY total_credits DESC;\
```\
\
La vue inclut START\_TIME, END\_TIME, REQUEST\_COUNT (nombre de messages), CREDITS consommés et USERNAME. Vous disposez ainsi d'une visibilité par utilisateur sur ceux qui génèrent les coûts de Cortex Analyst. La vue METERING\_HISTORY peut être filtrée avec `WHERE SERVICE_TYPE = 'AI_SERVICES'`, mais elle peut englober d'autres coûts que ceux de Cortex Analyst.\
\
### Suivre les coûts de warehouse liés à l'exécution SQL\
\
Plusieurs options s'offrent à vous : utiliser un warehouse, un utilisateur ou un rôle dédié, ou encore taguer les requêtes initiées par votre application Cortex Analyst. La logique est la même que pour toute attribution de requête : choisissez ce qui convient le mieux à votre organisation.\
\
Bonnes pratiques et recommandations pour utiliser Cortex Analyst\
\
Mettez en place des alertes, pas seulement des dashboards\
Les requêtes de monitoring ci-dessus ne servent à rien si personne ne les exécute. Pour toute métrique que vous voulez surveiller dans Snowflake, vous pouvez encapsuler le SQL dans une tâche planifiée associée à une Notification Integration, et ainsi créer un moniteur personnalisé qui envoie des alertes vers Slack ou Teams. Pour une expérience de monitoring vraiment simple à prendre en main, jetez un œil aux monitors de SELECT.
\
Contrôlez les accès via les rôles\
Par défaut, le rôle CORTEX_USER est accordé au rôle PUBLIC : tous les utilisateurs y ont donc accès. Si vous ne souhaitez pas un accès universel, révoquez-le à PUBLIC et accordez-le à des rôles spécifiques :
-- Restreindre Cortex Analyst à certaines équipes
USE ROLE ACCOUNTADMIN;
REVOKE DATABASE ROLE SNOWFLAKE.CORTEX_USER FROM ROLE PUBLIC;
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE data_analysts;
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE finance_team;
Ce simple changement évite une prolifération incontrôlée à l'échelle de toute l'organisation.
\
Optimisez vos modèles sémantiques\
Un modèle sémantique bien conçu réduit le nombre de nouvelles tentatives et de requêtes en échec. Concentrez-vous sur un domaine métier précis plutôt que d'exposer des bases de données entières. Incluez des requêtes vérifiées pour les questions courantes afin d'améliorer la précision. Vous réduisez ainsi les appels API inutiles et améliorez l'expérience utilisateur.
Ajoutez des dépôts de requêtes vérifiées. Il s'agit d'exemples de questions associées à un SQL validé, qui améliorent nettement la précision. Lorsque les utilisateurs posent des questions similaires, Cortex Analyst peut s'appuyer sur ces exemples :
\
1verified_queries:\
\
2 - name: "chiffre d'affaires total dernier trimestre"\
\
3 question: "Quel a été le chiffre d'affaires total au Q4 ?"\
\
4 sql: |\
\
5 SELECT SUM(revenue_amount)\
\
6 FROM fact_sales\
\
7 WHERE sale_date >= '2024-10-01'\
\
8 AND sale_date < '2025-01-01'\
\
9 verified_result: 1250000.00\
```\
\
**Utilisez des noms parlants et ajoutez des synonymes**. Si votre table s'appelle `dim_product_category_master`, définissez-la avec des noms compréhensibles pour le métier :\
\
```yaml\
1dimensions:\
\
2 - name: product_category\
\
3 synonyms: ["catégorie", "type de produit", "classe de produit"]\
\
4 description: "Regroupement produit de haut niveau (Électronique, Habillement, etc.)"\
```\
\
### Définissez votre méthode d'attribution des coûts de warehouse\
\
Comme indiqué plus haut, décidez en amont comment attribuer les coûts du SQL généré par Cortex Analyst. Certains clients opteront pour un warehouse dédié, d'autres pour une attribution par rôle.\
\
### Utilisez la plus petite taille de warehouse possible par défaut\
\
La plupart des requêtes Cortex Analyst sont des agrégations relativement simples. Un warehouse XL n'est probablement pas nécessaire ici.\
\
### Sensibilisez vos utilisateurs\
\
Le principal levier de coût, c'est le comportement des utilisateurs. S'ils comprennent que :\
\
- 10 questions coûtent quelques dollars\
- Les questions complexes peuvent demander plusieurs tentatives\
- Les questions plus larges déclenchent des requêtes plus lourdes sur le warehouse\
\
...ils seront naturellement plus réfléchis dans leur usage. Créez une documentation interne avec des exemples de coûts et des bonnes pratiques pour formuler les questions.\
\
Conclusion\
Cortex Analyst est un outil puissant pour démocratiser l'accès aux données, mais comme tout service IA, les coûts peuvent réserver des surprises s'ils ne sont pas surveillés.
Utilisez CORTEX_ANALYST_USAGE_HISTORY pour un suivi granulaire, mettez en place des contrôles d'accès basés sur les rôles et sensibilisez vos utilisateurs aux usages économes. Avec ces fondations, vous pouvez déployer Cortex Analyst à l'échelle de votre organisation sans angoisse budgétaire.
Gardez en tête que le véritable ROI de Cortex Analyst ne se résume pas à écrire moins de SQL : il s'agit d'apporter aux utilisateurs métier des réponses plus rapides pour qu'ils prennent de meilleures décisions. Quelques crédits supplémentaires investis dans l'autonomie de vos équipes valent souvent bien plus que le coût d'analyses retardées ou de ressources analytiques mal allouées.
Amusez-vous à dialoguer avec vos données. Et comme toujours, n'hésitez pas à nous partager vos réussites avec Cortex Analyst !
Jeff est consultant Data et Analytics, fort de plus de 15 ans d'expérience dans l'automatisation des insights et l'utilisation des données pour piloter les processus métier. Côté technologie, il est spécialisé en Snowflake + dbt + Tableau. Côté secteurs, il a travaillé dans les services publics, les essais cliniques, l'édition, les biens de grande consommation et l'industrie manufacturière. N'hésitez pas à le contacter à tout moment : [email protected].\