Ordre 20260912T193441Z-7358817909. Steg 1 var ikke transformen, men å rette
roadmapens R13-gate og få den ratifisert. Gaten `grep -rl "Cosmo"
skills/*/references -> 0` var usann på to uavhengige måter:
1. Ordren fanget den første: 451 av forekomstene er Azure Cosmos DB, ekte
produktinnhold. Diskriminatoren er ikke bokstaven «s» — `Cosmos <norsk
substantiv>` er genitiv av personaen (`### Cosmos tonalitet`), mens
`Cosmos DB`/`CosmosClient`/`cosmos_ru` er produkt.
2. Denne økten fant den andre: 132 persona-forekomster ligger i prosa,
tabeller, dialog-replikker og proveniens-linjer. Heading-nøytralisering
kan ikke nå dem, så «0 persona» er uoppnåelig også under den ratifiserte
formen. Operatøren ratifiserte alternativ A: gaten speiler formen, og de
132 bokføres til R13b/R14.
Tre korreksjoner av premisser som sto i ordren og STATE:
«ca 320 produkt» -> 451 (case-sensitivt nett manglet 327 lowercase
TOC-ankre + 99 identifikatorer; sann nevner 1 638)
«169 headinger» -> 401. 169 var `^## For Cosmo`-prefikset (168) og var
internt inkonsistent med sin egen topp-variant (204)
«417 matcher ingen
populasjon» -> 417 er cosmo-headinger utenfor kodefences; briefens
nevner var reell hele tiden
Fence-bevissthet er målt skadelig, ikke nødvendig: begge toggle-regler er
gale på dette korpuset (naiv toggle skjuler en ekte heading i
chain-of-thought-prompting.md, CommonMark-regelen ubalanserer
service-level-documentation-dr.md). Fence-agnostisk deteksjon finner 401
heading-linjer i nøyaktig de samme 40 variantene som fence-bevisst finner
400 i — ingen kodeblokk-linje er byte-identisk til en persona-heading. Derfor
nøkles transformen på 40 enumererte heading-tekster og ignorerer fences. En
ukjent variant kaster; en slug-kollisjon kaster. Ingenting auto-fikses.
TOC-en regenereres ikke, den rettes kirurgisk: alle 327 persona-lenker hadde
lenketekst lik én av de 40 heading-tekstene og anker lik slugify av den
(327/327, 0 avvik), så heading og TOC-entry skrives i samme operasjon og
ingen mellomtilstand etterlater en død lenke.
Ratifisert målform: `For Cosmo`, `For Cosmo Skyberg` og `For arkitekten
(Cosmo)` konvergerer på `For arkitekten`. To filer kolliderte og er adjudisert
ved å lese dem, ikke ved regel.
Verifisering (alle 7 kriterier fra ordren):
G1 persona på heading-linjer 401 -> 0
G2 døde fragmentlenker 1 -> 1 (pre-eksisterende, unntatt)
G3 produkt-forekomster 451 -> 451; `Cosmos DB|Azure Cosmos` 308 = 308
de 3 kun-produkt-filene byte-identiske
nettet validert begge veier injisert persona feller G1; genitiv feller G1;
produkt-heading og de 3 filene passerer
hele diffen 802 heading-linjer + 654 TOC-linjer, ANNET = 0
linjeantall 728 lagt til = 728 slettet
suite 1120/1120 (1097 + 23 nye)
validate-plugin 250 PASS / 0 FAIL
stikkprøve 10 filer, alle 5 skills, inkl. de 3 mest
produkt-tunge (26/20/19) — kun heading+TOC
Utenfor scope, urørt: de 4 SKILL.md, de 23 commands, CLAUDE.md, README.md,
NOTICE.md, docs/ (alt R14).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
14 KiB
RAG Evaluation Metrics and Frameworks
Last updated: 2026-06-24 Status: GA (Azure AI Evaluation SDK), Preview (agentic evaluators, Groundedness Pro) Category: RAG Architecture & Semantic Search Type: reference Source: https://learn.microsoft.com/azure/foundry/concepts/observability
Innhold
- Introduksjon
- Kjernekomponenter
- Arkitekturmønstre
- Beslutningsveiledning
- Verktøy og SDKer
- Integrasjon med Microsoft-stakken
- Offentlig sektor (Norge)
- Kostnad og lisensiering
- For arkitekten
- Kilder og verifisering
Introduksjon
Evaluering av RAG-systemer er en av de mest undervurderte fasene i enterprise AI-utvikling. Uten systematisk evaluering er det umulig å vite om endringer i chunking, embedding, retrieval eller prompting faktisk forbedrer kvaliteten. Microsoft Foundry tilbyr et komplett evaluerings-rammeverk med 30+ innebygde evaluatorer, LLM-as-judge, human evaluation, og integrasjon med MLflow for produksjonsovervåking.
RAG-evaluering dekker to distinkte dimensjoner: retrieval quality (fant vi de riktige dokumentene?) og generation quality (genererte LLM-en et godt svar basert på dokumentene?). Azure AI Evaluation SDK operasjonaliserer dette med spesialiserte evaluatorer for groundedness, relevance, completeness, utilization og mer — tilgjengelig som Python-pakke (azure-ai-evaluation).
Et kritisk poeng for offentlig sektor: LLM-judges bruker EU-hostede modeller for EU/EØS-arbeidsområder, noe som sikrer datasuverenitet i evalueringsprosessen.
Kjernekomponenter
Retrieval-metrikker
| Metrikk | Hva den måler | Optimal bruk |
|---|---|---|
| Precision@K | Andel relevante dokumenter blant topp K resultater | Evaluere presisjon i retrieval |
| Recall@K | Andel av alle relevante dokumenter funnet i topp K | Evaluere dekning |
| MRR (Mean Reciprocal Rank) | Gjennomsnittlig invers rang av første relevante resultat | Evaluere rangering |
| NDCG (Normalized Discounted Cumulative Gain) | Evaluerer ranking-kvalitet sammenlignet med ideell rekkefølge | Evaluere ranking med gradert relevans |
| MAP (Mean Average Precision) | Gjennomsnittlig presisjon over alle relevante dokumenter | Overordnet retrieval-kvalitet |
Genererings-metrikker
RAG-spesifikke evaluatorer (Azure AI)
| Evaluator | Hva den måler | Metode |
|---|---|---|
GroundednessEvaluator |
Er svaret basert på konteksten? | LLM-judge |
GroundednessProEvaluator |
Forbedret groundedness med Content Safety | Azure AI Content Safety |
RelevanceEvaluator |
Er svaret relevant for spørsmålet? | LLM-judge |
ResponseCompletenessEvaluator |
Svarer svaret på alle deler av spørsmålet? | LLM-judge |
RetrievalEvaluator |
Kvalitet på hentede dokumenter | LLM-judge |
DocumentRetrievalEvaluator |
Dokumentnivå retrieval-kvalitet | LLM-judge |
Tekstuell likhet
| Evaluator | Hva den måler |
|---|---|
SimilarityEvaluator |
Semantisk likhet (cosine på embeddings) |
F1ScoreEvaluator |
Vektet gjennomsnitt av precision og recall |
BleuScoreEvaluator |
N-gram presisjon for maskinoversettelse |
RougeScoreEvaluator |
N-gram overlap for summarisering |
MeteorScoreEvaluator |
Eksakt match, stemming, synonymer |
Generell kvalitet
| Evaluator | Hva den måler |
|---|---|
CoherenceEvaluator |
Logisk flyt og struktur |
FluencyEvaluator |
Språklig kvalitet |
Agentic evaluatorer (Preview)
| Evaluator | Hva den måler |
|---|---|
IntentResolutionEvaluator |
Forstod agenten brukerens intensjon? |
ToolCallAccuracyEvaluator |
Kalte agenten riktige verktøy? |
TaskAdherenceEvaluator |
Fulgte agenten oppgaveinstruksjonene? |
Evaluerings-metoder
| Metode | Kostnad | Pålitelighet | Bruk |
|---|---|---|---|
| Deterministisk | Lav | Høy (for målbare ting) | Latency, token-bruk, presisjon |
| LLM-as-Judge | Medium | God (krever tuning) | Groundedness, relevans, koherens |
| Human Evaluation | Høy | Høyest | Domene-spesifikk kvalitet, edge cases |
| Automatisert harness | Lav-medium | Varierer | Batch-evaluering, CI/CD |
Arkitekturmønstre
Mønster 1: Offline evaluering i utviklingsfasen
Flyt: Test-datasett → RAG-pipeline → Resultater → Azure AI Evaluation SDK → Metrics-rapport
from azure.ai.evaluation import evaluate, GroundednessEvaluator, RelevanceEvaluator
model_config = {
"azure_endpoint": os.environ["AZURE_OPENAI_ENDPOINT"],
"api_key": os.environ["AZURE_OPENAI_KEY"],
"azure_deployment": os.environ["AZURE_OPENAI_DEPLOYMENT"],
}
result = evaluate(
data="test_data.jsonl",
evaluators={
"groundedness": GroundednessEvaluator(model_config),
"relevance": RelevanceEvaluator(model_config),
},
evaluator_config={
"default": {
"column_mapping": {
"query": "${data.query}",
"context": "${data.context}",
"response": "${data.response}"
}
}
},
output_path="./evaluation_results.json"
)
print(result["metrics"])
Fordeler:
- Systematisk, reproduserbar evaluering
- Kan kjøres i CI/CD
- Støtter batch-prosessering
Ulemper:
- Krever test-datasett
- LLM-judge-kostnader kan akkumulere
- Offline — fanger ikke produksjonsproblemer
Mønster 2: Online evaluering med MLflow tracing
Flyt: Produksjons-RAG → MLflow trace spans → Metrikksamling → Dashboard → Alerting
import mlflow
from mlflow.entities import Document, SpanType
@mlflow.trace(span_type=SpanType.RETRIEVER)
def retrieve_docs(query: str):
return [
Document(
page_content="Relevant innhold...",
metadata={"source": "veileder.pdf", "relevance_score": 0.95}
)
]
@mlflow.trace(span_type=SpanType.CHAT_MODEL)
def generate_answer(question: str, documents: list):
# LLM-kall med kontekst
return "Generert svar..."
@mlflow.trace(span_type=SpanType.CHAIN)
def rag_pipeline(question: str):
docs = retrieve_docs(question)
response = generate_answer(question, docs)
return {"answer": response, "sources": [d.metadata for d in docs]}
Fordeler:
- Real-time observerbarhet
- Fanger produksjonsmønstre
- Integrert med Azure ML
Ulemper:
- Overhead fra tracing
- Krever infrastruktur for metrikksamling
- Mer kompleks oppsett
Mønster 3: Human-in-the-loop evaluering
Flyt: RAG-output → Review App → Domeneekspert-vurdering → Feedback-logging → Modellforbedering
Bruk mlflow.log_feedback() med AssessmentSourceType.HUMAN for å logge menneskelig evaluering.
Fordeler:
- Høyest kvalitet evaluering
- Fanger domene-spesifikke nyanser
- Bygger ground truth-datasett over tid
Ulemper:
- Skalerer dårlig
- Subjektivt
- Kostbart (arbeidstid)
Beslutningsveiledning
Evalueringsrammeverk-valg
| Scenario | Anbefalt verktøy | Begrunnelse |
|---|---|---|
| Azure-natve RAG | Azure AI Evaluation SDK | Best integrasjon, 30+ evaluatorer |
| Databricks-basert | MLflow 3 | Native integration, Mosaic AI |
| Eksperimentering | RAG Experiment Accelerator | CLI-basert, hyperparameter-tuning |
| Produksjon | MLflow + Azure Monitor | Tracing + alerting |
| CI/CD | Azure AI Evaluation SDK | Batch-evaluering i pipeline |
Metrikkombinations-strategi
| Mål | Metrikker å kombinere | Hva det avdekker |
|---|---|---|
| Svarskvalitet | Groundedness + Correctness | Om systemet tolker kontekst riktig |
| Retrieval-effektivitet | Utilization + Completeness | Om retrieval-systemet henter nok |
| Transformasjonskvalitet | Groundedness + Utilization + Similarity | Om systemet bevarer sannhet under transformering |
| Overordnet RAG-helse | Alle + Coherence + Fluency | Helhetsvurdering |
Vanlige feil
- Evaluere kun generering, ikke retrieval — Dårlige svar skyldes ofte dårlig retrieval, ikke dårlig generering
- Bruke kun én metrikk — Groundedness alene forteller ingenting om completeness
- Evaluere på for lite data — 50+ test-queries er minimum for pålitelige resultater
- Glemme baseline — Uten baseline vet du ikke om forbedringene er reelle
- Ignorere edge cases — Test med tomme resultater, irrelevante dokumenter, multilinguale queries
Røde flagg
- Groundedness < 70% → Alvorlig hallusinerings-problem
- Retrieval Precision@5 < 50% → Indeksering eller embedding-problemer
- Store avvik mellom LLM-judge og human evaluation → LLM-judge trenger kalibrering
- Fallende scores over tid → Data drift eller modellendringer
Verktøy og SDKer
Primær-verktøy
| Verktøy | Installasjon | Bruk |
|---|---|---|
| Azure AI Evaluation SDK | pip install azure-ai-evaluation |
Offline/batch evaluering |
| MLflow 3 | pip install mlflow |
Tracing + online evaluering |
| Prompt Flow ⚠️ (pensjoneres 2027-04-20 → MAF) | Via Microsoft Foundry | End-to-end utvikling |
Spesialverktøy
| Verktøy | Formål | Lenke |
|---|---|---|
| RAG Experiment Accelerator | Systematisk RAG-optimering | GitHub |
| Mosaic AI Agent Evaluation | Agentic-spesifikk evaluering | Azure Databricks |
| Azure AI Studio Portal | Visuell evaluering og testing | portal.azure.com |
Token-budsjetter for evaluatorer
| Evaluator | Token-budsjett |
|---|---|
| Standard evaluatorer | 800 tokens |
RetrievalEvaluator |
1600 tokens |
ToolCallAccuracyEvaluator |
3000 tokens |
Integrasjon med Microsoft-stakken
| Tjeneste | Rolle i evaluering |
|---|---|
| Microsoft Foundry | Sentral evaluerings-plattform med portal og SDK |
| Azure OpenAI | Judge-modeller for LLM-basert evaluering |
| MLflow | Tracing, observerbarhet, human feedback |
| Azure Monitor | Alerting og dashboards for produksjonsmetrikker |
| Azure DevOps / GitHub Actions | CI/CD-integrasjon for automatisert evaluering |
| Azure AI Content Safety | Groundedness Pro-evaluering |
Offentlig sektor (Norge)
Data residency for evaluering
- LLM-judges bruker EU-hostede modeller for EU/EØS-arbeidsområder
- US-hostede modeller for andre regioner
- Sikrer datasuverenitet i evalueringsprosessen
- Abuse monitoring kan opts ut av med godkjenning
Compliance-relatert evaluering
- AI Act: Krever dokumentert evaluering av AI-systemer
- Forvaltningsloven: Krav til kvalitetssikring av vedtaksgrunnlag
- GDPR: Evalueringsdata kan inneholde personopplysninger — håndtér med forsiktighet
Anbefalte metrikker for offentlig sektor
- Groundedness (obligatorisk) — Svar skal være basert på verifiserbare kilder
- Correctness — Spesielt viktig for juridisk/regelverk-rådgivning
- Safety — Content Safety-evaluatorer for å sikre forsvarlig innhold
- Completeness — Unngå ufullstendige svar på komplekse spørsmål
Kostnad og lisensiering
Evalueringskostnader
| Komponent | Kostnad |
|---|---|
| Azure AI Evaluation SDK | Gratis (open source) |
| LLM-judge-kall | Azure OpenAI token-kostnad per evaluering |
| Groundedness Pro | Azure AI Content Safety-prising |
| MLflow | Gratis (open source), compute-kostnad for hosting |
| Human evaluation | Arbeidstid |
Kostnadsoptimering
- Bruk
gpt-4o-minisom judge-modell (billigere enngpt-4o, tilstrekkelig kvalitet) - Evaluer kun representative utvalg, ikke alle queries
- Kjør tunge evalueringer (Groundedness Pro) kun før releases
- Bruk deterministiske metrikker (F1, ROUGE) der det er tilstrekkelig
For arkitekten
Spørsmål å stille kunden
- Har dere et test-datasett med spørsmål og forventede svar?
- Hvilke kvalitetskrav har dere — groundedness, completeness, nøyaktighet?
- Er det behov for kontinuerlig evaluering i produksjon, eller kun ved releases?
- Hvem skal vurdere kvaliteten — domeneeksperter, utviklere, eller begge?
- Har dere CI/CD der evaluering kan integreres?
- Hva er budsjett for LLM-judge-kall i evaluering?
- Trengs det compliance-dokumentasjon av evalueringsresultater?
Fallgruver
- Å evaluere kun med LLM-judges uten human validation — LLM-judges har egne bias
- Å optimere for én metrikk på bekostning av andre — groundedness uten completeness gir korte, ufullstendige svar
- Å ikke ha baseline — uten sammenligning er metrics meningsløse
- Å evaluere for sjelden — RAG-kvalitet kan degenerere over tid uten overvåking
Anbefalinger per modenhetsnivå
| Nivå | Anbefaling |
|---|---|
| Starter | Groundedness + Relevance evaluering med Azure AI SDK, 50+ test-queries |
| Intermediær | Legg til MLflow tracing, CI/CD-integrasjon, multiple metrikker |
| Avansert | Produksjonsovervåking, human-in-the-loop, A/B-testing av RAG-konfigurasjoner |
Kilder og verifisering
Verified (MCP-research)
- Azure AI Evaluation SDK
- RAG LLM Evaluation Phase
- RAG Solution Design Guide
- Built-in RAG Evaluators
- Microsoft Foundry Observability
- RAG Experiment Accelerator
Baseline (modellkunnskap)
- Metrikkbeskrivelser basert på IR-teori (MRR, NDCG, MAP)
- Kostnadsoptimerings-tips
- Modenhetsnivå-anbefalinger