Advanced AI-powered Fake News Detection System with Dual Flow Architecture
ZeroFake is a real-time fact-checking system that verifies news claims as:
- TIN THAT (TRUE NEWS)
- TIN GIA (FAKE NEWS)
The system uses a multi-agent cognitive architecture with:
- Dual Flow Routing (Recent News vs Old Info)
- Google Fact Check API integration
- LLM Evidence Filter (removes duplicates, social media, clickbait)
- Adversarial CRITIC-JUDGE debate
- Presumption of Truth principle
βββββββββββββββββββ
β INPUT CLAIM β
ββββββββββ¬βββββββββ
βΌ
βββββββββββββββββββ
β PLANNER β
β (Generate 5+ β
β search queries)β
ββββββββββ¬βββββββββ
βΌ
βββββββββββββββββββββββββββ
β Info Age? β
βββββββββββββββ¬ββββββββββββ
β
βββββββββββββββββββββββ΄ββββββββββββββββββββββ
βΌ βΌ
βββββββββββββββββ βββββββββββββββββ
β RECENT NEWS β β OLD INFO β
β (β€3 days) β β (>3 days) β
βββββββββ¬ββββββββ βββββββββ¬ββββββββ
β β
βΌ βΌ
βββββββββββββββββ βββββββββββββββββ
β SEARCH β β FACT CHECK β
β (Multi-src) β β API β
βββββββββ¬ββββββββ βββββββββ¬ββββββββ
β β
βΌ βββββββββββ΄ββββββββββ
βββββββββββββββββ βΌ βΌ
β FILTER β βββββββββββββββ βββββββββββββββ
β (Llama 8B) β β Has Result β β No Result β
β Remove junk β β β₯70% β β β
βββββββββ¬ββββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ
β β β
βΌ β Skip CRITIC βΌ
βββββββββββββββββ β βββββββββββββββ
β CRITIC β β β SEARCH β
β (Adversarial)β β ββββββββ¬βββββββ
βββββββββ¬ββββββββ β βΌ
β β βββββββββββββββ
β β β FILTER β
β β ββββββββ¬βββββββ
β β βΌ
β β βββββββββββββββ
β β β CRITIC β
β β ββββββββ¬βββββββ
β β β
ββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β JUDGE β
β (Final Verdict) β
ββββββββββ¬βββββββββ
βΌ
βββββββββββββββββββ
β OUTPUT β
β TIN THAT/TIN GIAβ
βββββββββββββββββββ
All API keys are configured in .env file:
# ============================================
# REQUIRED APIs
# ============================================
# Google Gemini API (PLANNER, CRITIC, JUDGE)
GEMINI_API_KEY=AIza...
# Google Fact Check Tools API (Fake news verification)
GOOGLE_FACT_CHECK_API_KEY=AIza...
# OpenWeather API (Weather claims)
OPENWEATHER_API_KEY=...
# ============================================
# CEREBRAS APIs (Primary models - 4 keys for rotation)
# ============================================
CEREBRAS_API_KEY_1=csk_...
CEREBRAS_API_KEY_2=csk_...
CEREBRAS_API_KEY_3=csk_...
CEREBRAS_API_KEY_4=csk_...
# ============================================
# GROQ APIs (Fallback models - 4 keys for rotation)
# ============================================
GROQ_API_KEY_1=gsk_...
GROQ_API_KEY_2=gsk_...
GROQ_API_KEY_3=gsk_...
GROQ_API_KEY_4=gsk_...| Flow Type | Condition | Action |
|---|---|---|
| RECENT NEWS | Claim within 3 days | Search -> CRITIC -> JUDGE |
| OLD INFO | Claim older than 3 days | Fact Check API first |
| Fact Check >=70% | High confidence verdict | Skip Search + CRITIC -> JUDGE |
| Fact Check miss | No results found | Fallback: Search -> CRITIC -> JUDGE |
- Multi-query search: 3 English + 3 Vietnamese queries per claim
- High confidence skip: If verdict >=70%, skip Search + CRITIC for speed
- Combined analysis: JUDGE considers Fact Check evidence directly
βββββββββββββββββββββββ
β INPUT QUERY β
β (from PLANNER) β
ββββββββββββ¬βββββββββββ
βΌ
βββββββββββββββββββββββ
β GOOGLE NEWS β
β gnews VN + EN β
β (~20 results) β
ββββββββββββ¬βββββββββββ
βΌ
βββββββββββββββββββββββ
β WIKIPEDIA β
β wikipedia-api β
β VN + EN lookup β
ββββββββββββ¬βββββββββββ
βΌ
βββββββββββββββββββββββ
β results < 10? β
ββββββββββββ¬βββββββββββ
β
βββββββββββββββββ΄ββββββββββββββββ
βΌ βΌ
βββββββββββββββββ βββββββββββββββββ
β YES β β NO β
βββββββββ¬ββββββββ βββββββββ¬ββββββββ
βΌ β
βββββββββββββββββ β
β GOOGLE WEB β β
β googlesearch β β
β + TRAFILATURA β β
βββββββββ¬ββββββββ β
βΌ β
βββββββββββββββββ β
β results < 5? β β
βββββββββ¬ββββββββ β
β β
βββββββββ΄ββββββββ β
βΌ βΌ β
βββββββββββββββββ βββββββββββββ β
β YES β β NO β β
βββββββββ¬ββββββββ βββββββ¬ββββββ β
βΌ β β
βββββββββββββββββ β β
β DDG FALLBACK β β β
β News + Web β β β
βββββββββ¬ββββββββ β β
β β β
βββββββββββββββββ΄ββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββ
β OUTPUT: 15-20 β
β Evidence Items β
βββββββββββββββββββββ
| Library | Source | Purpose |
|---|---|---|
gnews |
Google News | Latest news articles |
wikipedia-api |
Wikipedia | Entity verification |
googlesearch-python |
Google Web | URL extraction |
trafilatura |
Any URL | Article content extraction |
duckduckgo_search |
DuckDuckGo | Fallback search |
| Agent | Role | Model (Primary -> Fallback) |
|---|---|---|
| PLANNER | Generate 5+ search queries | Qwen 3 32B (Cerebras) -> Llama 8B -> Gemma |
| CRITIC | Adversarial analysis, find weaknesses | Qwen 3 32B (Cerebras) -> Llama 8B -> Gemma |
| JUDGE | Final verdict with Bayesian reasoning | Llama 3.3 70B (Cerebras) -> Llama 3.3 70B (Groq) -> Gemma |
| Source Type | Score | Classification |
|---|---|---|
| Government (.gov) | 0.95 | USABLE |
| Major News (Reuters, BBC, AP) | 0.95 | USABLE |
| Quality News (VnExpress, VTV) | 0.90 | USABLE |
| Default Sources | 0.55 | USABLE |
| Social Media | 0.30 | BLOCKED |
| Tabloids/UGC | 0.10 | BLOCKED |
Binary Rule: Score >= 0.5 = USABLE (layer_2), Score < 0.5 = BLOCKED (layer_4)
- Python 3.10+ (Python 3.11/3.12 recommended)
- Windows/Linux/macOS
# Clone repository
git clone https://github.com/Minwsun/ZeroFake.git
cd ZeroFake
# Install dependencies
pip install -r requirements.txt
# Configure API keys
cp .env.example .env
# Edit .env with your API keys (see above)app/
βββ main.py # FastAPI server + orchestrator
βββ agent_planner.py # PLANNER agent (query generation)
βββ agent_synthesizer.py # CRITIC + JUDGE agents
βββ fact_check.py # Google Fact Check API integration
βββ search.py # DDGS().news() + web search
βββ ranker.py # Source trust ranking
βββ model_clients.py # Multi-API model clients
βββ weather.py # OpenWeather API
βββ tool_executor.py # Tool orchestration + date routing
βββ trusted_domains.json # 380+ trusted domains
prompts/
βββ planner_prompt.txt # PLANNER instructions (5+ queries)
βββ critic_prompt.txt # CRITIC adversarial prompt
βββ synthesis_prompt.txt # JUDGE Bayesian reasoning
evaluation/
βββ test_dataset_1000.json # 1000 test samples (500 true, 500 fake)
βββ run_evaluation.py # Evaluation script
gui/
βββ main_gui.py # PyQt6 Dark Mode GUI
- 500 TRUE news: Real events from 2024-2025
- 500 FAKE news: Zombie news, fabrication, conspiracy theories, scams
- Accuracy, Precision, Recall, F1 Score
- Confusion Matrix (TIN THAT vs TIN GIA)
- False Positive/Negative Rate
- Evidence Filter Agent: LLM-based filtering using Llama 8B (Groq) to remove duplicates, social media, clickbait before CRITIC/JUDGE
- Filter Cache: Hash-based caching (200 entries) saves ~2s for duplicate claims
- Skip CRITIC Logic: Auto-skip CRITIC for KNOWLEDGE claims with Wikipedia evidence (saves 5-8s)
- Batch Evaluation: Concurrent processing (3 threads) for 3x faster evaluation
- Snippet Optimization: 400 chars per evidence for balanced info extraction
- Unified Search System: Multi-source search with GNews + Wikipedia + Googlesearch + Trafilatura + DDG fallback
- Google News Integration: gnews library for latest news (VN + EN)
- Wikipedia API: Direct entity verification (wikipedia-api)
- Article Extraction: trafilatura for full content extraction from URLs
- Anti-block Measures: Random delays, user-agent rotation, WARP proxy support
- English Query Translation: Comprehensive VN-to-EN translation dictionary
- JUDGE AI Reasoning: Trust AI knowledge for old events (>1 year), trust evidence for new events (2025+)
- Optimized Dual Flow: Old info (>3 days) with Fact Check verdict >=70% skips Search + CRITIC
- Smart Search Skip: Saves latency when Fact Check API has high confidence result
- Google Fact Check API: Multi-query (EN + VN) integration
- PLANNER 5+ queries: Better search coverage (backup if Fact Check fails)
- FAISS KB Cache: Semantic deduplication (85% similarity threshold)
- Cerebras + Groq: Multi-key API rotation (4 keys each)
Nguyen Nhat Minh
GitHub: @Minwsun
Repository: https://github.com/Minwsun/ZeroFake