Citation

Citations and Attribution in RAG

Why Citations Matter
LLMs can hallucinate. Citations ground responses in source documents, enabling verification and building trust.

Citation Approaches

Inline Citations
Reference sources within the response:

According to the documentation [1], the maximum batch size is 64.
The API rate limit is 1000 requests per minute [2].

[1] api-docs.md, Section 3.2
[2] rate-limits.md

Post-hoc Attribution
After generation, find supporting sources:

def add_citations(response: str, sources: list) -> str:
    sentences = split_sentences(response)
    cited = []
    for sentence in sentences:
        source = find_best_source(sentence, sources)
        if source and similarity > threshold:
            cited.append(f"{sentence} [{source.id}]")
        else:
            cited.append(sentence)
    return " ".join(cited)

Grounded Generation
Force LLM to cite while generating:

Generate a response using ONLY the provided sources.
For each claim, cite the source in [brackets].

Sources:
[1] doc1.txt: ...
[2] doc2.txt: ...

Question: ...
Answer (cite every fact):

Implementation Patterns

Chunk-Level Attribution

def generate_with_citations(query: str, chunks: list) -> str:
    context = "
".join([f"[{i}] {c.text}" for i, c in enumerate(chunks)])

    response = llm.generate(f"""
    Answer using the sources below. Cite each fact with [source number].

    Sources:
    {context}

    Question: {query}
    Answer:
    """)

    return response

Verification
Check if citations are accurate:

def verify_citation(claim: str, source: str) -> bool:
    result = llm.generate(f"""
    Does this source support this claim?
    Claim: {claim}
    Source: {source}
    Answer (yes/no):
    """)
    return "yes" in result.lower()

Citation Metadata
Include useful context:

citation = {
    "source_id": "doc123",
    "title": "API Documentation",
    "page": 5,
    "chunk_text": "...",
    "confidence": 0.92,
    "url": "https://..."
}

Best Practices
- Always retrieve more context than needed
- Use chunk IDs, not just document names
- Verify high-stakes citations
- Make citations clickable in UI
- Handle cases with no good source gracefully

Take citation further

Ask the copilot about this term, or have our engineers assess it against your process.