1. Introduction
Vous êtes passionné de lecture, mais ne savez plus où donner de la tête parmi tous les ouvrages disponibles ? Imaginez une appli optimisée par l'IA qui non seulement vous recommande le livre parfait, mais vous en propose également un résumé concis, selon le genre de votre choix, vous donnant ainsi un aperçu des grandes lignes de l'œuvre. Au cours de cet atelier de programmation, je vous aiderai à concevoir ce type d'application avec BigQuery, Gemini et Cloud Functions optimisé par Gemini.
Présentation du projet
Notre cas d'utilisation s'articule autour des quatre composants clés suivants :
- Base de données de livres : le vaste ensemble de données public BigQuery composé de livres archivés sur Internet nous servira de catalogue complet de livres.
- Moteur de synthèse d'IA : Google Cloud Functions, équipé du modèle de langage Gemini 1.0 Pro, générera des résumés pertinents adaptés aux requêtes des utilisateurs.
- Intégration de BigQuery : la fonction distante de BigQuery appellera la fonction Cloud afin de fournir des thèmes et des résumés de livres à la demande.
- Interface utilisateur : application Web hébergée sur Cloud Run. Elle proposera une application Web permettant aux utilisateurs d'afficher les résultats.
L'implémentation sera répartie sur trois ateliers de programmation :
Atelier de programmation 1 : utiliser Gemini pour concevoir une fonction Cloud Java pour une application Gemini.
Atelier de programmation 2 : utiliser Gemini pour concevoir des applications SQL avec BigQuery et l'IA générative.
Atelier de programmation 3 : utiliser Gemini pour concevoir une application Web Spring Boot Java capable d'interagir avec BigQuery.
2. Utiliser Gemini pour créer des applications SQL avec BigQuery et l'IA générative
Ce que vous allez faire
Vous allez créer un
- Modèle distant dans BigQuery qui appelle le point de terminaison Vertex AI text-bison-32k pour identifier le genre (ou le thème) du livre à partir d'une liste de mots clés séparés par des ";" dans le tableau.
- Fonction distante dans BigQuery qui appellera la fonction Cloud d'IA générative déployée à distance.
- Utilisez le modèle et la fonction distants pour résumer le thème et le texte d'un livre avec des requêtes SQL, puis écrivez les résultats dans une nouvelle table de l'ensemble de données "bookshelf".
- Vous implémenterez ces étapes avec l'aide de Gemini.
3. Conditions requises
- Un navigateur tel que Chrome ou Firefox
- Un projet Google Cloud avec facturation activée
- Cela peut être utile si la fonction Cloud est déployée dans le cadre de la première partie de l'atelier de programmation : Utiliser Gemini pour concevoir une fonction Cloud Java pour une application Gemini.
- Étape conditionnelle : Si vous avez actuellement accès au lien vers les crédits Google Cloud sans frais (qui vous a peut-être été fourni par l'organisateur de l'atelier), suivez les instructions de la page ci-dessous pour terminer les étapes ACTIVATION DES CRÉDITS et CRÉATION DU PROJET. Si vous ne possédez pas ce lien, passez aux étapes préalables du projet et de la facturation ci-dessous :
Créer votre projet
Vous pouvez ignorer les étapes ci-dessous si vous avez déjà activé un compte de facturation et créé un projet à l'aide du lien mentionné à l'étape conditionnelle ci-dessus.
- 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.
Activer Cloud Shell
- Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud et fourni avec bq :
Dans la console Cloud, cliquez sur "Activer Cloud Shell" en haut à droite : 
- Une fois connecté à Cloud Shell, vous êtes en principe authentifié, et le projet est déjà défini avec votre ID de projet. Exécutez la commande suivante dans Cloud Shell pour vérifier que vous êtes authentifié :
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>
Consultez la documentation pour connaître les commandes gcloud ainsi que leur utilisation.
4. Activer Gemini for Google Cloud et les API nécessaires
Activer Gemini
- Accédez à la Marketplace Gemini pour Google Cloud pour activer l'API. Vous pouvez également exécuter la commande suivante :
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Accédez à la page Gemini, puis cliquez sur "Commencer à discuter".
Activer d'autres API nécessaires
Comment faire ? Et si on demandait à Gemini ? Mais avant cela, n'oubliez pas :
Remarque : Les LLM ont un comportement non déterministe. Ainsi, lorsque vous testez ces requêtes, il se peut que la réponse que vous recevez soit différente de celles qui figurent sur ma capture d'écran.
Accédez à la console de discussion Gemini en cliquant sur l'icône "Ouvrir Gemini" en haut à droite, à côté de la barre de recherche dans la console Google Cloud.
Saisissez cette question dans la section "Saisissez une requête ici" :
Comment activer les API BigQuery et Vertex AI à l'aide de la commande gcloud ?
Vous recevez la réponse indiquée dans l'image suivante :

Copiez-la (vous pouvez utiliser l'icône Copier en haut de l'extrait de commande) et exécutez-la dans le terminal Cloud Shell pour activer les services respectifs :
- bigquery.googleapis.com
- aiplatform.googleapis.com
5. Explorer l'ensemble de données public BigQuery pour les données de livres
Commencez par vous familiariser avec l'ensemble de données public BigQuery contenant des informations sur de nombreux livres archivés sur Internet.
Vous trouverez cet ensemble de données public dans le volet "Explorateur" de BigQuery. Il se trouve sur le côté gauche de la page d'accueil de la console BigQuery.

Saisissez "gdelt-bq" ou "internetarchivebooks" dans la barre de recherche, puis cliquez sur RECHERCHER DANS TOUS LES PROJETS. Développez le résultat et ajoutez des livres archivés sur Internet à vos favoris, comme illustré dans l'image ci-dessous :
.
Développez l'ensemble de données, cliquez sur gdelt-bq.internetarchivebooks, puis prévisualisez les données dans la table 1920. Cette table regroupe les livres archivés en 1920.
Pour examiner le schéma que nous utiliserons dans les sections suivantes, exécutez la requête suivante :
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
Au cours de notre atelier de programmation, nous utiliserons les trois champs suivants :
- BookMeta_Title (titre)
- Thèmes (séparés par un point-virgule)
- BookMeta_FullText (texte intégral du livre)
6. Créez un ensemble de données BigQuery nommé "bookshelf".
Nous souhaitons créer un ensemble de données dans le projet pour stocker tous les objets de base de données et d'analyse que nous allons créer dans cet atelier. Demandons à Gemini comment créer un ensemble de données BigQuery. Vous devriez déjà avoir ouvert votre discussion Gemini dans un autre onglet de votre navigateur lors de l'étape d'activation des API. Si ce n'est pas le cas, vous pouvez le faire maintenant. Accédez à la console Google Cloud en accédant à https://console.cloud.google.com. L'icône Gemini devrait s'afficher juste à côté de la barre de recherche en haut de la page. Cliquez dessus pour ouvrir le chat.

Saisissez le prompt comme indiqué ci-dessous.
Voici ma requête :
How to create a BigQuery dataset?
Voici la réponse :

Suivons les étapes décrites dans la réponse pour créer un ensemble de données nommé "bookshelf" dans votre projet actif.
Pour créer un ensemble de données BigQuery, procédez comme suit :
- Accédez à la page "BigQuery" de la console Google Cloud.
- Dans le panneau "Explorateur", cliquez sur l'ID de votre projet.
- Cliquez sur "Créer un ensemble de données" (cette option devrait s'afficher lorsque vous cliquez sur les trois points à côté de l'ID de votre projet).
- Saisissez "bookshelf" (étagère) comme nom de l'ensemble de données.
- Définissez l'emplacement sur "États-Unis(multirégion)".
- Pour les étapes 3, 4, 5 et 6 de la réponse, conservez les options par défaut.
- Cliquez sur CRÉER UN ENSEMBLE DE DONNÉES.
Votre ensemble de données sera créé et s'affichera dans le panneau "Explorateur". L'ensemble de données "bookshelf" peut être consulté comme suit :
7. Créer un modèle distant pour appeler le LLM Vertex AI (text-bison-32k)
Ensuite, nous devons créer un modèle dans BigQuery qui appelle le modèle Vertex AI "text-bison-32k". Le modèle vous aidera à identifier un thème commun et le contexte du livre à partir de la liste de mots clés de chaque livre de l'ensemble de données.
Posons cette question à Gemini. Pour ce faire, accédez à l'onglet dans lequel la console de discussion Gemini est ouverte, puis saisissez la requête ci-dessous :
Comment allez-vous connecter BigQuery et Vertex AI pour appeler le point de terminaison LLM (text-bison-32k) dans BigQuery ?
La réponse se présente comme suit :

La réponse inclut des informations précises, telles que les étapes à suivre pour utiliser l'instruction CREATE MODEL, la connexion BigQuery et la définition du point de terminaison. L'instruction de requête est exacte pour moi, mais cela ne signifie pas que vous obtiendrez exactement le même résultat, car il s'agit d'un grand modèle de langage. Vous pouvez obtenir des réponses dans différents formats, volumes et niveaux de détail. Si vous ne voyez pas tous les détails que j'ai reçus, n'hésitez pas à poser des questions supplémentaires dans le chat. Par exemple : "Donne plus de détails sur la création de la ressource de connexion", "Pourquoi l'attribut de connexion est-il manquant ?", "Comment me connecter de BigQuery à Vertex AI ?", etc.
Voici un exemple de requête de suivi (n'utilisez-la que si vous avez besoin d'un suivi. Si la première réponse que vous avez reçue est suffisante, utilisez-la) :
What about the connection? How will I connect from BigQuery to Vertex AI?
Voici la réponse :

Suivons les étapes de la réponse pour créer une connexion BigQuery :
- Accédez à la console BigQuery.
- Dans le volet "Explorateur" de BigQuery, cliquez sur le bouton "+ AJOUTER", puis sur "Connexions à des sources de données externes".
- À ce stade, vous serez invité à activer l'API BigQuery Connection. Cliquez sur ACTIVER L'API :

- Cliquez sur "Connexions à des sources de données externes". La diapositive "Source de données externe" devrait s'afficher, comme ci-dessous. Dans la liste des sources externes, sélectionnez la source "Vertex AI".

- Saisissez un ID de connexion (vous pouvez choisir l'ID de votre choix, mais pour l'instant, définissez-le sur bq-vx) et la région (multirégion "US").
- Cliquez sur "Créer une connexion".

- Une fois la connexion créée, cliquez sur "Accéder à la connexion".
- Sur la page "Informations de connexion", copiez l'ID du compte de service, car nous l'utiliserons lors des étapes suivantes.
- Maintenant que la connexion est créée, attribuons des autorisations à cet ID de compte de service que nous avons copié pour pouvoir utiliser Vertex AI.
- Sur la page Google Cloud Console, ouvrez Google Cloud IAM ou accédez au lien.
- Cliquez sur Accorder l'accès dans la section Afficher par compte principal.

- Dans la boîte de dialogue "Accorder l'accès", saisissez l'ID du compte de service que nous avons noté précédemment dans la zone de texte "Nouveaux comptes principaux".
- Définissez le rôle sur "Utilisateur Vertex AI".

La connexion requise est créée. L'autorisation nécessaire est accordée au principal (compte de service de la connexion) pour utiliser Vertex AI depuis BigQuery.
Exécutez l'instruction DDL(Data Definition Language) suivante qui représente la création d'un objet de base de données, en l'occurrence MODEL, dans l'éditeur de requête BigQuery.
CREATE OR REPLACE MODEL bookshelf.llm_model
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (ENDPOINT = 'text-bison-32k');
Vous pouvez également demander à Gemini de suggérer une requête pour créer le modèle permettant d'appeler le modèle "text-bison-32k".
Remarque : Si vous avez utilisé un autre nom pour votre connexion, remplacez " us.bq-vx" par ce nom dans l'instruction DDL précédente. Cette requête crée le modèle distant dans l'ensemble de données "bookshelf" que nous avons créé précédemment.
8. Créer une fonction distante qui appelle la fonction Cloud Java
Nous allons maintenant créer une fonction distante dans BigQuery à l'aide de la fonction Cloud Java que nous avons créée dans l'atelier de programmation 1 de cette série pour implémenter le modèle Gemini. Cette fonction distante sera utilisée pour résumer le contenu du livre.
Remarque : Si vous avez manqué cet atelier de programmation ou si vous n'avez pas déployé cette fonction Cloud, vous pouvez ignorer cette étape et passer à la section suivante (c'est-à-dire "Résumer le thème des livres à l'aide du modèle à distance").
Accédez à la console BigQuery et collez l'instruction LDD suivante dans l'éditeur de requête (vous pouvez créer un onglet d'éditeur de requête en cliquant sur le bouton +).

Vous trouverez ci-dessous le LDD que vous pouvez copier. N'oubliez pas de remplacer le point de terminaison par celui de votre fonction Cloud déployée (créée à partir de l'atelier de programmation 1). Si vous n'avez pas de point de terminaison, vous pouvez remplacer les caractères masqués dans le DDL ci-dessous par "abis-345004" à des fins de démonstration.
CREATE OR REPLACE FUNCTION
`bookshelf.GEMINI_REMOTE_CALL` (context STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (
endpoint = 'https://us-central1-****-******.cloudfunctions.net/remote-gemini-call' );
Accédez à la console BigQuery sur la plate-forme Google Cloud et ouvrez un nouvel onglet de l'éditeur de requête. Dans l'éditeur de requête BigQuery, collez l'instruction DDL ci-dessus. La réponse suivante s'affiche après l'exécution de la requête :

Maintenant que le modèle et la fonction sont créés, testons ces deux objets BigQuery en les exécutant dans une requête SELECT.
9. Synthétiser des thèmes à l'aide du modèle distant
Utilisons le modèle distant que nous avons créé, "bookshelf.llm_model", pour générer un mot clé consolidé pour le livre à partir de la liste de thèmes donnée :
SELECT * FROM ML.GENERATE_TEXT(MODEL `bookshelf.llm_model`,
(
SELECT
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` LIMIT 1
));
Étape facultative : Le résultat du champ de résultat généré par le LLM est imbriqué. Ajoutons des paramètres LLM et l'attribut "flatten_json_output" à la requête. L'attribut "flatten_json_output" permet de supprimer la structure imbriquée du champ de résultat généré par le LLM.
SELECT * FROM ML.GENERATE_TEXT ( MODEL `bookshelf.llm_model`, (
SELECT CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt FROM `gdelt-bq.internetarchivebooks.1920` limit 1),
STRUCT( 0.2 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));
Exécutez maintenant la requête SELECT dans l'éditeur BigQuery et vérifiez le résultat. Pour les tests, nous avons limité le résultat de la requête à 1. Le résultat s'affiche comme suit :

10. Synthétiser l'intégralité du texte des livres à l'aide de la fonction distante
Nous allons maintenant essayer de résumer le livre en exécutant la fonction Cloud bookshelf.GEMINI_REMOTE_CALL que nous avons créée précédemment.
Remarque : Si vous avez ignoré la création de la FONCTION à distance (le thème précédent de cet atelier de programmation), n'oubliez pas d'ignorer également l'appel de fonction bookshelf.GEMINI_REMOTE_CALL dans la requête SELECT.
Utilisez la requête SELECT qui appelle la fonction distante (GEMINI_REMOTE_CALL) que nous avons créée précédemment. L'appel à cette fonction, GEMINI_REMOTE_CALL, inclut une invite demandant un résumé du texte du livre :
select BookMeta_Title, `bookshelf.GEMINI_REMOTE_CALL` (
CONCAT('This is about a book. The title of the book is this: ', BookMeta_Title, ' . The theme of the book is as follows: ', Themes, 'The following text contains an excerpt from the book. Summarize it in less than 5 lines to create the gist. If you do not have a summary, use the title and themes to make up a short summary. DO NOT RETURN EMPTY RESPONSE. ', SUBSTR(BookMeta_FullText, 5000, 10000))) Summary
from `gdelt-bq.internetarchivebooks.1920` where Themes like '%EDUCATION%' limit 1;
Notez que nous avons extrait une sous-chaîne du texte intégral du livre pour générer le résumé.
Le résultat de la requête est le suivant :

11. Stocker les données de livres dans un tableau
Maintenant que nous avons testé les appels LLM (modèle et fonction distants) depuis BigQuery en utilisant uniquement des requêtes SQL, créons une table BigQuery pour stocker les données de la "bibliothèque" avec des insights sur les thèmes, dans le même ensemble de données que le modèle et la fonction distants.
Nous pourrions en fait inclure à la fois l'appel du modèle LLM et l'appel de la fonction à distance dans cette étape. Toutefois, comme nous avons marqué l'appel de fonction à distance (qui appelle la fonction Cloud) comme une étape facultative, nous n'utiliserons que les insights du modèle à distance.
Voici la requête que nous allons utiliser :
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
Lorsque vous exécutez la requête dans l'éditeur BigQuery, le résultat est le suivant :

Demandons maintenant à Gemini de créer une table nommée "bookshelf.books" à partir de la requête ci-dessus. Accédez à la console de discussion Gemini dans la console Google Cloud et saisissez la requête suivante.
Voici le prompt que nous allons utiliser :
Create a BigQuery table named bookshelf.books from this SELECT query:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
La réponse de Gemini Chat est la suivante :

Voici la requête si vous souhaitez la copier directement :
CREATE TABLE bookshelf.books (
BookMeta_Title STRING,
Themes STRING,
ml_generate_text_llm_result STRING
) AS (
SELECT
BookMeta_Title,
Themes,
ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,
BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920`
LIMIT 5
),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output
)
)
);
Après avoir exécuté la requête dans l'éditeur BigQuery, le résultat est le suivant :

Et voilà ! Interrogez maintenant la table et manipulez les données pour obtenir plus d'insights.
12. Félicitations
Félicitations ! Nous avons effectué les opérations suivantes et utilisé Gemini à certaines étapes du processus :
- Créé un modèle distant dans BigQuery qui appelle le point de terminaison "text-bison-32k" de Vertex AI pour identifier le genre (ou le thème) du livre à partir d'une liste de mots clés séparés par des ";" dans le tableau.
- Créez une fonction distante dans BigQuery qui appellera cette fonction Cloud d'IA générative déployée à distance. Cette fonction prendra la requête en entrée et générera une chaîne résumant le livre en cinq lignes.
- Utilisé le modèle et la fonction distants pour résumer le thème et le texte d'un livre avec des requêtes SQL, et écrit les résultats dans une nouvelle table du dataset "bookshelf" (bibliothèque).
- Pour aller plus loin, essayez d'utiliser Gemini pour obtenir le code SQL permettant de supprimer les objets créés dans BigQuery. Cette étape concerne le nettoyage.