import os import requests from bs4 import BeautifulSoup from modules.logger import log_event EDUCATION_RAG_DIR = "/DATA/AppData/MULTI-IA-AETHAS38/RAG/Education_Nationale" def synchroniser_programmes_officiels(): """ Scrape ou récupère les données textuelles de référence pour alimenter automatiquement le RAG Éducation Nationale. """ os.makedirs(EDUCATION_RAG_DIR, exist_ok=True) # Exemple de source institutionnelle publique ou de structuration de base url_reference = "https://www.education.gouv.fr/les-programmes-de-l-ecole-prime-et-du-college-1041" try: headers = {"User-Agent": "Aethas38-EducationBot/1.0"} response = requests.get(url_reference, headers=headers, timeout=10) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') # Extraction propre du contenu textuel des programmes contenu_page = "" for paragraph in soup.find_all(['p', 'h2', 'h3', 'li']): contenu_page += paragraph.get_text() + "\n" if len(contenu_page.strip()) > 100: chemin_fichier = os.path.join(EDUCATION_RAG_DIR, "programmes_officiels_socle.txt") with open(chemin_fichier, 'w', encoding='utf-8') as f: f.write(contenu_page) log_event("INFO", "EDUC_RAG", "Synchronisation réussie des programmes officiels.") return True log_event("WARNING", "EDUC_RAG", "Impossible de joindre la source ou contenu vide.") except Exception as e: log_event("ERROR", "EDUC_RAG", f"Erreur lors de la synchronisation : {e}") return False def preparer_contexte_pedagogique(niveau: str, matiere: str, objectif: str) -> str: """ Prépare un prompt contextuel strict pour l'assistant pédagogique en s'appuyant sur le RAG Éducation Nationale. """ from modules.rag_manager import extraire_contexte_rag contexte_socle = extraire_contexte_rag("Education_Nationale") prompt_systeme = ( f"Tu es un assistant pédagogique expert pour un Professeur des Écoles en France. " f"Tu dois respecter strictement les programmes officiels de l'Éducation Nationale.\n\n" f"Contexte institutionnel et programmes :\n{contexte_socle[:3000]}\n\n" f"Mission demandée pour le niveau {niveau} en {matiere} : {objectif}" ) return prompt_systeme