
Оценочный агент для обнаружения дезинформации и отравления знаний в системах генерации с дополненной выборкой.
Агент оценки для обнаружения дезинформации и отравления знаний в системах генерации с дополненной выборкой (RAG).
В этом проекте реализован фреймворк Trustworthy RAG со встроенным агентом оценки (Evaluation Agent), который оценивает надёжность ответов RAG с помощью трёх взаимодополняющих компонентов анализа:
Система формирует оценку доверия (Trust Score) (0-1) для каждого ответа RAG, что позволяет автоматически обнаруживать атаки отравления знаний и галлюцинированный контент.
Этот репозиторий является исследовательским артефактом конференционной статьи ICSEA 2026 с тем же названием. Исходные файлы LaTeX см. в [Conference_ICSEA2026/](https://github.com/gpt-laboratory/trustworthyrag/blob/main/Conference_ICSEA2026), а также в разделе Статья ниже.
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
Эта команда запускает все эксперименты и автоматически генерирует графики:
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)
Интерактивный запрос позволяет выбрать:
Также можно зафиксировать генератор в неинтерактивном режиме через переменную окружения LLM_MODEL
(соответствует configs/config.yaml и MODEL_DESCRIPTIONS из run_experiment.py):
$env:LLM_MODEL = "mistral-7b-instruct" # or "qwen3.5:35b", "llama3.3:70b"
python run_experiment.py --all
Воспроизведите эксперимент с ассистентом безопасного кодинга (40 правил OWASP/CWE) из корня проекта.
Он переиспользует существующие ExperimentRunner + PoisonedDatasetGenerator и записывает результаты в
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
| Набор данных | Точность | Прецизионность | Полнота | F1-мера | Δ к базовой линии |
|---|---|---|---|---|---|
| TruthfulQA (смеш.) | 91% | 100% | 40% | 57.1% | +7% |
| FEVER (полный прогон) | 73% | 20% | 26.7% | 22.9% | −12% |
Наивная базовая линия «всегда доверять»: 85% (TruthfulQA), 85% (FEVER). FEVER показывает результат ниже базовой линии — индекс доверия требует калибровки под конкретный домен для коротких фактических утверждений.
С 95% доверительными интервалами (Уилсон для долей; перцентильный бутстрэп, B=20,000, для F1) основной результат TruthfulQA со смешанным отравлением таков: точность 91% (ДИ 83.8–95.2), полнота 40% (ДИ 19.8–64.3), F1 57.1% (ДИ 25.0–80.0), Δ=0.225. Интервалы широкие, поскольку в каждом прогоне всего 15 отравленных образцов; мы приводим их, чтобы не завышать точность оценок.
| Стратегия | Точность | Прецизионность | Полнота | F1 | Разделение |
|---|---|---|---|---|---|
| Инъекция | 99% | 93.8% | 100% | 96.8% | 0.498 |
| Противоречие | 92% | 88.9% | 53.3% | 66.7% | 0.311 |
| Тонкая манипуляция | 88% | 100% | 20.0% | 33.3% | 0.149 |
| Подмена сущностей | 85% | — | 0% | 0% | 0.053 |