Skip to content

Service Intelligence Artificielle

LangGraph Mistral AI Python

Le service IA est le cœur du traitement intelligent de Mindlet. Son rôle principal est de transformer n’importe quel type de contenu (texte, PDF, images, audio, vidéos YouTube, sites web) en cartes d’apprentissage personnalisées et efficaces.

  • 📝 Extraire du contenu depuis différentes sources (texte, PDF, images, audio, vidéos YouTube, sites web)
  • 🔢 Générer des embeddings vectoriels via Mistral AI
  • 🎴 Créer des cartes d’apprentissage intelligentes (flashcards, QCM, etc.)

LangGraph est un framework Python développé par LangChain pour créer des workflows IA orchestrés sous forme de graphes. Contrairement à une simple chaîne linéaire de prompts, LangGraph permet :

  • Des branchements conditionnels : le flux de traitement s’adapte dynamiquement au contenu
  • Des boucles de feedback : un agent peut critiquer et améliorer itérativement son travail
  • Une gestion d’état explicite : chaque étape reçoit et modifie un état typé (TypedDict)
  • Une visualisation native : les graphes sont exportables en Mermaid pour la documentation
# Exemple simplifié : un graphe LangGraph se construit comme un DAG
workflow = StateGraph(MyState) # On définit l'état qui traverse le graphe
workflow.add_node("etape1", fonction_1) # Chaque node est une fonction Python
workflow.add_node("etape2", fonction_2)
workflow.add_edge("etape1", "etape2") # Les edges connectent les nodes
graph = workflow.compile() # Le graphe compilé est invocable

Nous avons choisi Mistral AI comme provider principal pour plusieurs raisons stratégiques :

  1. Souveraineté européenne : Mistral est une entreprise française, ce qui simplifie la conformité RGPD
  2. Rapport qualité/prix : Performances comparables à GPT-4 pour un coût significativement inférieur
  3. Suite complète : Un seul provider pour LLM, embeddings, OCR, vision et transcription audio
  4. API consistante : Toutes les APIs suivent le même pattern, simplifiant l’intégration
ComposantTechnologieRôle
OrchestrationLangGraphGraphes d’agents intelligents
LLM PrincipalMistral AI (mistral-medium-latest)Génération de texte
Embeddingsmistral-embed (1024 dimensions)Vectorisation des contenus
Visionmistral-small-latestAnalyse d’images
OCRmistral-ocr-latestReconnaissance de texte
Transcriptionvoxtral-mini-latestAudio vers texte
StockageAWS S3Fichiers et médias
FrameworkLangChainChaînes de traitement

Le système est composé de 3 graphes LangGraph principaux qui orchestrent le traitement :

Architecture Mindlet AI
100%
flowchart TB
    subgraph "Mindlet AI Platform"
        INPUT["📥 Inputs<br/>(Text, PDF, Image, Audio, YouTube, Website)"]
        
        subgraph "Processing Layer"
            EG["🔄 Embedding Graph<br/>(Single Resource)"]
            BEG["📦 Batch Embedding Graph<br/>(Multiple Resources)"]
            CGG["🎴 Card Generator Graph<br/>(Agentic)"]
        end
        
        OUTPUT["📤 Outputs"]
    end
    
    INPUT --> |"Single Resource"| EG
    INPUT --> |"Multiple Resources"| BEG
    EG --> |"Embedded Chunks"| CGG
    BEG --> |"Aggregated Chunks"| CGG
    
    EG --> OUTPUT
    BEG --> OUTPUT
    CGG --> OUTPUT

Le système est organisé autour de 3 graphes LangGraph qui collaborent pour transformer du contenu brut en cartes d’apprentissage. Comprendre leurs responsabilités est essentiel pour appréhender l’architecture :

1. Embedding Graph

Le transformateur de contenu. Ce graphe prend une ressource unique (un PDF, une image, un audio…) et la convertit en “chunks” vectorisés. Il détecte automatiquement le type d’input et route vers le pipeline de traitement approprié.

2. Batch Embedding Graph

L’orchestrateur de masse. Quand un utilisateur importe plusieurs ressources à la fois, ce graphe les traite en parallèle via asyncio puis agrège les résultats. Il utilise le graphe d’embedding individuel en interne.

3. Card Generator Graph

Le créateur pédagogique. C’est un graphe “agentic” sophistiqué composé de 5 agents (Planner, Generator, Critic, Refiner, Finalizer) qui collaborent pour produire des cartes d’apprentissage de haute qualité à partir des chunks vectorisés.

Flux de données
100%
flowchart LR
    A["📄 Ressource brute"] --> B["🔄 Embedding Graph"]
    B --> C["📊 Chunks vectorisés"]
    C --> D["🎴 Card Generator"]
    D --> E["✅ Cartes d'apprentissage"]
    
    F["📚 Plusieurs ressources"] --> G["📦 Batch Embedding Graph"]
    G --> B
    
    style A fill:#1565c0,stroke:#1976d2
    style B fill:#e65100,stroke:#f57c00
    style C fill:#7b1fa2,stroke:#9c27b0
    style D fill:#2e7d32,stroke:#388e3c
    style E fill:#388e3c,stroke:#4caf50
    style F fill:#1565c0,stroke:#1976d2
    style G fill:#e65100,stroke:#f57c00

Le système détecte automatiquement le type de contenu et applique le traitement approprié :

class InputType(str, Enum):
"""Types d'input pour le graph embedding.
Chaque type déclenche un pipeline de traitement spécifique
optimisé pour extraire le contenu de manière optimale.
"""
TEXT = "text" # Texte brut → chunking direct
DOCUMENT = "document" # PDFs → parsing texte ou OCR
IMAGE = "image" # Images → description par vision IA
AUDIO = "audio" # Fichiers audio → transcription
YOUTUBE = "youtube" # URLs YouTube → récup transcription ou fallback audio
WEBSITE = "website" # URLs web → crawl et conversion markdown
VIDEO = "video" # Fichiers vidéo → extraction audio puis transcription

Quelle que soit la source, le contenu suit toujours ces étapes. Ce pipeline unifié garantit une qualité constante des embeddings produits :

  1. Détection du type d’input

    • Analyse automatique de la ressource
    • Routage vers le pipeline approprié
  2. Extraction du contenu

    • PDF : Parsing texte ou OCR selon la complexité
    • Image : Analyse vision avec Mistral
    • Audio : Transcription avec Voxtral
    • Vidéo YouTube : API transcription ou fallback audio
    • Site web : Crawl et conversion Markdown
  3. Détection de contenu complexe

    • Identification des tables, code, formules
    • Sélection du splitter approprié
  4. Chunking intelligent

    • Découpage en segments de 512 tokens
    • Chevauchement de 15% pour la cohérence
  5. Enrichissement (si nécessaire)

    • Enrichissement LLM des chunks complexes
    • Préservation de la structure sémantique
  6. Génération des embeddings

    • Vectorisation via mistral-embed
    • Dimension : 1024
    • Batch de 50 textes par appel
Embedding Graph
100%
graph TD;
    __start__([__start__]):::first
    input_router(input_router)
    audio_input_check(audio_input_check)
    youtube_input_check(youtube_input_check)
    image_input_check(image_input_check)
    text_input_check(text_input_check)
    website_input_check(website_input_check)
    document_input_check(document_input_check)
    detect_complex_content(detect_complex_content)
    splitter_selection(splitter_selection)
    splitter_application(splitter_application)
    chunk_enrichment(chunk_enrichment)
    embedding_generation(embedding_generation)
    __end__([__end__]):::last
    
    __start__ --> input_router;
    input_router -.-> audio_input_check;
    input_router -.-> document_input_check;
    input_router -.-> image_input_check;
    input_router -.-> text_input_check;
    input_router -.-> website_input_check;
    input_router -.-> youtube_input_check;
    
    text_input_check --> detect_complex_content;
    detect_complex_content --> splitter_selection;
    splitter_selection --> splitter_application;
    splitter_application -. enrich .-> chunk_enrichment;
    splitter_application -. skip .-> embedding_generation;
    chunk_enrichment --> embedding_generation;
    embedding_generation --> __end__;
    
    classDef default fill:#5e35b1,line-height:1.2
    classDef first fill-opacity:0
    classDef last fill:#7c4dff
# === Chunking ===
CHUNK_SIZE = 512 # Taille des chunks en tokens
CHUNK_OVERLAP_PERCENT = 0.15 # 15% de chevauchement
CHUNK_OVERLAP = 77 # ~77 tokens de chevauchement
{
"id": "chunk_001",
"text": "Contenu du chunk...",
"embedding": [0.123, 0.456, ...], # 1024 dimensions
"metadata": {
"source": "document.pdf",
"page": 1,
"chunk_index": 0,
"has_complex_content": False
}
}
TypeExtensions
PDF.pdf
Images.jpg, .jpeg, .png, .webp, .gif
Audio.wav, .mp3, .m4a, .flac, .ogg
Vidéo.mp4, .avi, .mov, .mkv, .webm
MétriqueDescriptionCible
Latence embeddingTemps pour générer les embeddings< 5s / chunk
Qualité extractionPrécision de l’extraction de contenu> 95%
Taux de succèsRessources traitées sans erreur> 98%
Throughput batchRessources traitées par minute> 20

Pour plus de détails sur chaque composant :

Graphes LangGraph

Architecture détaillée des graphes d’embedding et batch.

Voir les graphes →


Intelligence artificielle multimodale au service de l’apprentissage personnalisé.