Slide 1

Slide 1 text

Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : De la théorie à la production… Ahmed EBEN HASSINE Ingénieur développeur backend, certifié Symfony

Slide 2

Slide 2 text

4 pôles d'expertise Développement, Hébergement-Infogérance, Conseil stratégique et Data. Qui sommes-nous ? Agence Open-Source certifiée Symfony & Ibexa Notre ADN : l’expertise technique 40 collaborateurs Implantés à Strasbourg et Montpellier.

Slide 3

Slide 3 text

Au programme Contexte & Problématique ● Pourquoi analyser des PDF avec l’IA ? ● Les limites des approches traditionnelles Notre architecture technique ● API Platform + Python en orchestration ● LangChain 🦜 & OpenAI pour le traitement IA Les Défis Clés et Nos Solutions ● Hallucinations, limitation de token, rate limits, ● RAG & Fine-Tuning Bilan ● Ce qui a fonctionné (ou pas !) ● Les leçons pour vos futurs projets IA SOMMAIRE

Slide 4

Slide 4 text

Contexte & problématique CAS D’USAGE : Inventaire des produits chimiques

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Architecture technique et flux de données CAS D’USAGE : Inventaire des produits chimiques

Slide 8

Slide 8 text

Le socle technique GPT 3.5-Turbo (Generative Pretrained Transformer) Interface utilisateur fluide : SPA Extraction intelligente des données des Fiches de sécurité (FDS) Moteur de la plateforme (Api Platform)

Slide 9

Slide 9 text

Cas d’usage initial : Extraire les données d’un PDF avec un format non-fixe Ce qu’on a testé Extraction par expressions régulières ● Complexité : 3/5 ● Coûts : $ ● Qualité résultat : 40% Sélection manuelle des zones avec Tabula ● Complexité : 4/5 ● Coûts : $$ ● Qualité résultat : 10% Extraction via LLM ● Complexité : 2/5 ● Coûts : $ ● Qualité résultat : 90% ANALYSE DES SOLUTIONS POSSIBLES POUR EFFECTUER L’EXTRACTION

Slide 10

Slide 10 text

Comment communiquer avec l’IA ? https://platform.openai.com/docs/guides/text#prompt-engineering Prompt de base :

Slide 11

Slide 11 text

Prompt de base

Slide 12

Slide 12 text

Maîtriser les Rôles dans vos prompts Les 3 rôles les plus utilisés 1. system (Le Chef d'Orchestre) → Définit l’expertise de l’IA (ex: "Expert en Fiches de Données de Sécurité") 2. user (La Donnée Brute) → Contient l’input à analyser (ex: texte PDF d’une FDS) + instructions 3. assistant (L’Exemple Pratique) → Exemples de réponses pour finetuner (si besoin)

Slide 13

Slide 13 text

● La qualité d’un prompt ne se juge pas à l’intuition : il faut le tester, le mesurer, l’améliorer. Une étape essentielle pour garantir des résultats cohérents et solides. ● Pouvoir soumettre un jeu de tests, comparer automatiquement les résultats entre modèles, suivre les évolutions, et automatiser les vérifications avant mise en production. Évaluation de la performance d’un prompt https://platform.openai.com/docs/guides/evals

Slide 14

Slide 14 text

Paramétrage OpenAI

Slide 15

Slide 15 text

LangChain 🦜 en action https://python.langchain.com/docs/integrations/llms/openai/

Slide 16

Slide 16 text

Code source de la app.py Le cœur de la logique IA - KOR

Slide 17

Slide 17 text

Comment connecter Symfony et Python ? https://api-platform.com/docs/core/state-processors

Slide 18

Slide 18 text

Workflow Détaillé (Symfony + API Platform – Niveau Kernel)

Slide 19

Slide 19 text

Workflow Détaillé (API Platform + Python – Niveau Extraction)

Slide 20

Slide 20 text

Les challenges relevés CAS D’USAGE : Inventaire des produits chimiques

Slide 21

Slide 21 text

1. Les challenges relevés Qualité des données sources ● Extraction du text (pdftotext) ● PDF scanné (fitz), OCR (pytesseract) Token limitation ● La taille de l’input et l’output ont une limite Données manquantes et hallucinations (5 à 10% des extractions sont incomplètes ou erronées) ● OpenAI est un assistant - Nécessite une vérification pour les éléments critiques Rate limite ● Plusieurs jours d’exécution pour ~ 30k fiches produits ● OpenAI Batch API (https:/ /platform.openai.com/docs/guides/batch) ● https://api.openai.com/v1/chat/completions ● https://api.openai.com/v1/batches

Slide 22

Slide 22 text

● Un token, c’est une unité de mesure de longueur de base de texte. Les modèles ont des tailles de contexte prompt fixes. ● Chaque token est converti en un vecteur matriciel dans un espace multidimensionnel. Capter les relations sémantiques entre les mots. ● Consommation CPU et facturation augmente de façon non-linéaire avec le nombre de tokens. 2. Token limitation / coût https://platform.openai.com/docs/pricing

Slide 23

Slide 23 text

Hallucination en IA : c’est quoi ? C’est un phénomène où un modèle d’intelligence artificielle génère des informations erronées, inventées ou non fondées, comme s’il « imaginait » des faits sans aucune base réelle. 3. Hallucination Pourquoi ça arrive ? ● Parfois, pas assez de contexte, elles n’ont pas assez vu d’exemples fiables, donc elles comblent les trous. ● Et si les réglages (comme la température) sont trop permissifs, elles partent en freestyle.

Slide 24

Slide 24 text

Ce que l’on ferait aujourd’hui ! CAS D’USAGE : Inventaire des produits chimiques

Slide 25

Slide 25 text

Limites de l’OCR : ● Ne gère pas bien les tableaux mal structurés. ● Perte des relations logiques entre lignes et colonnes. Solution : LlamaParse , MistralOCR, Docling ● Des outils basés sur un modèle reconnaissance de machine learning ● Capable de traiter les PDF scannés + Génère un Markdown structuré (meilleure compatibilité) ● Préserve la hiérarchie et les relations entre les lignes et les colonnes. 1. Prétraitement de la fiche PDF https://docs.llamaindex.ai/en/stable/llama_cloud/llama_parse/

Slide 26

Slide 26 text

Limites des LLMs ● Pas à jour : “Je suis désolé, ma dernière mise à jour date de janvier 2022..." ● Limite de tokens : "The message exceeds the maximum token limit." Solution : RAG Hybride (vectoriel + BM25) 1. Découper les documents en fragments avec une stratégie chunking par chevauchement 2. Après la fragmentation, vient la transformation en vecteurs (embedding) via (text-embedding-ada-002) + stocker dans une base vectorielle (FAISS ou ChromeDb) 3. Similarité cosinus 🔍 : Comparaison du vecteur du prompt avec les données de la bv pour trouver les top-k chunks les plus proches 4. En parallèle, on effectue une recherche basée sur les mots-clés de la requête, en pondérant leur importance à l’aide de l’algorithme BM25. 5. On combine ensuite les résultats des deux approches : la recherche locale par mots-clés + la recherche vectorielle. 6. Enfin, on enrichit notre prompt et l’on envoie au modèle GPT via l’API d’OpenAI pour générer la réponse finale 2. RAG (Retrieval-Augmented Generation) + BM25 https://help.openai.com/en/articles/8868588-retrieval-augmented-generation-rag-and-semantic-search-for-gpts

Slide 27

Slide 27 text

Fonction : Le fine-tuning, c’est entraîner un modèle déjà performant sur des exemples précis pour qu’il devienne encore meilleur dans un domaine particulier. Produisant ainsi des réponses mieux adaptées à un style ou des règles spécifiques. Exemple : Application des règles de classification des risques ● Problème : Codes de danger comme H225 (inflammable) et H301 (toxique) doivent être combinés pour évaluer le risque global. ● Limite d’un modèle standard : Un prompt simple extrait les codes, mais ne comprend pas leur relation pour évaluer correctement le risque. Solution : Le fine-tuning 3. Supervised Fine-tuning https://platform.openai.com/docs/guides/fine-tuning

Slide 28

Slide 28 text

Conclusion L’IA, un véritable atout Gain de temps et d'efficacité L’IA est un assistant, pas un remplaçant Elle nécessite toujours une supervision humaine. Confidentialité Les données ne sont pas utilisées pour ré-entraîner les modèles. Elles sont retenues 30 jours, mais… OpenAI propose des options “Zero Retention” pour les clients Enterprise Finetune Réduire les risques d’hallucinations en adaptant le modèle à un domaine spécifique ou des règles de gestion complexe RAG + BM25 Exploiter des données privées tout en contournant les limitations de tokens Intégration fluide de l’IA Grâce à LangChain et Sf Processor, son intégration a été simple et efficace.

Slide 29

Slide 29 text

| 29 Merci !