
검색 증강 생성(RAG) 시스템에서 허위 정보 및 지식 중독을 탐지하기 위한 평가 에이전트
검색 증강 생성(Retrieval-Augmented Generation) 시스템에서 오정보(misinformation)와 지식 중독(knowledge poisoning)을 탐지하는 평가 에이전트(Evaluation Agent)입니다.
이 프로젝트는 세 가지 상호 보완적 분석 구성 요소를 사용하여 RAG 응답의 신뢰성을 평가하는 통합 평가 에이전트(Evaluation Agent) 를 갖춘 신뢰할 수 있는 RAG 프레임워크(Trustworthy RAG Framework) 를 구현합니다:
이 시스템은 모든 RAG 응답에 대해 신뢰 점수(Trust Score) (0-1)를 생성하여 지식 중독 공격과 환각(hallucination) 콘텐츠를 자동으로 탐지할 수 있게 합니다.
이 저장소는 동일한 제목의 ICSEA 2026 학술대회 논문의 연구 산출물입니다. LaTeX 소스는 [Conference_ICSEA2026/](https://github.com/gpt-laboratory/trustworthyrag/blob/HEAD/Conference_ICSEA2026/)에서 확인할 수 있으며, 아래의 논문(Paper) 섹션도 참조하세요.
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 환경 변수를 통해 비대화형으로 생성기(generator)를 고정할 수도 있습니다
(configs/config.yaml 및 run_experiment.py의 MODEL_DESCRIPTIONS와 일치):
$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
항상 신뢰하는 단순 기준(naive always-trust baseline): 85% (TruthfulQA), 85% (FEVER). FEVER는 기준 대비 낮은 성능을 보입니다 — 신뢰 지수(Trust Index)는 짧은 사실적 주장에 대해 도메인별 보정이 필요합니다.
95% 신뢰 구간(비율은 Wilson, F1은 백분위 부트스트랩 B=20,000)을 적용하면, 주요 TruthfulQA 혼합 결과는 다음과 같습니다: 정확도 91% (CI 83.8–95.2), 재현율 40% (CI 19.8–64.3), F1 57.1% (CI 25.0–80.0), Δ=0.225. 각 실행에 중독 샘플이 15개뿐이므로 구간이 넓으며, 정밀도를 과장하지 않도록 이를 보고합니다.
주요 발견 사항:
이 에이전트의 소프트웨어 공학 응용 사례: OWASP Top 10 및 CWE에서 도출된 40개 규칙으로 구성된 선별된 지식 베이스에서 검색하는 보안 코딩 어시스턴트입니다 (예: SQL 인젝션을 위한 매개변수화된 쿼리, 적응형 비밀번호 해싱, TLS 구성). 개발자 쿼리는 LLM이 권장 사항을 생성하기 전에 평가 에이전트가 검열하는 지침을 검색합니다. 30%의 규칙에 다섯 가지 전략을 보안 페이로드로 중독시킵니다 (예: 가짜 CORRECTION: 지시문, 교체된 CWE 식별자).
전략별 탐지 (Llama 3.3 70B + all-MiniLM-L6-v2, K=5):
τ=0.5 운용 지점을 넘어, 신뢰 지수(Trust Index)는 세 LLM에 걸쳐 강력한 임계값 독립적 신호를 가집니다 (혼합 전략 실행 풀링):
Trust = alpha * Factuality + beta * Consistency + gamma * (1 - PoisonProbability)
Default weights: alpha=0.4, beta=0.35, gamma=0.25
중독 확률이 0.7을 초과하면 비선형 감쇠기(dampener)가 적용됩니다:
delta = 1 - 0.4 * (P - 0.70) / 0.30 — P=1.0에서 신뢰도는 40% 감소합니다.
| 신뢰 수준 |
|---|
[Conference_ICSEA2026/](https://github.com/gpt-laboratory/trustworthyrag/blob/HEAD/Conference_ICSEA2026/)에 있습니다.컴파일된 PDF는 이 릴리스에 의도적으로 포함되지 않았습니다. LaTeX 소스에서 직접 빌드하세요.
ICSEA 2026 학술대회 논문 저자 — 탐페레 대학교(Tampere University, TUNI).
Balkrishna Giri, 석사 연구원, 정보기술 및 커뮤니케이션 과학 학부(Faculty of Information Technology and Communication Sciences), 탐페레 대학교
이메일: [email protected], [email protected]
Md Toufique Hasan, 박사 과정 연구원, GPT Lab, 정보기술 및 커뮤니케이션 과학 학부, 탐페레 대학교
이메일: [email protected]
공동 저자 — 정보기술 및 커뮤니케이션 과학 학부, 탐페레 대학교:
탐페레 대학교 GPT Lab에서 개발되었습니다.
| 데이터셋 | 정확도 | 정밀도 | 재현율 | F1 점수 | 기준 대비 |
|---|
| TruthfulQA (혼합) | 91% | 100% | 40% | 57.1% | +7% |
| FEVER (전체 실행) | 73% | 20% | 26.7% | 22.9% | −12% |
| 전략 | 정확도 | 정밀도 | 재현율 | F1 | 분리도 |
|---|
| 주입(Injection) | 99% | 93.8% | 100% | 96.8% | 0.498 |
| 모순(Contradiction) | 92% | 88.9% | 53.3% | 66.7% | 0.311 |
| 미묘한 변조(Subtle) | 88% | 100% | 20.0% | 33.3% | 0.149 |
| 엔터티 교체(Entity Swap) | 85% | — | 0% | 0% | 0.053 |
| LLM | 임베딩 | 정확도 | 정밀도 | 재현율 | F1 | 클린 신뢰도 | 분리도 |
|---|
| 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 |
| 전략 | 정확도 | 정밀도 | 재현율 | F1 | Δ |
|---|
| 명령어 주입(Instruction injection) | 97.5% | 85.7% | 100.0% | 92.3% | 0.542 |
| 모순(Contradiction) | 85.0% | — | 0.0% | 0.0% | 0.156 |
| 미묘한 조작(Subtle manipulation) | 85.0% | — | 0.0% | 0.0% | 0.066 |
| 엔터티 교체(Entity swap) | 72.5% | 29.2% | 58.3% | 38.9% | 0.291 |
| 혼합(Mixed) | 86.2% | 100.0% | 8.3% | 15.4% | 0.163 |
| LLM | 정확도 (τ=0.5) | ROC-AUC | 최적 τ* |
|---|
| 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 |
| 점수 범위 |
|---|
| 의미 |
|---|
| HIGH | > 0.8 | 신뢰할 수 있음 |
| MEDIUM | 0.5 - 0.8 | 중요한 경우 확인 필요 |
| LOW | 0.3 - 0.5 | 문제가 있을 가능성이 높음 |
| VERY_LOW | < 0.3 | 신뢰하지 마십시오 |