coffreobsidian/inbox/Prompt recherches approfondis LLM (Pixtral-Large).md
2025-04-18 17:28:58 +02:00

7.6 KiB
Raw Blame History

  • 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
"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:
      	# 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)
      # 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
      # 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
          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)
      response = client.generate(
          prompt="Assistant: Bonjour, comment puis-je vous aider aujourdhui ?",
          stop=["\nHuman:", "<END>"]
      )
      

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
      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
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.
  1. Préparatin et configuration du LLM
self.-appliquer_config_locale()
  • Injecte prompt_system dans le LLM
  • applique les bons hyperparamètres via .configurer(...)
  1. 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