~/tools / 嵌入與搜尋(RAG) / RAG Citation Checker
RAG Citation Checker — 對照你送出的來源,檢查 RAG 回答中的來源編號與引文
把 RAG 回答中的引用與你送出的來源對照檢查:每個來源編號都必須存在,每段引文都應出現在對應的來源中,工具並列出沒有來源編號的句子、從未被引用的來源,以及被截斷的回答。可讀取 Ollama /api/chat 的回應(包含串流回應)、相容 OpenAI 的回應與純文字。內容不會離開你的瀏覽器。
範例回答是手寫的,用來呈現一段不在其來源中的引文。
4 個來源(字串的 JSON 陣列)。回答視為Ollama /api/chat 的回應讀取,形式為含引用的 JSON。
提示詞的 token 數(prompt_eval_count):306
- 引用 #2 的引文不在來源 [4] 中。
引用
| 來源 | 引文 | 結果 |
|---|---|---|
| [2] | hnsw.ef_search is 40 by default | 原文相符 |
| [4] | 4 bytes per dimension plus 8 | 不在此來源中 |
這只檢查編號與引文是否與來源相符。它無法判斷回答是否正確,也無法判斷來源是否真的支持某個句子。
回應格式取自 Ollama 的 API 參考文件與原始碼,已於 2026-11-05 在 Ollama 0.40.11 上確認。 Ollama API: /api/chat
一切都在你的瀏覽器中完成。本工具不連線到任何地方。
當模型根據編號的來源回答時,引用可以用機械的方式檢查。請貼上你送出的相同來源,格式與 RAG Prompt Builder 相同(字串或物件的 JSON 陣列,或以 --- 行或空白行分隔的文字;編號同樣從 [1] 開始),再貼上回答。回答可以是 Ollama /api/chat 的整份回應(工具會取出 message.content;每行一個 JSON 物件的串流回應會被接在一起)、相容 OpenAI 的回應(choices[0].message.content),或只是文字。如果回答是 RAG Prompt Builder 所要求的、內含回答與引用清單的 JSON,工具會檢查每一筆引用:來源編號必須是這些來源之一,而引文應出現在該來源中,可以是完全相同,也可以是忽略空白、大小寫、全形字元與彎引號的差異之後相同。如果回答是文字,工具會收集方括號中的編號,例如 [2] 或 [1, 3],回報與來源不符的編號,並列出沒有編號的句子。兩種情況下,它都會列出從未被引用的來源,並在完全沒有引用,或 done_reason 為 "length"(表示回答被 num_predict 截斷)時發出警告。它做不到的是判斷回答是否正確。在我們用 qwen2.5:7b 做的測試中,有一則回答逐字引用了來源中的正確規則,卻仍給出錯誤的數字,另一則回答說不知道,卻引用了一個無關的來源。在這裡通過的引用,只表示被引用的文字在來源中。
這個工具的核心邏輯以 MIT 授權開放原始碼。 github.com/seigo5555/toolkitbox-lib/src/rag-citations.ts
使用情境
- 確認本機模型的回答只引用真正送出的來源,而且引文確實在其中
- 在把回答顯示給使用者之前,找出沒有來源的句子
- 針對相同的問題,依引用成立的頻率比較不同的提示詞或模型
使用方法
- 依相同的順序,貼上你連同問題一起送出的來源。
- 貼上回答:/api/chat 的整份回應、相容 OpenAI 的回應,或回答的文字。
- 閱讀引用表、沒有來源編號的句子,以及未被引用的來源。
FAQ
有一段引文被標示為找不到。回答是錯的嗎?
不一定。模型可能是改寫了來源,而不是照抄。但不在來源中的引文無法檢查,所以在讀過來源之前,請把那項陳述視為沒有依據。
所有引用都通過了。回答就正確嗎?
不一定。工具只檢查編號與引文是否與來源相符。在我們的測試中,模型引用了正確的規則(4 × 維度數 + 8 位元組),卻仍然對 384 維的向量回答 1552 位元組,而不是 1,544。
為什麼來源必須依相同的順序?
回答中的編號指的是來源送出的順序。順序不同的話,[2] 就會指向另一段文字,檢查也就沒有意義。
工具如何把回答切分成句子?
在換行處、在 . ! ? 後面接著空白之處,以及在全形的 。!? 之後。緊接在句子結尾之後的編號,例如 "… here. [1]",算作該句的編號。e.g. 這類縮寫可能把一個句子切成兩個。
done_reason "length" 是什麼意思?
在 Ollama 的原始碼中,這是回答達到 token 上限(num_predict)而不是自行停止時給出的原因。回答的結尾,可能還有它的引用,都不見了。
我的資料會被傳送到任何地方嗎?
不會。檢查是在你的瀏覽器中執行的。本工具從不連線到 Ollama 或任何其他服務。