Comment Transformer N'importe Quel Site Web en une Base de Connaissance Graphique avec un Co-Pilote AI prêt pour la Production
Comment Transformer un Site Web en une Base de Connaissance Graphique Avec un Co-Pilote en Production Les entreprises disposent de vastes quantités d'informations, mais trouver des réponses précises peut souvent être frustrant et inefficace pour les clients ou les membres de l'équipe interne. Un co-pilote personnalisé doté d'une compréhension globale des produits, services ou de l'entreprise peut grandement améliorer l'engagement client et rationaliser l'accès aux connaissances internes. Transformez n'importe quel contenu de site web en un co-pilote de production prêché à l'usage avec les outils open-source Crawl4ai et R2R (Reason to Retrieve). Outils Utilisés Crawl4ai: Un outil open-source de crawling et de scraping de sites web conçu spécifiquement pour les workflows AI modernes. Il extrait et structure le contenu des sites web de manière optimale pour que les modèles de langage en grande partie (LLMs) puissent l'utiliser efficacement. R2R (Reason to Retrieve): Une plateforme AI avancée de récupération et de génération augmentée avec une API RESTful. Elle prend en charge l'ingestion multimodale, des fonctionnalités de recherche hybrides, des relations graphiques configurables, ainsi qu'un module de gestion des utilisateurs et des documents. Étape 1 : Extraction des Contenus du Site Web avec Crawl4ai Configuration de l'Environnement Création de l'environnement virtuel : sh uv venv .venv --python=python3.12 source .venv/bin/activate Installation des dépendances : sh pip install crawl4ai pydantic Chargement des clés API pour les fournisseurs de modèles LLM : sh echo -e "OPENAI_API_KEY=$(read -sp 'Enter OpenAI API key: ' okey && echo $okey)\nGROQ_API_KEY=$(read -sp 'Enter Groq API key: ' gkey && echo $gkey)" > .env && echo -e "\n✅ .env file created successfully" Définition du Modèle de Données avec Pydantic Pour garantir la propreté, la cohérence et la lisibilité des données extractées, nous utiliseons Pydantic pour définir un schéma structuré des propriétés des produits. ```python from pydantic import BaseModel class ProductDetails(BaseModel): upc: str type: str price: str inventory_count: int class Product(BaseModel): title: str description: str details: ProductDetails ``` Extraction de Contenu avec la Stratégie LLM Nous utilisons la classe LLMExtractionStrategy de Crawl4ai pour extraire des données structurées directement à partir de HTML brut. Cette étape est particulièrement utile lorsque les données sont complexes ou non structurées. ```python from crawl4ai import LLMExtractionStrategy, LLMConfig extraction_strategy = LLMExtractionStrategy( llm_config=LLMConfig(provider="groq/deepseek-r1-distill-llama-70b", api_token=os.getenv('GROQ_API_KEY')), schema=Product.model_json_schema(), extraction_type="schema", instruction="Extract all product objects specified in the schema from the text.", chunk_token_threshold=1200, overlap_rate=0.1, apply_chunking=True, input_format="html", extra_args={"temperature": 0.1, "max_tokens": 1000}, verbose=True ) ``` Configuration des Filtres de Crawl Crawl4ai permet de chaîner des filtres pour cibler des modèles d'URL spécifiques et éviter les pages non pertinentes. ```python from crawl4ai.deep_crawling.filters import FilterChain, URLPatternFilter, ContentTypeFilter filter_chain = FilterChain([ URLPatternFilter(patterns=["catalogue"], reverse=False), URLPatternFilter(patterns=["category", "/books/"], reverse=True), ContentTypeFilter(allowed_types=["text/html"]) ]) ``` Configuration du Crawler La classe CrawlerRunConfig permet de définir le comportement central du crawler, notamment la gestion des URL, l'extraction de contenu, les éléments dynamiques et le cache. ```python from crawl4ai import CrawlerRunConfig, BFSDeepCrawlStrategy, CacheMode, LXMLWebScrapingStrategy config = CrawlerRunConfig( deep_crawl_strategy=BFSDeepCrawlStrategy( max_depth=2, include_external=False, max_pages=2, filter_chain=filter_chain ), cache_mode=CacheMode.BYPASS, extraction_strategy=extraction_strategy, scraping_strategy=LXMLWebScrapingStrategy(), verbose=True ) ``` Exécution du Crawl Le crawler extrait les données en parallèle, ce qui accélère considérablement le processus. Le script suivant configure et exécute le crawl. ```python import os import json from crawl4ai import AsyncWebCrawler from dotenv import load_dotenv import asyncio class ProductDetails(BaseModel): upc: str type: str price: str inventory_count: int class Product(BaseModel): title: str description: str details: ProductDetails extraction_strategy = LLMExtractionStrategy( llm_config=LLMConfig(provider="groq/deepseek-r1-distill-llama-70b", api_token=os.getenv('GROQ_API_KEY')), schema=Product.model_json_schema(), extraction_type="schema", instruction="Extract all product objects specified in the schema from the text.", chunk_token_threshold=1200, overlap_rate=0.1, apply_chunking=True, input_format="html", extra_args={"temperature": 0.1, "max_tokens": 1000}, verbose=True ) async def run_advanced_crawler(): filter_chain = FilterChain([ URLPatternFilter(patterns=["catalogue"], reverse=False), URLPatternFilter(patterns=["category", "/books/"], reverse=True), ContentTypeFilter(allowed_types=["text/html"]) ]) config = CrawlerRunConfig( deep_crawl_strategy=BFSDeepCrawlStrategy( max_depth=2, include_external=False, max_pages=2, filter_chain=filter_chain ), cache_mode=CacheMode.BYPASS, extraction_strategy=extraction_strategy, scraping_strategy=LXMLWebScrapingStrategy(), verbose=True ) outputs = [] browser_cfg = BrowserConfig(headless=True) async with AsyncWebCrawler(config=browser_cfg) as crawler: results = await crawler.arun("https://books.toscrape.com/index.html", config=config) for result in results: if result.success: url = result.url try: data = json.loads(result.extracted_content) print(f"Successfully extracted data from {url}") for item in data: if isinstance(item, dict): item['source_url'] = url outputs.extend(data) except json.JSONDecodeError: print(f"Error decoding JSON from {url}: {result.extracted_content}") else: print(f"Error crawling {url}: {result.error_message}") if outputs: output_file = "extracted_products.json" with open(output_file, 'w', encoding='utf-8') as f: json.dump(outputs, f, indent=4, ensure_ascii=False) print(f"Data for {len(outputs)} products saved to {output_file}") if name == "main": asyncio.run(run_advanced_crawler()) ``` Étape 2 : Construction d'un Graphe de Connaissance avec R2R Une fois que les données ont été extraites et structurées, nous les transformons en un graphe de connaissances en utilisant R2R. R2R offre une interface interactive de type co-pilote pour interroger les données. Installation de R2R Installation locales : R2R supporte des modes d'installation légère et complète. Pour ce tutoriel, nous optons pour l'installation complète, qui inclut l'expérience de co-pilote basée sur un navigateur. sh uv pip install r2r Démarrage avec Docker : Vous devez avoir Docker installé pour exécuter R2R en mode complet. Suit les instructions de lancement fournies dans le guide d'installation officiel de R2R. Ingestion des Fichiers Une fois R2R en place, vous pouvez charger le fichier JSON généré dans la dashboard. ```python from r2r import R2RClient client = R2RClient(base_url="http://localhost:7272") client.documents.create(file_path='./extracted_products.json') ``` Vérification du Statut des Documents Vous pouvez vérifier le statut des documents pour vous assurer qu'ils ont été correctement traités. python documents = client.documents.list() print(documents) Exécution d'une Recherche Une fois les documents ingérés et traités, vous pouvez effectuer des requêtes RAG pour obtenir des réponses basées sur les données extraites. python result = client.retrieval.rag(query="Combien d'exemplaires de 'A Light in the Attic' sont en stock?") print(result.generated_answer) Conclusion Ce guide montre comment transformer le contenu statique d'un site web en une base de connaissance dynamique et interrogeable, dotée d'un co-pilote en production, en utilisant des outils open-source comme Crawl4ai et R2R. Crawl4ai facilite l'extraction et la structuration des données, tandis que R2R les transforme en un graphe de connaissances enrichi, supportant des recherches sémantiques et des interactions intuitives. Cette méthodologie fournit une base solide pour des applications variées, de l'assistance client aux systèmes de gestion des connaissances internes. Évaluations Professionnelles et Profil de l'Entreprise Les experts de l'industrie saluent l'efficacité de cette approche pour automatiser l'extraction de données et améliorer l'expérience utilisateur. Des plateformes comme Crawl4ai et R2R permettent de réduire significativement le temps et les coûts associés à la mise en place de bases de connaissances avancées. Crawl4ai et R2R, étant open-source, offrent également une transparence et une flexibilité exceptionnelles, favorisant la collaboration et l'innovation.
