Initial addition of ms-ai-architect plugin to the open-source marketplace. Private content excluded: orchestrator/ (Linear tooling), docs/utredning/ (client investigation), generated test reports and PDF export script. skill-gen tooling moved from orchestrator/ to scripts/skill-gen/. Security scan: WARNING (risk 20/100) — no secrets, no injection found. False positive fixed: added gitleaks:allow to Python variable reference in output-validation-grounding-verification.md line 109. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
12 KiB
Citation Tracking and Source Attribution
Last updated: 2026-02 Status: GA (classic RAG), Preview (agentic retrieval) Category: RAG Architecture & Semantic Search
Introduksjon
Citation tracking er en kritisk komponent i enterprise RAG-systemer. Det handler om å spore og eksponere kildene som ligger til grunn for AI-genererte svar, slik at brukere kan verifisere informasjonen. I Azure-økosystemet støttes citation tracking gjennom to hovedmønstre: Classic RAG (GA) med Azure AI Search og Azure OpenAI, og Agentic Retrieval (Preview) med strukturerte grounding data.
God citation tracking reduserer hallusinering ved å tvinge LLM-en til å basere seg på hentet kontekst, gir brukerne tillit til svarene, og oppfyller compliance-krav i offentlig sektor der sporbarhet er lovpålagt. Azure AI Search returnerer automatisk kildemetadata med søkeresultater, og Azure OpenAI "On Your Data"-mønsteret inkluderer citation annotations i responser.
Agentic Retrieval (preview 2025/2026) representerer neste evolusjon med LLM-assistert query planning, parallelle subqueries, og strukturerte citation-responser med full provenance tracking.
Kjernekomponenter
Citation-formater
URL Citation Annotations (Azure OpenAI)
for event in stream_response:
if event.type == "response.output_item.done":
if event.item.type == "message":
text_content = event.item.content[-1]
for annotation in text_content.annotations:
if annotation.type == "url_citation":
print(f"URL: {annotation.url}")
print(f"Start: {annotation.start_index}")
print(f"End: {annotation.end_index}")
File Citation Annotations (Assistants API)
message_content = message.content[0].text
annotations = message_content.annotations
citations = []
for index, annotation in enumerate(annotations):
message_content.value = message_content.value.replace(
annotation.text, f' [{index}]'
)
if file_citation := getattr(annotation, 'file_citation', None):
cited_file = client.files.retrieve(file_citation.file_id)
citations.append(
f'[{index}] {file_citation.quote} from {cited_file.filename}'
)
message_content.value += '\n' + '\n'.join(citations)
Citation Metadata-elementer
| Element | Beskrivelse | Eksempel |
|---|---|---|
title |
Dokument- eller kildetittel | "Veileder for offentlige anskaffelser" |
url |
URL til kildedokument | https://docs.example.com/guide |
file_id |
Referanse til opplastet fil | file-abc123 |
snippet |
Relevant utdrag fra kilden | "I henhold til §4..." |
doc_uri |
Dokumentlokasjon | docs/mlflow/guide.md |
chunk_id |
Spesifikk chunk-identifikator | chunk_001 |
relevance_score |
Konfidensverdi | 0.95 |
start_index / end_index |
Tekstregion som er grounded | 142 / 287 |
Grounding Data (Agentic Retrieval)
{
"grounding_data": "Ekstraherte relevante passasjer...",
"references": [
{
"title": "Dokumenttittel",
"url": "https://...",
"chunk_id": "chunk_001",
"relevance_score": 0.95
}
],
"activity": [
{
"operation": "subquery_1",
"tokens_used": 150,
"latency_ms": 245
}
]
}
Arkitekturmønstre
Mønster 1: Classic RAG med automatisk citation
Flyt: Query → Azure AI Search → Top-k dokumenter med metadata → LLM med citation-instruks → Svar med fotnoter
Implementering:
template = """
Answer the following question using only the context below.
Include citations [1], [2] etc. for each fact.
Only include information specifically discussed in the context.
Question: {question}
Context: {context}
"""
Fordeler:
- Enkel implementering via Azure OpenAI "On Your Data"
- Automatisk citation-generering
- GA-funksjonalitet, produksjonsklart
Ulemper:
- LLM kan fremdeles hallusinere citations
- Krever post-validering av citation-nøyaktighet
- Begrenset til kontekstvindu-størrelse
Mønster 2: Agentic Retrieval med provenance
Flyt: Query → LLM query planning → Subqueries → Parallel retrieval → Grounding data + references → LLM → Svar med strukturerte citations
Fordeler:
- Full provenance tracking (hvilke subqueries hentet hvilke dokumenter)
- Strukturert output med references array
- Activity log for audit og debugging
- LLM planlegger optimale søk for bedre dekning
Ulemper:
- Preview-funksjon, ikke GA ennå
- Høyere kompleksitet og token-kostnad
- Ranking tokens gratis kun under initial preview-fase
Mønster 3: Fakta-verifisering med LLM-judge
Flyt: RAG-svar med citations → Fakta-verifikasjon-agent → Krysssjekk mot kildedokumenter → Verifisert svar
from azure.ai.evaluation import GroundednessProEvaluator
groundedness_eval = GroundednessProEvaluator(
azure_ai_project=project,
credential=credential,
threshold=2
)
result = groundedness_eval(
query="Hva er reglene for offentlige anskaffelser?",
response="I henhold til anskaffelsesloven §4...",
context="Anskaffelsesloven §4 sier at..."
)
Fordeler:
- Automatisk validering av citation-nøyaktighet
- Kan flagge hallusinerte fakta
- Skalerbar QA-pipeline
Ulemper:
- Ekstra LLM-kall = ekstra kostnad
- LLM-judges er ikke ufeilbarlige
- Økt latency
Beslutningsveiledning
Når bruke hvilket mønster
| Scenario | Anbefaling | Begrunnelse |
|---|---|---|
| Intern kunnskapsbase | Classic RAG med citations | GA, tilstrekkelig for de fleste behov |
| Publikumstjenester (høy tillit) | Agentic + fakta-verifisering | Sporbarhet og kvalitetssikring er kritisk |
| Juridisk/medisinsk rådgivning | Alle tre mønstre | Maksimal grounding og verifisering |
| Intern chatbot | Classic RAG | Enklest og billigst |
| Compliance-rapportering | Agentic med full audit log | Activity-loggen dokumenterer hele søkeprosessen |
Vanlige feil
- Ikke validere citations post-generering — LLM-er kan generere plausible men feilaktige kildereferanser
- Mangle chunk-til-dokument-mapping — Brukere trenger å navigere til kilden, ikke bare se en chunk-ID
- Ignorere konfidensscoring — Vis ikke citations med lav relevance_score som primærkilde
- Glemme tilgangskontroll — Citations til dokumenter brukeren ikke har tilgang til er en sikkerhetsfeil
Røde flagg
- Citations som peker til ikke-eksisterende dokumenter → Hallusinering i citation-genereringen
- Høy andel scores under 0.5 → Dårlig retrieval-kvalitet, ikke kun citation-problem
- Brukere som rapporterer at citations ikke stemmer → Trenger fakta-verifiseringslagret
Konfidensscoring
Tilgjengelige scoring-mekanismer
| Mekanisme | Skala | Kilde |
|---|---|---|
| Semantic Ranking | 0.0–4.0 | Azure AI Search |
| Vector Similarity (Cosine) | 0.333–1.0 | Azure AI Search |
| Groundedness Pro | Threshold-basert | Azure AI Content Safety |
| Semantic Answer Confidence | 70% terskel | Azure AI Search |
| Custom relevance_score | 0.0–1.0 | Applikasjonskode |
Anbefalte terskelverdier for RAG
| Terskelverdi | Handling |
|---|---|
| rerankerScore ≥ 3.0 | Vis citation med høy konfidensindikator |
| rerankerScore 2.0–3.0 | Vis citation med moderat konfidensindikator |
| rerankerScore < 2.0 | Utelat fra primærcitations, men behold i "Se også" |
| relevance_score < 0.5 | Ikke vis som citation |
Integrasjon med Microsoft-stakken
| Tjeneste | Rolle i citation tracking |
|---|---|
| Azure AI Search | Primær retrieval med metadata og scores |
| Azure OpenAI | LLM-generering med citation annotations |
| Azure AI Foundry | Evaluering av groundedness og citation-kvalitet |
| MLflow | Tracing og observerbarhet for citation pipeline |
| Azure AI Content Safety | Groundedness-deteksjon med korreksjonsfunksjon |
| Copilot Studio | Automatisk citation i Copilot-svar |
Offentlig sektor (Norge)
Lovmessige krav
- Forvaltningsloven: Vedtak skal begrunnes med referanse til relevant regelverk
- Offentleglova: Innsynsrett krever sporbar saksbehandling
- AI Act: Transparenskrav for AI-systemer i offentlig forvaltning
- Arkivloven: Dokumentasjon av beslutningsgrunnlag
Praktiske implikasjoner
- Citations er ikke bare "nice to have" — de er juridisk nødvendige i mange offentlige kontekster
- Audit trail (agentic retrieval activity log) kan brukes som dokumentasjon for tilsyn
- Brukere i offentlig sektor forventer å kunne klikke seg gjennom til kildedokumentet
Sikkerhet
- Dokumentnivå-sikkerhet (RBAC) må filtrere citations basert på brukeridentitet
- Sensitive dokumenter skal ikke siteres til brukere uten tilgang
- Implement security trimming i Azure AI Search før citations eksponeres
Kostnad og lisensiering
Komponenter som påvirker kostnad
| Komponent | Kostnadsdriver |
|---|---|
| Azure AI Search | Standard spørringskostnad (ingen ekstra for metadata) |
| Semantic Ranker | Per 1000 requests (1000 gratis/mnd) |
| Azure OpenAI | Token-kostnad for citation-generering i LLM-respons |
| Agentic Retrieval | Ranking tokens (gratis under preview), Azure OpenAI for query planning |
| Groundedness Pro | Per evaluerings-kall (Azure AI Content Safety) |
Kostnadsoptimering
- Returner kun citation-relevante felt via
selectfor å redusere token-bruk - Bruk caching for gjentatte queries med samme citations
- Evaluer groundedness kun for brukervendte svar, ikke interne prosesser
- Begrens antall citations per svar (3–5 er typisk tilstrekkelig)
For arkitekten (Cosmo)
Spørsmål å stille kunden
- Har dere lovmessige krav til sporbarhet og kildehenvisning?
- Skal brukerne kunne navigere direkte til kildedokumentene?
- Hvilken grad av konfidensindikasjon trenger brukerne?
- Er det behov for audit trail av hele retrieval-prosessen?
- Har dokumentene ulik sikkerhetsgraddering som påvirker citation-eksponering?
- Hva er akseptabel feilrate for citations (hallusinerte kilder)?
- Trengs fakta-verifisering, eller er standard citation tilstrekkelig?
- Hvordan chunkes dokumentene — trengs chunk-til-dokument navigering?
Fallgruver
- Å anta at LLM-genererte citations alltid er korrekte — de er ikke det
- Å eksponere chunk-IDer i brukergrensesnittet uten å mappe dem til lesbare dokumentreferanser
- Å bruke agentic retrieval i produksjon uten å forstå at det er preview
- Å ignorere tilgangskontroll i citation-laget — dette er et vanlig sikkerhetshull
Anbefalinger per modenhetsnivå
| Nivå | Anbefaling |
|---|---|
| Starter | Classic RAG med Azure OpenAI "On Your Data" citation |
| Intermediær | Custom citation-formatering, konfidensscoring, chunk-til-dokument mapping |
| Avansert | Agentic retrieval med provenance, fakta-verifisering, audit logging |
Kilder og verifisering
Verified (MCP-research)
- RAG overview in Azure AI Search
- Agentic retrieval overview
- Transparency note for Azure AI Search
- Grounding data design
- Azure AI Foundry agents - AI Search tools
Baseline (modellkunnskap)
- Norsk lovgivning (Forvaltningsloven, Offentleglova, Arkivloven)
- Kostnadsoptimerings-anbefalinger
- Modenhetsnivå-tabellen