
Un agente di valutazione per rilevare disinformazione e avvelenamento della conoscenza nei sistemi di generazione aumentata da recupero.
Un agente di valutazione per il rilevamento di disinformazione e avvelenamento della conoscenza nei sistemi di generazione aumentata da recupero.
Questo progetto implementa un framework RAG affidabile con un Evaluation Agent integrato che valuta l'affidabilità delle risposte RAG utilizzando tre componenti di analisi complementari:
Il sistema produce un Trust Score (0-1) per ogni risposta RAG, consentendo il rilevamento automatico di attacchi di avvelenamento della conoscenza e contenuti allucinati.
Questo repository è l'artefatto di ricerca per l'articolo della conferenza ICSEA 2026 con lo stesso titolo. Consulta [Conference_ICSEA2026/](https://github.com/gpt-laboratory/trustworthyrag/blob/HEAD/Conference_ICSEA2026/) per le fonti LaTeX e la sezione Paper di seguito.
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
Questo esegue tutti gli esperimenti e genera automaticamente i grafici:
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)
Il prompt interattivo consente di selezionare:
Puoi anche fissare il generatore in modalità non interattiva tramite la variabile d'ambiente LLM_MODEL (corrispondente a configs/config.yaml e ai MODEL_DESCRIPTIONS di run_experiment.py):
$env:LLM_MODEL = "mistral-7b-instruct" # or "qwen3.5:35b", "llama3.3:70b"
python run_experiment.py --all
Riproduci l'esperimento dell'assistente di secure coding (40 regole OWASP/CWE) dalla radice del progetto.
Riutilizza i componenti esistenti ExperimentRunner + PoisonedDatasetGenerator e scrive i risultati in
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
Baseline naive di fiducia incondizionata: 85% (TruthfulQA), 85% (FEVER). FEVER ottiene prestazioni inferiori alla baseline — il Trust Index richiede una calibrazione specifica del dominio per affermazioni fattuali brevi.
Con intervalli di confidenza al 95% (Wilson per le proporzioni, bootstrap percentile B=20.000 per l'F1), il risultato misto principale di TruthfulQA è: accuratezza 91% (IC 83.8–95.2), recall 40% (IC 19.8–64.3), F1 57.1% (IC 25.0–80.0), Δ=0.225. Gli intervalli sono ampi perché ogni esecuzione ha solo 15 campioni avvelenati, quindi li riportiamo per evitare di sovrastimare la precisione.
Risultati chiave:
Un'applicazione di ingegneria del software dell'agente: un assistente di secure coding che recupera da una knowledge base curata di 40 regole tratte dall'OWASP Top 10 e dal CWE (ad es. query parametrizzate per l'SQL injection, hashing adattivo delle password, configurazione TLS). Una query di uno sviluppatore recupera indicazioni che l'Evaluation Agent esamina prima che l'LLM emetta una raccomandazione. Avveleniamo il 30% delle regole con le cinque strategie come payload di sicurezza (ad es. una direttiva spuria CORRECTION:, un identificatore CWE scambiato).
Rilevamento per strategia (Llama 3.3 70B + all-MiniLM-L6-v2, K=5):
Oltre al punto operativo τ=0.5, il Trust Index ha un forte segnale indipendente dalla soglia su tre LLM (esecuzioni aggregate con strategia mista):
Trust = alpha * Factuality + beta * Consistency + gamma * (1 - PoisonProbability)
Default weights: alpha=0.4, beta=0.35, gamma=0.25
Un attenuatore non lineare si applica quando la probabilità di avvelenamento supera 0.7:
delta = 1 - 0.4 * (P - 0.70) / 0.30 — a P=1.0, il trust è ridotto del 40%.
[Conference_ICSEA2026/](https://github.com/gpt-laboratory/trustworthyrag/blob/HEAD/Conference_ICSEA2026/).Il PDF compilato non è incluso volutamente in questa release; generarlo dalle fonti LaTeX.
Autori dell'articolo della conferenza ICSEA 2026 — Università di Tampere (TUNI).
Balkrishna Giri, Ricercatore MSc, Facoltà di Tecnologie dell'Informazione e Scienze della Comunicazione, Università di Tampere
Email: [email protected], [email protected]
Md Toufique Hasan, Ricercatore Dottorando, GPT Lab, Facoltà di Tecnologie dell'Informazione e Scienze della Comunicazione, Università di Tampere
Email: [email protected]
Co-autori — Facoltà di Tecnologie dell'Informazione e Scienze della Comunicazione, Università di Tampere:
Sviluppato presso GPT Lab, Università di Tampere.
| Dataset | Accuratezza | Precisione | Recall | F1 Score | vs. Baseline |
|---|
| TruthfulQA (mixed) | 91% | 100% | 40% | 57.1% | +7% |
| FEVER (full run) | 73% | 20% | 26.7% | 22.9% | −12% |
| Strategia | Accuratezza | Precisione | Recall | F1 | Separazione |
|---|
| Iniezione | 99% | 93.8% | 100% | 96.8% | 0.498 |
| Contraddizione | 92% | 88.9% | 53.3% | 66.7% | 0.311 |
| Sottile | 88% | 100% | 20.0% | 33.3% | 0.149 |
| Scambio di entità | 85% | — | 0% | 0% | 0.053 |
| LLM | Embedding | Accuratezza | Precisione | Recall | F1 | Trust pulito | Separazione |
|---|
| 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 |
| Strategia | Acc | Prec | Recall | F1 | Δ |
|---|
| Iniezione di istruzioni | 97.5% | 85.7% | 100.0% | 92.3% | 0.542 |
| Contraddizione | 85.0% | — | 0.0% | 0.0% | 0.156 |
| Manipolazione sottile | 85.0% | — | 0.0% | 0.0% | 0.066 |
| Scambio di entità | 72.5% | 29.2% | 58.3% | 38.9% | 0.291 |
| Misto | 86.2% | 100.0% | 8.3% | 15.4% | 0.163 |
| LLM | Accuratezza (τ=0.5) | ROC-AUC | τ* ottimale |
|---|
| 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 |
| Livello di Trust | Intervallo di punteggio | Significato |
|---|
| ALTO | > 0.8 | Affidabile |
| MEDIO | 0.5 - 0.8 | Verifica se importante |
| BASSO | 0.3 - 0.5 | Probabilmente ha problemi |
| MOLTO BASSO | < 0.3 | Non fidarti |