# Guide d'utilisation des agents et classes LLM

Ce guide fournit des instructions détaillées sur l'utilisation des différents agents et classes LLM disponibles dans le projet LLM Lab.

## Table des matières

1. [Utilisation des modèles LLM](#utilisation-des-modèles-llm)
   - [LlamaVision90B](#llamavision90b)
   - [MistralAPI](#mistralapi)
   
2. [Utilisation des agents](#utilisation-des-agents)
   - [Agent d'analyse d'images](#agent-danalyse-dimages)
   - [Agent d'analyse JSON](#agent-danalyse-json)
   - [Agent de questions-réponses](#agent-de-questions-réponses)
   
3. [Exemples de workflows complets](#exemples-de-workflows-complets)

## Utilisation des modèles LLM

Les modèles LLM sont accessibles via la factory `LLMFactory` pour garantir une instanciation cohérente et configurable.

### LlamaVision90B

Ce modèle est spécialisé dans l'analyse d'images avec des capacités multimodales (texte + image).

#### Configuration de base

```python
from core.factory import LLMFactory

# Création d'une instance via la factory
vision_llm = LLMFactory().create("llamavision")

# Configuration des paramètres
vision_llm.parametres_generation["temperature"] = 0.2
vision_llm.parametres_generation["max_tokens"] = 1000
vision_llm.parametres_avances["top_p"] = 0.9
```

#### Analyse d'une image

```python
# Définir le chemin de l'image
vision_llm.definir_image("chemin/vers/image.jpg")

# Générer une description de l'image
prompt = "Décris en détail ce que tu vois dans cette image."
description = vision_llm.generate(prompt)
print(description)
```

#### Analyse avec des données JSON complémentaires

```python
# Définir des données JSON complémentaires
donnees_complementaires = {
    "metadata": {
        "source": "caméra de surveillance",
        "timestamp": "2023-03-15T14:30:00",
        "location": "entrée principale"
    }
}

vision_llm.definir_donnees_json(donnees_complementaires)

# Générer une analyse avec contexte
prompt = "Analyse cette image en tenant compte des métadonnées fournies."
resultat = vision_llm.generate(prompt)
```

### MistralAPI

Cette classe permet d'accéder aux modèles de langage de Mistral AI via leur API.

#### Configuration de base

```python
from core.factory import LLMFactory
import os

# Définir la clé API (ou via variable d'environnement)
os.environ["MISTRAL_API_KEY"] = "votre_clé_api"

# Création d'une instance via la factory
mistral = LLMFactory().create("mistralapi")

# Configuration des paramètres
mistral.parametres_generation["temperature"] = 0.7
mistral.parametres_generation["max_tokens"] = 500
```

#### Génération de texte

```python
# Génération simple
prompt = "Explique le concept de l'intelligence artificielle en 3 paragraphes."
reponse = mistral.generate(prompt)
print(reponse)
```

#### Obtention de la liste des modèles disponibles

```python
modeles = mistral.obtenir_liste_modeles()
print("Modèles disponibles:")
for modele in modeles:
    print(f"- {modele}")
```

## Utilisation des agents

Les agents sont des composants de plus haut niveau qui encapsulent les modèles LLM avec des fonctionnalités spécifiques.

### Agent d'analyse d'images

Cet agent facilite l'analyse d'images en utilisant LlamaVision.

```python
from agents.analyse_image import AgentAnalyseImage

# Création de l'agent
agent = AgentAnalyseImage("AgentVision")

# Analyse simple d'une image
resultats = agent.executer(
    "chemin/vers/image.jpg",
    question="Que vois-tu dans cette image? Y a-t-il du texte visible?"
)

# Affichage des résultats
print(resultats["analyses"][0]["reponse"])

# Sauvegarde des résultats
agent.sauvegarder_resultats("resultats_analyse.json", resultats)
```

### Agent d'analyse JSON

Cet agent permet d'analyser et de manipuler des données JSON.

```python
from agents.analyse_json import AgentAnalyseJSON

# Création de l'agent
agent = AgentAnalyseJSON("AgentJSON")

# Données JSON à analyser
donnees = {
    "utilisateurs": [
        {"id": 1, "nom": "Dupont", "age": 32},
        {"id": 2, "nom": "Martin", "age": 45},
        {"id": 3, "nom": "Durand", "age": 28}
    ],
    "statistiques": {
        "moyenne_age": 35,
        "total_utilisateurs": 3
    }
}

# Analyse des données
resultats = agent.executer(
    donnees,
    question="Quelles informations importantes peux-tu extraire de ces données?"
)

print(resultats["analyse"])

# Extraction de la structure
structure = agent.extraire_structure(donnees)
print("Structure des données:", structure)
```

### Agent de questions-réponses

Cet agent utilise MistralAPI pour des interactions de type questions-réponses.

```python
from agents.agent_question_reponse import AgentQuestionReponse

# Création de l'agent avec le modèle souhaité
agent = AgentQuestionReponse("AgentQR", modele="mistral-large-latest")

# Poser une question simple
resultat = agent.executer("Comment fonctionne l'apprentissage par renforcement?")
print(resultat["reponse"])

# Poser une question avec contexte
contexte = {
    "sujet": "Intelligence artificielle",
    "domaine": "Apprentissage automatique",
    "concepts_cles": ["réseaux de neurones", "deep learning", "données d'entraînement"]
}

resultat_avec_contexte = agent.executer(
    "Quelles sont les différences entre l'apprentissage supervisé et non supervisé?",
    contexte=contexte
)
print(resultat_avec_contexte["reponse"])

# Générer des questions à partir d'un contexte
questions = agent.generer_questions(contexte, nombre=5)
for i, question in enumerate(questions, 1):
    print(f"{i}. {question}")

# Évaluer une réponse
evaluation = agent.evaluer_reponse(
    question="Qu'est-ce que le deep learning?",
    reponse="Le deep learning est une technique d'IA qui utilise des réseaux de neurones profonds."
)
print(evaluation["evaluation_detaillee"])
print("Scores:", evaluation["scores"])
```

## Exemples de workflows complets

### Workflow d'analyse d'image avec post-traitement

```python
from agents.analyse_image import AgentAnalyseImage
from agents.analyse_json import AgentAnalyseJSON
from agents.agent_question_reponse import AgentQuestionReponse
import json

# 1. Analyse de l'image
agent_image = AgentAnalyseImage("AgentVision")
resultats_image = agent_image.executer("chemin/vers/image.jpg")

# 2. Analyse des résultats JSON
agent_json = AgentAnalyseJSON("AgentJSON")
resultats_analyse = agent_json.executer(
    resultats_image,
    question="Extrais les éléments clés détectés dans l'image."
)

# 3. Génération de questions sur le contenu
agent_qr = AgentQuestionReponse("AgentQR")
questions = agent_qr.generer_questions(resultats_analyse, nombre=3)

# 4. Sauvegarde des résultats complets
workflow_results = {
    "analyse_image": resultats_image,
    "analyse_structure": resultats_analyse,
    "questions_potentielles": questions
}

with open("resultats_workflow.json", "w", encoding="utf-8") as f:
    json.dump(workflow_results, f, ensure_ascii=False, indent=2)
```

Ce workflow illustre comment combiner plusieurs agents pour créer une chaîne de traitement complète, de l'analyse d'image initiale jusqu'à la génération de questions pertinentes sur le contenu identifié. 