Amélioration fonction RAG
Build and Push Docker Image / build-and-push (push) Successful in 36s

This commit is contained in:
xavier committed 2026-08-28 19:48:04 +02:00
1 parent e3557873b9
commit b88d693d69
2 files changed
+86 -33

No files matched your search

+23 -32
View File
@@ -1,11 +1,15 @@
import os
import threading
from datetime import datetime
from modules.logger import log_event
# IMPORT DE NOTRE MOTEUR FAISS (Le nouveau cerveau)
from modules.vector_rag import rechercher_contexte_global, indexer_dossier_thematique
# Définition du chemin racine sécurisé sur ton RAID
RAG_BASE_DIR = "/DATA/AppData/MULTI-IA-AETHAS38/RAG"
# Les thématiques pour organiser l'apprentissage (Ajout de Général et Éducation)
# Les thématiques pour organiser l'apprentissage
THEMATIQUES_RAG = [
"Minecraft_KubeJS",
"Juridique_Loi_Francaise",
@@ -31,44 +35,23 @@ def initialiser_arborescence_rag():
except Exception as e:
log_event("ERROR", "RAG", f"Erreur lors de l'initialisation de l'arborescence : {e}")
def extraire_contexte_rag(thematique):
"""
Lit tous les fichiers .txt ou .md d'une thématique donnée
et les concatène pour les injecter dans le prompt de l'IA.
"""
contexte_global = ""
chemin_theme = os.path.join(RAG_BASE_DIR, thematique)
# Si le thème est "aucun" ou introuvable, on tape dans les connaissances générales
if thematique == "aucun" or not os.path.exists(chemin_theme):
chemin_theme = os.path.join(RAG_BASE_DIR, "Connaissances_Generales")
try:
if os.path.exists(chemin_theme):
for fichier in os.listdir(chemin_theme):
if fichier.endswith(".txt") or fichier.endswith(".md"):
chemin_fichier = os.path.join(chemin_theme, fichier)
with open(chemin_fichier, 'r', encoding='utf-8') as f:
contexte_global += f"\n--- Extrait de {fichier} ---\n"
contexte_global += f.read() + "\n"
except Exception as e:
log_event("ERROR", "RAG", f"Erreur de lecture du contexte {thematique} : {e}")
return contexte_global
def rechercher_contexte_rag(prompt, categorie="general"):
"""
Récupère le contenu des fichiers de la thématique pour alimenter l'IA.
Récupère le contenu des fichiers via la recherche sémantique FAISS + Ollama.
(Remplace l'ancienne méthode d'extraction basique).
"""
try:
return extraire_contexte_rag(categorie)
# On fouille dans toute la base de connaissances et on récupère les 3 meilleurs blocs
contexte = rechercher_contexte_global(prompt, top_k=3)
return contexte
except Exception as e:
log_event("ERROR", "RAG_MANAGER", f"Erreur lors de la recherche RAG : {e}")
log_event("ERROR", "RAG_MANAGER", f"Erreur lors de la recherche FAISS : {e}")
return ""
def auto_apprendre_rag(prompt, reponse, thematique_simplifiee):
"""
Sauvegarde systématiquement TOUTES les réponses pour enrichir la base de connaissances.
Sauvegarde systématiquement la réponse en Markdown,
puis déclenche l'indexation FAISS pour auto-incrémenter le RAG.
"""
# Mapping élargi
mapping = {
@@ -80,8 +63,6 @@ def auto_apprendre_rag(prompt, reponse, thematique_simplifiee):
"education_nationale": "Education_Nationale"
}
# Si le thème n'est pas dans le mapping (ex: "aucun", "physique", "cuisine"),
# on le force dans le dossier "Connaissances_Generales" au lieu de l'ignorer.
theme_reel = mapping.get(thematique_simplifiee.lower(), "Connaissances_Generales")
try:
@@ -95,10 +76,20 @@ def auto_apprendre_rag(prompt, reponse, thematique_simplifiee):
contenu = f"## Question utilisateur\n{prompt}\n\n## Réponse de l'IA (Contexte validé)\n{reponse}\n"
# 1. Sauvegarde physique du fichier
with open(chemin_fichier, 'w', encoding='utf-8') as f:
f.write(contenu)
log_event("INFO", "RAG_MANAGER", f"Connaissance sauvegardée dans {theme_reel} ({nom_fichier}).")
# 2. AUTO-INCRÉMENTATION : Lancement de l'indexation FAISS
# On utilise un Thread (processus en arrière-plan) pour que l'indexation via Ollama
# se fasse silencieusement sans bloquer l'interface web de l'utilisateur.
tache_indexation = threading.Thread(target=indexer_dossier_thematique, args=(theme_reel,))
tache_indexation.start()
log_event("INFO", "RAG_MANAGER", f"Indexation vectorielle lancée en tâche de fond pour {theme_reel}.")
except Exception as e:
log_event("ERROR", "RAG_MANAGER", f"Erreur lors de l'auto-apprentissage : {e}")