Accélérer les requêtes à l'aide de fonctions optimisées

Les fonctions optimisées d'AlloyDB pour PostgreSQL vous permettent d'utiliser un modèle proxy plus petit et plus rapide pour traiter la plupart de vos requêtes SQL qui utilisent des fonctions d'IA, et de revenir à un grand modèle de langage (LLM) plus volumineux uniquement lorsque cela est nécessaire. Cette approche réduit les coûts opérationnels et améliore la réactivité des requêtes en minimisant les appels LLM à distance pour les tâches de classification ou de filtrage ligne par ligne.

Les fonctions d'IA AlloyDB, telles que ai.if(), peuvent avoir une latence élevée en raison des appels à distance aux grands modèles de langage (LLM). Les fonctions optimisées résolvent ce problème de latence en utilisant des modèles proxy plus petits et entraînés localement pour traiter vos requêtes. Ces modèles sont entraînés sur un échantillon de vos données, en utilisant la sortie du LLM comme source de vérité.

Les vérifications de la justesse sont effectuées au moment de l'exécution sur un échantillon de lignes à l'aide du LLM. Pour effectuer cette vérification, AlloyDB utilise le LLM pour générer des libellés pour les lignes de l'échantillon et les compare aux prédictions du modèle proxy afin de vérifier la justesse. Si la vérification de la justesse échoue, la requête revient à l'utilisation du LLM.

Lorsque vous utilisez une fonction optimisée, AlloyDB effectue les opérations suivantes :

  1. Entraîne un modèle proxy : AlloyDB entraîne un modèle proxy léger sur un échantillon de vos données. Cela se produit en arrière-plan lorsque vous utilisez l'instruction PREPARE avec la fonction ai.if() pour entraîner le modèle pour les requêtes optimisées.
  2. Exécute la requête : lorsque vous utilisez l'instruction EXECUTE, AlloyDB utilise le modèle proxy entraîné pour traiter la requête localement.
  3. Revient au LLM : si la justesse du modèle est faible ou si AlloyDB ne trouve pas de modèle, AlloyDB revient automatiquement à l'utilisation du LLM.

Diagramme de flux des fonctions optimisées

Avant de commencer

Avant d'utiliser les fonctions optimisées, procédez comme suit :

  • Connectez-vous à votre base de données à l'aide de psql ou d'AlloyDB Studio en tant qu'utilisateur postgres ou en tant qu'utilisateur ayant accès à la table où résident les données.
  • Vérifiez que l'extension google_ml_integration est installée et disponible sur la version 1.5.8 ou ultérieure.

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    extversion
    ------------
    1.5.8
    (1 row)
    
  • Configurez AlloyDB pour qu'il fonctionne avec Gemini Enterprise Agent Platform. Pour en savoir plus, consultez Intégrer votre base de données à Agent Platform.

  • Assurez-vous que les indicateurs de base de données suivants sont activés. Pour en savoir plus, consultez Configurer les indicateurs de base de données d'une instance.

    • google_ml_integration.enable_model_support
    • google_ml_integration.enable_ai_query_engine
    • google_ml_integration.enable_cost_optimized_ai_functions
  • Générez des embeddings pour la table que vous souhaitez interroger. Pour en savoir plus, consultez Générer et gérer des embeddings automatiques pour les tables.

  • Réfléchissez aux éléments suivants :

    • La colonne de données source doit être de type TEXT ou VARCHAR.
    • La colonne d'embedding qui fournit l'entrée à la fonction AI optimisée doit être de type REAL[] ou VECTOR.
    • Les fonctions optimisées ne sont disponibles que dans les régions où les modèles génératifs d'Agent Platform sont disponibles. Pour obtenir la liste des régions disponibles, consultez Déploiements et points de terminaison.

Utiliser des fonctions optimisées

Pour utiliser une fonction optimisée, utilisez les instructions PREPARE et EXECUTE avec la fonction ai.if(). Voici un exemple d'utilisation d'une fonction optimisée :

  1. Créez une table restaurant_reviews. La colonne review qui contient les données source est de type TEXT, et la colonne review_embedding utilisée pour les requêtes est de type VECTOR(768).

    CREATE TABLE restaurant_reviews (
        id SERIAL,
        name VARCHAR(64),
        city VARCHAR(64),
        review TEXT,
        review_embedding VECTOR(768)
    );
    
  2. Utilisez une instruction PREPARE avec la fonction ai.if() pour indiquer que la requête doit utiliser une fonction optimisée. Cette instruction déclenche l'entraînement asynchrone du modèle en arrière-plan.

    Le modèle n'est entraîné que dans les conditions suivantes :

    • Il n'y a qu'une seule fonction ai.if() dans la requête.
    • ai.if() ne se trouve pas dans une sous-requête.
    PREPARE positive_reviews_query AS
    SELECT r.name, r.city
    FROM restaurant_reviews r
    WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding)
    GROUP BY r.name, r.city
    HAVING COUNT(*) > 500;
    
  3. Exécutez la requête à l'aide de l'instruction EXECUTE. Étant donné que l'instruction PREPARE est spécifique à la session en cours, vous devez exécuter l'instruction EXECUTE sur la même connexion :

    EXECUTE positive_reviews_query;
    
    conn2=> SELECT r.name, r.city
        FROM restaurant_reviews r
        WHERE ai.if('Is the following a positive review? Review: ' || r.review, r.review_embedding)
        GROUP BY r.name, r.city
        HAVING COUNT(*) > 500;
    

    Le modèle proxy entraîné n'est pas utilisé si l'une des conditions suivantes est remplie :

    • Le contenu ou la colonne d'embedding référencée dans ai.if() change. Les deux colonnes doivent appartenir à la même table.
    • Le prompt fourni à la colonne de contenu change.
    • La structure de la requête change, ce qui entraîne un query_id différent.
    • La requête ne respecte pas le seuil de vérification de la justesse au début de la requête.

    Dans ce cas, la requête revient à l'utilisation du LLM, et AlloyDB renvoie un avertissement.

  4. Facultatif. Pour désactiver la vérification de la validation de la justesse pour l'ensemble de l'environnement de base de données, ce qui est nécessaire, car les vérifications de la justesse sont également effectuées lors de l'entraînement du modèle, exécutez la commande suivante.

    ALTER DATABASE DATABASE_NAME SET google_ml_integration.runtime_accuracy_check = off;
    

    Remplacez DATABASE_NAME par le nom de votre base de données.

Réentraîner un modèle proxy

Si les données de votre table sous-jacente changent de manière significative, vous pouvez réentraîner le modèle proxy en exécutant à nouveau l'instruction PREPARE. La préparation d'une requête remplace le modèle proxy existant en lançant une nouvelle requête d'entraînement.

Limites

Si vous modifiez la colonne de contenu source, la colonne d'embedding ou le prompt fourni à la fonction ai.if(), vous devez émettre une nouvelle instruction PREPARE. AlloyDB entraîne la fonction optimisée pour approximer le comportement d'une combinaison unique de prompt et de données d'entrée.

Étape suivante