1. Introduction
Les ensembles de données volumineux contiennent des informations précieuses, mais il peut être difficile d'en extraire des insights utiles. Les outils d'analyse traditionnels ne parviennent souvent pas à fournir des explications nuancées et humaines qui nous aident à comprendre l'histoire de nos données. Les entrepôts de données contiennent de plus en plus de données non structurées, mais ces données n'ont pas toujours été accessibles pour obtenir des insights. Les textes, images et vidéos non structurés contiennent des informations précieuses pour faire évoluer votre entreprise. Les LLM offrent une nouvelle façon puissante de comprendre vos données en fournissant des explications, une analyse des sentiments, une détection d'objets et plus encore. Avec l'émergence des modèles multimodaux (et la possibilité de stocker des données d'objet telles que des images et des vidéos dans BigQuery via les tables d'objets), l'intégration de LLM puissants tels que Gemini 1.0 Pro (pour l'analyse textuelle) et Gemini 1.0 Pro Vision (pour l'analyse de texte, d'images et de vidéos) à BigQuery peut transformer la façon dont vous analysez les données.
Dans cet atelier de programmation, nous allons examiner les deux méthodes suivantes pour extraire des insights de LLM à partir de vos données d'entreprise et les adapter à des milliers de lignes dans BigQuery :
Méthode 1 : Appel de modèle distant
- Appelez Gemini 1.0 Pro depuis BigQuery à l'aide de
ML.GENERATE_TEXTdans la requêteSELECT. - Utilisez cette approche lorsque le modèle est déjà disponible en tant que modèle distant dans BigQuery et que vous souhaitez l'utiliser tel quel. Consultez la documentation BigQuery pour vérifier l'état du modèle que vous souhaitez utiliser.
Méthode 2 : Implémentation de la fonction à distance
- Appelez une fonction Cloud qui implémente l'appel Gemini 1.0 Pro Vision, exposé en tant que fonction distante dans BigQuery.
- Utilisez cette approche lorsque le modèle que vous souhaitez utiliser n'est pas disponible prêt à l'emploi en tant que modèle distant ou que vous souhaitez plus de flexibilité et de personnalisation dans votre cas d'utilisation.
Ce que vous allez faire
- Pour la méthode Invocation de modèle distant, vous allez créer un résumeur de lieux pour l'ensemble de données de livres archivés sur Internet (disponible publiquement dans BigQuery) en invoquant le modèle distant pour Gemini 1.0 Pro dans la construction ML.GENERATE_TEXT dans BigQuery.

- Pour la méthode d'implémentation de fonction à distance, vous allez créer un validateur d'images pour valider les images de test par rapport à une image de référence. Pour ce faire, vous allez créer un ensemble de données contenant des captures d'écran d'images de test dans une table externe et demander à Gemini 1.0 Pro Vision de les valider par rapport à l'image de référence. Vous allez ensuite créer une fonction Cloud Java qui implémente l'appel Gemini Pro Vision et l'invoque en tant que fonction distante dans BigQuery.

Remarque :
Il est possible que d'autres modèles d'IA générative Vertex AI soient disponibles en tant que modèles distants dans BigQuery. Cela signifie que vous pouvez accéder à ces modèles avec la construction ML.GENERATE_TEXT à partir de BigQuery prêt à l'emploi. Toutefois, même si des modèles distants sont disponibles, vous avez toujours la possibilité de créer des personnalisations avancées pour votre cas d'utilisation avec Cloud Functions, puis d'accéder à ces modèles en tant que fonctions distantes depuis BigQuery.
Pourquoi passer à BigQuery ?
BigQuery est un entrepôt de données multicloud sans serveur, capable de passer des gigaoctets aux pétaoctets sans que cela n'engendre de coûts opérationnels. Il constitue donc un excellent choix pour stocker les données d'entraînement du ML. Grâce aux fonctionnalités d'analyse et de machine learning de BigQuery (BQML) intégrées, vous pouvez créer des prédictions sans code en utilisant uniquement des requêtes SQL. Vous pouvez également accéder aux données de sources externes à l'aide de requêtes fédérées, éliminant le besoin de pipelines ETL complexes.
BigQuery est un entrepôt de données cloud entièrement géré qui permet aux utilisateurs d'analyser des données structurées, semi-structurées et non structurées.
2. Conditions requises
3. Avant de commencer
- Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud.
- Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet .
- Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud et fourni avec bq. Cliquez sur "Activer Cloud Shell" en haut de la console Google Cloud.

- Une fois connecté à Cloud Shell, vérifiez que vous êtes déjà authentifié et que le projet est défini sur votre ID de projet à l'aide de la commande suivante :
gcloud auth list
- Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet.
gcloud config list project
- Si votre projet n'est pas défini, utilisez la commande suivante pour le définir :
gcloud config set project <YOUR_PROJECT_ID>
- Accédez à la Marketplace Gemini pour Google Cloud pour activer l'API. Vous pouvez également utiliser la commande suivante dans le terminal Cloud Shell :
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Assurez-vous que les API suivantes sont activées :
- BigQuery
- Connexion BigQuery
- Fonction Cloud
- Cloud Run
- Vertex AI
- Cloud Build
- API Cloud Storage
Vous pouvez également passer par la console en utilisant ce lien.
Consultez la documentation pour connaître les commandes gcloud ainsi que leur utilisation.
4. Créer un ensemble de données BigQuery et une connexion externe
Commençons par créer un ensemble de données et une connexion à une ressource cloud.
Dans BigQuery, un ensemble de données est un conteneur pour toutes les tables et tous les objets de votre application.
Pour créer un ensemble de données :
- Accédez à la page BigQuery de la console Google Cloud.
- Sur le panneau Explorateur, sélectionnez le projet pour lequel vous souhaitez créer l'ensemble de données.
- Développez l'option Actions (icône représentant des points de suspension verticaux), puis cliquez sur Créer un ensemble de données.

- Cliquez sur Créer un ensemble de données.
- Saisissez
gemini_bq_fndans le champ ID de l'ensemble de données. - Définissez le type d'emplacement sur
Multi-regionet acceptez la valeur par défaut, qui estUS(multiple regions in United States.. - Cliquez sur Créer un ensemble de données.
- Vérifiez que l'ensemble de données a été créé et qu'il figure sous l'ID de votre projet dans le volet Explorateur.
Une connexion BigQuery est requise pour interagir avec votre fonction Cloud. Pour créer une fonction distante, vous devez créer une connexion BigQuery. Dans cet atelier de programmation, nous allons utiliser la connexion BigLake pour accéder au modèle depuis BigQuery via la fonction Cloud. Les connexions BigLake permettent de connecter la source de données externe tout en conservant une sécurité et un contrôle des accès ultraprécis dans BigQuery, qui dans notre cas est l'API Vertex AI Gemini Pro.
Pour créer la connexion BigLake, procédez comme suit :
- Cliquez sur Ajouter dans le volet Explorateur de la page BigQuery.

- Cliquez sur Connexions à des sources de données externes.
- Dans le menu "Type de connexion", sélectionnez Modèles distants Vertex AI, fonctions à distance et BigLake (Ressource cloud).
- Dans le champ ID de connexion, saisissez le nom de votre connexion, par exemple
gemini-bq-conn. - Définissez le type d'emplacement sur
Multi-regionet acceptez la valeur par défaut, qui estUS(multiple regions in United States.. - Cliquez sur Créer une connexion.
- Cliquez sur Accéder à la connexion,puis copiez l'ID du compte de service dans le volet Informations de connexion.

- Accédez à la page IAM et administration, puis cliquez sur Accorder l'accès.
- Collez l'ID du compte de service dans le champ Nouveaux comptes principaux.
- Sélectionnez le rôle
Vertex AI userdans la liste des rôles, puis cliquez sur Enregistrer.

Vous avez créé l'ensemble de données et la connexion BigQuery. Ensuite, vous allez effectuer les étapes requises pour l'invocation de modèle à distance.
5. Cas d'utilisation 1 : Configuration de l'invocation de modèle à distance
Maintenant que vous avez créé votre ensemble de données et votre connexion, créons un modèle dans BigQuery basé sur le modèle de fondation Gemini Pro de Vertex AI. À la fin de cet exercice, vous aurez votre application LLM opérationnelle en utilisant uniquement des requêtes SQL.
Étape 1 : Créez une table BigQuery contenant les données d'entrée pour le modèle distant.
Créez une table nommée books dans votre ensemble de données, qui peut contenir environ 50 enregistrements de la table bigquery-public-data.gdelt_internetarchivebooks.1905 de l'ensemble de données Internet Archive Books, qui est disponible publiquement dans BigQuery.
Pour ce faire, exécutez l'instruction LDD (langage de définition de données) suivante dans le volet de l'éditeur SQL BigQuery :
create or replace table gemini_bq_fn.books as (
select *
from
bigquery-public-data.gdelt_internetarchivebooks.1905 limit 50)
Étape 2 : Créez un modèle BigQuery
Créez un modèle dans votre ensemble de données. Pour ce faire, exécutez le DDL suivant dans le volet de l'éditeur SQL de BigQuery :
CREATE MODEL `gemini_bq_fn.gemini_remote_model`
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(ENDPOINT = 'gemini-pro');
Notez que le modèle est créé avec une option permettant de l'afficher.
Étape 3 : Testez votre nouvelle application d'IA générative
Utilisez la fonction ML.GENERATE_TEXT dans une requête SELECT pour envoyer une requête au modèle distant.
SELECT ml_generate_text_llm_result as Gemini_Response, prompt as Prompt
FROM ML.GENERATE_TEXT(MODEL `gemini_bq_fn.gemini_remote_model`,
(select 'You are a text summarizer and standardizer. From the following text that contains address locations, standardize and print one standardized, consolidated address. You cannot return empty because you know how to pick up sensible data from the text in this field: ' ||
substring(locations, 0, 200) as prompt
from `gemini_bq_fn.books`),
STRUCT(
TRUE AS flatten_json_output));
Vous devriez obtenir le résultat suivant :

Félicitations ! Vous avez démontré avec succès comment utiliser un modèle distant (basé sur un modèle gemini-pro) avec la fonction ML.GENERATE_TEXT pour analyser des données textuelles dans une table BigQuery.
Essayons maintenant un autre modèle Vertex AI à l'aide des fonctions distantes BigQuery. Supposons que vous souhaitiez ajouter plus de personnalisation et de flexibilité à la façon dont vous pouvez utiliser le modèle à distance dans BigQuery. Les modèles compatibles sont listés dans la documentation BigQuery.
6. Cas d'utilisation 2 : Implémentation de la fonction à distance : configurer l'implémentation de la fonction à distance
Dans cet exercice, vous allez créer une fonction dans BigQuery basée sur la fonction Cloud Functions Java qui implémente le modèle de base Gemini 1.0 Pro Vision. Vous allez d'abord créer et déployer la fonction Cloud Java pour comparer des images à l'aide du modèle Gemini 1.0 Pro Vision, puis créer la fonction distante dans BigQuery qui appelle la fonction Cloud déployée. N'oubliez pas que vous pouvez suivre la même procédure pour exécuter n'importe quelle fonction distante dans BigQuery.
C'est parti !
Étape 1 : Créez la fonction Cloud Java
Vous allez créer une fonction Cloud de deuxième génération en Java pour valider des images de test par rapport à une image de référence. L'image de référence est stockée dans un ensemble de données contenant des captures d'écran d'images de test dans une table externe de BigQuery. Vous allez valider les images à l'aide du modèle Gemini Pro Vision (SDK Java). Vous allez ensuite déployer la fonction Cloud Java sur un point de terminaison REST.
Procédez comme suit :
- Lancez l'éditeur Cloud Shell.
- Si vous utilisez l'ancien éditeur, cliquez sur Essayer le nouvel éditeur.
- Dans la barre d'état, cliquez sur Cloud Code - Se connecter.
- Si vous êtes invité à autoriser l'éditeur Cloud Shell à effectuer des appels d'API Google Cloud, cliquez sur Autoriser. Suivez les instructions pour vous connecter à votre compte Google. Vous êtes désormais connecté à Google Cloud.
- Si votre projet ne s'affiche pas dans la barre d'état Cloud Code, cliquez sur Cloud Code > Se connecter > Sélectionner un projet Google Cloud. Choisissez le projet Google Cloud dans lequel vous souhaitez créer vos fonctions Cloud Functions. Le projet se charge et devient le projet actif dans l'éditeur Cloud Shell.
- Dans la barre d'état Cloud Code, cliquez sur le nom du projet actif. Dans le menu "Démarrage rapide" qui s'affiche, sélectionnez Nouvelle application.
- Dans la boîte de dialogue Créer une application, sélectionnez Application Cloud Functions.

- Lorsque vous êtes invité à sélectionner un modèle, choisissez Java: Hello World.

- Saisissez
Gemini-BQ-Functioncomme nom de projet dans le chemin d'accès au projet. La structure du projet s'affiche dans une nouvelle vue de l'éditeur Cloud Shell.

- Ajoutez les dépendances nécessaires dans la balise
<dependencies>... </dependencies>ou copiez les dépendances à partir de l'exemple de fichier pom.xml. - Remplacez le nom de votre classe (
HelloWorld.java) par un nom plus explicite. DisonsGeminiBigQueryFunction.java. Renommez le package en conséquence. - Remplacez le code de l'espace réservé dans le fichier GeminiBigQueryFunction.Java par l'exemple de code fourni dans le dépôt GitHub. Veillez à remplacer la variable <YOUR_PROJECT_ID> par l'ID de votre projet dans l'exemple de code.
- Accédez au terminal Cloud Shell. Vérifiez que vous êtes dans le répertoire de votre projet. Sinon, accédez au répertoire du projet en exécutant la commande suivante :
cd Gemini-BQ-Function
- Exécutez l'instruction suivante pour compiler et déployer la fonction Cloud :
gcloud functions deploy gemini-bq-fn --gen2 --runtime java17 --trigger-http --entry-point cloudcode.helloworld.GeminiBigQueryFunction --allow-unauthenticated --source .
Remplacez le point d'entrée dans la commande par celui de votre fonction. Le résultat est une URL REST au format suivant :
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/gemini-bq-fn
- Testez cette fonction Cloud en exécutant la commande suivante depuis le terminal :
gcloud functions call gemini-bq-fn --region=us-central1 --gen2 --data '{"calls":[["https://storage.googleapis.com/img_public_test/image_validator/baseline/1.JPG", "https://storage.googleapis.com/img_public_test/image_validator/test/2.JPG", "PROMPT_ABOUT_THE_IMAGES_TO_GEMINI"]]}'
Réponse à la requête d'échantillon aléatoire :

Formidable ! La fonction Cloud générique pour l'implémentation du modèle Gemini Pro Vision est prête. Utilisons ce point de terminaison directement sur les données BigQuery à partir d'une fonction distante BigQuery.
Étape 2 : Créer une table d'objets et une fonction distante BigQuery
Conditions préalables
Vous aurez besoin d'un bucket Cloud Storage pour cette partie de l'exercice. Pour créer un bucket Cloud Storage, procédez comme suit :
- Pour créer un bucket, accédez à la console Cloud Storage et cliquez sur Créer.
- Saisissez
demo-bq-gemini-public-imagecomme nom de bucket, puis cliquez sur Créer. - Décochez l'option
Enforce public access prevention on this bucket. Bien que vous créiez ce bucket pour l'accès public dans cet exercice, nous vous recommandons d'empêcher l'accès public et d'accorder des autorisations à des comptes de service spécifiques selon les besoins de vos cas d'utilisation en entreprise. - Une fois le bucket créé, accédez à l'onglet Autorisations pour afficher et modifier les autorisations.
- Pour ajouter des comptes principaux, cliquez sur Accorder l'accès. Indiquez un ID de compte de service pour accorder des autorisations à un compte spécifique ou indiquez
allUserspour donner un accès public à votre bucket. - Sélectionnez le rôle
Storage Object Viewer, puis cliquez sur Enregistrer. Si vous y êtes invité, autorisez l'accès public. - Accédez à l'onglet Objets, puis importez les images de référence et les images de test à comparer. Pour cet atelier de programmation, vous pouvez importer les objets suivants, qui sont accessibles au public : baseline.JPG, TEST1.JPG et TEST2.JPG.
Créer une table d'objets BigQuery
Créez une table d'objets externe à partir de BigQuery pour accéder aux données non structurées dans le bucket à l'aide de la connexion et de l'ensemble de données que vous avez créés précédemment. Pour ce faire, exécutez l'instruction LDD (langage de définition de données) suivante dans le volet de l'éditeur de requêtes BigQuery :
CREATE OR REPLACE EXTERNAL TABLE `gemini_bq_fn.image_validation`
WITH CONNECTION `us.gemini-bq-conn`
OPTIONS(object_metadata="SIMPLE", uris=["gs://demo-bq-gemini-public-image/*.JPG"]);
Vérifiez qu'une table d'objets nommée image_validation a été créée dans votre ensemble de données.
Créer une fonction distante BigQuery
Créez une fonction distante dans BigQuery pour appeler la fonction Cloud Java qui implémente le modèle Gemini Pro Vision. Créez-le dans le même ensemble de données. Pour ce faire, exécutez le DDL suivant à partir du volet de l'éditeur SQL de la console BigQuery :
CREATE OR REPLACE FUNCTION `gemini_bq_fn.FN_IMAGE_VALIDATE` (baseline STRING, test STRING, prompt STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.gemini-bq-conn`
OPTIONS (
endpoint = 'https://us-central1-<your project id>.cloudfunctions.net/gemini-bq-fn',
max_batching_rows = 1
);
L'URL du point de terminaison est l'URL REST qui a été renvoyée précédemment dans cet exercice. Cela crée la fonction distante dans BigQuery. Le DDL ci-dessus comporte trois paramètres. Les deux premiers paramètres sont des URL vers les images stockées dans la table d'objets créée à l'étape précédente. Le dernier paramètre est la requête envoyée au modèle (Gemini Pro Vision). Vous pouvez vous référer au code Java Cloud Functions utilisé pour analyser cette signature :
Gson().fromJson(request.getReader(), JsonObject.class);
JsonArray calls_array = requestJson.getAsJsonArray("calls");
JsonArray calls = (JsonArray) calls_array.get(0);
String baseline_url = calls.get(0).toString().replace("\"", "");
String test_url = calls.get(1).toString().replace("\"", "");
String prompt_string = calls.get(2).toString();
Appeler Gemini depuis BigQuery
Utilisez la fonction distante dans une requête SELECT pour tester la fonction de validation des images par rapport à la requête.
select gemini_bq_fn.FN_IMAGE_VALIDATE(
'https://storage.googleapis.com/demo-bq-gemini-public-image/Baseline.JPG',
REPLACE(uri, 'gs://', 'https://storage.googleapis.com/') ,
'You are an expert image validator who can respond with JSON result. Find 2 images here. The first one is the reference image. The second image is the test image. Compare the second image to see if the second image is similar to the first in terms of the text present in the image. Respond ONLY in JSON Format with 3 attributes namely SIMILARITY which is a \"YES\" or \"NO\", SIMILARITY_SCORE which is a percentage and DIFFERENCE_COMMENT which is a string.' ) as IMAGE_VALIDATION_RESULT
from `gemini_bq_fn.image_validation`
where uri like '%TEST1%';
Essayez la requête ci-dessus avec les fichiers objets TEST1 et TEST2. Un résultat semblable aux lignes suivantes s'affiche :

Voici les images pour référence :
Image de référence

Image de test

Notez que les deux images sont similaires, car elles présentent la vue de la console cloud Duet AI, mais que le texte est différent dans les deux cas, comme le montre le modèle au format JSON.
Vous avez ainsi testé l'implémentation de la fonction à distance.
7. Avantages et cas d'utilisation
Examinons quelques-uns des avantages de l'intégration de BigQuery et Gemini pour l'analyse de données structurées et non structurées.
- L'IA générative au service de vos données : plus besoin de déplacer vos données, de les dupliquer ni de les complexifier. Vous pouvez analyser les données et générer des insights dans le même environnement BigQuery.
- Analyses améliorées : les explications en langage naturel de Gemini ajoutent un nouveau niveau de compréhension à vos données. Vous pouvez y accéder à l'aide de requêtes SQL.
- Évolutivité : cette solution gère facilement les grands ensembles de données et les analyses complexes avec un effort de low code.
Les applications sont nombreuses. Pensez à des scénarios dans les domaines de la finance (analyse des tendances du marché), du commerce (sentiment des clients), de la santé (résumés de rapports médicaux), etc. où vos équipes d'analyse et commerciales pourraient les implémenter avec relativement peu d'efforts et de ressources, et avec un langage et un outil de choix familiers.
8. Effectuer un nettoyage
Pour éviter que les ressources utilisées dans cet article soient facturées sur votre compte Google Cloud, procédez comme suit :
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
- Si vous souhaitez conserver votre projet, ignorez les étapes ci-dessus et supprimez la fonction Cloud. Pour ce faire, accédez à Cloud Functions, cochez la fonction que vous souhaitez supprimer dans la liste, puis cliquez sur Supprimer.
9. Félicitations
Félicitations ! Grâce aux modèles Gemini intégrés à BigQuery, vous ne vous contentez plus d'analyser vos données, vous les racontez. Vous pouvez générer les récits cachés dans vos ensembles de données et transformer la façon dont vous comprenez vos insights. Lancez-vous et faites des tests ! Appliquez cette technique à vos propres ensembles de données et découvrez les histoires qu'elles contiennent. BigQuery étant compatible avec les données non structurées dans les tables d'objets ( tables externes), essayez d'utiliser Gemini Pro Vision pour générer des insights sur les données d'image. Pour obtenir des conseils plus détaillés, consultez la documentation de Vertex AI, des fonctions distantes BigQuery et de Cloud Functions. Voici le dépôt GitHub pour ce projet. N'hésitez pas à nous dire ce que vous avez créé grâce à ces connaissances !