Lesson 17 / 27
Citations You Can Verify
Check in code that every claim points to a real, supporting source.
Never trust a citation blindly
A model can invent a source or attach a real source to a claim it does not support. Use layers of checks: (1) every cited ID exists among the retrieved chunks; (2) every factual sentence has at least one citation; (3) optionally, the cited text actually entails the claim (word-overlap heuristics, or a second model call or NLI model as a judge). Show citations to the user as links to the original document and page so they can verify, and log failures to improve prompts and retrieval.
A citation checker, run
I ran this plain-Python (standard library only) example. The first answer cites a source [3] that was never retrieved and has a sentence with no citation, so both problems are reported. The second answer passes.
import re
chunks = {1: "Unused leave up to 5 days can be carried over to the next year.",
2: "Employees get 24 days of paid leave per year."}
def check(answer):
problems = []
for sentence in re.split(r"(?<=[.!?])\s+", answer.strip()):
cites = [int(c) for c in re.findall(r"\[(\d+)\]", sentence)]
if not cites:
problems.append(("no citation", sentence)); continue
for c in cites:
if c not in chunks:
problems.append(("unknown source", c))
return problems
print(check("You can carry over 5 days [1]. Bonus leave is 10 days [3]. Weekends are free."))
print(check("You can carry over 5 days [1]."))
Output:
[('unknown source', 3), ('no citation', 'Weekends are free.')]
[]Link to the exact page
A citation that opens the original document at the right page or heading makes verification a one-click action.
Quick check: Which check catches a fabricated source ID?
- Using shorter chunks
- Raising the temperature
- Verifying each cited ID exists in the retrieved chunks
- Removing the question
Answer
Verifying each cited ID exists in the retrieved chunks — A simple set-membership test finds IDs that do not exist.