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?
Copy

Vous pouvez essayer la requête suivante :

SELECT DISTINCT name FROM product WHERE name LIKE '%iced%tea%'
Copy

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 :

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 :

  1. 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
      );
    
    Copy

    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.

  2. 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
      );`
    
    Copy

    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.

  3. 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
    
    Copy