
Ein Evaluierungsagent zur Erkennung von Fehlinformationen und Wissensvergiftung in Retrieval-Augmented-Generation-Systemen.
Ein Evaluierungsagent zur Erkennung von Fehlinformationen und Wissensvergiftung in Retrieval-Augmented-Generation-Systemen.
Dieses Projekt implementiert ein Trustworthy RAG Framework mit einem integrierten Evaluierungsagenten, der die Zuverlässigkeit von RAG-Antworten anhand von drei komplementären Analysekomponenten bewertet:
Das System erzeugt für jede RAG-Antwort einen Trust Score (0-1) und ermöglicht so die automatisierte Erkennung von Wissensvergiftungsangriffen und halluzinierten Inhalten.
Dieses Repository ist das Forschungsartefakt zum ICSEA-2026-Konferenzpapier gleichen Titels. Siehe [Conference_ICSEA2026/](https://github.com/gpt-laboratory/trustworthyrag/blob/main/Conference_ICSEA2026) für die LaTeX-Quellen sowie den Abschnitt Paper weiter unten.
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/ # Dokumentabruf (Embeddings, FAISS, Chunking)
generator/ # LLM-Antwortgenerierung (FARMI-Client, Prompts)
evaluation_agent/ # Kernbewertung (NLI, Gift-Erkennung, Trust Index)
experiments/ # Experimentierframework (vergiftete Datensätze, Runner)
pipeline/ # End-to-End-RAG-Pipeline-Orchestrierung
tests/ # Unit-Tests (78 Tests, pytest)
configs/config.yaml # Alle Konfigurationsparameter
figures/ # Automatisch generierte Diagramme (7 Abbildungen, 300 DPI)
run_experiment.py # Experiment-CLI (Haupteinstiegspunkt)
generate_charts.py # Visualisierungsgenerator
requirements.txt # Python-Abhängigkeiten
# Virtuelle Umgebung erstellen und aktivieren
python -m venv venv
.\venv\Scripts\Activate.ps1 # Windows PowerShell
# source venv/bin/activate # Linux/Mac
# Abhängigkeiten installieren
pip install -r requirements.txt
# FARMI-API-Zugriff konfigurieren (für LLM-Generierung erforderlich)
# Vorlage kopieren und eigene Zugangsdaten eintragen:
# cp .env.example .env # dann .env bearbeiten und FARMI_API_KEY setzen
# Die .env-Datei ist .gitignored – niemals committen oder Schlüssel im Quellcode hartkodieren.
python run_experiment.py --all
Dies führt alle Experimente aus und generiert automatisch Diagramme:
python run_experiment.py --quick # Schnelltest (10 Stichproben)
python run_experiment.py --samples 30 # Benutzerdefinierte Stichprobenanzahl
python run_experiment.py --per-strategy # Nur Aufschlüsselung nach Strategie
python run_experiment.py --fever # FEVER-Datensatz einbeziehen
python run_experiment.py --ablation # Nur Ablationsstudie
python run_experiment.py --grid # 2x2-faktorielles Raster (alle LLM-x-Embedding-Kombinationen)
python run_experiment.py --grid --samples 50 # Vollständiger Rasterlauf (100 Stichproben pro Konfiguration)
Über die interaktive Eingabeaufforderung können Sie Folgendes auswählen:
Sie können den Generator auch nicht-interaktiv über die Umgebungsvariable LLM_MODEL festlegen (übereinstimmend mit configs/config.yaml und MODEL_DESCRIPTIONS in run_experiment.py):
$env:LLM_MODEL = "mistral-7b-instruct" # oder "qwen3.5:35b", "llama3.3:70b"
python run_experiment.py --all
Reproduzieren Sie das Experiment des Assistenten für sichere Codierung (40 OWASP/CWE-Regeln) aus dem Projektstammverzeichnis. Es verwendet den vorhandenen ExperimentRunner + PoisonedDatasetGenerator erneut und schreibt Ergebnisse nach 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
# Setzen Sie zuerst $env:SECCODE_N = "4" für einen schnellen Smoke-Test über einige Regeln.
python generate_charts.py
pytest # Alle Tests (inklusive langsamer Modell-Lade-Tests)
pytest -m "not slow" # Nur schnelle Tests (~0.4s)
pytest --cov=src # Mit Coverage-Bericht
| Datensatz | Genauigkeit | Präzision | Recall | F1-Score | vs. Baseline |
|---|---|---|---|---|---|
| TruthfulQA (gemischt) | 91% | 100% | 40% | 57.1% | +7% |
| FEVER (vollständiger Lauf) | 73% | 20% | 26.7% | 22.9% | −12% |
Naive Baseline, die immer vertraut: 85% (TruthfulQA), 85% (FEVER). FEVER schneidet schlechter ab als die Baseline – der Trust Index erfordert eine domänenspezifische Kalibrierung für kurze faktische Behauptungen.
Mit 95-%-Konfidenzintervallen (Wilson für Anteile, Perzentil-Bootstrap B=20,000 für F1) lautet das primäre TruthfulQA-Mischergebnis: Genauigkeit 91 % (CI 83.8–95.2), Recall 40 % (CI 19.8–64.3), F1 57.1 % (CI 25.0–80.0), Δ=0.225. Die Intervalle sind breit, da jeder Lauf nur 15 vergiftete Stichproben enthält; wir berichten sie, um die Präzision nicht zu überschätzen.
| Strategie | Genauigkeit | Präzision | Recall | F1 | Trennung |
|---|---|---|---|---|---|
| Injektion | 99% | 93.8% | 100% | 96.8% | 0.498 |
| Widerspruch | 92% | 88.9% | 53.3% | 66.7% | 0.311 |
| Subtil | 88% | 100% | 20.0% | 33.3% | 0.149 |
| Entitätentausch | 85% | — | 0% | 0% | 0.053 |