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"
}'
回應包含提取的主張、檢索到的證據,以及最終判決(TRUE、FALSE 或 UNVERIFIABLE)。
📂 倉儲結構
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_k、evidence_min_similarity、evidence_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
- 專案
- 專案