検索拡張生成(RAG)システムにおける誤情報とナレッジポイズニングを検出するための評価エージェント。
このプロジェクトは、統合された評価エージェント(Evaluation Agent)を備えたTrustworthy RAGフレームワークを実装しています。このエージェントは、3つの相補的な分析コンポーネントを用いてRAG応答の信頼性を評価します:
本システムは、すべてのRAG応答に対して**信頼スコア(Trust Score、0〜1)**を生成し、ナレッジポイズニング攻撃や幻覚(ハルシネーション)コンテンツの自動検出を可能にします。
このリポジトリは、同名のICSEA 2026会議論文の研究アーティファクトです。LaTeXソースは[Conference_ICSEA2026/](https://github.com/gpt-laboratory/trustworthyrag/blob/HEAD/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 および 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
ナイーブな常時信頼ベースライン: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%に対して、5つの戦略をセキュリティペイロードとしてポイズニングします(例:偽のCORRECTION:ディレクティブ、置換されたCWE識別子)。
戦略別の検出結果(Llama 3.3 70B + all-MiniLM-L6-v2、K=5):
τ=0.5の動作点を超えても、信頼指数は3つのLLMにわたって強い閾値非依存のシグナルを持ちます(混合戦略の実行をプールしたもの):
Trust = alpha * Factuality + beta * Consistency + gamma * (1 - PoisonProbability)
Default weights: alpha=0.4, beta=0.35, gamma=0.25
ポイズン確率が0.7を超える場合、非線形ダンパーが適用されます:
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会議論文の著者 — タンペレ大学(TUNI)。
Balkrishna Giri、修士課程研究員、情報技術・コミュニケーション科学部、タンペレ大学
メール: [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 | 分離度 |
|---|
| インジェクション | 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 |
| 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 | Δ |
|---|
| 指示インジェクション | 97.5% | 85.7% | 100.0% | 92.3% | 0.542 |
| 矛盾 | 85.0% | — | 0.0% | 0.0% | 0.156 |
| 巧妙な改変 | 85.0% | — | 0.0% | 0.0% | 0.066 |
| エンティティ置換 | 72.5% | 29.2% | 58.3% | 38.9% | 0.291 |
| 混合 | 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 | 信頼しない |