Référence pour Snowflake AI Observability

Ce document constitue une référence complète pour l’utilisation de Snowflake Cortex AI Observability afin d’évaluer et de contrôler les performances de vos applications d’AI générative.

Il couvre les concepts suivants :

  • Jeux de données et attributs

  • Mesures d’évaluation

  • Cycles

  • Contrôle d’accès et stockage

Jeux de données et attributs

Un jeu de données est un ensemble d’entrées que vous utilisez pour tester l’application. Il peut également contenir un ensemble de sorties attendues (la réalité de terrain).

Vous pouvez utiliser le SDK TruLens Python pour spécifier le jeu de données en tant que table Snowflake ou dataframe pandas. Chaque colonne du jeu de données doit être mappée à l’un des attributs réservés suivants :

Attributs réservés

Attribut d’entrée

Description

RECORD_ROOT.INPUT

Prompt d’entrée au LLM.

Type : chaîne

RECORD_ROOT.INPUT_ID

Identifiant unique du prompt d’entrée.

Si vous ne fournissez pas d’ID d’entrée, une ID est automatiquement générée et attribuée à chaque entrée.

Type : chaîne

RETRIEVAL.QUERY_TEXT

Requête de l’utilisateur pour une application RAG.

Type : chaîne

RECORD_ROOT.GROUND_TRUTH_OUTPUT

Réponse attendue pour le prompt d’entrée.

Type : chaîne

Pour instrumenter l’application, vous devez mapper les paramètres d’entrée et de sortie de la fonction (ou méthode) instrumentée aux attributs d’entrée et de sortie correspondants. Utilisez le décorateur @instrument pour mapper les paramètres et calculer les métriques. Outre les attributs d’entrée spécifiés dans le cadre du jeu de données, vous pouvez également utiliser les attributs de sortie suivants pour instrumenter les fonctions correspondantes :

Attributs de sortie

Attribut de sortie

Description

RETRIEVAL.RETRIEVED_CONTEXTS

Sortie générée par le LLM.

Type : Liste [chaîne]

RECORD_ROOT.OUTPUT

Réponse générée par le LLM.

Type : chaîne

Mesures d’évaluation

Les mesures d’évaluation fournissent un moyen quantifiable de mesurer la précision et la performance de votre application. Ces métriques sont calculées à partir des entrées spécifiques de l’application, des sorties générées par le LLMet de toute information intermédiaire (comme les résultats récupérés à partir d’une application RAG). Vous pouvez également calculer les métriques à l’aide d’un jeu de données de référence.

Vous pouvez calculer les métriques avec l’approche « LLMas-a-judge ». Avec cette approche, un LLM est utilisé pour générer un score (entre 0 et 1) avec une explication pour la sortie de l’application, sur la base des informations fournies. Vous pouvez choisir comme juge n’importe quel LLM disponible sur Cortex AI. Si aucun juge LLM n’est spécifié, llama3.1-70b est utilisé comme juge par défaut. AI Observability prend en charge une variété de mesures d’évaluation.

Pertinence contextuelle

La pertinence contextuelle détermine si le contexte récupéré auprès du récupérateur ou du service de recherche est pertinent par rapport à la requête de l’utilisateur. Compte tenu de la requête de l’utilisateur et du contexte récupéré, un juge LLM est utilisé pour déterminer la pertinence du contexte récupéré en fonction de la requête.

Attributs requis :

  • RETRIEVAL.QUERY_TEXT : Requête de l’utilisateur dans un RAG ou une application de recherche

  • RETRIEVAL.RETRIEVED_CONTEXTS : Contexte récupéré auprès du service de recherche ou du récupérateur

Fiabilité factuelle

La fiabilité factuelle détermine si la réponse générée est étayée et ancrée dans le contexte récupéré auprès du récupérateur ou du service de recherche. Compte tenu de la réponse générée et du contexte récupéré, un juge LLM est utilisé pour déterminer le caractère fondé de la réponse. La mise en œuvre sous-jacente utilise le raisonnement par chaîne de pensée pour générer les scores de fiabilité factuelle.

Attributs requis :

  • RETRIEVAL.RETRIEVED_CONTEXTS : Requête de l’utilisateur dans un RAG ou une application de recherche

  • RECORD_ROOT.OUTPUT : Réponse finale générée par le LLM

Pertinence de la réponse

La pertinence de la réponse détermine si la réponse générée est pertinente par rapport à la requête de l’utilisateur. Compte tenu de la requête de l’utilisateur et de la réponse générée, un juge LLM est utilisé pour déterminer le degré de pertinence de la réponse par rapport à la requête de l’utilisateur. Notez que cette méthode ne s’appuie pas sur la référence de la réponse à la réalité de terrain et qu’elle n’équivaut donc pas à l’évaluation de l’exactitude de la réponse.

Attributs requis :

  • RECORD_ROOT.INPUT : Requête de l’utilisateur dans un RAG ou une application de recherche

  • RECORD_ROOT.OUTPUT : Réponse finale générée par le LLM

Exactitude

L’exactitude détermine le degré d’alignement de la réponse générée avec la réalité de terrain. Un score d’exactitude plus élevé indique une réponse plus précise avec un alignement plus important sur la réalité de terrain.

Attributs requis :

  • RECORD_ROOT.INPUT : Requête de l’utilisateur ou prompt au LLM

  • RECORD_ROOT.GROUND_TRUTH_OUTPUT : Réponse attendue en fonction de la requête de l’utilisateur

  • RECORD_ROOT.OUTPUT : Réponse générée par le LLM

Cohérence

La cohérence permet de déterminer si la réponse générée par le modèle est cohérente et ne présente pas de lacunes logiques, d’incohérences ou de contradictions. Un score de cohérence élevé indique une réponse très cohérente.

Attributs requis :

  • RECORD_ROOT.OUTPUT : Réponse générée par le LLM

Coût et temps de latence

Coût d’utilisation

Le coût est calculé pour chaque appel d’invocation du LLM qui s’appuie sur les LLMs de Cortex sur la base des informations relatives à l’utilisation des jetons (prompt_tokens pour l’entrée et completion_tokens pour la sortie) renvoyées par la fonction COMPLETE (SNOWFLAKE.CORTEX). Dans le cadre des informations de traçage, vous pouvez voir l’utilisation des jetons et les coûts correspondants associés à chaque appel de LLM.

Latence

La latence est déterminée en mesurant le temps nécessaire pour effectuer chaque appel de fonction dans l’application. Les traçages d’application fournissent une visibilité granulaire sur la latence de chaque fonction instrumentée à l’aide du SDK TruLens. Les latences des fonctions individuelles sont agrégées pour calculer la latence globale de l’ensemble de l’application correspondant à chaque entrée. Chaque cycle fournit également un temps de latence moyen pour toutes les entrées, ce qui facilite la comparaison entre plusieurs configurations d’applications.

Cycles

Un cycle est une tâche d’évaluation utilisée pour mesurer la précision et les performances d’une application. Il vous aide à choisir la meilleure configuration d’application. La création d’une application d’AI générative implique l’expérimentation de divers LLMs, prompts et paramètres d’inférence. Vous mesurez leur précision, leur latence et leur utilisation afin de trouver la combinaison optimale pour la production. Chaque combinaison correspond à une version de l’application.

Un cycle utilise le jeu de données que vous spécifiez pour exécuter une analyse par lot pour une version d’application. Vous pouvez déclencher plusieurs cycles avec le même jeu de données pour différentes versions. Vous pouvez comparer les différences agrégées et au niveau des enregistrements entre les versions afin d’identifier les améliorations à apporter et de sélectionner la meilleure version à déployer.

La création et l’exécution d’un cycle comportent quatre étapes principales :

  1. Création : Après avoir créé une application et une version, ajoutez un nouveau cycle pour la version en spécifiant un jeu de données.

  2. Invocation : Lancez le cycle, qui lit les entrées du jeu de données, invoque l’application pour chaque entrée, génère des traçages et stocke les informations dans votre compte Snowflake.

  3. Calcul : Après l’invocation, déclenchez le calcul en spécifiant les métriques à calculer. Vous pouvez déclencher plusieurs calculs et ajouter ultérieurement de nouvelles métriques pour un cycle existant.

  4. Visualisation : Visualisez les résultats du cycle dans Snowsight en vous connectant à votre compte Snowflake. Les cycles sont listés avec leurs applications correspondantes dans AI & ML sous Evaluations.

Vous pouvez étiqueter chaque cycle pour classer les cycles comparables entre différentes versions de l’application avec le même jeu de données. Utilisez les étiquettes pour gérer et filtrer les cycles.

Un cycle peut avoir l’un des statuts suivants :

Statut de cycle

Statut

Description

CREATED

Le cycle a été créé mais n’a pas commencé.

INVOCATION_IN_PROGRESS

L’invocation du cycle est en train de générer la sortie et les traçages.

INVOCATION_COMPLETED

L’invocation du cycle s’est achevée avec la création de toutes les sorties et de tous les traçages.

INVOCATION_PARTIALLY_COMPLETED

L’invocation du cycle est partiellement terminée en raison d’échecs dans l’invocation de l’application et la génération de traçage.

COMPUTATION_IN_PROGRESS

Le calcul de la métrique est en cours.

COMPLETED

Le calcul de la métrique est terminé avec des sorties et des traçages détaillés.

PARTIALLY_COMPLETED

Le cycle est partiellement terminé en raison d’échecs lors du calcul de la métrique.

CANCELLED

Le cycle a été annulé.

Contrôle d’accès et stockage

Privilèges requis

Vous devez disposer des privilèges suivants pour utiliser AI Observability.

  • Pour utiliser AI Observability, votre rôle doit être le rôle de base de données CORTEX_USER. Le rôle CORTEX_USER est requis pour les fonctions de la base de données. Pour obtenir des informations sur la manière d’accorder et de révoquer ce rôle, voir Privilèges requis.

  • Pour enregistrer une application, votre rôle doit disposer des privilèges CREATE EXTERNAL AGENT sur le schéma. Pour plus d’informations, voir Applications.

  • Pour créer et exécuter des cycles, votre rôle doit disposer des privilèges USAGE sur l’objet EXTERNAL AGENT créé pour l’application et du rôle d’application AI_OBSERVABILITY_EVENTS_LOOKUP ou AI_OBSERVABILITY_ADMIN. Pour plus d’informations, voir Cycles et Données d’observabilité.

L’exemple suivant utilise le rôle ACCOUNTADMIN pour accorder à l’utilisateur some_user les droits suivants :

  • Le rôle de base de données CORTEX_USER

  • Le rôle d’application AI_OBSERVABILITY_EVENTS_LOOKUP

  • Le privilège CREATEEXTERNALAGENT sur le schéma app_schema

USE ROLE ACCOUNTADMIN;

CREATE ROLE observability_user_role;

GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE observability_user_role;

GRANT APPLICATION ROLE SNOWFLAKE.AI_OBSERVABILITY_EVENTS_LOOKUP TO ROLE observability_user_role;

GRANT CREATE EXTERNAL AGENT ON SCHEMA app_schema TO ROLE observability_user_role;

GRANT ROLE observability_user_role TO USER some_user;
Copy

L’exemple précédent utilisait le rôle observability_user_role pour accorder les privilèges à some_user.

Applications

La création d’une application pour l’évaluation crée un objet EXTERNAL AGENT pour représenter l’application dans Snowflake. Le rôle requis pour créer et modifier une application doit répondre aux exigences suivantes en matière de contrôle d’accès.

Un rôle utilisé pour créer une application doit au minimum disposer des privilèges suivants :

Privilège

Objet

Remarques

OWNERSHIP

Agent externe

OWNERSHIP est un privilège spécial sur un objet qui est automatiquement accordé au rôle qui a créé l’objet, mais qui peut aussi être transféré à l’aide de la commande GRANTOWNERSHIP à un rôle différent par le rôle propriétaire (ou par tout rôle avec le privilège MANAGEGRANTS).

CREATE EXTERNAL AGENT

Schéma

Le privilège USAGE relatif à la base de données et au schéma parents est exigé pour effectuer des opérations sur tout objet d’un schéma.

La modification et la suppression de l’application requièrent les privilèges OWNERSHIP sur l’objet EXTERNAL AGENT.

Si le rôle d’un utilisateur dispose des privilèges USAGE ou OWNERSHIP sur une application (EXTERNAL AGENT), l’application apparaît dans Evaluations sous AI & ML dans Snowsight.

Cycles

Un rôle utilisé pour ajouter, modifier ou supprimer un cycle à une application doit avoir les privilèges USAGE sur l’objet EXTERNAL AGENT représentant l’application dans Snowflake.

La suppression d’un cycle supprime les métadonnées associées à ce cycle. Les enregistrements créés dans le cadre du cycle ne sont pas supprimés et restent stockés. Veuillez consulter la rubrique Données d’observabilité pour plus d’informations sur le stockage des enregistrements et des traçages.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés. Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

LLMs as judges

AI Observability utilise Cortex LLMs as judges pour calculer les mesures d’évaluation de vos applications. Pour réussir à calculer ces mesures, vous devez disposer d’autorisations d’accès à Cortex LLMs. Pour accorder aux rôles d’utilisateur l’accès aux LLMs Cortex, veuillez consulter les privilèges requis. L’utilisateur doit avoir accès au modèle configuré en tant que juge LLM. Le modèle par défaut utilisé pour le juge LLM est llama3.1-70b. Le modèle de juge LLM par défaut est susceptible d’être modifié à l’avenir.

Données d’observabilité

Les données d’AI Observability représentent les enregistrements contenant les entrées, les sorties, les notes d’évaluation et les traçages associés pour vos applications d’AI générative. Tous les enregistrements sont stockés dans une table d’événements dédiée AI_OBSERVABILITY_EVENTS dans votre compte sous le schéma SNOWFLAKE.LOCAL.

Les données d’AI Observability intégrées dans la table des événements ne peuvent pas être modifiées. Les administrateurs ayant le rôle d’application AI_OBSERVABILITY_ADMIN ont un accès exclusif à la suppression des données de la table d’événements SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS.

Il est possible d’accéder aux données d’AI Observability à l’aide du SDK Trulens Python ou de Snowsight. Les privilèges suivants sont requis pour voir les enregistrements d’une application et des cycles associés :

  • L’utilisateur doit avoir le rôle d’application SNOWFLAKE.AI_OBSERVABILITY_ADMIN ou SNOWFLAKE.AI_OBSERVABILITY_EVENTS_LOOKUP

  • Le rôle d’utilisateur doit avoir le privilège USAGE sur l’objet EXTERNAL AGENT qui représente l’application.

Par exemple, pour voir les cycles d’une application RAG instrumentée en externe, le rôle d’utilisateur requiert le privilège USAGE sur « my-db.my-schema.rag-application1 », où rag-application1 est l’objet EXTERNAL AGENT qui représente l’application RAG externe dans Snowflake.

Les métadonnées associées aux cycles et aux agents externes (telles que le nom du cycle, la description, le nom du jeu de données, etc.) sont classées en tant que métadonnées.