Exercices Prompt Engineering Message vision multimodal
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Message vision multimodal

Avec GPT-4o, tu peux envoyer une image et demander au modele de la decrire, d'analyser un graphique, ou de lire du texte dans une capture d'ecran. Pour ca, le format du message change : le champ content devient une liste de blocs au lieu d'une simple chaine.

Chaque bloc a un type : soit 'text' pour du texte, soit 'image_url' pour une image. Quand tu envoies une image en Base64, l'URL a un format special :

data:image/png;base64,CONTENU_BASE64_ICI

Voici la structure complete d'un message avec texte et image :

message = {
'role': 'user',
'content': [
{'type': 'text', 'text': 'Decris cette image.'},
{'type': 'image_url', 'image_url': {
'url': 'data:image/png;base64,iVBOR...'
}}
]
}

Écris une fonction build_vision_message(prompt, image_base64, image_type='png') qui retourne un message au format OpenAI pour envoyer une image. Le champ content doit etre une liste avec un bloc texte et un bloc image_url. L'URL de l'image doit etre au format data:image/{image_type};base64,{image_base64}.

Exemple :
msg = build_vision_message('Decris cette image.', 'abc123', 'jpeg')
msg['content'][1]['image_url']['url'] vaut 'data:image/jpeg;base64,abc123'

Tests (1/1)

Tests
msg = build_vision_message('Decris.', 'abc123')
assert msg['role'] == 'user', 'Le role doit etre user'
assert isinstance(msg['content'], list), 'content doit etre une liste'
assert len(msg['content']) == 2, 'content doit avoir 2 blocs (texte + image)'
assert msg['content'][0] == {'type': 'text', 'text': 'Decris.'}, 'Le premier bloc doit etre le texte'
assert msg['content'][1]['type'] == 'image_url', 'Le deuxieme bloc doit etre de type image_url'
assert msg['content'][1]['image_url']['url'] == 'data:image/png;base64,abc123', 'URL Base64 incorrecte pour png'
msg2 = build_vision_message('Test', 'xyz', 'jpeg')
assert 'data:image/jpeg;base64,xyz' in msg2['content'][1]['image_url']['url'], 'Doit supporter jpeg'

Indices (3 disponibles)

solution.py
Non stockée