mirror of
https://github.com/Ladebeze66/AIagent.git
synced 2025-12-15 19:26:49 +01:00
189 lines
7.1 KiB
Python
189 lines
7.1 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Script d'exemple pour tester LlamaVision et les agents d'analyse d'images
|
|
"""
|
|
|
|
import os
|
|
import json
|
|
import argparse
|
|
from datetime import datetime
|
|
from llm_classes import LlamaVision, AgentAnalyseImage, AgentAnalyseJSON, AgentQuestionReponse
|
|
|
|
def create_output_dir():
|
|
"""Crée un répertoire pour les sorties basé sur la date/heure"""
|
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
output_dir = f"output_vision_{timestamp}"
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
return output_dir
|
|
|
|
def analyse_directe(image_path, output_dir):
|
|
"""Analyse directe avec LlamaVision sans passer par un agent"""
|
|
print(f"\n=== Analyse directe de l'image {os.path.basename(image_path)} ===")
|
|
|
|
# Création d'une instance LlamaVision
|
|
vision = LlamaVision()
|
|
vision.prompt_system = "Tu es un assistant d'analyse d'images très précis. Décris l'image en détail."
|
|
|
|
# Chargement de l'image
|
|
if not vision.set_image(image_path):
|
|
print(f"Erreur: Impossible de charger l'image {image_path}")
|
|
return
|
|
|
|
# Analyse de l'image
|
|
question = "Décris en détail cette image. Qu'est-ce que tu y vois? Y a-t-il du texte visible?"
|
|
print(f"Question: {question}")
|
|
|
|
reponse = vision.Interroger(question)
|
|
print("\nRéponse:")
|
|
print(reponse)
|
|
|
|
# Sauvegarde du résultat
|
|
output_file = os.path.join(output_dir, "resultat_direct.json")
|
|
vision.sauvegarder_resultats(output_file)
|
|
print(f"\nRésultat sauvegardé dans: {output_file}")
|
|
|
|
def workflow_complet(image_path, json_path=None, output_dir=None):
|
|
"""
|
|
Workflow complet d'analyse d'image et traitement des données
|
|
|
|
Args:
|
|
image_path: Chemin vers l'image à analyser
|
|
json_path: Chemin vers un fichier JSON optionnel contenant des données additionnelles
|
|
output_dir: Répertoire de sortie (si None, en crée un nouveau)
|
|
"""
|
|
if output_dir is None:
|
|
output_dir = create_output_dir()
|
|
|
|
print(f"\n=== Workflow complet pour l'image {os.path.basename(image_path)} ===")
|
|
print(f"Résultats sauvegardés dans: {output_dir}")
|
|
|
|
# Étape 1: Chargement des données JSON existantes si disponibles
|
|
json_data = None
|
|
if json_path and os.path.exists(json_path):
|
|
try:
|
|
with open(json_path, 'r', encoding='utf-8') as f:
|
|
json_data = json.load(f)
|
|
print(f"Données JSON chargées depuis: {json_path}")
|
|
except Exception as e:
|
|
print(f"Erreur lors du chargement du JSON: {e}")
|
|
|
|
# Étape 2: Analyse de l'image avec l'agent
|
|
print("\n--- Étape 1: Analyse de l'image ---")
|
|
agent_image = AgentAnalyseImage("Agent Vision")
|
|
|
|
# Configuration des paramètres
|
|
agent_image.ajuster_parametres(temperature=0.7, top_p=0.9, num_ctx=4096)
|
|
|
|
# Analyse de l'image
|
|
resultats_analyse = agent_image.executer(image_path, json_data)
|
|
|
|
# Sauvegarde des résultats intermédiaires
|
|
output_image = os.path.join(output_dir, "analyse_image.json")
|
|
agent_image.sauvegarder_resultats(output_image, resultats_analyse)
|
|
print(f"Analyse d'image sauvegardée dans: {output_image}")
|
|
|
|
# Étape 3: Analyse des données JSON avec l'agent
|
|
print("\n--- Étape 2: Analyse des données JSON ---")
|
|
agent_json = AgentAnalyseJSON("Agent JSON")
|
|
|
|
# Extraction de la structure
|
|
structure = agent_json.extraire_structure(resultats_analyse)
|
|
|
|
# Analyse des données
|
|
question_analyse = "Analyse ces données extraites de l'image et résume les points principaux. Identifie les éléments clés et leur importance."
|
|
resultats_json = agent_json.executer(resultats_analyse, question_analyse)
|
|
|
|
# Fusion des résultats
|
|
resultats_complets = agent_json.fusionner_jsons(
|
|
resultats_analyse,
|
|
{
|
|
"meta_analyse": {
|
|
"timestamp": datetime.now().isoformat(),
|
|
"structure": structure,
|
|
"analyse_texte": resultats_json
|
|
}
|
|
}
|
|
)
|
|
|
|
# Sauvegarde des résultats intermédiaires
|
|
output_json = os.path.join(output_dir, "analyse_complete.json")
|
|
with open(output_json, 'w', encoding='utf-8') as f:
|
|
json.dump(resultats_complets, f, ensure_ascii=False, indent=2)
|
|
print(f"Analyse complète sauvegardée dans: {output_json}")
|
|
|
|
# Étape 4: Questions/Réponses sur les données
|
|
print("\n--- Étape 3: Tests de questions/réponses ---")
|
|
agent_qr = AgentQuestionReponse("Agent QR")
|
|
|
|
# Génération automatique de questions
|
|
questions_auto = agent_qr.generer_questions(resultats_complets, nb_questions=3)
|
|
print("\nQuestions générées automatiquement:")
|
|
for i, q in enumerate(questions_auto):
|
|
print(f"{i+1}. {q}")
|
|
|
|
# Questions standard + questions générées
|
|
toutes_questions = agent_qr.questions_standard + questions_auto
|
|
|
|
# Exécution des questions/réponses
|
|
resultats_qr = agent_qr.executer(resultats_complets, toutes_questions)
|
|
|
|
# Évaluation des réponses
|
|
evaluation = agent_qr.evaluer_reponses(resultats_qr["resultats_qr"])
|
|
|
|
# Fusion et sauvegarde des résultats finaux
|
|
resultats_finaux = {
|
|
"image": os.path.basename(image_path),
|
|
"date_analyse": datetime.now().isoformat(),
|
|
"donnees": resultats_complets,
|
|
"questions_reponses": resultats_qr,
|
|
"evaluation": evaluation
|
|
}
|
|
|
|
output_final = os.path.join(output_dir, "resultats_finaux.json")
|
|
with open(output_final, 'w', encoding='utf-8') as f:
|
|
json.dump(resultats_finaux, f, ensure_ascii=False, indent=2)
|
|
print(f"\nRésultats finaux sauvegardés dans: {output_final}")
|
|
|
|
# Affichage des résultats
|
|
print("\n=== Résumé des résultats ===")
|
|
print(f"Note moyenne des réponses: {evaluation['meta']['note_moyenne']:.1f}/10")
|
|
|
|
# Affichage d'un exemple de question/réponse
|
|
if resultats_qr["resultats_qr"]:
|
|
exemple = resultats_qr["resultats_qr"][0]
|
|
print(f"\nExemple de Q/R:")
|
|
print(f"Q: {exemple['question']}")
|
|
print(f"R: {exemple['reponse'][:200]}...")
|
|
|
|
return resultats_finaux
|
|
|
|
def main():
|
|
"""Fonction principale"""
|
|
parser = argparse.ArgumentParser(description="Test de LlamaVision et des agents d'analyse d'images")
|
|
parser.add_argument("--image", type=str, help="Chemin vers l'image à analyser", required=True)
|
|
parser.add_argument("--json", type=str, help="Chemin vers un fichier JSON optionnel avec des données additionnelles")
|
|
parser.add_argument("--mode", type=str, choices=["direct", "complet"], default="complet",
|
|
help="Mode d'analyse: direct (LlamaVision uniquement) ou complet (workflow avec agents)")
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Vérification de l'existence de l'image
|
|
if not os.path.exists(args.image):
|
|
print(f"Erreur: L'image {args.image} n'existe pas")
|
|
return
|
|
|
|
# Création du répertoire de sortie
|
|
output_dir = create_output_dir()
|
|
|
|
# Mode d'analyse
|
|
if args.mode == "direct":
|
|
analyse_directe(args.image, output_dir)
|
|
else:
|
|
workflow_complet(args.image, args.json, output_dir)
|
|
|
|
print("\nAnalyse terminée!")
|
|
|
|
if __name__ == "__main__":
|
|
main() |