
Un agent d'évaluation pour détecter la désinformation et l'empoisonnement des connaissances dans les systèmes de génération augmentée par récupération.
Un agent d'évaluation pour détecter la désinformation et l'empoisonnement des connaissances dans les systèmes de génération augmentée par récupération.
Ce projet implémente le cadre Trustworthy RAG avec un agent d'évaluation intégré qui évalue la fiabilité des réponses RAG à l'aide de trois composants d'analyse complémentaires :
Le système produit un score de confiance (0-1) pour chaque réponse RAG, permettant la détection automatisée des attaques par empoisonnement des connaissances et des contenus hallucinés.
Ce dépôt constitue l'artefact de recherche de l'article de conférence ICSEA 2026 du même titre. Voir [Conference_ICSEA2026/](https://github.com/gpt-laboratory/trustworthyrag/blob/HEAD/Conference_ICSEA2026/) pour les sources LaTeX, et la section Article ci-dessous.
User Query
|
v
+-------------------+
| RETRIEVER | Embedding (MiniLM-L6-v2 or Snowflake Arctic Embed2) + FAISS
+--------+----------+
|
v
+-------------------+
| GENERATOR | Llama 3.3 70B / Qwen 3.5 35B / Mistral 7B Instruct via FARMI API
+--------+----------+
|
v
+--------------------------------------------+
| EVALUATION AGENT |
| |
| NLI Verifier Poison Detector |
| (factuality) (5 detection methods) |
| | | |
| v v |
| Trust Index Calculator |
| T = 0.4*F + 0.35*C + 0.25*(1-P) |
+--------------------------------------------+
|
v
Answer + Trust Score + Evaluation Report
src/
retriever/ # Document retrieval (embeddings, FAISS, chunking)
generator/ # LLM response generation (FARMI client, prompts)
evaluation_agent/ # Core evaluation (NLI, poison detection, trust index)
experiments/ # Experiment framework (poisoned datasets, runner)
pipeline/ # End-to-end RAG pipeline orchestrator
tests/ # Unit tests (78 tests, pytest)
configs/config.yaml # All configuration parameters
figures/ # Auto-generated charts (7 figures, 300 DPI)
run_experiment.py # Experiment CLI (main entry point)
generate_charts.py # Visualization generator
requirements.txt # Python dependencies
# Create and activate virtual environment
python -m venv venv
.\venv\Scripts\Activate.ps1 # Windows PowerShell
# source venv/bin/activate # Linux/Mac
# Install dependencies
pip install -r requirements.txt
# Configure FARMI API access (required for LLM generation)
# Copy the template and fill in your own credentials:
# cp .env.example .env # then edit .env and set FARMI_API_KEY
# The .env file is .gitignored - never commit it or hardcode keys in source.
python run_experiment.py --all
Ceci exécute toutes les expériences et génère automatiquement les graphiques :
python run_experiment.py --quick # Quick test (10 samples)
python run_experiment.py --samples 30 # Custom sample count
python run_experiment.py --per-strategy # Per-strategy breakdown only
python run_experiment.py --fever # Include FEVER dataset
python run_experiment.py --ablation # Ablation study only
python run_experiment.py --grid # 2x2 factorial grid (all LLM x embedding combos)
python run_experiment.py --grid --samples 50 # Full grid run (100 samples per config)
L'invite interactive vous permet de sélectionner :
Vous pouvez également fixer le générateur de manière non interactive via la variable d'environnement LLM_MODEL (correspondant à configs/config.yaml et à MODEL_DESCRIPTIONS de run_experiment.py) :
$env:LLM_MODEL = "mistral-7b-instruct" # or "qwen3.5:35b", "llama3.3:70b"
python run_experiment.py --all
Reproduisez l'expérience de l'assistant de codage sécurisé (40 règles OWASP/CWE) depuis la racine du projet. Elle réutilise le ExperimentRunner et le PoisonedDatasetGenerator existants et écrit les résultats dans data/experiments/seccode_*.json :
$env:LLM_MODEL = "llama3.3:70b"; $env:HF_HUB_OFFLINE = "1"; $env:TRANSFORMERS_OFFLINE = "1"
python Conference_ICSEA2026/run_seccode_usecase.py
# Set $env:SECCODE_N = "4" first for a quick smoke run over a few rules.
python generate_charts.py
pytest # All tests (includes slow model-loading tests)
pytest -m "not slow" # Fast tests only (~0.4s)
pytest --cov=src # With coverage report
Ligne de base naïve qui fait toujours confiance : 85 % (TruthfulQA), 85 % (FEVER). FEVER obtient des résultats inférieurs à la ligne de base — l'indice de confiance nécessite un calibrage spécifique au domaine pour les affirmations factuelles courtes.
Avec des intervalles de confiance à 95 % (Wilson pour les proportions, bootstrap par centiles B=20,000 pour le F1), le résultat principal de TruthfulQA en configuration mixte est : exactitude 91 % (IC 83.8–95.2), rappel 40 % (IC 19.8–64.3), F1 57.1 % (IC 25.0–80.0), Δ=0.225. Les intervalles sont larges car chaque exécution ne comporte que 15 échantillons empoisonnés ; nous les rapportons donc pour éviter de surestimer la précision.
Principaux résultats :
Une application de l'agent en génie logiciel : un assistant de codage sécurisé qui récupère à partir d'une base de connaissances organisée de 40 règles issues de l'OWASP Top 10 et de CWE (par ex. requêtes paramétrées pour l'injection SQL, hachage adaptatif des mots de passe, configuration TLS). Une requête de développeur récupère des recommandations que l'agent d'évaluation filtre avant que le LLM n'émette une recommandation. Nous empoisonnons 30 % des règles avec les cinq stratégies comme charges utiles de sécurité (par ex. une directive CORRECTION: frauduleuse, un identifiant CWE échangé).
Détection par stratégie (Llama 3.3 70B + all-MiniLM-L6-v2, K=5) :
Au-delà du point de fonctionnement τ=0.5, l'indice de confiance présente un signal fort et indépendant du seuil sur trois LLM (exécutions regroupées de stratégie mixte) :
Trust = alpha * Factuality + beta * Consistency + gamma * (1 - PoisonProbability)
Default weights: alpha=0.4, beta=0.35, gamma=0.25
Un facteur d'atténuation non linéaire s'applique lorsque la probabilité d'empoisonnement dépasse 0.7 :
delta = 1 - 0.4 * (P - 0.70) / 0.30 — à P=1.0, la confiance est réduite de 40 %.
[Conference_ICSEA2026/](https://github.com/gpt-laboratory/trustworthyrag/blob/HEAD/Conference_ICSEA2026/).Le PDF compilé n'est volontairement pas inclus dans cette version ; compilez-le à partir des sources LaTeX.
Auteurs de l'article de conférence ICSEA 2026 — Université de Tampere (TUNI).
Balkrishna Giri, chercheur MSc, Faculté des technologies de l'information et des sciences de la communication, Université de Tampere
E-mail : [email protected], [email protected]
Md Toufique Hasan, chercheur doctorant, GPT Lab, Faculté des technologies de l'information et des sciences de la communication, Université de Tampere
E-mail : [email protected]
Co-auteurs — Faculté des technologies de l'information et des sciences de la communication, Université de Tampere :
Développé au GPT Lab, Université de Tampere.
| Jeu de données | Exactitude | Précision | Rappel | Score F1 | vs. Ligne de base |
|---|
| TruthfulQA (mixte) | 91% | 100% | 40% | 57.1% | +7% |
| FEVER (exécution complète) | 73% | 20% | 26.7% | 22.9% | −12% |
| Stratégie | Exactitude | Précision | Rappel | F1 | Séparation |
|---|
| Injection | 99% | 93.8% | 100% | 96.8% | 0.498 |
| Contradiction | 92% | 88.9% | 53.3% | 66.7% | 0.311 |
| Subtile | 88% | 100% | 20.0% | 33.3% | 0.149 |
| Échange d'entités | 85% | — | 0% | 0% | 0.053 |
| LLM | Embedding | Exactitude | Précision | Rappel | F1 | Confiance propre | Séparation |
|---|
| Llama 3.3 70B | all-MiniLM-L6-v2 | 91% | 100% | 40% | 57.1% | 0.830 | 0.240 |
| Llama 3.3 70B | snowflake-arctic-embed2 | 91% | 100% | 40% | 57.1% | 0.799 | 0.188 |
| Qwen 3.5 35B | all-MiniLM-L6-v2 | 71% | 25.0% | 46.7% | 32.6% | 0.633 | 0.161 |
| Qwen 3.5 35B | snowflake-arctic-embed2 | 71% | 28.1% | 60.0% | 38.3% | 0.653 | 0.199 |
| Stratégie | Acc | Prec | Rappel | F1 | Δ |
|---|
| Injection d'instructions | 97.5% | 85.7% | 100.0% | 92.3% | 0.542 |
| Contradiction | 85.0% | — | 0.0% | 0.0% | 0.156 |
| Manipulation subtile | 85.0% | — | 0.0% | 0.0% | 0.066 |
| Échange d'entités | 72.5% | 29.2% | 58.3% | 38.9% | 0.291 |
| Mixte | 86.2% | 100.0% | 8.3% | 15.4% | 0.163 |
| LLM | Exactitude (τ=0.5) | ROC-AUC | τ* optimal |
|---|
| Llama 3.3 70B | 91% | 0.81 | 0.71 |
| Mistral 7B Instruct | 87% | 0.79 | 0.58 |
| Qwen 3.5 35B | 69–71% | 0.73 | 0.43 |
| Niveau de confiance | Plage de scores | Signification |
|---|
| HIGH | > 0.8 | Fiable |
| MEDIUM | 0.5 - 0.8 | À vérifier si important |
| LOW | 0.3 - 0.5 | Problèmes probables |
| VERY_LOW | < 0.3 | Ne pas faire confiance |