Tests multimodaux avec vision models OpenAI GPT-4V vs Claude 3.5 - Framework 2025

Salut à tous !

Je bosse sur une app de reconnaissance d’images pour analyser des documents techniques (plans, schémas, factures) et j’ai besoin de tester les performances de GPT-4V vs Claude 3.5 Sonnet sur différents types de contenu visuel.

Le truc c’est que les tests manuels prennent un temps fou et c’est pas reproductible.

J’aimerais automatiser ça mais j’arrive pas à trouver un framework qui gère bien les tests multimodaux.

Problèmes que je rencontre :

  • Comment évaluer automatiquement la précision des réponses sur des images complexes ?

  • Gérer les différents formats d’API (OpenAI vs Anthropic)

  • Métriques pertinentes pour comparer les performances

  • Tests de régression quand les modèles sont mis à jour

Environnement actuel :


python
Python 3.12
OpenAI SDK 1.35.x
Anthropic SDK 0.28.x
Pytest 8.2.x

Vous avez déjà mis en place ce genre de pipeline de tests ?

Des recommandations pour structurer ça proprement ?

@simon_qa_engineer j’ai eu exactement le même besoin il y a 3 mois !

J’ai fini par développer un framework custom avec ces composants : Architecture de base :


python
class VisionModelTester: def __init__(self, models_config): self.models = { 'gpt4v':
OpenAIClient(), 'claude35':
AnthropicClient() } self.metrics_calculator = MetricsEngine() async def run_batch_tests(self, test_cases): results = {} for model_name, client in self.models.items(): results[model_name] = await self.test_model(client, test_cases) return self.compare_results(results)

Métriques que j’utilise :
1.

Accuracy

Score : comparaison avec ground truth

Response

Time : latence moyenne

Token

Cost : coût par requête

Consistency

Score : même prompt, résultats similaires ? Dataset de test structuré :


yaml
test_cases: - id: "doc_001" image_path: "./test_images/invoice_complex.png" prompt: "Extract all line items with quantities and prices" expected_output: format: "json
" validation_schema: "invoice_schema.json
" difficulty: "medium" category: "financial_docs"

Le truc important c’est de bien catégoriser tes tests par type de contenu.

Les performances varient énormément selon le domaine.

Tu veux que je partage le code complet ?

C’est sur mon GitHub perso mais je peux le nettoyer.

Super approche @clara_mlops !

Je rajouterais quelques points sur l’évaluation automatique : Validation sémantique : Pour les réponses textuelles extraites des images, j’utilise un modèle de similarité comme sentence-transformers/all -MiniLM-L6 -v2 pour comparer avec les résultats attendus :


python
from sentence_transformers import SentenceTransformer class SemanticEvaluator: def __init__(self): self.model = SentenceTransformer('all-MiniLM
-L6-v2') def calculate_similarity(self, predicted, expected): pred_embedding = self.model.encode(predicted) exp_embedding = self.model.encode(expected) return cosine_similarity([pred_embedding], [exp_embedding])[0][0]

Gestion des formats de réponse différents : GPT-4V et Claude ont des styles de réponse différents.

J’ai créé des parsers spécifiques :


python
class ResponseNormalizer: def normalize_gpt4v_response(self, response): # GPT-4V tend à être plus verbeux return self.extract_json
_from_text(response) def normalize_claude_response(self, response): # Claude est généralement plus structuré return json
.loads(response.strip())

Monitoring des coûts : Point important qu’on oublie souvent - tracker les coûts par test :

  • GPT-4V : ~$0.01
    -0.02 par image selon la résolution
  • Claude 3.5 : ~$0.008
    -0.015 par image J’ai un dashboard Grafana qui track ça en temps réel.

Question @simon_qa_engineer : tu as quel volume de tests à faire tourner ? Ça change la stratégie selon si c’est 100 ou 10k images par jour.

Excellente discussion !

Je bosse chez une startup qui fait de l’analyse de documents médicaux.

Quelques retours d’expérience après 6 mois en prod : Performance par type de document :


Type de document | GPT-4V | Claude 3.5 | Gagnant 
--------------------|
---------|
-------------|
-------- Factures simples | 94.2% | 96.1% | Claude Schémas techniques | 91.7% | 88.3% | GPT
-4V Texte manuscrit | 87.1% | 89.4% | Claude Tableaux complexes | 92.8% | 91.2% | GPT-4V

Framework de test que j’utilise : J’ai adapté pytest-benchmark pour les tests multimodaux :


python
@marc_ai_lead.mark.parametrize("model", ["gpt4v", "claude35"]) @marc_ai_lead.mark.benchmark(group="vision_models") def test_document_extraction(benchmark, model, test_image): result = benchmark( vision_models[model].analyze_image, test_image, prompt="Extract all text and structure" ) assert result.accuracy > 0.85 assert result.response_time < 5.0

CI/CD Integration : J’ai mis ça dans GitHub

Actions avec un cache intelligent :


yaml
- name: Run Vision Model

Tests run: | pytest tests/vision/ \ --benchmark
-json
=benchmark.json
 \ --vision
-cache-ttl=3600

Point important sur les versions : Attention, OpenAI met à jour GPT-4V régulièrement sans prévenir.

J’ai eu des régressions silencieuses en juillet.

Maintenant je pin la version dans les headers :


python
headers = { "OpenAI-Version": "2024
-08-01" }

Vous avez déjà eu ce problème ?

Comment vous gérez les mises à jour non annoncées des modèles ?

Merci à tous pour ces réponses super détaillées ! :folded_hands: @marc_ai_lead pour répondre à ta question : environ 500-800 images par jour en moyenne, avec des pics à 2k pendant les périodes de traitement batch. @clara_mlops oui je suis hyper intéressé par ton code GitHub ! Ça m’éviterait de repartir de zéro. ton tableau de comparaison est exactement ce que je cherchais.

Intéressant de voir que Claude performe mieux sur les factures simples… chez nous c’est l’inverse sur les documents techniques. Update sur mes tests : J’ai commencé à implémenter le framework avec vos suggestions.

Premier résultat sur 50 images test :


python
Results

Summary:
- GPT
-4V: 89.2% accuracy, 3.2s avg response time, $1.23 total cost
- Claude 3.5: 91.7% accuracy, 2.8s avg response time, $0.89 total cost

Claude semble plus rapide et moins cher, mais j’ai encore des faux positifs sur les schémas avec beaucoup de détails techniques. Questions de suivi : 1.

Vous utilisez quoi comme seuil de similarité sémantique ? J’hésite entre 0.8 et 0.85 2.

Comment gérer les timeouts ?

J’ai parfois des réponses qui prennent 10-15 secondes

Stratégie pour les images avec du texte dans plusieurs langues ?

Je vais creuser le monitoring des coûts avec Grafana comme suggéré.

En attendant j’utilise une simple table SQLite pour tracker ça.

Encore merci, cette communauté est vraiment top ! :flexed_biceps:

@simon_qa_engineer avec plaisir !

J’ai nettoyé le repo ce weekend.

Voici le lien vers mon framework : VisionModelTester sur GitHub Réponses à tes questions :

  1. Seuil similarité :
    Je commence à 0.82 et j’ajuste selon le domaine.

Documents financiers = 0.85 (précision critique), docs techniques = 0.80 (plus de tolérance)
2. Timeouts :
Config différenciée par modèle :


python
TIMEOUTS = { 'gpt4v': 12, # Plus lent mais plus stable 'claude35': 8 # Plus rapide en général }
  1. Multi-langues :
    J’ajoute le contexte dans le prompt :

"Document may contain text in French, English, or German.

Maintain original language in extraction but provide field labels in English."

Retour sur tes résultats : Tes métriques sont cohérentes avec ce qu’on voit.

Pour les schémas techniques, essaie d’ajouter ça dans ton prompt GPT-4V :


"Focus on technical diagrams and engineering drawings.

Pay attention to dimensions, annotations, and component labels."

GPT-4V répond mieux aux prompts spécialisés. **Bonus

  • Script de monitoring simple :** En attendant Grafana, voici un script qui génère un report quotidien :

python
def daily_report(db_path): conn = sql
ite3.connect(db_path) query = """ SELECT model_name, COUNT(*) as total_requests, AVG(accuracy) as avg_accuracy, SUM(cost) as total_cost, AVG(response_time) as avg_time FROM test_results WHERE date >= date('now', '-1 day') GROUP BY model_name """ return pd.read_sql
_query(query, conn)

Dis-moi si tu as d’autres questions sur l’implémentation !