開放原始碼 · 事實查核 API MVP

把事實查核,
接進你的應用。

送入一段待查核文字,取得相關查核、證據綜整與結構化 JSON 結果。也能附上來源網址,補充查核背景。

一個查核端點,兩種呼叫方式

POST/api/fact-check

限本站同源前端,以 JSON 傳入文字與選填網址。

GET/api/fact-check

以 query string 傳入相同參數。

直接試用

查核一段文字

POST /api/fact-check

輸入你想確認的具體主張,也可以附上背景網址。結果會保留證據、原始分數與不確定性。

0 / 10,000 字 · 請盡量包含對象、時間與適用範圍。

公開 HTTP/HTTPS 網頁。不填網址也可以查核。

01 / 開始呼叫

第一個查核請求

下方範例供本站前端使用,也可在本站頁面的開發者工具 Console 執行。將 text 換成你要查核的具體主張;呼叫前,服務維運者需先完成模型設定。

POST 同源 JSON 請求JavaScript
const response = await fetch("/api/fact-check", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    text: "非學校型態學生,國中小以下目前沒有普遍補助"
  })
});
const result = await response.json();
console.log(result);

POST 必須來自本站相同協定、主機與連接埠;Origin 由瀏覽器自動附上。 跨來源、缺少 Origin 或 Origin 為 null 都回 403,不開放跨來源 CORS 預檢。

內容較長或包含敏感資訊時,建議使用 POST,避免文字出現在網址歷史或 access log。請勿在呼叫端傳入 OpenRouter 金鑰。

使用 GET 呼叫

使用 --data-urlencode 編碼中文、空白及特殊字元。

curl --get 'https://check.vtaiwan.tw/api/fact-check' \
  --data-urlencode 'text=非學校型態學生,國中小以下目前沒有普遍補助'
附上 URL,補充查核背景

GET 與 POST 都接受選填的 url。以下示範 GET;POST 則在 JSON 加入相同欄位。

curl --get 'https://check.vtaiwan.tw/api/fact-check' \
  --data-urlencode 'text=非學校型態學生,國中小以下目前沒有普遍補助' \
  --data-urlencode 'url=https://civic.vtaiwan.tw/issues/7'

02 / 輸入參數

一段文字,一個選填網址

欄位必填格式與限制
textstring,去除首尾空白後不可為空,最多 10,000 字(Unicode code point)。
url 公開 HTTP/HTTPS 網址,最多 2,048 個 UTF-16 code unit;不可包含帳號密碼或指向內網。

POST 使用 Content-Type: application/json,請求本文上限為 128,000 bytes。沒有網址時請省略 url,不要傳空字串或 null

白名單機構網址可作參考,其他網址只提供背景。

支援 HTML 與純文字頁面,不執行網頁 JavaScript。網址抓取失敗時,Cofacts 查核仍會繼續,並在回應保留警告。重新導向後的最終網址若屬於 gov.twedu.tw 或其子網域,或以 https://tfc-taiwan.org.tw 開頭,查無 Cofacts 資料時仍可作為機構參考證據;網域白名單不保證內容正確,仍需核對發布機關、適用範圍與時效。 其他網址只有在取得 Cofacts 證據時,才會以最低優先序作為背景;否則改以模型常識推估, 信心值上限 0.5。

03 / 讀懂回應

判斷結果,也保留證據脈絡

以下是「證據不足」的格式示例,並非對範例主張的實際查核結果。completed 表示流程完成,仍可能得到 insufficient_evidence

回應示例 · 證據不足JSON
{
  "text": "非學校型態學生,國中小以下目前沒有普遍補助",
  "status": "completed",
  "moderation": {
    "decision": "allow",
    "categories": []
  },
  "factuality": 0.7,
  "confidence": 0.4,
  "verdict": "mostly_supported",
  "related_checks": [],
  "feedback": "查無相關查核資料,以下為常識判斷:此主張與常見制度描述大致相符,請自行查證。",
  "meta": {
    "request_id": "example-request-id",
    "cofacts_candidates": 0,
    "cofacts_relevant": 0,
    "cofacts_human_checks": 0,
    "cofacts_ai_checks": 0,
    "url_context_used": false,
    "url_context_allowlisted": false,
    "no_relevant_evidence": true,
    "warnings": []
  }
}
factuality
0~1,表示證據支持主張的程度。它不是主張為真的機率;無證據時的 0.5 表示無法判定。
confidence
0~1,表示判斷所依據的證據是否充分、可靠且一致。應與 factuality 一起閱讀。
feedback
繁體中文說明,補充證據限制、適用範圍與需要進一步查證之處。
related_checks
相關查核陣列,以 cofacts_humancofacts_ai 區分人工與 AI 回覆。每筆包含查核文字與 Cofacts 原文 url;有引文時另附 reference_urlreference_urls
meta
包含 request ID、候選及證據數量、是否使用 URL 背景,以及 warnings 警告。

六種判斷結果

supported證據支持
mostly_supported證據大致支持
mixed支持與反駁的證據並存
mostly_refuted證據大致反駁
refuted證據反駁
insufficient_evidence證據不足,無法判定

兩種分數各有用途:retrieval_score 只是 Cofacts 搜尋排序;relevance_score 是 0~1 的語意相關程度。兩者都不代表真假,不能直接換算 factuality。

04 / 狀態與錯誤

先看 HTTP,再看 status

HTTP 200 包含以下三種情況。串接時,請一併檢查 JSON 的 statusmeta.warnings

completed
查核流程完成;證據不足也是有效結果。
partial
部分上游服務失敗,根據仍可取得的證據完成綜整。警告會列出失敗階段。
blocked
安全層停止查核;factuality、confidence 與 verdict 為 null,related_checks 為空陣列。

安全分類 allow 會繼續;review 也會繼續,但保留旗標。引用待查言論、新聞、公共政策及學術討論等情境,會納入查核例外考量。

HTTPerror處理方式
400INVALID_INPUT依 message 修正文字、網址、JSON 格式或請求大小。
403FORBIDDEN_ORIGINPOST 來源不符合本站同源限制,或發送了不支援的 OPTIONS 預檢。
413PAYLOAD_TOO_LARGE已宣告的請求本文過大,請縮短內容。
429BUDGET_EXCEEDED今日 Workers AI 用量已達上限;依 Retry-After 秒數於 UTC 隔日重試。
502UPSTREAM_UNAVAILABLE必要上游服務無法使用;依 stage 確認階段,稍後重試。
503BUDGET_UNAVAILABLE用量控管服務暫時無法使用,稍後重試。
500INTERNAL_ERROR服務發生未預期錯誤,請提供 request_id 協助排查。

Gemma(證據綜整)失敗回 502。Safeguard 暫時失敗時跳過安全分類,並將 moderation.decision 標記為 skipped,以 partial 狀態繼續查核;只有缺少金鑰 (OPENROUTER_API_KEY)等設定錯誤才回 502。Cofacts 搜尋或語意初篩失敗時一律回 502。單篇詳細證據失敗則保留其他資料。

查核回應附有 X-Request-IdCache-Control: no-storeGET /health 只確認服務能回應,不代表外部模型與資料來源皆正常。

05 / 查核如何進行

先找相關證據,再綜整判斷

  1. 1

    安全分類

    OpenRouter Safeguard 判斷內容是否能進入查核流程。

  2. 2

    搜尋候選內容

    Cofacts 召回最多 15 篇候選文章;選填 URL 的抓取在此階段平行進行。

  3. 3

    篩出真正相關的文章

    Workers AI gpt-oss-20b 批次判斷語意相關性,最多保留 5 篇。此階段不判真假。

  4. 4

    取得詳細證據

    只讀取通過初篩文章的人工與 AI 查核回覆,並保留來源連結。

  5. 5

    綜整結果

    Gemma 根據整理後的證據產生判斷;查無相關 Cofacts 查核資料時(包括只附網址、沒有任何查核回覆的情況),改以模型常識推估,回傳的信心值上限 0.5,證據不足時回傳證據不足。

06 / 自行架設

在自己的服務中使用

本專案以 Cloudflare Workers 與 Hono 執行。維運者需設定 OPENROUTER_API_KEY,並啟用 Workers AI 的 AI binding;Cofacts 使用公開 GraphQL,無須 app ID 或 secret。

查看安裝與開發指南