Transformer les données obscures en or structuré

1. Présentation

Nous connaissons tous les difficultés liées aux "données obscures". Il s'agit des fichiers PDF, des images et des fichiers texte qui se trouvent dans des buckets de stockage cloud, complètement invisibles pour vos requêtes SQL et vos tableaux de bord BI. Auparavant, pour accéder à ces données, il fallait des pipelines OCR complexes, une saisie manuelle des données ou des scripts personnalisés fragiles.

Plus maintenant.

Dans cet atelier, je vais vous montrer comment convertir 400 fichiers PDF non structurés (contenant du texte, des tableaux et des images) en tables BigQuery clairement structurées, avec des relations automatiquement déduites entre elles. Nous allons le faire en quelques minutes à l'aide de BigQuery Knowledge Catalog et Dataplex.

Ce que vous allez faire

Pour illustrer cela, prenons l'exemple d'une entreprise fictive : une franchise de yaourts glacés en pleine croissance.

Imaginez que vous gérez les données de cette entreprise de yaourts glacés. Vous avez des centaines de recettes et de fiches techniques de fournisseurs, toutes enregistrées au format PDF. Les dirigeants souhaitent lancer un agent IA pour aider les responsables de magasin et les clients à obtenir des informations sur les produits.

Voici un scénario cauchemardesque : un client demande : "Je suis très intéressé par votre yaourt glacé Midnight Swirl. Contient-il des allergènes ?"

Pour répondre à cette question, votre système devrait normalement :

  1. Trouvez le PDF de la recette "Midnight Swirl".
  2. Lisez les ingrédients (par exemple, "Poudre de cacao", "Base laitière", "Émulsifiant X").
  3. Parcourez des dizaines de PDF de fournisseurs pour trouver les fiches techniques de ces ingrédients spécifiques.
  4. Consultez les fiches des fournisseurs pour identifier les allergènes cachés liés à ces ingrédients.

Essayer de créer un agent d'IA qui effectue cette tâche à la volée en lisant 400 PDF bruts au moment de l'exécution est lent, coûteux et sujet aux hallucinations. Au lieu de cela, nous allons utiliser l'inférence sémantique pour extraire toutes ces informations dans une base de données relationnelle. Notre futur agent d'IA sera ainsi extrêmement rapide et 100% ancré dans des données SQL factuelles.

Commençons à créer !

2381f1453211387d.png

Points abordés

  • Configurer un bucket Cloud Storage pour les fichiers sources (PDF)
  • Configurer et exécuter un job Datascan et une inférence sémantique dans Knowledge Catalog pour extraire des données à partir de PDF sources, inférer sémantiquement les connexions et le contexte, et les stocker dans BigQuery
  • Utiliser les agents BigQuery pour discuter avec l'ensemble de données nouvellement créé

Conditions requises

  • Un navigateur (Chrome ou Firefox, par exemple)
  • Un projet Google Cloud avec facturation activée.
  • Connaître les bases de SQL et de Java

2. Avant de commencer

Créer un projet

  1. Dans la console Google Cloud, sur la page du sélecteur de projet, sélectionnez ou créez un projet Google Cloud.
  2. 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.
  1. Vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google Cloud. Cliquez sur "Activer Cloud Shell" en haut de la console Google Cloud.

Image du bouton "Activer Cloud Shell"

  1. 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
  1. Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet.
gcloud config list project
  1. Si vous souhaitez vous authentifier
gcloud auth login
  1. Si votre projet n'est pas défini, utilisez la commande suivante pour le définir :
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project <YOUR_PROJECT_ID>
  1. Activez les API requises : exécutez cette commande pour activer toutes les API requises :
gcloud services enable \
    dataplex.googleapis.com \
    datacatalog.googleapis.com \
    discoveryengine.googleapis.com \
    bigqueryconnection.googleapis.com \
    bigquery.googleapis.com \
    aiplatform.googleapis.com \
    cloudresourcemanager.googleapis.com \
    serviceusage.googleapis.com \
    storage.googleapis.com

Problèmes et dépannage

Syndrome du projet fantôme

Vous avez exécuté gcloud config set project, mais vous consultez en fait un autre projet dans l'interface utilisateur de la console. Vérifiez l'ID du projet dans le menu déroulant en haut à gauche.

Barricade de facturation

Vous avez activé le projet, mais vous avez oublié le compte de facturation. AlloyDB est un moteur hautes performances. Il ne démarrera pas si le "réservoir" (la facturation) est vide.

Décalage de la propagation de l'API

Vous avez cliqué sur "Activer les API", mais la ligne de commande indique toujours Service Not Enabled. Laissez-lui 60 secondes. Le cloud a besoin d'un instant pour réveiller ses neurones.

Quags de quota

Si vous utilisez un tout nouveau compte d'essai, vous pouvez atteindre un quota régional pour les instances AlloyDB. Si us-central1 échoue, essayez us-east1.

Agent du service"Masqué"

Il arrive que le compte de service AlloyDB ne reçoive pas automatiquement le rôle aiplatform.user. Si vos requêtes SQL ne peuvent pas communiquer avec Gemini par la suite, c'est généralement la cause du problème.

3. Configurer un bucket Cloud Storage Google

Dans cette section, vous allez créer une structure organisationnelle dans BigQuery pour stocker les données sur les recettes et les fournisseurs de yaourts glacés, en particulier les informations sur les produits. Il établit également une connexion aux ressources cloud, qui sert de "pont" sécurisé permettant à BigQuery de lire les fichiers provenant de sources externes telles que Cloud Storage.

Avant de commencer :

Ce dépôt contient les recettes et les fichiers PDF des fournisseurs que nous utiliserons dans ce projet. Assurez-vous de télécharger ces fichiers. Pour télécharger les fichiers, procédez comme suit :

Dans Cloud Shell, exécutez la commande suivante :

git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/next-26-keynotes.git

Accédez au dossier que vous venez de créer :

cd next-26-keynotes

Extrayez le dossier data-cloud-demo.

git sparse-checkout set genkey/data-cloud-demo

Une fois le paiement effectué, accédez au dossier data-cloud-demo et extrayez les fichiers ZIP pour accéder aux ressources de l'atelier de programmation.

Créer un bucket et importer les fichiers PDF Froyo (recettes et fournisseurs)

  1. Dans la console Google Cloud, accédez à la page Buckets Cloud Storage.
  2. Cliquez sur Créer.
  3. Sur la page Créer un bucket, saisissez les informations concernant votre bucket. Après chacune des étapes suivantes, cliquez sur "Continuer" pour passer à la suivante :
  4. Dans la section Premiers pas, saisissez le nom du bucket. Exemple : froyo_data
  5. Dans la section Choisissez où stocker vos données, sélectionnez "Région", puis saisissez votre région. us-central1
  6. Dans la section Choisir comment contrôler l'accès aux objets, décochez la case "Appliquer la protection contre l'accès public sur ce bucket".
  7. Cliquez sur Créer.
  8. Dans la liste des buckets, cliquez sur celui que vous avez créé.
  9. Dans l'onglet Objets du bucket, cliquez sur "Importer", puis sur "Importer des dossiers".
  10. Sélectionnez le dossier recipes que vous avez extrait dans la section "Avant de commencer" de cet atelier de programmation.
  11. Cliquez sur Envoyer.
  12. Répétez la procédure d'importation pour le dossier suppliers.

Une fois le bucket importé, sa structure doit se présenter comme suit (quel que soit son nom) :

596b8acb481016b7.png

4. Configurer la connexion BigQuery

Créez une connexion à une ressource cloud. Cela génère un compte de service unique qui sert de "carte d'identité" à BigQuery pour accéder aux fichiers externes.

  • Accédez à la page BigQuery.
  • Dans le volet de gauche, cliquez sur "Explorateur". Si le volet de gauche ne s'affiche pas, cliquez sur "Développer le volet de gauche" pour l'ouvrir.
  • Dans le volet "Explorateur", développez le nom de votre projet, puis cliquez sur "Connexions".
  • Sur la page "Connexions", cliquez sur "Créer une connexion".
  • Pour le type de connexion, sélectionnez "Modèles distants Vertex AI, fonctions à distance, BigLake et Spanner (Ressource Cloud)".
  • Dans le champ "ID de connexion", saisissez le nom de l'ID de connexion :
  • bq-connection. Veillez à noter cet ID, car vous en aurez besoin lorsque vous configurerez l'analyse des données plus loin dans cet atelier de programmation.
  • Définissez le type d'emplacement sur "Région", puis sélectionnez une région. Par exemple, us-central1. La connexion doit se trouver dans la même région que vos autres ressources, comme les ensembles de données.
  • Cliquez sur "Créer une connexion".
  • Cliquez sur "Accéder à la connexion".
  • Dans le volet "Informations de connexion", copiez l'ID du compte de service à utiliser à l'étape suivante. Le compte de service ressemble à bqcx-**********-qn3a@gcp-sa-bigquery-condel.iam.gserviceaccount.com.

5. Configurer les autorisations

  1. Accorder les autorisations nécessaires à la connexion BigQuery pour accéder aux objets Cloud Storage et au Knowledge Catalog

Accédez à la page "IAM et administration", puis, dans la section "Afficher par compte principal", cliquez sur le bouton "Accorder l'accès". Ajoutez un compte principal en collant le compte de service que vous avez copié à la dernière étape. Dans la section "Rôles", ajoutez les noms des rôles suivants un par un, puis enregistrez :

  • roles/storage.objectUser
  • roles/storage.objectViewer
  • roles/bigquery.user
  • roles/bigquery.dataEditor
  • roles/aiplatform.viewer
  • roles/agentplatform.user
  • roles/storage.admin
  • roles/dataproc.serviceAgent
  • roles/dataplex.discoveryPublishingServiceAgent
  • roles/dataplex.serviceAgent
  • roles/dataplex.securityAdmin
  1. Accorder des autorisations au compte de service Dataplex pour accéder au bucket Cloud Storage

Accédez à la page IAM et administration. Dans la section "Afficher par principaux", cliquez sur le bouton "Accorder l'accès", puis ajoutez un principal en saisissant "Dataplex" dans la barre de texte "Nouveau principal". Dans la liste qui s'affiche automatiquement, sélectionnez le principal du compte de service Dataplex qui ressemble à ceci :

service-*********@ gcp-sa-dataplex.iam.gserviceaccount.com

Attribuez les rôles suivants à ce compte de service :

  • roles/storage.objectUser
  • roles/storage.objectViewer
  • roles/storage.viewer
  • roles/dataplex.discoveryBigLakePublishingServiceAgentroles/storage.objectUser
  • roles/storage.objectViewer
  • roles/storage.viewer
  • roles/dataplex.discoveryBigLakePublishingServiceAgentroles/storage.objectUser
  • roles/storage.objectViewer
  • roles/storage.viewer
  • roles/dataplex.discoveryBigLakePublishingServiceAgent

6. Configurer Knowledge Catalog

Créez un Knowledge Catalog pour unifier les données non structurées et automatiser la découverte de fichiers non structurés (comme les recettes et les fournisseurs au format PDF).

  1. Créer DataScan avec curl

Vous pouvez également créer ce job à partir de la console, mais dans cette section, nous allons créer des analyses pour le bucket Cloud Storage en ajoutant l'ID datascan_ID et en le pointant vers les ensembles de données BigQuery. Knowledge Catalog créera ensuite automatiquement des entrées pour vos PDF dans BigQuery.

Exécutez l'ensemble de commandes ci-dessous à partir du terminal Cloud Shell dans le projet actif qui vous intéresse :

# 1. Set your variables
PROJECT_ID="<PROJECT_ID>"
REGION="<REGION>"
ENV_SUFFIX="stg1"
DATASCAN_ID="froyo-data-${ENV_SUFFIX}"
BUCKET_NAME="<BUCKET_NAME>"

# 2. Set this to the Name of the connection you created in Step 7
CONNECTION_ID="<CONNECTION_ID_NAME>"

# 3. Define the API Endpoint
DATAPLEX_API="dataplex.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}"

# 4. Create the DataScan via CURL
echo "Creating Dataplex DataScan: ${DATASCAN_ID}..."

curl -X POST "https://$DATAPLEX_API/dataScans?dataScanId=${DATASCAN_ID}" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"data": {
   "resource": "//storage.googleapis.com/projects/'"${PROJECT_ID}"'/buckets/'"${BUCKET_NAME}"'"
   },
"executionSpec": {
   "trigger": {
      "on_demand": {}
   }
},
"dataDiscoverySpec": {
   "bigqueryPublishingConfig": {
      "tableType": "BIGLAKE",
      "connection": "projects/'"${PROJECT_ID}"'/locations/'"${REGION}"'/connections/'"${CONNECTION_ID}"'"
   },
   "storageConfig": {
      "unstructuredDataOptions": {
      "entity_inference_enabled": true
      }
   }
   }
}'

Remplacez les valeurs des variables d'espace réservé ci-dessus pour que la commande s'exécute correctement. N'oubliez pas que cette commande crée le job, mais ne l'exécute pas.

  1. Au bout d'une ou deux minutes, dans la console Google Cloud, accédez à la page Curation des métadonnées.
  2. Dans l'onglet "Découverte" de Cloud Storage, cliquez sur le nom de l'élément d'analyse de découverte (n'oubliez pas de ne pas cliquer sur le lien source, qui peut être tentant, mais qui ouvrira le stockage).

31afb1dc3caba5f6.png

  1. Étape critique :

Modifiez le job et assurez-vous que la case "Activer l'inférence sémantique" est cochée. Si ce n'est pas le cas, cochez-la, saisissez l'ID et la région du projet, puis cliquez sur "Enregistrer".

c021927bf80fe204.png

Une fois l'opération terminée, vous pouvez exécuter la commande suivante à partir du terminal Cloud Shell ou cliquer sur le bouton "Exécuter maintenant" sur la page "Découverte Cloud Storage" :

gcloud dataplex datascans run $DATASCAN_ID --location=$REGION
  1. L'analyse prendra un certain temps. Une fois le job terminé, vérifiez si l'ensemble de données publié est présent. Pour vérifier l'état du job, accédez à la page Curation des métadonnées. Dans l'onglet "Découverte Cloud Storage", cliquez sur le nom des analyses de découverte de la dernière exécution. L'ensemble de données publié devrait s'afficher comme ci-dessous :

d0cd6ae1edb81ce9.png

Remarque : Si vous rencontrez des erreurs lors de l'étape d'analyse, patientez un peu, puis réessayez (il faut quelques minutes pour créer le job et terminer l'exécution).

Pour afficher la table dans BigQuery, cliquez sur l'ensemble de données froyo_data et accédez-y. Cliquez sur l'ID de la table dans BigQuery, puis exécutez la requête ci-dessous dans l'onglet "Éditeur de requête" :

SELECT count(*) FROM `agent-data-cloud.froyo_data.froyo_data` LIMIT 1000;

Le résultat est 400 (si ce n'est pas le cas, vous pouvez revenir en arrière et exécuter à nouveau le job Datascan).

7. Extraction sémantique de données

Super ! Extrayons maintenant l'inférence pour ces objets non structurés à l'aide de Knowledge Catalog.

Nous allons utiliser la fonctionnalité Insights pour générer des instructions SQL permettant d'extraire des données structurées de la table non structurée.

  1. Dans la console Google Cloud, accédez à la page Recherche Knowledge Catalog.
  2. Recherchez la table de l'ensemble de données pour laquelle vous souhaitez afficher des insights. Dans la barre de recherche, saisissez le nom de l'ensemble de données / de la table de l'étape précédente ("froyo_data"), puis appuyez sur Entrée.
  3. Dans la liste des résultats, cliquez sur l'entrée TABLE (et non sur celle de l'ensemble de données).
  4. L'onglet INSIGHTS doit s'afficher. Cliquez dessus (si vous devez activer une API, suivez les instructions et activez-la).

Si vous avez activé des API à ce stade, vous devez réexécuter le job d'analyse.

  1. Dans l'onglet "INSIGHTS" (Insights), le menu déroulant du bouton "EXTRACT" (Extraire) s'affiche. Cliquez dessus, puis sélectionnez l'option "Extraire avec SQL".

89809b34c610569d.png

Dans la boîte de dialogue Extraire avec SQL, définissez l'ensemble de données de DESTINATION comme celui que vous avez vu dans le résultat du job Datascan. Commencez à saisir son nom. Il devrait apparaître dans la saisie semi-automatique. Cliquez sur le bouton Extraire. Vous pouvez également créer un ensemble de données à ce stade et l'extraire.

L'éditeur de requête BigQuery devrait s'ouvrir sur un onglet contenant le code SQL extrait de l'inférence d'analyse des données.

8. Validation SQL et création de schéma

Si la requête générée semble correcte et pertinente sémantiquement par rapport à vos données non structurées, exécutez-la en cliquant sur le bouton "Exécuter" dans l'éditeur de requêtes. La création du schéma requis pour le stockage structuré de vos contenus multimédias non structurés prendra quelques minutes.

Une fois l'opération terminée, vous devriez pouvoir vérifier le schéma en développant l'ensemble de données dans le volet de l'explorateur de BigQuery Studio, comme indiqué ci-dessous :

6e65906240a9a8be.png

Très bien ! C'était tellement agréable de faire toutes ces choses liées à la base de données très rapidement. Il est maintenant temps de passer au test ultime !

9. Le test ultime !!!

Imaginons que je souhaite que mon agent réponde aux questions des utilisateurs avec des informations réelles, complètes et bien orchestrées, ancrées dans des faits. Je vais poser une question à laquelle l'agent ne pourra répondre qu'en se référant à plusieurs fichiers multimédias et références de ma source.

Voici ma question :

I'm really interested in your Midnight Swirl froyo. Are there any allergens in it?

Désormais, une recherche générique ou une recherche LLM indiquera "Aucun ingrédient". Mais nous avons créé une inférence sémantique complète qui convertit tous nos contenus multimédias non structurés en données structurées. Voici une requête SQL simple qui récupère ces informations :

SELECT p.product_name, i.ingredient_name, a.allergen_name, category, stability
FROM froyo_data.consistsof c
INNER JOIN froyo_data.product p
  ON c.product_id = p.product_id
INNER JOIN froyo_data.ingredient i
  ON c.ingredient_id = i.ingredient_name
LEFT OUTER JOIN froyo_data.containsallergen a
  ON i.ingredient_id = a.ingredient_id
WHERE
  UPPER(p.product_name) LIKE '%MIDNIGHT%SWIRL%'
  AND allergen_name IS NOT NULL;

Excellent ! Examinez le résultat :

f582d55814a23e8.png

10. Effectuer un nettoyage

Une fois cet atelier terminé, n'oubliez pas de supprimer le job d'analyse et les tables BigQuery qu'il a créées.

Accédez à https://console.cloud.google.com/bigquery/governance/metadata-curation/cloud-storage-discovery. Sélectionnez le job que vous souhaitez supprimer en cliquant sur les trois points verticaux à côté, puis sur SUPPRIMER.

9fcbbfa1a9ccba6d.png

Cela devrait libérer de l'espace.

11. Félicitations

Notre implémentation a réussi à identifier l'allergène caché. Plus de dark data, les amis !!! Dans la deuxième partie, nous fédérerons ces données BigQuery dans un système transactionnel avec AlloyDB pour unifier les besoins en données de notre application agentique.