AI Fake News Detector 開源假新聞查核工具,證據不足就回無法驗證

AI Fake News Detector 把判斷權從模型手裡拿走:LLM 只拆聲明、改查詢、比證據,證據過不了語義與實體兩道門就回「無法驗證」,預設 3B 模型本機跑,MIT 開源。

用 AI 摘要這篇文章:

把一則可疑新聞貼進 ChatGPT 問「這是真的嗎」,幾秒鐘內就會得到一個看起來很篤定的答案。麻煩的是,那個答案出自模型的訓練記憶:它沒有義務附上出處,遇到訓練資料截止日之後才發生的事、或者冷門到沒什麼人寫過的題目,它照樣能給你一段流暢的回覆。開源專案 AI Fake News Detector 對這個老問題給了一個相當極端的答案:讓模型從頭到尾不憑記憶下判斷。模型在整條流程裡只做三件事,拆解聲明、改寫搜尋查詢、比對證據;證據找不到、或者分數達不到門檻,最終結論就落在「無法驗證」。

這個 Python 專案放在 GitHub 上,MIT 授權,2025 年 3 月建立,2026 年 8 月 7 日的一次大改把核心流程重寫成三節點管線。把它當成「一鍵辨別真假新聞」的成熟產品會失望;比較貼切的定位,是一套把 AI 查核拆成可檢驗步驟的參考實作,每個結論都掛得到具體證據與具體設定值。

三個節點各做什麼:先拆聲明、再找證據、最後才驗證

專案的核心是一條定義得很清楚的管線,寫在 fact_checking/pipeline.py 裡。管線先吃新聞全文,請模型抽出中心思想、可驗證的核心聲明與關鍵實體;接著把聲明改寫成多角度搜尋查詢,出門找證據;最後把聲明拆到原子層級,逐項對著證據驗證。原始碼註解直接標明這三段對應作者論文的第三、四、五章,研究出身的痕跡很重。

把新聞丟進去之前,介面左側先讓你選模型供應商、模型、搜尋引擎與輸出語言。預設畫面是中文的,輸入區放待查核的新聞全文,按下去之後分步顯示每個節段的處理進度。

AI Fake News Detector 的 Streamlit 介面:左側選模型供應商、搜尋引擎與輸出語言,主區輸入待查核新聞Pin
官方介面截圖:左側設定模型供應商與搜尋引擎,主區貼上新聞全文就能開始查核。

驗證這一段的設計值得展開。verification.py 給模型的指令是:把中心聲明拆成至多三個不重疊的原子聲明,為每個原子聲明抽出人、事、時、地、原因五個要素,對著證據逐項判斷支援、反駁或證據不足,最後彙總成一個總判定。彙總出來只有四種可能:TRUE、FALSE、PARTIALLY_TRUE、UNVERIFIABLE。也就是說,同一段新聞裡如果兩個子句對、一個子句錯,它有機會給出「部分為真」這種有層次的答案,不必被迫二選一。

官方手繪流程圖:聲明抽取、證據檢索、多步驗證三個節點的輸入與產出Pin
官方手繪流程圖:三個節點各自吃什麼、產出什麼,以一則世界盃冠軍聲明當例子。

證據要過兩道門,過不了就誠實說無法驗證

真正讓這個專案跟「把新聞貼給聊天機器人」拉開差距的,是 evidence_retrieval.py 裡的證據門控。搜回來的網頁清單不會直接交給模型,先經過兩層過濾:用 BGE-M3 嵌入模型計算每段證據與中心聲明的語義相似度,低於預設值 0.45 的丟掉;接著檢查證據文字裡有沒有命中中心聲明的關鍵實體,完全沒命中的也丟掉。排序時先把候選池放大三倍,過濾後只留分數最高的八段進入驗證節段。

出門找證據之前還有一個容易被忽略的步驟:查詢改寫。evidence_retrieval.py 要求模型為同一個中心聲明生成多組不同目的的查詢,有的直球搜聲明本身,有的鎖定關鍵實體,有的帶時間地點,有的專門找反例。用一組查詢打天下跟用四種角度輪流搜,撈到的證據池大小差很多,這個設計直接決定了後面兩道門有沒有東西可濾。

全部被濾掉的時候會發生什麼?系統回 UNVERIFIABLE,明講這則新聞查不到夠格的證據,拒絕讓模型在無關網頁上硬湊結論。更值得注意的是 schemas.py 裡的細節:最終判定的欄位預設值就是 UNVERIFIABLE,模型輸出解析失敗時,安全落地的地方也是「無法驗證」。把預設值設在誠實那一側,是整個專案我認為最值得抄的地方。

幾個關鍵預設值整理如下,全部出自 model_config.json

設定項預設值意義
語言模型qwen2.5:3b3B 級小模型,消費級機器跑得動
嵌入模型bge-m3:latest多語言嵌入,計算證據相關度
推論溫度0.0關掉隨機性,查核要的是可重現
語義相似度門檻0.45低於此分數的證據直接丟棄
實體命中門控開啟證據必須提到聲明裡的關鍵實體
最終證據數量8候選池先放大三倍再選
搜尋引擎duckduckgo走 ddgs 程式庫,可換自架 SearXNG

這裡有個容易搞混的細節:設定檔裡 Ollama 的模型清單第一項是 GPT-OSS 120B Cloud 這類雲端大模型,容易讓人順手當成預設;實際的預設組合是 qwen2.5:3b 搭配 bge-m3,一張普通顯卡甚至純 CPU 就跑得動。

查核報告長什麼樣子

結果頁不是給你一個標籤就結束。官方釋出的結果截圖顯示,頁面最上方是新聞原文,接著是總判定與可信度評分,下方三個可展開的區塊分別是聲明抽取結果、檢索到的證據清單與多步驗證過程。證據清單裡每條都帶來源網頁的標題與摘錄,驗證區塊攤開每個原子聲明被判支援或反駁的理由。查核歷史會存進本機資料庫,報告可以匯出成 PDF。它還內建一套多帳號系統:註冊、登入、記住我都有,每個帳號的查核紀錄彼此隔離,幾個人共用一套部署時紀錄不會混在一起,對實驗室或小團隊一起用算是貼心。

查核結果頁顯示總判定 FALSE 與可信度評分,下方可展開聲明抽取、證據與驗證細節Pin
官方結果頁:總判定與可信度評分在最上方,證據與驗證過程都可以逐一展開檢查。

輸出語言跟著輸入自動切換,中文、英文、日文、韓文輸入都認得,判定報告也能指定語言輸出。多語言不只是介面皮:fact_checker.py 裡有個專門的語言多樣性最佳化步驟,選證據時會在候選之間平衡不同語言的配額,避免清一色同語言來源。實際意義是查一則中文新聞,證據清單有機會混進英文媒體的報導,交叉比對的價值比全中文來源高。要注意的是介面的中文是簡體版,繁體使用者操作不會有障礙,但視覺上需要一點適應。

預設全程本機跑,隱私邊界畫在哪

資料流向是我翻原始碼時最想確認的一件事,結論是預設路徑相當乾淨。模型推論走本機 Ollama,新聞全文只進到你自己機器上的模型;歷史紀錄寫進本機 SQLite 檔案;帳號系統的密碼用 SHA-256 加鹽儲存;app.py 一千兩百多行裡沒有任何遙測或分析程式碼,所有對外連線的預設對象都是 localhost。

要說完全不上網也不對。改寫過的搜尋查詢會出門,預設送到 DuckDuckGo,查詢內容是從你的新聞聲明改寫出來的關鍵字組合。換句話說,新聞原文不出門,但它的摘要片段會以搜尋查詢的形式離開你的機器。對多數人這在可接受範圍,但如果你查的內容本身敏感,記得這條路存在,或者把搜尋換成自己架的 SearXNG 執行個體。搜尋層同時是它對外部世界唯一的依賴,DuckDuckGo 呼叫不順時整條管線就跟著卡住,這件事下面的限制段還會回來。

另外它準備了多種模型供應商可以切:Ollama、LM Studio、OpenAI 官方 API,以及任何相容 OpenAI 格式的自訂端點。切到雲端供應商的那一刻,新聞全文就會出門,隱私帳要自己重算。

三種部署方式與它吃的資源

官方給的路徑有三條。最單純的是 Python 直跑:Python 3.12 以上,裝好 requirements.txt 的依賴後用 Streamlit 啟動,瀏覽器開本機 8501 連接埠。第二條是 Docker,儲存庫裡附了 docker-compose 與啟動指令檔,但前提是宿主機上已經跑著 Ollama(連接埠 11434)或 LM Studio。第三條給想接程式的人:另外附了一支 FastAPI 服務,對 POST /check 端點送新聞全文就能拿 JSON 結果,請求裡可以逐次指定模型端點、對話模型、嵌入模型與搜尋引擎,等於把整套查核當成可編排的元件,適合塞進更大的審稿或輿情流程。依賴清單本身很節制,核心就是 Streamlit、OpenAI 相容客戶端、ddgs 搜尋程式庫加報表用的 reportlab,沒有大型框架。

跑之前有兩個前置作業容易踩坑。模型要先自己拉:ollama pull qwen2.5:3bollama pull bge-m3,兩個模型加起來大約幾個 GB 的下載量。PDF 匯出需要系統裝好中文字型,否則報告裡的中文會變方框,官方文件對 Ubuntu 給的字型安裝指令寫得很清楚。

專案體質:斷更十個月又復活的節奏

看 commit 歷史可以讀出這個專案的性格。2025 年 3 月建立,5 月加入 API 服務與修 PDF 匯出,9 月底一口氣推進到 v2.0.0,加了設定精靈、Docker 支援與持久登入,期間也收過並合併一個外部貢獻者的功能增強拉取請求,然後沉寂了整整十個月。2026 年 8 月 7 日回來,帶的是重寫過的三節點管線、手繪流程圖與動圖預覽,儲存庫裡還留著那兩份圖的設計規格文件,看得出作者把這次改版當成論文成果的展示櫥窗在經營。這是研究者把論文方法持續打磨成可用工具的節奏,也是斷更風險真實存在的節奏。

社群數字方面,截至 2026 年 8 月累積約四百多顆星、一百個 fork。全部五個 issue 都處於關閉狀態,主題相當分散:有人卡在依賴版本裝不起來,有人碰到 DuckDuckGo 經代理連線失敗,有人質疑證據搜尋的品質,有人問本地 Qwen 模型怎麼接,還有一個是本地模型服務回 502 的求助。這份清單本身就是自架這類工具的真實摩擦面,環境、網路、模型對接每一環都會咬人。它沒有發布過任何 GitHub release,版本資訊只存在於程式碼裡,想鎖版本只能認 commit。

拿來用之前要想清楚的限制

查核準確率沒有人背書。儲存庫裡沒有基準測試結果,我也沒有實際跑過測試集,所以「它判得準不準」這個最重要的問題,目前唯一誠實的回答是不知道。它給的是可追溯的查核過程,讓你能檢查每個判斷背後的證據,這跟判得準是兩件事。

幾個具體的限制列出來:

  • 判定品質的上游是搜尋引擎。DuckDuckGo 挑得到什麼證據,它就只能用什麼證據,內容農場互相抄來的錯誤資訊如果在搜尋結果裡佔多數,門控擋不住同溫層證據。
  • 彙總這一步交給模型。四選一的總判定由模型照提示詞彙整,程式碼只提供 UNVERIFIABLE 這個安全預設,沒有獨立的規則引擎複核。
  • 預設 3B 模型的拆解與比對能力有上限。複雜的時間線、數字換算或跨句指涉,小模型可能拆錯聲明,後面就全歪。要換大模型,硬體或雲端費用自己上來。
  • 斷更過十個月的專案,下一次沉默多久沒人保證。
  • 介面中文是簡體,PDF 報告要自己裝中文字型。

同樣想降低單一模型回答風險的思路,站上介紹過的 ai-doctor 多模型會診面板 走的是讓多個模型互評淘汰的路線,Make It Heavy 則是把同一個問題丟給多個智能體同時作答再整合。AI Fake News Detector 跟它們的差別在於它不信任何模型的記憶,只信檢索得到、且通過相似度與實體雙重門檻的外部證據。做投研的人也可以對照 FinSight-AI 的證據追蹤設計,同樣是把 AI 結論掛在可回溯證據上的嘗試。

授權與專案狀態

MIT 授權,商用修改都沒有限制,唯一的義務是保留授權聲明。專案位置在 GitHub 上的 CaptainYifei/fake-news-detector,原始碼、文件與部署指令檔都齊全。以 2026 年 8 月的狀態看,它最適合的使用者是想自架查核原型來改的開發者,以及想研究「證據門控加小模型」這條路線的人;想找一個開箱即用、結論有人背書的測謊工具,目前它還不到位,把它的報告當查核的起點,最終裁決留給人,是比較健康的用法。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 935

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...