Améliorer la recherche littérale pour améliorer les réponses de Cortex Analyst¶
Cette rubrique décrit les moyens d’améliorer les recherches de chaînes littérales pour aider Cortex Analyst à générer des requêtes SQL plus précises. Écrire la bonne requête SQL pour répondre à une question nécessite parfois de connaître les valeurs littérales exactes sur lesquelles filtrer. Étant donné que ces valeurs ne peuvent pas toujours être extraites directement de la question, une recherche peut être nécessaire.
Par exemple, si un utilisateur pose une question telle que :
What was my overall sales of iced tea in Q1?
Vous pouvez essayer la requête suivante :
SELECT DISTINCT name FROM product WHERE name LIKE '%iced%tea%'
Si vous avez déjà suivi ce processus vous-même, vous saurez que ce n’est pas une solution parfaite. Par exemple, cette requête ne vous montrera aucun produit nommé « Thé glacé », mais elle vous montrera du « thé épicé ».
Cortex Analyst propose deux solutions pour aider à améliorer l’utilisation littérale :
Recherche sémantique sur les valeurs d’échantillon fournies dans votre modèle sémantique.
Recherche sémantique à l’aide des Cortex Search Services.
C’est là que l’intégration avec Cortex Search peut aider. Cortex Search est une fonctionnalité qui permet une recherche « floue » à faible latence et de haute qualité sur des données textuelles. Vous pouvez créer un Cortex Search Service pour effectuer une recherche sémantique sur la colonne de base de données sous-jacente afin de trouver toutes les valeurs littérales nécessaires à Cortex Analyst à utiliser dans la requête SQL qui répond à la question de l’utilisateur.
Recherche sémantique sur des valeurs d’échantillon¶
Pour les dimensions avec une cardinalité relativement faible (environ 1 à 10 valeurs distinctes), il est recommandé d’utiliser une recherche de valeur d’échantillon en spécifiant suffisamment de valeurs d’échantillon pour afficher la structure de la réponse pour la dimension. Cette solution ne nécessite aucun stockage supplémentaire en plus de l’augmentation minimale de la taille du modèle sémantique.
Avant que Cortex Analyst génère une requête SQL pour votre question, il effectue une recherche de similarité sémantique entre votre question et les valeurs d’exemple fournies pour identifier les valeurs littérales appropriées qui peuvent être nécessaires pour écrire votre requête. Notez que la recherche de similarité sémantique peut récupérer des littéraux plus pertinents que l’approche de requête de correspondance de chaîne floue mentionnée ci-dessus.
Seul un ensemble de taille fixe de valeurs d’échantillon récupérées sera présenté au LLM comme des littéraux qui peuvent être nécessaires pour écrire la requête SQL. Cela signifie que l’ajout de valeurs d’échantillon supplémentaires ne vous expose pas au risque de dépasser la fenêtre contextuelle du LLM.
Recherche sémantique à l’aide de Cortex Search Service¶
Pour les dimensions avec une cardinalité plus élevée (plus de 10 valeurs distinctes) ou les dimensions dont les valeurs changent fréquemment, vous pouvez utiliser un Cortex Search Service pour rechercher parmi les littéraux. Cette solution réduit la duplication des données et maintient votre modèle sémantique concis.
Note
Les Cortex Search Services entraînent des coûts de stockage et de calcul supplémentaires. Pour plus de détails, voir Considérations relatives aux clients.
Dans cet aperçu, un seul Cortex Search Service par dimension logique est pris en charge.
Configuration du Cortex Search Service¶
Les étapes suivantes montrent comment configurer un Cortex Search Service pour une dimension logique dans votre modèle sémantique Cortex Analyst :
Créer une table dynamique
USE DATABASE my_database; USE SCHEMA my_schema; CREATE OR REPLACE DYNAMIC TABLE my_logical_dimension_landing_table WAREHOUSE = xsmall TARGET_LAG = '1 hour' AS ( SELECT DISTINCT my_column AS my_dimension FROM my_table );
Note
Une table dynamique est utilisée ici car DISTINCT n’est actuellement pas bien pris en charge par les Cortex Search Services. Vous pouvez également utiliser une vue matérialisée si elle convient mieux à votre cas d’utilisation. Pour une comparaison des tables dynamiques et des vues matérialisées, consultez Vues, vues matérialisées et tables dynamiques.
Créer un Cortex Search Service
CREATE OR REPLACE CORTEX SEARCH SERVICE my_logical_dimension_search_service ON my_dimension WAREHOUSE = xsmall TARGET_LAG = '1 hour' AS ( SELECT my_dimension FROM my_logical_dimension_landing_table );`
Exigences du Cortex Search Service
Le service doit être indexé sur une colonne portant le même nom que la dimension logique.
La base de données et le schéma du service de recherche doivent correspondre à ceux de la table ou de la vue physique contenant la dimension.
Incluez le service Cortex Search dans votre modèle sémantique à l’aide de l’extrait YAML suivant :
tables: - name: my_table base_table: database: my_database schema: my_schema table: my_table dimensions: - name: my_dimension expr: my_column cortex_search_service_name: my_logical_dimension_search_service