Formation

RAG multimodal : interroger les graphiques, tableaux et schémas d'un PDF

Faire décrire les figures d'un PDF par Gemini à l'indexation, indexer descriptions et texte avec gemini-embedding-2, joindre l'image elle-même à la réponse, et mesurer le gain face à un RAG texte seul : 0/10 contre 10/10 sur les questions dont la réponse est dans une figure.

Expert 4 leçons 3h30
Commencer la formation
Progression 0% · 0/4

Un rapport d'entreprise, une notice technique ou une étude de marché portent souvent leurs informations les plus importantes dans les figures : le graphique des ventes, le tableau des coûts, le schéma d'architecture. Or un RAG classique commence par extract_text() : tout ce qui est dessiné disparaît. Le modèle répond alors honnêtement « l'information n'est pas présente », alors qu'elle est là, en gros, au milieu de la page.

Ce lab construit un RAG qui voit les figures, et le compare à un RAG texte seul sur le même PDF.

Pour qui ?

  • Vous avez déjà construit un RAG vectoriel (embeddings, similarité cosinus, génération avec contexte).
  • Vous êtes à l'aise en Python et avec les appels à l'API Gemini.
  • Vous travaillez sur des documents riches : rapports, présentations exportées en PDF, documentation technique.

Ce que vous construisez

Un rapport trimestriel fictif de 6 pages (entreprise imaginaire « Verdalis », 4 entrepôts frigorifiques) est généré par un script : texte, graphique en barres, courbe avec seuil, schéma d'architecture et tableau dessiné. Les valeurs chiffrées n'existent que dans les images.

pdfLe rapport fictif généré par make_pdf.py116 Ko
flowchart LR
  P["PDF"] --> T["pypdf : texte des pages"]
  P --> I["pypdf : images"]
  I --> D["Gemini : description<br/>(valeurs, liaisons)"]
  T --> E["gemini-embedding-2"]
  D --> E
  E --> X["Index : chunks texte + figure"]
  Q["Question"] --> X
  X -->|"top 3 + figures des mêmes pages"| G["Gemini : réponse<br/>avec l'image jointe"]

Le résultat, en un tableau

Mesuré le 2026-10-15 avec python evaluate.py sur 12 questions, dont 10 portent sur une figure (détails dans la leçon 4) :

ModeRéponses exactesdont questions sur figure
Texte seul2/120/10
Multimodal (descriptions indexées)10/128/10
Multimodal + expansion par page12/1210/10

Prérequis

  • Python 3.10 ou plus récent, une clé d'API Gemini dans GOOGLE_API_KEY (ou dans .env, voir .env.example).
  • pip install -r requirements.txt (requirements.txt) : google-genai, pypdf, reportlab, pillow, numpy.
  • Facultatif : la police DejaVu (fonts-dejavu sous Debian/Ubuntu) pour des accents nets dans les graphiques.

Programme

ModuleLeçonCe que vous faites
1. Cas d'usage et architectureQuand le texte ne suffit pasgénérer le PDF, constater ce que perd extract_text()
2. Construire pas à pasExtraire et décrire les figuresimages avec pypdf, descriptions structurées par Gemini, cache
Indexer et répondre avec l'imageembeddings, trois modes de recherche, image jointe à la question
3. Évaluer et exploiterTexte seul contre multimodalévaluation chiffrée, analyse des échecs, coûts

En local ou sur GCP ?

En local (ce lab)Sur Google Cloud
Extractionpypdf, images intégrées au PDFDocument AI (mise en page, tableaux) ou Gemini sur la page entière
DescriptionGemini via clé d'APIGemini sur Vertex AI, en lot (batch) pour de gros volumes
Indexmatrice NumPy en mémoireVertex AI Vector Search, AlloyDB/pgvector
Images.cache/ localCloud Storage, référencées par leur URI

Code complet : make_pdf.py, multimodal_rag.py, evaluate.py, questions.json, test_multimodal_rag.py.

Ressources

Tout télécharger (.zip)

Références