Blog / AI
AI

Construire des ensembles de données vectorielles prêtes pour l’IA pour les LLM : Un guide avec Bright Data, Google Gemini et Pinecone

26 min de lecture
Building AI-Ready Vector Datasets for LLMs blog image

Les grands modèles de langage (LLM) transforment la façon dont nous accédons à l’information et construisons des applications intelligentes. Pour exploiter pleinement leur potentiel, en particulier avec des connaissances spécifiques à un domaine ou des données propriétaires, il est essentiel de créer des ensembles de données vectorielles structurées de haute qualité. Les performances et la précision d’un LLM sont directement liées à la qualité de ses données d’entrée. Des ensembles de données mal préparés peuvent conduire à des résultats médiocres, tandis que des ensembles bien conçus peuvent transformer un LLM en un véritable expert du domaine.

Dans ce guide, nous allons voir comment construire un pipeline automatisé pour générer des ensembles de données vectorielles prêtes pour l’IA, étape par étape.

Le défi : la recherche et la préparation de données pour les modules d’apprentissage tout au long de la vie

Bien que les LLM soient formés sur de vastes corpus de textes à usage général, ils sont souvent insuffisants lorsqu’ils sont appliqués à des tâches ou domaines spécifiques, tels que la réponse à des requêtes liées à des produits, l’analyse d’informations sectorielles ou l’interprétation du retour d’information des clients. Pour qu’ils soient vraiment utiles, vous avez besoin de données de haute qualité adaptées à votre cas d’utilisation.

Ces données sont généralement disséminées sur le web, cachées derrière des structures de site complexes ou protégées par des mesures anti-bots.

Notre flux de travail automatisé résout ce problème grâce à un pipeline rationalisé qui gère les parties les plus difficiles de la création de jeux de données :

  • Extraction de données Web. Utilise Bright Data pour extraire des données à grande échelle, en s’appuyant sur son infrastructure axée sur l’IA pour contourner des difficultés telles que les CAPTCHA et les blocages d’IP.
  • Structuration des données. Utilise Google Gemini pour analyser, nettoyer et convertir le contenu brut en JSON bien structuré.
  • Intégration sémantique. Transforme le texte en vecteurs d’intégration qui capturent la richesse du sens contextuel.
  • Stockage et récupération. Indexe les vecteurs dans Pinecone, une base de données de recherche sémantique rapide et évolutive.
  • Sortie prête pour l’IA. Produit des ensembles de données de haute qualité prêts pour le réglage fin, le RAG ou d’autres applications d’IA spécifiques à un domaine.

Vue d’ensemble des technologies de base

Avant de construire le pipeline, jetons un coup d’œil rapide aux technologies de base impliquées et à la manière dont chacune d’entre elles soutient le flux de travail.

Bright Data : Collecte de données Web évolutive

La première étape de la création d’un jeu de données vectorielles prêt pour l’IA consiste à collecter des données sources pertinentes et de qualité. Si certaines d’entre elles peuvent provenir de systèmes internes tels que des bases de connaissances ou de la documentation, une grande partie est souvent issue du web public.

Cependant, les sites web modernes utilisent des mécanismes anti-bots sophistiqués, tels que les CAPTCHA, la limitation du taux d’IP et l’empreinte du navigateur, qui rendent difficile le scraping à grande échelle.

Bright Data résout ce problème grâce à son API Web Unlocker, qui fait abstraction de la complexité de la collecte des données. Elle gère automatiquement la rotation du proxy, la résolution des CAPTCHA et l’émulation du navigateur, ce qui vous permet de vous concentrer entièrement sur les données plutôt que sur la manière d’y accéder.

Google Gemini : Transformation intelligente du contenu

Gemini est une famille de puissants modèles d’IA multimodaux développés par Google qui excellent dans la compréhension et le traitement de divers types de contenu. Dans notre pipeline d’extraction de données, Gemini remplit trois fonctions essentielles :

  1. Analyse du contenu: Traite le contenu HTML brut ou, de préférence, le contenu Markdown nettoyé.
  2. Extraction d’informations: Identifie et extrait des points de données spécifiques sur la base d’un schéma prédéfini.
  3. Structuration des données: Transforme les informations extraites en un format JSON propre et structuré.

Cette approche alimentée par l’IA offre des avantages majeurs par rapport aux méthodes traditionnelles qui reposent sur des sélecteurs CSS fragiles ou des expressions régulières fragiles, en particulier dans des cas d’utilisation tels que :

  • Pages Web dynamiques – Pages dont la mise en page ou le DOM change fréquemment (fréquentes dans les sites de commerce électronique, les portails d’information et d’autres domaines à forte vélocité).
  • Contenu non structuré : Extraction de données structurées à partir de blocs de texte longs ou mal organisés.
  • Logique d’analyse complexe : Éviter la nécessité de maintenir et de déboguer des règles de scraping personnalisées pour chaque site ou variation de contenu.

Pour en savoir plus sur la façon dont l’IA transforme le processus d’extraction de données, consultez la section Utilisation de l’IA pour le scraping Web. Si vous êtes à la recherche d’un tutoriel pratique sur la mise en œuvre de Gemini dans votre flux de travail de scraping, consultez notre guide complet : Web Scraping with Gemini.

Transformateurs de phrases : Génération d’enchâssements sémantiques

Les embeddings sont des représentations vectorielles denses de textes (ou d’autres types de données) dans un espace à haute dimension. Ces vecteurs capturent le sens sémantique, ce qui permet de représenter des morceaux de texte similaires par des vecteurs proches les uns des autres, mesurés à l’aide de métriques telles que la similarité cosinusoïdale ou la distance euclidienne. Cette propriété est importante pour des applications telles que la recherche sémantique, le regroupement et la génération augmentée par récupération (RAG), où la recherche d’un contenu pertinent dépend de la proximité sémantique.

La bibliothèque Sentence Transformers fournit une interface facile à utiliser pour générer des enchâssements de phrases et de paragraphes de haute qualité. Construite au-dessus de Hugging Face Transformers, elle prend en charge une large gamme de modèles pré-entraînés adaptés aux tâches sémantiques.

L’un des modèles les plus populaires et les plus efficaces de cet écosystème est le tout-MiniLM-L6-v2. Voici pourquoi il se distingue :

  • Architecture : Basée sur l’architecture MiniLM, optimisée pour la vitesse et la taille tout en conservant de bonnes performances.
  • Dimension d’intégration : Il permet de faire correspondre les entrées à un espace vectoriel de 384 dimensions, ce qui le rend à la fois efficace et compact.
  • Objectif de la formation : Affiné sur plus d’un milliard de paires de phrases à l’aide d’une approche d’apprentissage contrastive pour améliorer la compréhension sémantique.
  • Performances : Fournit des résultats conformes à l’état de l’art ou proches de l’état de l’art dans des tâches telles que la similarité des phrases, le regroupement sémantique et la recherche d’informations.
  • Longueur d’entrée : gère jusqu’à 256 morceaux de mots (tokens), les textes plus longs étant automatiquement tronqués, ce qui est important lors du découpage du texte.

Bien que les modèles plus grands puissent offrir des encastrements légèrement plus nuancés, all-MiniLM-L6-v2 offre un équilibre exceptionnel entre les performances, l’efficacité et le coût. Ses vecteurs à 384 dimensions sont :

  • Plus rapide à calculer.
  • Moins gourmande en ressources.
  • Plus facile à stocker et à indexer.

Pour la plupart des cas d’utilisation pratique, en particulier dans les premières phases de développement ou dans les environnements à ressources limitées, ce modèle est plus que suffisant. La baisse marginale de la précision dans les cas extrêmes est généralement compensée par les gains significatifs en termes de vitesse et d’évolutivité. Il est donc recommandé d’utiliser all-MiniLM-L6-v2 lors de la création de la première itération de votre application d’IA ou lors de l’optimisation des performances sur une infrastructure modeste.

Pinecone : Stockage et recherche de Vector Embeddings

Une fois le texte transformé en encastrements vectoriels, vous avez besoin d’une base de données spécialisée pour les stocker, les gérer et les interroger efficacement. Les basesde données traditionnelles ne sont pas conçues pour cela :les bases de données vectorielles sont spécialement conçues pour gérer la nature hautement dimensionnelle des données d’intégration, ce qui permet une recherche de similarité en temps réel, essentielle pour les pipelines RAG, la recherche sémantique, la personnalisation et d’autres applications basées sur l’IA.

Pinecone est une base de données vectorielle populaire connue pour son interface conviviale pour les développeurs, ses performances de recherche à faible latence et son infrastructure entièrement gérée. Elle gère efficacement les complexités de l’indexation et de la recherche vectorielle à grande échelle, en faisant abstraction des complexités de l’infrastructure de recherche vectorielle. Ses principaux composants sont les suivants

  • Index: Conteneurs de stockage pour vos vecteurs.
  • Vecteurs: Les encastrements réels avec les métadonnées associées.
  • Collections: Instantanés statiques d’index pour la sauvegarde et la gestion des versions.
  • Espaces de noms: Partitionnement des données au sein d’un index pour la multi-location.

Pinecone propose deux architectures de déploiement : Serverless et Pod-Based. Pour la plupart des cas d’utilisation, en particulier lors du démarrage ou pour faire face à des charges dynamiques, Serverless est l’option recommandée en raison de sa simplicité et de son efficacité en termes de coûts.

Configuration et conditions préalables

Avant de construire le pipeline, assurez-vous que les composants suivants sont correctement configurés.

Conditions préalables

  • Python 3.9 ou plus doit être installé sur votre système.
  • Rassemblez les informations d’identification API suivantes
    :Polylang placeholder do not modify

Reportez-vous aux sections de configuration spécifiques à l’outil ci-dessous pour obtenir des instructions sur la génération de chaque clé API.

Installer les bibliothèques requises

Installez les bibliothèques Python de base pour ce projet :

pip install requests python-dotenv google-generativeai sentence-transformers pinecone

Ces bibliothèques fournissent

  • requêtes: Un client HTTP populaire pour interagir avec les API(guide des requêtes)
  • python-dotenv: Chargement sécurisé des clés d’API à partir de variables d’environnement
  • google-generativeai: SDK Gemini officiel de Google (supporte aussi JavaScript, Go, et d’autres langages)
  • transformateurs de phrases: Modèles pré-entraînés pour la génération d’encastrements de vecteurs sémantiques
  • pinecone: SDK pour la base de données vectorielle de Pinecone(SDK pour Python, Node.js, Go, etc.)

Configuration des variables d’environnement

Créez un fichier .env dans le répertoire racine de votre projet et ajoutez-y vos clés API :

BRIGHT_DATA_API_KEY="your_bright_data_api_key_here"
GEMINI_API_KEY="your_gemini_api_key_here"
PINECONE_API_KEY="your_pinecone_api_key_here"

Configuration des données lumineuses

Pour utiliser le Web Unlocker de Bright Data :

  1. Créer un jeton API
  2. Configurez une zone Web Unlocker à partir de votre tableau de bord Bright Data

Pour des exemples de mise en œuvre et le code d’intégration, consultez le répertoire GitHub de Web Unlocker.

Si vous êtes encore en train de comparer des solutions, cette comparaison des outils de scraping de l’IA offre un aperçu de la manière dont Bright Data se positionne par rapport à d’autres plates-formes.

Configuration des Gémeaux

Pour générer une clé API Gemini :

  1. Accéder à Google AI Studio
  2. Cliquez sur “+ Créer une clé API”
  3. Copier la clé et la conserver en toute sécurité

Conseil : le niveau gratuit est suffisant pour le développement et les tests à petite échelle. Pour une utilisation en production, où vous pouvez avoir besoin d’un débit plus élevé (RPM/RPD), de fenêtres de jetons plus grandes (TPM), ou d’une confidentialité de niveau entreprise et d’un accès à des modèles avancés, reportez-vous aux limites de taux et aux plans de tarification.

Installation de la pomme de pin

  1. S’inscrire sur Pinecone.io
  2. Copiez votre clé API depuis le tableau de bord
  3. Pour créer un nouvel index
    :Polylang placeholder, ne pas modifier

Une fois la configuration terminée, l’index apparaît en vert et les enregistrements sont initialement nuls.

configuration de l'index pinecone

Construire le pipeline : Mise en œuvre étape par étape

Maintenant que nos conditions préalables sont configurées, construisons notre pipeline de données en utilisant les avis sur les produits MacBook Air M1 de Walmart comme exemple pratique.

walmart-macbook-reviews

Étape 1 : Acquisition de données avec Bright Data Web Unlocker

La base de notre pipeline consiste à récupérer le contenu HTML brut des URL cibles. Le Web Unlocker de Bright Data excelle à contourner les mesures anti-scraping sophistiquées couramment employées par les sites de commerce électronique tels que Walmart.

walmart-robot-detection

Commençons par cette implémentation pour récupérer le contenu d’une page web :

import requests
import os
from dotenv import load_dotenv

# Load API key from environment
load_dotenv()
BRIGHT_DATA_API_KEY = os.getenv("BRIGHT_DATA_API_KEY")

def fetch_page(url: str) -> str:
    """Fetch page content using Bright Data Web Unlocker (Markdown format)"""
    try:
        response = requests.post(
            "https://api.brightdata.com/request",
            headers={
                "Authorization": f"Bearer {BRIGHT_DATA_API_KEY}",
                "Content-Type": "application/json",
            },
            json={
                "zone": "web_unlocker2",
                "url": url,
                "format": "raw",
                "data_format": "markdown",  # Direct HTML-to-Markdown conversion
            },
            timeout=60,
        )

        if response.status_code == 200 and len(response.text) > 1000:
            return response.text

    except Exception as e:
        print(f"Request failed: {str(e)}")

    return None

# Example usage
walmart_url = "https://www.walmart.com/reviews/product/609040889?page=1"
page_content = fetch_page(walmart_url)

if page_content:
    print(f"Success! Retrieved {len(page_content)} characters")
else:
    print("Failed to fetch page")

Pourquoi utiliser le format Markdown au lieu du HTML brut ? Dans notre pipeline, nous demandons du contenu au format Markdown(data_format : 'markdown') pour plusieurs raisons importantes. Markdown supprime les balises HTML, le style et d’autres bruits, réduisant ainsi la complexité et ne laissant que le contenu essentiel. Il en résulte un nombre de jetons nettement inférieur, ce qui rend le traitement LLM plus efficace. Il préserve également la structure sémantique dans un format plus propre et plus lisible, ce qui améliore à la fois la clarté et la vitesse de traitement. Les opérations telles que la génération d’encastrements et l’indexation de vecteurs deviennent plus rapides et plus légères.

Pour en savoir plus sur les raisons pour lesquelles les agents d’intelligence artificielle modernes favorisent le format Markdown, lisez Pourquoi les nouveaux agents d’intelligence artificielle choisissent-ils le format Markdown plutôt que le format HTML.

Étape 2 : Gestion de la pagination

Walmart distribue des avis sur les produits sur de nombreuses pages. Pour capturer des ensembles de données complets, mettez en œuvre la gestion de la pagination. Vous devez

  1. Construire l’URL de la page correcte (?page=1, ?page=2, etc.)
  2. Récupérer le contenu de chaque page
  3. Détecter s’il y a une “page suivante” ou non
  4. Continuer jusqu’à ce qu’il n’y ait plus de pages disponibles

Voici une simple boucle de pagination qui récupère le contenu jusqu’à ce qu’aucune référence page=n+1 ne soit trouvée :

current_page = 1

while True:
    url = f"https://www.walmart.com/reviews/product/609040889?page={current_page}"
    page_content = fetch_page(url)

    if not page_content:
        print(f"Stopping at page {current_page}: fetch failed or no content.")
        break

    # Do something with the fetched content here
    print(f"Fetched page {current_page}")

    # Check for presence of next page reference
    if f"page={current_page + 1}" not in page_content:
        print("No next page found. Ending pagination.")
        break

    current_page += 1

Étape 3 : Extraction de données structurées avec Google Gemini

Avec le contenu Markdown propre de l’étape précédente, nous allons maintenant utiliser Google Gemini pour extraire des informations spécifiques des avis et les structurer sous forme de JSON. Le texte non structuré est ainsi transformé en données organisées que notre base de données vectorielle peut indexer efficacement.

Nous utiliserons le modèle gemini-2.0-flash, qui offre des spécifications impressionnantes pour notre cas d’utilisation :

  • Contexte d’entrée: 1 048 576 tokens
  • Limite de sortie: 8 192 jetons
  • Soutien multimodal: Texte, code, images, audio et vidéo

Dans notre cas, le texte en markdown de la page d’évaluation de Walmart contient généralement environ 3 000 tokens, ce qui est bien en deçà de la limite du modèle. Cela signifie que nous pouvons envoyer la page entière en une seule fois sans la diviser en petits morceaux.

comptage de jetons

Si vos documents dépassent la fenêtre contextuelle, vous devrez mettre en œuvre des stratégies de découpage. Mais pour des pages web typiques, la capacité de Gemini rend cela inutile.

Voici un exemple de fonction Python qui utilise Gemini pour extraire des avis dans un format JSON structuré :

import google.generativeai as genai
import json

# Initialize Gemini with JSON output configuration
model = genai.GenerativeModel(
    model_name="gemini-2.0-flash",
    generation_config={"response_mime_type": "application/json"},
)

def extract_reviews(markdown: str) -> list[dict]:
    """Extract structured review data from Markdown using Gemini."""
    prompt = f"""
    Extract all customer reviews from this Walmart product page content.
    Return a JSON array of review objects with the following structure:

    {{
      "reviews": [
        {{
          "date": "YYYY-MM-DD or original date format if available",
          "title": "Review title/headline",
          "description": "Review text content",
          "rating": <integer from 1–5>
        }}
      ]
    }}

    Rules:
    - Include all reviews found on the page
    - Use null for any missing fields
    - Convert ratings to integers (1–5)
    - Extract the full review text, not just snippets
    - Preserve original review text without summarizing

    Here's the page content:
    {markdown}
    """

    response = model.generate_content(prompt)
    result = json.loads(response.text)

    # Normalize and clean results
    return [
        {
            "date": review.get("date"),
            "title": review.get("title"),
            "description": review.get("description", "").strip(),
            "rating": review.get("rating"),
        }
        for review in result.get("reviews", [])
    ]

Une ingénierie rapide est essentielle lorsque l’on travaille avec des LLM. Dans notre implémentation, nous avons défini response_mime_type : "application/json" pour s’assurer que Gemini renvoie du JSON valide, éliminant ainsi le besoin d’une analyse complexe du texte. L’invite elle-même est soigneusement conçue pour réduire les hallucinations en demandant à Gemini de se fier uniquement au contenu fourni. Il applique également un schéma JSON strict pour la cohérence structurelle, préserve le texte complet de l’avis sans le résumer et gère les champs manquants de manière élégante.

Après avoir traité une page d’évaluation de Walmart, vous recevrez des données structurées comme celles-ci :

[
  {
    "date": "Apr 13, 2025",
    "title": "Better than buying OPEN BOX",
    "description": "I bought an older product OPEN BOX (which I consider UNUSED) from another website. The battery was dead. Walmart offered NEW at a lower price. WOW!!!!",
    "rating": 5
  },
  {
    "date": "Dec 8, 2024",
    "title": "No support",
    "description": "The young man who delivered my laptop gave me the laptop with no receipt or directions. I asked where my receipt and some kind of manual were. He said it would be under my purchases. I would happily change this review if I knew where to go for help and support. The next day I went to the electronics department for help, and he had no idea.",
    "rating": 3
  }
  // ... more reviews
]

Pour un exemple pratique qui combine toutes les étapes (recherche, traitement et extraction), consultez l’implémentation complète sur GitHub.

Étape 4 : Génération d’encodages vectoriels à l’aide de transformateurs de phrases

Avec des données d’évaluation propres et structurées au format JSON, nous générons maintenant des encastrements vectoriels sémantiques pour chaque évaluation. Ces encastrements seront utilisés pour des tâches en aval comme la recherche sémantique ou l’indexation dans une base de données vectorielle comme Pinecone.

Pour saisir le contexte complet d’un avis de client, nous combinons le titre et la description de l ‘avis en une seule chaîne avant de l’intégrer. Cela permet au modèle d’encoder plus efficacement le sentiment et le sujet.

Voici un exemple de code :

from sentence_transformers import SentenceTransformer

# Load the embedding model
model = SentenceTransformer("all-MiniLM-L6-v2")

def generate_embeddings(reviews):
    """Generate 384-dimensional vector embeddings from review titles and descriptions."""
    texts = []
    valid_indices = []

    # Combine title and description into a single string for embedding
    for idx, review in enumerate(reviews):
        text_parts = []
        if review.get("title"):
            text_parts.append(f"Review Title: {review['title']}")
        if review.get("description"):
            text_parts.append(f"Review Description: {review['description']}")

        if text_parts:
            texts.append(". ".join(text_parts))
            valid_indices.append(idx)

    # Generate embeddings using batch processing
    embeddings = model.encode(
        texts, show_progress_bar=True, batch_size=32, convert_to_numpy=True
    ).tolist()

    # Attach embeddings back to original review objects
    for emb_idx, review_idx in enumerate(valid_indices):
        reviews[review_idx]["embedding"] = embeddings[emb_idx]

    return reviews

Ce que fait ce code :

  1. Initialisation du modèle : Charge le modèle all-MiniLM-L6-v2, qui renvoie des encastrements denses à 384 dimensions.
  2. Préparation de l’entrée : Combine le titre et la description de chaque examen en une seule chaîne.
  3. Encodage par lots : Utilise model.encode() avec le batching pour un traitement efficace
    :Polylang placeholder do not modify
  4. Injection d’intégration : Attache chaque vecteur à l’objet d’examen correspondant sous la clé "embedding".

Remarque importante : Pinecone ne prend pas en charge les valeurs nulles dans les métadonnées. Si un champ est manquant, vous devez omettre entièrement la clé lors du téléchargement vers Pinecone. N’utilisez pas de "N/A" ou de chaînes vides à moins qu’elles n’aient une signification spécifique dans votre logique de filtrage.

Bien que la fonction d’assainissement ne soit pas présentée ici (pour que le code reste lisible), la mise en œuvre finale inclura le nettoyage des métadonnées avant l’ingestion.

Après la génération de l’incorporation, chaque objet d’examen comprend un vecteur à 384 dimensions :

{
  "date": "Apr 9, 2024",
  "title": "Amazing Laptop!",
  "description": "This M1 MacBook Air is incredibly fast and the battery lasts forever.",
  "rating": 5,
  "embedding": [0.0123, -0.0456, 0.0789, ..., 0.0345]  // 384 dimensions
}

Une fois les embeddings générés, nos revues sont prêtes pour le stockage vectoriel dans Pinecone.

Etape 5 : Stockage des Embeddings et des métadonnées dans Pinecone

La dernière étape de notre processus consiste à télécharger les avis intégrés dans Pinecone.

Voici le code Python pour transférer les données vers Pinecone :

import uuid
from pinecone import Pinecone, Index

# Initialize Pinecone client with your API key
pc = Pinecone(api_key="PINECONE_API_KEY")
index = pc.Index("brightdata-ai-dataset")  # Replace with your actual index name

# Sample review data (with embeddings already attached)
reviews_with_embeddings = [
    {
        "date": "Apr 9, 2024",
        "title": "Amazing Laptop!",
        "description": "This M1 MacBook Air is incredibly fast and the battery lasts forever.",
        "rating": 5,
        "embedding": [0.0123, -0.0456, ..., 0.0789],  # 384-dimensional vector
    }
    # ... more reviews
]

# Prepare vector records for upload
vectors = []
for review in reviews_with_embeddings:
    if "embedding" not in review:
        continue  # Skip entries without embeddings

    vectors.append(
        {
            "id": str(uuid.uuid4()),  # Unique vector ID
            "values": review["embedding"],
            "metadata": {
                "title": review.get("title"),
                "description": review.get("description"),
                "rating": review.get("rating"),
                # Add more metadata fields if needed
            },
        }
    )

# Batch upload to Pinecone (100 vectors per request)
for i in range(0, len(vectors), 100):
    batch = vectors[i : i + 100]
    index.upsert(vectors=batch)

Chaque vecteur que vous insérez dans Pinecone doit inclure :

  • id: Une chaîne d’identification unique (obligatoire)
  • valeurs: Le vecteur lui-même (liste de valeurs flottantes, par exemple, 384 dimensions).
  • métadonnées: Paires clé-valeur facultatives pour le filtrage et le contexte (compatibles JSON)

Exemple de structure vectorielle :

Une fois le téléchargement terminé, votre index Pinecone sera alimenté en vecteurs de révision :

Index de la pomme de pin avec enregistrements

Votre jeu de données vectorielles prêt pour l’IA est maintenant stocké dans Pinecone et est prêt pour les étapes suivantes 🔥

Pour un exemple pratique qui combine toutes les étapes (génération de l’intégration, téléchargement de Pinecone), consultez l’implémentation complète sur GitHub.

(Facultatif mais recommandé) Utilisation de l’ensemble de données AI-Ready

Vos embeddings étant désormais indexés dans Pinecone, vous pouvez alimenter des applications telles que la recherche sémantique et les systèmes RAG. Cette étape montre comment interroger votre base de données vectorielle et générer des réponses intelligentes.

Recherche sémantique

La manière la plus simple d’exploiter votre ensemble de données vectorisées est la recherche sémantique. Contrairement à la recherche par mots-clés, la recherche sémantique permet aux utilisateurs d’effectuer des requêtes en langage naturel et de retrouver des contenus conceptuellement similaires, même s’ils ne partagent pas les mêmes mots.

Testons le système avec des requêtes en langage naturel :

queries = [
    "good price for students",
    "lightweight and good for travel",
]

Pour la requête “bon prix pour les étudiants”, vous pourriez voir :

#1 (Score: 0.6201)
ID: 75878bdc-8d96-416a-8292-484971c3bd61
Date: Aug 3, 2024
Rating: 5.0
Description: Just what my daughter needed for college and the price was perfect

#2 (Score: 0.5868)
ID: 758963ae-0927-4e82-bece-d098991f5a73
Date: Jun 13, 2024
Rating: 5.0
Description: The price was right. Perfect graduation present for my grandson

🙌 Cela fonctionne à merveille ! Les requêtes en langage naturel renvoient des résultats très pertinents.

C’est ainsi que fonctionne la recherche sémantique :

  1. Intégration de la requête: La requête de recherche est convertie en un vecteur à l’aide du même modèle all-MiniLM-L6-v2 que celui utilisé pour l’indexation.
  2. Recherche de vecteurs: Pinecone trouve les vecteurs les plus similaires en utilisant la similarité cosinus.
  3. Recherche de métadonnées: Les résultats comprennent à la fois les scores de similarité et les métadonnées associées.

Pour une implémentation complète, consultez le fichier Python du client de recherche sémantique : Fichier Python du client de recherche sémantique.

Au-delà de la recherche : Génération augmentée de la recherche (RAG)

Une fois que la recherche sémantique fonctionne, vous n’êtes plus qu’à une étape de la construction d’un système RAG alimenté par le LLM. Retrieval Augmented Generation (RAG) permet à votre LLM de générer des réponses fondées en utilisant un contexte externe, comme votre ensemble de données vectorisées.

RAG Flow :

  1. L’utilisateur pose une question (par exemple : “Ce MacBook est-il adapté aux étudiants ?”).
  2. La recherche sémantique permet d’extraire les documents pertinents de Pinecone.
  3. Le contexte et la question récupérés sont envoyés à un LLM tel que Google Gemini.
  4. LLM répond avec les faits de votre ensemble de données.

Exemple de réponses RAG :

🤔 User: Is the battery life good for college use?
🤖 Assistant: Yes, users report long battery life—enough to last through full days of classes and study.

🤔 User: How does this compare to a Chromebook?
🤖 Assistant: One review says the MacBook Air "works so smoothly compared to a Chromebook".

Voir le code complet utilisé pour RAG et la recherche sémantique : Mise en œuvre du chatbot RAG.

Prochaines étapes

Vous avez réussi à mettre en place un pipeline complet pour créer des ensembles de données vectorielles prêtes pour l’IA. Voici comment étendre et optimiser votre mise en œuvre :

  1. Acquisition de données à grande échelle : Pour des besoins de données plus importants, explorez l’infrastructure complète de données Web prête pour l’IA de Bright Data pour un accès illimité et conforme aux données Web, optimisé pour les modèles et les agents d’IA.
  2. Expérimentez avec les modèles d’intégration : Bien que le modèle all-MiniLM-L6-v2 soit efficace, vous pouvez obtenir de meilleurs résultats pour certains cas d’utilisation en passant à des modèles plus grands ou multilingues. Vous pouvez également essayer d’intégrer les API de Google Gemini et OpenAI.
  3. Affiner les invites d’extraction : Adaptez l’invite Gemini aux différentes structures de sites web ou aux schémas de données que vous devez extraire.
  4. Exploiter les fonctionnalités avancées de Pinecone : Explorez le filtrage, les espaces de noms, l’indexation des métadonnées et la recherche hybride en vous plongeant dans la documentation officielle de Pinecone.
  5. Automatiser le pipeline : Intégrez ce pipeline dans un flux de production à l’aide d’outils comme Apache Airflow ou Prefect pour l’orchestration, AWS Step Functions ou Google Cloud Workflows pour la programmation cloud-native.
  6. Créez une application alimentée par l’IA : Utilisez la recherche sémantique ou les composants RAG pour créer des outils concrets tels que des robots d’assistance à la clientèle, des bases de connaissances et des moteurs de recommandation.

Conclusion

Vous avez réussi à construire un pipeline complet et robuste qui crée et gère des ensembles de données vectorielles prêtes pour l’IA, transformant les données Web brutes en atouts précieux pour les grands modèles de langage. En combinant Bright Data pour un scraping web évolutif, Google Gemini pour une extraction structurée intelligente, Sentence Transformers pour générer des embeddings sémantiques et Pinecone pour le stockage et la récupération de vecteurs, vous avez préparé efficacement vos données personnalisées pour améliorer les applications LLM.

Cette approche permet aux LLM d’acquérir des connaissances dans des domaines spécifiques et de fournir des solutions alimentées par l’IA plus précises, plus pertinentes et plus utiles.

Aucune carte de crédit requise

Autres lectures et ressources

Explorez ces ressources pour approfondir votre compréhension de l’IA, des LLM et de l’extraction de données sur le web :