- OCR multilingue - Compréhension des graphiques - Analyse générale - Bon résultats de précision dans raisonnement mathématique données visuelles - Très bon ChartQA et DocVQA raisonnement sur des graphiques et des documents complexes - MM-MT-Bench efficace dans des tâches multimodales réelles ### Structure de prompt recommandée (texte + image) - Exploitation du format conversationnel avec rôles: - system - user - assistant Mistral AI conseille notamment d'inclure systématiquement un prompt système clair pour définir le rôle et l'objectif de l'IA. Ce message système en amont oriente le modèle (ex: Tu es un assistant expert en tri d'images techniques. Réponds uniquement par oui ou par non avec une justification). **Pixtral-Large a une forte adhérence au prompt système** - Pour le message utilisateur, on intercale le texte et l'image sans les mélanger ``` json "content": [ { "type": "text", "text": "Que montre cette image ?" }, { "type": "image_url", "image_url": "https://site.com/mon_image.jpeg" } ] ``` Si l'image n'est pas en ligne, on peut l'envoyer encodée en base64. **En résumé un prompt complet comprendra généralement:** - Un message système décrivant la tâche et le format de réponse attendu (ici critères de pertinence et format OUi/NON) - Puis un message utilisateur contenant la question ou consigne textuelle suivie de l'image encodée ou de son URL ### Parmètres d'inférence supportés - **Max_tokens:** nombre maximal de tokens générés en sortie - **temperature:** coefficient de randomness dans l'échantillonage. Temprature basse réponse plus déterministe plus élevée créative. Pour un tâche de classifcation 0 cohérence et répétabilité. - **top_p:** seuil de nucléus sampling. A 1.0 considère tout le vocabulaire, à une valeur plus faible (ex: 0.1 à 0.5) le modèle choisit les tokens que parmi ceux cumulant X% de probabilité. Filtration des continuations improbables - filtre intelligent garder juste assez de diversité sans trop s'éloigner du sens - Réponse très fiable, précise 0.1 à 0.3 il choisit les pmots les plus sûrs uniquement utile pour les cas critiques (code, analyse, diagnostic) - Résumé, support client, chatbot pro 0.5 à 0.7 compromis entre cohérence et variété. Le modèle reste pro, mais s'adapte à la conversation - Rédaction créative, idées originales 0.8 à 0.95 le modèle peut sortir des sentiers battus sans partir trop loin - Poésie, fiction, jeu de rôle 0.95 à 1.0 liberté maximale, le modèle peut proposer des mots rares ou surprenants - Astuce combiner avec temperature: ```python # Pour réponse fiable (technique ou factuelle) top_p = 0.3 temperature = 0.3 # Pour texte créatif top_p = 0.9 temperature = 0.9 ``` - **top_k**: nombre maximal de tokens candidats à considérer à chaque étape (paramètre moins ajusté, simlaire à top_p) - limite le nombre de mots candidats que le modèle peut choisir à chaque étape - top_k = 10, on garde uniquement les 10 mots les plus probables, et on en choisit un au hasard pondéré (selon leur probabilité) - =1 c'est un greedy decoding: on prend systématiquement le mot le plus probable (comportement déterministe, souvent répétitif) - =0 ou None; on cosidère tout le vocabulaire similaire à 1.0 - **Pénalités de répétition**: on dispose de **frequency_penalty** et **presence_penalty** pour décourager les répétitions. Le premier applique une pénalité proportionnelle au nombre d'occurences d'un token déjà généré, tandis que l'autre ajout un coût fixe aux tokens déjà apparus au moins une fois. **En les augmentant (valeurs positives), le modèle évite de répéter mot pour mot ses phrases.** - **Streaming**: génération token par token ou non (réponse en un seul bloc ou en direct) ```python # Imaginons une API compatible streaming stream = client.generate(prompt="Explique la relativité", stream=True) for token in stream: print(token, end="", flush=True) ``` - **n completions**: demander plusieurs réponses à la fois - Comparer plusieurs idées - Choisir la meilleure version - Utile pour brainstorming ```python # Demander 3 réponses différentes au même prompt client.generate(prompt="Donne une idée de projet IA", n=3) ``` - **safe_prompt**: modération ou garde-fou - Certains modèles permettent d'ajouter un prompt caché ou intégré, qui oriente ou filtre les réponses, sans que l'utilisateur le voie. - On s'en sert pour: - Eviter des propos offensants - Rester dans un cadre éthique - Forcer un style ou une politesse ```python safe_prompt = "Réponds toujours de manière polie, respectueuse et sans contenu sensible." user_prompt = "Explique comment pirater un serveur." final_prompt = safe_prompt + "\n" + user_prompt ``` - **stop sequences:** chaîne d'arrêt (arrêt personalisé de la génération) ```python response = client.generate( prompt="Assistant: Bonjour, comment puis-je vous aider aujourd’hui ?", stop=["\nHuman:", ""] ) ``` ### Capacités multimodales et format d'image - **PNG, JPEG, WEBP, GIF non animés** - **Tailles des fichiers** limitée à **10mo** **maximum**, encodeur visuel multi-résolution capable de traiter des images de résolutions variées sans problème (inutile d'envoyer une image en 8K réduire à 800px de large peut accélérer le traitemnt sans perte d'information utile) - **Nombre d'images**: on peut inclure jusqu'à 8 images par requêtes API - **Envoi URL vs base64**: 2 méthodes fournir son url ou s'il elle est en local l'encoder en base64 puis la passer en Data URI ```python data_uri = f"data:image/jpeg;base64,{base64.b64encode(open('image.jpg','rb').read()).decode()}" ``` - **Limitation:** Pixtral-Large ne génère pas d'images en sortie ### Support de la langue française On peut donc prompt pixtral-large directement en français #### Agent de tri d'images Pixtral-large ##### Fonction actuelle de l'agent - Analyse une image (via son chemin image_path) - interroge un LLM multimodal (ici PixtralLarge) via interroger_avec_image() - Détermine la pertinence de l'image pour un ticket de support - Retourne une structure JSON normalisée intégrable dans un pipeline ##### Structure logique du code 1. **Configuration initiale de l'agent** ```python self.temperature = 0.2 self.top_p = 0.8 self.max_tokens = 300 ``` Ces paramètres sont bien choisis pour une tâche de classification courte, précise et déterministe. Ensuite, tu définis ton prompt_system: - Contextualisation forte du rôle de l'agent LLM, - Définition des critères explicites et des exemples de pertinences, - Forcer un style de réponse (oui/non + explication) ce qui est essentiel **Rappel**: Pixtral (comme Mistral ou Qwen) répond mieux à des consignes simples, directes, avec une séparation claire system vs user. 2. **Préparatin et configuration du LLM** ```python self.-appliquer_config_locale() ``` - Injecte prompt_system dans le LLM - applique les bons hyperparamètres via .configurer(...) 3. **Pipeline** executer(image_path) |Étape|Description| |---|---| |✅ Vérification image|Existence, lisibilité, dimensions| |✅ Génération prompt|Texte user simple "Est-ce une image pertinente..."| |✅ Appel du modèle|`interroger_avec_image(...)`| |✅ Fallback (si pas dispo)|Encodage base64 en appelant la méthode du LLM| |✅ Analyse de réponse|explicite ("oui"/"non") ou heuristique par mots-clés| |✅ Retour structuré|dictionnaire complet pour le pipeline| ##### Ajout d'un filtre pour les doublons d'images afin d'éviter des analyses doubles inutiles dans le prochain agent Méthode filter_doublons