Modernisation du pipeline de traitement de documents existants et réduction des coûts
Réduire la maintenance en intégrant une logique de conversion Markdown
Si vous passez 5 heures par semaine à faire des heures supplémentaires pour intégrer des centaines de fichiers PDF, PPT et Excel dans votre système RAG, la cause du problème est la fragmentation des bibliothèques d'analyse. La structure existante, qui mélange PyPDF2 ou openpyxl, ne fait qu'augmenter la complexité du code. L'adoption de MarkItDown de Microsoft permet d'éliminer les logiques de branchement complexes.
Lors du refactoring de votre pipeline, utilisez le modèle "Processor Factory".
- Supprimez les bibliothèques éparpillées par format et unifiez l'interface d'appel avec la fonction convert() de MarkItDown.
- Segmentez la méthode de traitement en fonction de la complexité du document. Utilisez un analyseur léger pour les textes simples et MarkItDown pour les documents complexes contenant de nombreux tableaux.
- Isolez toutes les dépendances dans des conteneurs Docker (Python 3.11 ou supérieur) et déployez-les avec FastAPI.
Cette structure permet de mettre à l'échelle le moteur d'analyse de manière indépendante. Si la structure des tableaux est préservée, les erreurs de lecture des tableaux par le LLM sont réduites de 34 % (selon une annonce de Microsoft en 2024).
Économiser 30 % des coûts d'API grâce au prétraitement Markdown
Le coût des jetons (tokens) d'embedding est directement proportionnel à la longueur du fichier Markdown. Le résultat extrait par MarkItDown contient souvent des métadonnées ou du bruit qu'il n'est pas nécessaire d'envoyer au LLM. Le simple fait de filtrer ces éléments peut réduire vos coûts d'API de 30 %.
Construisez une logique de filtrage efficace.
- Utilisez le module re de Python pour réduire les sauts de ligne consécutifs (\n{3,}) à deux, et supprimez les mentions de droits d'auteur répétitives en pied de page ou les balises HTML à l'aide d'expressions régulières.
- Utilisez MarkdownHeaderTextSplitter pour effectuer un découpage (chunking) par en-tête. La gestion séparée des sous-blocs pour la recherche et des blocs parents pour le contexte améliore la précision de la recherche.
- Utilisez des hashs MD5 pour bloquer à la source l'embedding en double des mêmes rapports.
L'optimisation de l'efficacité des jetons permet de réduire considérablement les coûts d'API entreprise mensuels.
Gestion de la qualité des données par tests snapshot
Lorsqu'une version de bibliothèque change, les résultats d'analyse peuvent légèrement varier. Arrêtez de vérifier manuellement les fichiers en les ouvrant un par un. L'introduction de tests snapshot permet de détecter immédiatement toute dégradation de la qualité.
Créez un environnement de tests unitaires pour prévenir la régression.
- Installez le plugin pytest-regressions et enregistrez le Markdown correctement converti comme fichier "golden master".
- Faites en sorte que le script de test compare systématiquement le résultat de la conversion avec le golden master. En cas de différence (diff), envoyez une notification immédiate.
- Utilisez un modèle de sentence transformer pour mesurer la similarité cosinus entre l'original et la version convertie. Il suffit de configurer la journalisation uniquement lorsque le taux de préservation du format est inférieur à 0,9.
Ce système d'automatisation élimine le travail de comparaison manuelle qui consommait 5 heures chaque semaine.
Accélérer les tâches par lots grâce au traitement parallèle
Traiter des milliers de documents de manière séquentielle est un gaspillage de ressources système. En utilisant concurrent.futures.ProcessPoolExecutor pour paralléliser le traitement par lots, vous pouvez transformer des tâches qui prenaient plusieurs jours en quelques heures seulement.
Implémentez l'architecture de parallélisation comme suit :
- Si le serveur dispose de 16 Go de mémoire, limitez le nombre de workers à 20-25. Une augmentation excessive ne provoquera que des erreurs de mémoire.
- Divisez les fichiers en lots de 50 à 100, et appelez le garbage collection de force à chaque lot pour résoudre les fuites de mémoire.
- Isolez les PDF volumineux de plus de 10 Mo dans une file d'attente dédiée pour qu'ils soient pris en charge par des workers haute performance.
Cette méthode permet de maintenir la fraîcheur des données tout en utilisant efficacement les ressources système.