CaptainYifei/fake-news-detector

基于LLM和证据检索的虚假新闻自动检测系统

📚 項目概述

AI 虛假新聞檢測器 – 一個基於 Streamlit 的網頁應用,讓使用者能驗證新聞文章的真實性。它串聯大型語言模型(LLM)提示、語意嵌入檢索與多步驟主張驗證。系統支援中文、英文、日文與韓文,可與任何 OpenAI 相容的模型服務(本地 Ollama、LM Studio、OpenAI 或自訂 API)搭配使用。


🔑 核心功能

功能 說明
多語言支援 自動偵測輸入語言,並可輸出中文、英文、日文或韓文結果。
三節點事實核驗流程 1️⃣ 使用 LLM 從文章中提取核心主張。2️⃣ 重寫查詢,檢索網路證據(預設使用 DuckDuckGo,可選 SearXNG),使用 BGE‑M3 嵌入排序,依相似度與實體匹配過濾。3️⃣ 將主張分解為原子語句,根據證據回答,並聚合最終判決。
模型無關後端 支援 Ollama(預設 Qwen2.5‑3B + BGE‑M3)、LM Studio、OpenAI GPT 模型,或任何遵循 OpenAI API 模式的服務。
證據門控 可設定的 top‑K、相似度閾值與實體門控,確保僅高品質來源進入驗證步驟。
使用者與資料管理 多使用者登入,歷史記錄持久化儲存於本地資料庫,支援驗證報告的 PDF 匯出。
API 提供輕量級 REST 端點(/check),與網頁 UI 功能一致,支援程式化使用。

🛠️ 快速開始(Linux/macOS)

# 1. 克隆
git clone https://github.com/CaptainYifei/fake-news-detector.git
cd fake-news-detector

# 2. 安裝 Python 套件(需 Python 3.12+)
pip install -r requirements.txt

# 3. 安裝並執行 Ollama(建議)
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen2.5:3b   # LLM
ollama pull bge-m3:latest # 嵌入模型

# 4. (可選)在 model_config.json 中設定不同的搜尋後端

# 5. 啟動 UI
streamlit run app.py

於瀏覽器中開啟 http://localhost:8501


📡 使用 API

python api.py   # 在 8080 端口啟動伺服器

curl -X POST http://localhost:8080/check \
  -H "Content-Type: application/json" \
  -d '{
        "text": "新聞正文…",
        "api_base": "http://localhost:11434/v1",
        "model": "qwen2.5:3b",
        "embedding_model": "bge-m3:latest",
        "search_engine": "duckduckgo"
      }'

回應包含提取的主張、檢索到的證據,以及最終判決(TRUEFALSEUNVERIFIABLE)。


📂 倉儲結構

fake-news-detector/
├─ app.py                # Streamlit 前端
├─ api.py                # REST 服務
├─ fact_checker.py       # 協調三個節點
├─ fact_checking/        # 節點實作
├─ model_manager.py      # 讀取設定並建立 LLM/嵌入客戶端
├─ model_config.json     # 提供商、模型與搜尋預設值
├─ auth.py, db_utils.py  # 使用者認證與 SQLite 助手
├─ pdf_export.py         # 產生 PDF 報告
├─ requirements.txt
└─ docs/ …               # 使用指南、API 文件、螢幕截圖

📦 設定亮點(model_config.json

  • 提供者 – 定義 Ollama、LM Studio 等的基底網址與模型 ID。
  • 預設值 – 選擇使用的 LLM/嵌入模型、搜尋引擎、輸出語言,以及證據過濾閾值(evidence_top_kevidence_min_similarityevidence_entity_gate)。
  • 切換提供者僅需編輯 JSON;程式碼在啟動時自動讀取。

🐞 已知問題與故障排除

  • 模型卡頓或回傳空值 – 確認 Ollama 服務正在執行(ollama list),並檢查 model_config.json 中的 base_url 是否正確。
  • 無搜尋結果 – 檢查網路連線;ddgs 包裝器會自動回退至多個 DuckDuckGo 後端。若全部失敗,可啟用可選的 SearXNG 後端。
  • 無法驗證的判決 – 可能因相似度閾值過高或實體門控過濾掉所有候選者;請調整 evidence_min_similarity 或將 evidence_entity_gate 設為 false
  • 多語言輸出問題 – 確認所選 LLM 支援目標語言;較大的 OpenAI 模型通常更可靠地處理四種語言。

📄 授權

MIT – 請參閱 LICENSE


TL;DR – 本倉儲提供一個開箱即用、本地主機的 AI 事實核驗系統,結合 LLM 提示、語意搜尋與多步驟核驗,具備網頁 UI、API 與多語言支援。這是一個真實且可運作的 AI 軟體專案。

相關

  • 專案
  • 專案
  • Dispatch
  • 專案
  • 專案