Aller au contenu

Prompt de lancement du projet OCR Benchmark

📋 Contexte

Tu vas créer un système de benchmark automatisé pour comparer les performances d'extraction de différents LLM multimodaux sur des documents métier complexes.

Lis attentivement le fichier CONTEXT.md qui contient : - Le contexte métier et le problème à résoudre - L'architecture cible - La structure du golden dataset - Les modèles à benchmarker - Les métriques d'évaluation


🎯 Objectif de cette session

Créer un MVP fonctionnel permettant de :

  1. Charger un golden dataset (documents PDF + ground truth JSON)
  2. Extraire les informations via OpenRouter (plusieurs modèles)
  3. Comparer les résultats avec le ground truth
  4. Générer un rapport de comparaison

📁 Structure attendue

ocr-benchmark/
├── CONTEXT.md              # ✅ Déjà créé
├── PROMPT_LANCEMENT.md     # ✅ Ce fichier
├── README.md               # À créer
├── requirements.txt        # À créer
├── .env.example            # À créer
├── src/
│   ├── __init__.py
│   ├── config.py           # Configuration (modèles, chemins)
│   ├── extractor.py        # Extraction via OpenRouter
│   ├── evaluator.py        # Comparaison extraction vs ground truth
│   ├── reporter.py         # Génération du rapport
│   └── benchmark.py        # Script principal
├── golden_dataset/
│   ├── documents/          # PDFs à analyser
│   ├── ground_truth/       # JSON avec valeurs attendues
│   └── schema/             # JSON Schema par type de doc
└── results/                # Rapports générés
    └── .gitkeep

🚀 Étapes de développement

Étape 1 : Setup du projet

  • [ ] Créer requirements.txt avec : openai, httpx, python-dotenv, pydantic, pdf2image, Pillow
  • [ ] Créer .env.example avec OPENROUTER_API_KEY=
  • [ ] Créer README.md avec instructions d'installation

Étape 2 : Configuration

  • [ ] Créer src/config.py avec :
  • Liste des modèles à tester (OpenRouter IDs)
  • Chemins vers le golden dataset
  • Paramètres d'extraction (temperature=0)

Étape 3 : Extracteur

  • [ ] Créer src/extractor.py avec :
  • Fonction pour convertir PDF en images
  • Fonction pour appeler OpenRouter avec une image
  • Prompt d'extraction structuré (demander JSON)
  • Gestion des erreurs et retry

Étape 4 : Évaluateur

  • [ ] Créer src/evaluator.py avec :
  • Fonction de comparaison champ par champ
  • Calcul exact match + fuzzy match
  • Calcul precision/recall/F1

Étape 5 : Rapporteur

  • [ ] Créer src/reporter.py avec :
  • Génération Markdown
  • Tableau comparatif par modèle
  • Détail par document

Étape 6 : Script principal

  • [ ] Créer src/benchmark.py avec :
  • CLI simple (optionnel : argparse)
  • Orchestration : load → extract → evaluate → report
  • Sauvegarde des résultats

💡 Points d'attention

  1. OpenRouter API : Utilise le format OpenAI avec base_url="https://openrouter.ai/api/v1"

  2. Images des PDFs : Convertis les pages en images base64 pour les envoyer aux LLM multimodaux

  3. Prompt d'extraction : Demande explicitement un JSON structuré avec les champs attendus

  4. Ground Truth : Le format JSON doit être identique à celui demandé dans le prompt

  5. Coûts : Un run complet = 5 modèles × 15 docs ≈ 5-10€ (à surveiller)


🔧 Exemple de code pour OpenRouter

from openai import OpenAI
import base64

client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key=os.getenv("OPENROUTER_API_KEY"),
)

def extract_from_image(image_base64: str, model: str, prompt: str) -> dict:
    response = client.chat.completions.create(
        model=model,
        messages=[
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": prompt},
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": f"data:image/png;base64,{image_base64}"
                        }
                    }
                ]
            }
        ],
        temperature=0,
        response_format={"type": "json_object"}
    )
    return json.loads(response.choices[0].message.content)

✅ Critère de succès de la session

À la fin de cette session, je dois pouvoir exécuter :

cd ocr-benchmark
pip install -r requirements.txt
cp .env.example .env  # + ajouter ma clé API
python -m src.benchmark

Et obtenir un fichier results/YYYY-MM-DD.md avec : - Tableau comparatif des scores par modèle - Détail des erreurs par document - Recommandation du meilleur modèle


📝 Notes additionnelles

  • Commence simple : 1 type de document, 1 modèle, puis itère
  • Priorise un code fonctionnel sur un code parfait
  • Les documents du golden dataset seront ajoutés manuellement après

Prêt ? Commence par lire CONTEXT.md puis crée la structure du projet.

Sources

  • Project associé
  • Source migrée : bricks-os/projects/ocr-benchmark/PROMPT_LANCEMENT.md