前兩篇都在想辦法讓對的段落被撈出來。這一篇處理的是下一步:把「哪一段撐起哪一句」留在輸出上。
Claude 回答得很像真的,不代表真的有根據。面對法規、校規或技術文件,重點不在講得多完整,而在你能不能沿著答案走回原始資料。
Citation 像論文的註腳,指出這句話來自哪份文件、哪一頁或哪個章節。Source Provenance 則更像食品履歷:除了「從哪來」,還要記錄版本、更新日期、適用地區與適用對象。同一句規定,如果引用的是三年前的版本,來源再清楚也可能答錯。
所以回答校內規章時,不只寫「依規定可以申請」,而是附上「學生住宿管理辦法|2026 年版|第 12 條」。若檢索到的文件沒有足夠證據,就不要讓 Claude 把空格補滿,直接輸出:「待確認:目前資料中找不到足以支持此結論的條文。」
這條規則 Day 04 就立過——原文沒有的資訊不要推測,無法確認就標示資料不足。差別在於那時處理的是摘要,現在處理的是有來源的問答,門檻更高。像查案一樣:沒有找到證人,就不能自己補一份口供。
但還有一種更麻煩的情況:證人存在,證詞卻對不上。
模型完全可能引用一份真實存在的文件,而被引的那一段根本沒有支持它說的話。Gao 等人的 ALCE 研究就是在量測這件事,而且拆成了兩個可以檢查的半邊:citation recall 看被引用的段落合起來是否完全支持那句話,citation precision 看有沒有引到與主張無關的段落。
換句話說,有引用不等於引用成立。這跟 Day 06 是同一個結構——那時是 Schema 保證格式、不保證內容正確;這裡是引用保證看起來有據、不保證真的有據。
降低風險的辦法之一,是不要讓模型自由書寫引用。Claude API 的 Citations 功能會在你提供的 document 上設定 citations.enabled=true,回應的每個文字區塊都帶著 cited_text 與精確位置:PDF 給頁碼範圍、純文字給字元索引、自訂內容給區塊索引。這些引用由 API 解析並直接擷取,保證指向你實際提供的文件與位置,不會冒出你沒給過的來源。Anthropic 的評測也顯示它比純靠 prompt 要求模型附引用有更高的 recall 與 precision;順帶一提還比較省,cited_text 不計入輸出 token,而 prompt 式做法得讓模型把整段原文吐出來。RAG 情境則有 search_result 區塊,可以帶上 source 與 title,讓 Claude 引用你自己的知識庫。
這裡有一個要先知道的限制:Citations 和 Structured Outputs 不相容,同時開會直接回 400。原因是引用必須把引用區塊和文字交錯輸出,跟嚴格 JSON schema 的約束衝突。Day 06 教的是把輸出鎖成契約,這一篇要的是可追溯的引用——現階段得二選一。
所以真正要檢查的不只是「有沒有附來源」,而是那份來源到底有沒有撐住那句話。前者一眼就看得到,後者才是會出事的地方。