llm_ticket3/agents/agent_analyse_image.py
2025-04-02 09:01:55 +02:00

91 lines
3.1 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Agent pour analyser en détail les images pertinentes dans un contexte de support technique.
"""
import os
from typing import Dict, Any, Optional
from .agent_base import Agent
from llm import Pixtral
class AgentAnalyseImage(Agent):
"""
Agent qui analyse en détail le contenu d'une image technique.
"""
def __init__(self, api_key: Optional[str] = None):
"""
Initialise l'agent d'analyse d'images.
Args:
api_key: Clé API pour le LLM
"""
super().__init__("AgentAnalyseImage")
self.llm = Pixtral(api_key=api_key)
self.llm.system_prompt = """
Vous êtes un expert en analyse d'images techniques.
Votre rôle est d'examiner des captures d'écran ou des photos liées à des problèmes techniques et de:
1. Décrire précisément le contenu de l'image
2. Identifier les éléments techniques visibles (erreurs, interfaces, configurations)
3. Extraire tout texte visible (messages d'erreur, logs, indicateurs)
Soyez précis et factuel dans votre analyse.
"""
def executer(self, image_path: str, contexte: Optional[str] = None) -> Dict[str, Any]:
"""
Analyse en détail une image technique.
Args:
image_path: Chemin vers l'image à analyser
contexte: Contexte optionnel du ticket pour une analyse plus pertinente
Returns:
Dictionnaire contenant l'analyse de l'image
"""
# Vérifier que l'image existe
if not os.path.exists(image_path):
erreur = f"L'image {image_path} n'existe pas"
self.ajouter_historique("analyse_image_erreur", image_path, erreur)
return {"error": erreur}
# Construire le prompt pour l'analyse
if contexte:
prompt = f"""
Analysez cette image dans le contexte suivant:
{contexte}
Décrivez précisément:
1. Ce que vous voyez dans l'image
2. Les éléments techniques visibles
3. Tout texte visible (messages d'erreur, logs, etc.)
4. Les indices sur le problème potentiel
"""
else:
prompt = """
Analysez cette image en détail et décrivez ce que vous voyez.
Identifiez tout problème technique visible, messages d'erreur, et éléments importants.
"""
# Enregistrer l'action dans l'historique
self.ajouter_historique("analyse_image", image_path, "Analyse en cours...")
# Appel au LLM
try:
resultat = self.llm.analyze_image(image_path, prompt)
# Vérifier si l'appel a réussi
if "error" in resultat:
self.ajouter_historique("analyse_image_erreur", image_path, resultat["error"])
return resultat
self.ajouter_historique("analyse_image_resultat", "Analyse terminée",
resultat.get("content", "")[:200])
return resultat
except Exception as e:
erreur = f"Erreur lors de l'analyse: {str(e)}"
self.ajouter_historique("analyse_image_erreur", image_path, erreur)
return {"error": erreur}