A valid RAG citation must resolve to an authorized source, support the specific claim it is attached to, and identify the evidence version that the model actually received. Generate citations from stable evidence IDs—not model-invented URLs—then validate integrity, coverage, and entailment separately.
A response with three real links can still be completely unsupported.
Preserve citation identity before generation
Citation reliability begins in ingestion. Each evidence unit needs enough provenance to resolve back to the source:
{"evidence_id": "ev_7f2","source_id": "policy_18","source_version": "2026-08-20","locator": {"section": "Refunds", "paragraph": 4},"title": "Customer Refund Policy","canonical_uri": "https://kb.example/policies/refunds","scope_id": "tenant_acme","content": "Refund requests must be submitted within 30 days..."}
The model should cite ev_7f2 or a short alias assigned by the application. After generation, the application resolves that identifier to display metadata. Do not ask the model to reproduce a URL from memory.
AWS Bedrock’s RetrieveAndGenerate response demonstrates this separation: generated response spans map to retrieved references containing source content, metadata, and location. Microsoft’s RAG prompt guidance likewise recommends labeled chunks with source metadata so the answer can refer to supplied evidence.
Attach citations to claims, not paragraphs
Split the response into atomic, externally verifiable claims. Then map each claim to one or more evidence units:
| Claim | Citation | Required relationship |
|---|---|---|
| “Refund requests must be submitted within 30 days.” | ev_7f2 | Direct support |
| “Enterprise plans also require manager approval.” | ev_8a4 | Direct support |
| “The policy changed on August 20.” | ev_7f2 + version history | Joint support |
One sentence can contain two claims with different evidence. A citation at the end of a long paragraph is ambiguous when only its first sentence is supported.
Use a structured generation contract where practical:
{"claims": [{"text": "Refund requests must be submitted within 30 days.","evidence_ids": ["ev_7f2"]}]}
Render prose and citation markers after validation. This avoids brittle parsing of invented footnote syntax.
Validate three independent properties
1. Integrity
Deterministic checks should prove:
- every citation identifier was present in the evidence packet;
- the identifier resolves to the exact source version retrieved;
- the user is authorized to view the cited location;
- the source locator still works or a durable excerpt can be shown;
- no uncited identifier or URL was introduced by the model.
2. Coverage
Citation coverage asks what fraction of citation-required claims have at least one citation:
coverage = cited verifiable claims / all verifiable claims
Define which claims require evidence. Greetings, transitions, and clearly labeled recommendations may not. Product rules, numbers, dates, quotations, and externally checkable facts usually do.
3. Support
Citation correctness asks whether the cited evidence actually entails the claim. Grade each claim–evidence pair as:
- supported: evidence directly justifies the full claim;
- partially supported: evidence justifies only part;
- contradicted: evidence conflicts with the claim;
- not present: evidence is related but does not justify it;
- unreadable/unauthorized: evaluator cannot inspect the required source.
Prefer deterministic comparison for exact values and identifiers. Use calibrated human or model review for semantic entailment, and retain the rationale. A judge score is evidence about the evaluator’s decision, not ground truth.
Citation evaluator record
{"case_id": "refund_042","claim_id": "c3","claim": "Enterprise refunds require manager approval.","citation_ids": ["ev_8a4"],"integrity_pass": true,"coverage_required": true,"support_label": "supported","evidence_quote_hash": "sha256:...","source_version": "2026-08-20","evaluator_version": "citation-rubric-4"}
Hashing the reviewed excerpt helps identify evaluator drift, but it does not replace access-controlled evidence retention.
Test the failures that look convincing
| Failure | Test fixture | Expected behavior |
|---|---|---|
| Invented source | Model outputs unknown evidence ID | Reject or remove claim |
| Neighbor support | Cited chunk is topically related but lacks the fact | Mark not present |
| Partial support | Sentence adds an unsupported condition | Split, qualify, or reject |
| Version mismatch | Citation resolves to superseded source | Fail integrity |
| Citation laundering | Secondary summary cites a primary source it does not contain | Cite inspected evidence only |
| Cross-tenant citation | Valid source belongs to another scope | Security incident; do not render |
| Dead locator | URL/section moved | Resolve via stable source registry or flag |
| Unsupported synthesis | Conclusion requires two sources but cites one | Require joint support |
Citation validation must run after the final response transform. A formatter, summarizer, or cache can alter claims after the original mappings were correct.
Metrics and release gate
Track case-level failures and aggregate metrics:
citation integrity rateclaim coveragesupported-claim precisioncontradiction rateinvalid/unauthorized citation ratelocator resolution rate
Segment by source family, intent, model route, prompt version, and answer type. Do not collapse unsupported and uncited claims into one number; the repairs differ.
The broader RAG evaluation scorecard separates retrieval, context, groundedness, and correctness. Use the RAG debugging decision tree when citation failure originates in missing, stale, or unauthorized evidence rather than generation.
Production checklist
- Evidence units have stable IDs, versions, locators, and scopes.
- The model selects only IDs supplied in the current evidence packet.
- Citations attach to atomic claims.
- Integrity and authorization checks are deterministic.
- Coverage and semantic support are graded separately.
- Conflicting evidence is surfaced rather than silently merged.
- Final rendering cannot introduce unvalidated claims or citations.
- Citation failures become versioned regression cases.
For lifecycle-sensitive sources, pair this evaluator with the RAG freshness and deletion contract. JoinAI’s AI Engineer MasterClass teaches the retrieval and evaluation system behind reliable citations.




