mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-15 19:16:52 +01:00
179 lines
9.4 KiB
Python
179 lines
9.4 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Script de test pour régénérer un rapport avec l'agent modifié
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
import logging
|
|
from datetime import datetime
|
|
from agents.agent_report_generator_qwen import AgentReportGeneratorQwen
|
|
|
|
# Configuration du logging
|
|
logging.basicConfig(level=logging.INFO,
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
logger = logging.getLogger("test_regeneration")
|
|
|
|
def main():
|
|
"""Point d'entrée principal"""
|
|
|
|
# Définir le chemin du rapport à régénérer
|
|
base_path = "output/ticket_T6735/T6735_20250411_143315"
|
|
rapport_path = f"{base_path}/T6735_rapports/T6735/T6735_rapport_final.json"
|
|
|
|
# Créer un répertoire de sortie pour le nouveau rapport
|
|
output_dir = f"test_regen/T6735_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
|
|
logger.info(f"Chargement des données depuis {rapport_path}")
|
|
|
|
# Charger les données du rapport existant
|
|
try:
|
|
with open(rapport_path, 'r', encoding='utf-8') as f:
|
|
original_data = json.load(f)
|
|
except Exception as e:
|
|
logger.error(f"Erreur lors du chargement du rapport: {str(e)}")
|
|
return
|
|
|
|
# Préparer les données pour l'agent
|
|
rapport_data = {
|
|
"ticket_id": original_data.get("ticket_id", ""),
|
|
"timestamp": original_data.get("timestamp", ""),
|
|
"ticket_data": {
|
|
"id": "6714",
|
|
"code": "T6735",
|
|
"name": "Création échantillons - Opérateur de prélèvement : Saisie manuelle non possible",
|
|
"description": "Point particulier :- **Le cas est bloquant**\nDescription du problème :\nCréer un échantillon, puis à l'étape \" Création du numéro prélèvement\", Pour les opérateurs de prélèvements, seule une liste des personnes affiliées à notre agence est créé. \n\nSur l'ancienne version, on saisissait nous même la personne qui a prélevé l'échantillon car cette personne peut être de l'extérieur (entreprises, techniciens de toutes agences confondues etc.). Une saisie manuelle serait donc préférable\n\nP.S : Je vous met le lien de l'image, j'ai l'impression que votre système d'upload d'image ne fonctionne plus : https://prnt.sc/15BJ7dFG3_AK",
|
|
"create_date": "14/03/2023 10:48:53",
|
|
"messages": [
|
|
{
|
|
"author_id": "Fabien LAFAY",
|
|
"date": "14/03/2023 13:25:45",
|
|
"message_type": "E-mail",
|
|
"content": "Pour des raisons normatives, l'opérateur de prélèvement doit obligatoirement faire partie de la liste des utilisateurs du logiciel et appartenir au groupe \"Opérateur de prélèvement\".\nVous ne pouvez donc pas ajouter une personne tierce.\nEn revanche, vous pouvez noter le nom de cette personne tierce dans les informations publiques du prélèvement."
|
|
}
|
|
]
|
|
},
|
|
"ticket_analyse": original_data.get("ticket_analyse", ""),
|
|
"analyse_images": {
|
|
"output/ticket_T6735/T6735_20250411_143315/attachments/Capture_decran_2023-03-14_113813.png": {
|
|
"sorting": {
|
|
"is_relevant": True,
|
|
"reason": "L'image montre une capture d'écran d'une interface logicielle liée à la création d'un numéro de prélèvement."
|
|
},
|
|
"analysis": {
|
|
"analyse": "L'image montre une interface logicielle où une flèche pointe vers le champ 'Opérateur de prélèvement' qui affiche 'Aucun opérateur trouvé'."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
logger.info(f"Données préparées, génération du rapport dans {output_dir}")
|
|
|
|
# Créer une instance simulée de QwenLocal pour les tests
|
|
class MockQwen:
|
|
def interroger(self, prompt):
|
|
# Simuler une réponse pour l'étape 1
|
|
if "Formate le prompt pour la première étape" in prompt:
|
|
return """## Résumé du problème
|
|
|
|
Le ticket décrit un problème où l'utilisateur ne peut pas sélectionner ou saisir manuellement un opérateur de prélèvement lors de la création d'un numéro de prélèvement. La liste déroulante pour l'opérateur affiche "Aucun opérateur trouvé", ce qui est en lien avec les restrictions normatives mentionnées dans le ticket. Le support a indiqué que seuls les opérateurs configurés et valides selon ces normes apparaissent dans la liste.
|
|
|
|
## Analyse des images
|
|
|
|
- **Interface visible**: L'image montre l'interface "Échantillons en cours de traitement" avec un formulaire intitulé "Création du numéro prélèvement".
|
|
- **Problème mis en évidence**: Une flèche noire pointe vers le champ "Opérateur de prélèvement" qui affiche "Aucun opérateur trouvé".
|
|
- **Options disponibles**: L'interface propose différentes options dont "Échantillon prélevé par le client" (cochée) et permet d'entrer diverses informations (date/heure, lien du prélèvement, informations privées/publiques).
|
|
- **Confirmation visuelle du problème**: L'image confirme que la liste déroulante ne propose aucun opérateur, empêchant la saisie manuelle comme mentionné dans le ticket.
|
|
|
|
## Synthèse globale des analyses d'images
|
|
|
|
L'image fournie est essentielle pour comprendre le problème car elle illustre précisément le point bloquant décrit dans le ticket: l'impossibilité de saisir manuellement un opérateur de prélèvement. La flèche qui pointe vers le message "Aucun opérateur trouvé" confirme visuellement la réponse du support technique concernant les restrictions normatives qui exigent que l'opérateur soit un utilisateur valide du système."""
|
|
|
|
# Simuler une réponse pour l'étape 2
|
|
elif "INSTRUCTIONS POUR LE TABLEAU JSON" in prompt:
|
|
return """```json
|
|
{
|
|
"chronologie_echanges": [
|
|
{
|
|
"date": "14/03/2023 10:48:53",
|
|
"emetteur": "CLIENT",
|
|
"type": "Question",
|
|
"contenu": "Création échantillons - Opérateur de prélèvement : Saisie manuelle non possible. Sur l'ancienne version, on saisissait nous même la personne qui a prélevé l'échantillon car cette personne peut être de l'extérieur (entreprises, techniciens de toutes agences confondues etc.). Une saisie manuelle serait donc préférable."
|
|
},
|
|
{
|
|
"date": "14/03/2023 13:25:45",
|
|
"emetteur": "SUPPORT",
|
|
"type": "Réponse",
|
|
"contenu": "Pour des raisons normatives, l'opérateur de prélèvement doit obligatoirement faire partie de la liste des utilisateurs du logiciel et appartenir au groupe 'Opérateur de prélèvement'. Il n'est donc pas possible d'ajouter une personne tierce. Cependant, le nom de cette personne tierce peut être noté dans les informations publiques du prélèvement."
|
|
},
|
|
{
|
|
"date": "11/04/2025 14:46:10",
|
|
"emetteur": "SUPPORT",
|
|
"type": "Complément visuel",
|
|
"contenu": "L'analyse de l'image confirme visuellement le problème: la liste déroulante des opérateurs de prélèvement affiche 'Aucun opérateur trouvé', ce qui concorde avec l'explication fournie concernant les restrictions normatives. Une flèche pointe spécifiquement vers cette partie de l'interface où le message 'Aucun opérateur trouvé' est affiché, illustrant l'impossibilité de saisir manuellement un nom d'opérateur."
|
|
}
|
|
]
|
|
}
|
|
```"""
|
|
|
|
# Réponse par défaut
|
|
return "Erreur: prompt non reconnu"
|
|
|
|
# Ajouter des propriétés pour simuler le LLM
|
|
@property
|
|
def modele(self):
|
|
return "mock-qwen-test"
|
|
|
|
@property
|
|
def version(self):
|
|
return "test-version"
|
|
|
|
def configurer(self, **kwargs):
|
|
pass
|
|
|
|
# Instancier l'agent avec le mock
|
|
agent = AgentReportGeneratorQwen(MockQwen())
|
|
|
|
# Définir les attributs nécessaires
|
|
agent.system_prompt = "Prompt système simulé pour les tests"
|
|
agent.prompt_version = "test-v1.0"
|
|
agent.temperature = 0.2
|
|
agent.top_p = 0.9
|
|
agent.max_tokens = 10000
|
|
agent.use_two_step_approach = True
|
|
|
|
# Exécuter l'agent
|
|
try:
|
|
json_path, md_path = agent.executer(rapport_data, output_dir)
|
|
|
|
if json_path and os.path.exists(json_path):
|
|
logger.info(f"Rapport JSON généré avec succès: {json_path}")
|
|
|
|
# Afficher le JSON généré pour vérifier les améliorations
|
|
with open(json_path, 'r', encoding='utf-8') as f:
|
|
new_rapport = json.load(f)
|
|
|
|
# Extraire et afficher les échanges pour vérification
|
|
if "chronologie_echanges" in new_rapport:
|
|
logger.info("Échanges générés:")
|
|
for i, echange in enumerate(new_rapport["chronologie_echanges"]):
|
|
logger.info(f"Échange {i+1}:")
|
|
logger.info(f" Date: {echange.get('date', '-')}")
|
|
logger.info(f" Émetteur: {echange.get('emetteur', '-')}")
|
|
logger.info(f" Type: {echange.get('type', '-')}")
|
|
logger.info(f" Contenu: {echange.get('contenu', '-')[:50]}...")
|
|
|
|
if md_path and os.path.exists(md_path):
|
|
logger.info(f"Rapport Markdown généré avec succès: {md_path}")
|
|
|
|
except Exception as e:
|
|
logger.error(f"Erreur lors de l'exécution de l'agent: {str(e)}")
|
|
import traceback
|
|
logger.error(traceback.format_exc())
|
|
|
|
if __name__ == "__main__":
|
|
main() |