
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/HEAD/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
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.
Wichtigste Erkenntnisse:
Eine Software-Engineering-Anwendung des Agenten: ein Assistent für sichere Codierung, der aus einer kuratierten Wissensbasis von 40 Regeln aus dem OWASP Top 10 und CWE abruft (z. B. parametrisierte Abfragen gegen SQL-Injection, adaptives Passwort-Hashing, TLS-Konfiguration). Eine Entwicklerabfrage ruft Empfehlungen ab, die der Evaluierungsagent prüft, bevor das LLM eine Empfehlung ausgibt. Wir vergiften 30 % der Regeln mit den fünf Strategien als Sicherheits-Payloads (z. B. eine unechte CORRECTION:-Direktive, eine vertauschte CWE-Kennung).
Erkennung nach Strategie (Llama 3.3 70B + all-MiniLM-L6-v2, K=5):
Über den Arbeitspunkt τ=0.5 hinaus liefert der Trust Index über drei LLMs hinweg ein starkes, schwellenwertunabhängiges Signal (gepoolte Läufe mit gemischter Strategie):
Trust = alpha * Factuality + beta * Consistency + gamma * (1 - PoisonProbability)
Standardgewichtung: alpha=0.4, beta=0.35, gamma=0.25
Ein nichtlinearer Dämpfer greift, wenn die Giftwahrscheinlichkeit 0.7 überschreitet:
delta = 1 - 0.4 * (P - 0.70) / 0.30 – bei P=1.0 wird das Vertrauen um 40% reduziert.
[Conference_ICSEA2026/](https://github.com/gpt-laboratory/trustworthyrag/blob/HEAD/Conference_ICSEA2026/).Das kompilierte PDF ist bewusst nicht in dieser Veröffentlichung enthalten; es kann aus den LaTeX-Quellen erstellt werden.
Autoren des ICSEA-2026-Konferenzpapiers – Tampere University (TUNI).
Balkrishna Giri, MSc-Forscher, Fakultät für Informationstechnologie und Kommunikationswissenschaften, Tampere University
E-Mail: [email protected], [email protected]
Md Toufique Hasan, Doktorand, GPT Lab, Fakultät für Informationstechnologie und Kommunikationswissenschaften, Tampere University
E-Mail: [email protected]
Koautoren – Fakultät für Informationstechnologie und Kommunikationswissenschaften, Tampere University:
Entwickelt am GPT Lab, Tampere University.
| 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% |
| 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 |
| LLM | Embedding | Genauigkeit | Präzision | Recall | F1 | Clean Trust | Trennung |
|---|
| 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 |
| Strategie | Acc | Prec | Recall | F1 | Δ |
|---|
| Anweisungsinjektion | 97.5% | 85.7% | 100.0% | 92.3% | 0.542 |
| Widerspruch | 85.0% | — | 0.0% | 0.0% | 0.156 |
| Subtile Manipulation | 85.0% | — | 0.0% | 0.0% | 0.066 |
| Entitätentausch | 72.5% | 29.2% | 58.3% | 38.9% | 0.291 |
| Gemischt | 86.2% | 100.0% | 8.3% | 15.4% | 0.163 |
| LLM | Genauigkeit (τ=0.5) | ROC-AUC | Optimales τ* |
|---|
| 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 |
| Vertrauensstufe | Score-Bereich | Bedeutung |
|---|
| HIGH | > 0.8 | Zuverlässig |
| MEDIUM | 0.5 - 0.8 | Bei Wichtigkeit überprüfen |
| LOW | 0.3 - 0.5 | Weist wahrscheinlich Probleme auf |
| VERY_LOW | < 0.3 | Nicht vertrauen |