# Response Quality Metrics and Evaluation for RAG Systems

**Last updated:** 2026-02
**Status:** GA
**Category:** Monitoring & Observability

---

## Introduksjon

Response quality metrics er kritisk for å evaluere effektiviteten av RAG-systemer (Retrieval-Augmented Generation). Mens infrastruktur-metrics (tokens, latency, throughput) forteller deg om systemet *kjører*, forteller kvalitetsmetrikker deg om systemet produserer *nyttige og korrekte svar*.

I motsetning til tradisjonelle applikasjoner, hvor output er deterministisk, genererer LLM-er ikke-deterministische responser. Samme prompt kan gi forskjellige resultater hver gang. Dette krever et systematisk rammeverk for å måle kvalitet på tvers av dimensjoner som groundedness (er svaret basert på context?), relevance (adresserer svaret spørsmålet?), completeness (dekker svaret alle aspekter?), og coherence (flyter svaret logisk?).

Azure AI Foundry og Azure AI Evaluation SDK tilbyr AI-assisterte evaluatorer som bruker GPT-modeller som "dommere" til å score responser, samt NLP-baserte metrics (BLEU, ROUGE, METEOR) for tekstlikhet. Sammen gir disse et helhetlig bilde av RAG-systemets evne til å levere korrekt, relevant og komplett informasjon fra grunnlagsdata.

## Kjernekomponenter

### RAG-spesifikke evaluatorer (AI-assistert)

| Evaluator | Formål | Input | Output | Skala |
|-----------|--------|-------|--------|-------|
| **Groundedness** | Måler om response er konsistent med retrieved context (precision-aspekt) | Query (valgfri), Context, Response | Pass/Fail + score | 1-5 Likert |
| **Groundedness Pro** | Streng consistency-sjekk med Azure AI Content Safety | Query, Context, Response | True/False + reason | Boolean |
| **Relevance** | Måler hvor relevant response er til query | Query, Response | Pass/Fail + score | 1-5 Likert |
| **Response Completeness** | Måler om response dekker all kritisk info fra ground truth (recall-aspekt) | Response, Ground truth | Pass/Fail + score | 1-5 Likert |
| **Retrieval** | Måler tekstlig kvalitet av retrieved context chunks (uten ground truth) | Query, Context | Pass/Fail + score | 1-5 Likert |
| **Coherence** | Måler logisk konsistens og flyt | Query, Response | Pass/Fail + score | 1-5 Likert |
| **Fluency** | Måler naturlig språkkvalitet og lesbarhet | Response | Pass/Fail + score | 1-5 Likert |

### Process-evaluering (retrieval-kvalitet)

| Evaluator | Formål | Krever ground truth? | Metrics |
|-----------|--------|---------------------|---------|
| **Document Retrieval** | Måler hvor godt RAG henter korrekte dokumenter fra document store | Ja (query relevance labels) | Fidelity, NDCG, XDCG, Max Relevance, Holes |

**Document Retrieval metrics forklart:**

- **Fidelity**: Antall gode dokumenter returnert / totalt antall kjente gode dokumenter
- **NDCG** (Normalized Discounted Cumulative Gain): Hvor godt ranking matcher ideell rekkefølge (alle relevante øverst)
- **XDCG** (eXpected DCG): Kvalitet på top-k dokumenter uavhengig av andre dokumenter
- **Max Relevance N**: Maksimal relevans i top-k chunks
- **Holes**: Antall dokumenter med manglende query relevance judgments (sanity check)

### NLP-baserte similarity metrics

| Metric | Type | Formål | Input |
|--------|------|--------|-------|
| **F1 Score** | Token overlap | Harmonisk gjennomsnitt av precision og recall | Response, Ground truth |
| **BLEU** | N-gram overlap | Maskinoversettelseskvalitet (opprinnelig for translation) | Response, Ground truth |
| **GLEU** | Sentence-level variant | Google-BLEU for setningsnivå | Response, Ground truth |
| **ROUGE** | N-gram recall | Overlap fokusert på recall (sammendrag-evaluering) | Response, Ground truth |
| **METEOR** | Semantic overlap | Inkluderer stemming, synonymer, parafrasering | Response, Ground truth |

### LLM-judge modellsupport

Azure AI evaluatorer støtter både reasoning models (o-series) og non-reasoning models (GPT-4o, GPT-4.1):

```python
from azure.ai.evaluation import GroundednessEvaluator

# Med reasoning model (o-series)
groundedness = GroundednessEvaluator(
    model_config=model_config,
    is_reasoning_model=True,  # Aktiver reasoning mode
    threshold=3
)

# Med standard GPT-4o
groundedness = GroundednessEvaluator(
    model_config=model_config,
    threshold=3
)
```

**Anbefaling:** Bruk reasoning models (e.g., `gpt-4.1-mini`) for kompleks evaluering som krever dypere resonnering — balanse mellom reasoning performance, cost og efficiency.

## Arkitekturmønstre

### Mønster 1: Multi-dimensional evaluation pipeline

**Bruksområde:** Pre-production testing av RAG-system før deploy.

**Arkitektur:**
```
[Test Dataset]
    ↓
[RAG Application] → Generates: Response, Context
    ↓
[Parallel Evaluation]
    ├─ Groundedness (Context ↔ Response)
    ├─ Relevance (Query ↔ Response)
    ├─ Coherence (Response flow)
    ├─ Retrieval (Query ↔ Context quality)
    └─ Response Completeness (Response ↔ Ground truth)
    ↓
[Aggregated Metrics Dashboard]
```

**Fordeler:**
- Holistisk kvalitetsbilde på tvers av dimensjoner
- Parallell evaluering gir rask feedback
- Aggregerte resultater identifiserer mønstre

**Ulemper:**
- Krever GPT-modell som judge (kostnad per evaluering)
- Latency: 5-10 sekunder per query avhengig av antall evaluatorer
- Ikke-deterministisk: samme prompt kan gi ulike scores

**Implementering:**
```python
from azure.ai.evaluation import evaluate, GroundednessEvaluator, RelevanceEvaluator

result = evaluate(
    data="test_data.jsonl",
    evaluators={
        "groundedness": GroundednessEvaluator(model_config),
        "relevance": RelevanceEvaluator(model_config)
    },
    evaluator_config={
        "groundedness": {
            "column_mapping": {
                "query": "${data.query}",
                "context": "${data.context}",
                "response": "${data.response}"
            }
        }
    },
    azure_ai_project=azure_ai_project,
    output_path="./eval_results.json"
)
```

### Mønster 2: Parameter sweep med Document Retrieval

**Bruksområde:** Optimalisere retrieval-parametere (top-k, chunk size, search algorithm).

**Arkitektur:**
```
[Test Queries + Ground Truth Labels]
    ↓
[Generate Retrieval Results] → Variants:
    ├─ Vector search, top-3, 500-token chunks
    ├─ Hybrid search, top-5, 500-token chunks
    ├─ Vector search, top-3, 1000-token chunks
    └─ Semantic search, top-10, 500-token chunks
    ↓
[Document Retrieval Evaluator] → Per variant:
    ├─ NDCG@k
    ├─ Fidelity
    ├─ XDCG
    └─ Max Relevance
    ↓
[Compare Metrics Across Variants] → Select best configuration
```

**Fordeler:**
- Systematisk optimalisering av retrieval
- Datadrevet beslutning om search-parametere
- Identifiserer trade-offs (e.g., høy NDCG vs. lavere latency)

**Ulemper:**
- Krever manuelt merkede ground truth labels (query relevance judgments)
- Tidkrevende å generere labels for mange queries
- Metrics reflekterer kun retrieval, ikke end-to-end kvalitet

**Implementering:**
```python
from azure.ai.evaluation import DocumentRetrievalEvaluator

retrieval_ground_truth = [
    {"document_id": "1", "query_relevance_label": 4},
    {"document_id": "2", "query_relevance_label": 2}
]

retrieved_documents = [
    {"document_id": "2", "relevance_score": 45.1},
    {"document_id": "3", "relevance_score": 29.2}
]

evaluator = DocumentRetrievalEvaluator(
    ground_truth_label_min=0,
    ground_truth_label_max=4,
    ndcg_threshold=0.5
)

result = evaluator(
    retrieval_ground_truth=retrieval_ground_truth,
    retrieved_documents=retrieved_documents
)
```

### Mønster 3: Continuous evaluation i production

**Bruksområde:** Overvåke response quality over tid i production RAG-system.

**Arkitektur:**
```
[Production Traffic]
    ↓
[Sample 5-10% of queries] → Log: Query, Context, Response
    ↓
[Scheduled Batch Evaluation] (daglig/ukentlig)
    ├─ Groundedness trend
    ├─ Relevance trend
    └─ Coherence trend
    ↓
[Metrics Dashboard + Alerts]
    ├─ Track: avg score over time, % pass/fail
    └─ Alert: if avg score drops below threshold
```

**Fordeler:**
- Oppdager kvalitetsdegradering over tid (f.eks., nye data i corpus)
- Identifiserer edge cases fra production traffic
- Lav overhead (kun sample av traffic)

**Ulemper:**
- Delayed feedback (batch-kjøring, ikke real-time)
- Sampling kan misse sjeldne failure cases
- Cost: GPT-judge for hver evaluering i batch

**Implementering:**
```python
# Azure Monitor dashboard med KQL query
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.COGNITIVESERVICES"
| where OperationName == "RAGEvaluation"
| extend groundedness_score = toint(parse_json(Properties).groundedness)
| summarize avg_groundedness = avg(groundedness_score) by bin(TimeGenerated, 1d)
| render timechart
```

## Beslutningsveiledning

### Kombinasjoner av metrics

RAG-evaluering krever **flere metrics sammen** for å forstå hvor problemet ligger:

| Symptom | Metrics | Mulig årsak | Løsning |
|---------|---------|-------------|---------|
| **Høy groundedness (0.9), lav correctness (0.4)** | Groundedness + Correctness | LLM bruker context men trekker feil konklusjoner | Juster prompt, sjekk source data for feil info |
| **Høy utilization (0.9), lav completeness (0.3)** | Utilization + Completeness | Retrieval henter riktig men inkomplett info | Øk top-k, juster chunking for større context |
| **Høy groundedness (0.9), høy utilization (0.9), lav similarity (0.3)** | Groundedness + Utilization + Similarity | System bruker riktig data men parafraser dårlig | Juster prompt for bedre parafrasering |
| **Lav relevance** | Relevance | Response adresserer ikke query | Sjekk om relevant context ble retrieved; juster embedding model eller prompt |

### Velg riktig evaluator for use case

| Scenario | Anbefalt evaluator | Hvorfor |
|----------|-------------------|---------|
| Har IKKE ground truth, vil unngå hallucinations | **Groundedness** | Måler om response holder seg til context |
| Har ground truth, vil sikre komplett svar | **Response Completeness** | Måler recall (ikke misse kritisk info) |
| Vil ha strengeste groundedness-sjekk | **Groundedness Pro** | Azure AI Content Safety — binary True/False, strengere enn LLM-judge |
| Vil optimalisere retrieval-parametere | **Document Retrieval** | Krever ground truth labels, gir Fidelity/NDCG/XDCG metrics |
| Vil evaluere retrieval uten ground truth | **Retrieval** | LLM-judge vurderer tekstlig kvalitet av context |
| Vil måle om response svarer på query | **Relevance** | Måler accuracy, completeness, direct relevance |

### Threshold-konfigurering

AI-assisterte evaluatorer bruker **Likert scale (1-5)** og **threshold** for pass/fail:

```python
groundedness = GroundednessEvaluator(
    model_config=model_config,
    threshold=3  # Default: 3 (scores ≥3 = pass, <3 = fail)
)
```

**Anbefalinger:**
- **Threshold 3**: Balansert — god for de fleste use cases
- **Threshold 4**: Strengere — bruk for high-stakes scenarios (medical, legal)
- **Threshold 2**: Mer tolerant — bruk for exploratory/creative use cases

### Vanlige feil

| Feil | Konsekvens | Løsning |
|------|------------|---------|
| Bruke kun én metric (e.g., kun groundedness) | Mister holistisk bilde av kvalitet | Evaluer minst 3-4 metrics (groundedness, relevance, coherence) |
| Forvente deterministiske scores | Frustrasjon når samme query gir forskjellige scores | Bruk **target range** (e.g., 4.0-5.0) ikke single target |
| Bruke LLM-judge uten model config | Evaluering feiler | Alltid send `model_config` med Azure OpenAI endpoint/deployment |
| Ikke sample production traffic | Mister insight i real-world failures | Implementer sampling + batch evaluation |
| Ignorere "reason" field i output | Mister kontekst for hvorfor score er lav | Les alltid `*_reason` field for debugging |

### Røde flagg

- **Groundedness score < 2.0**: Response er sannsynligvis hallucinated eller ikke basert på context → sjekk embedding model og chunking
- **All safety metrics = 0**: Category disabled eller unsupported model → bekreft Content Safety er aktivert
- **NDCG < 0.3**: Retrieval ranking er veldig dårlig → juster search algorithm (hybrid vs. vector)
- **Holes > 50%**: Mange dokumenter mangler ground truth labels → forbedre labeling-prosess
- **Consistency gap**: Metrics scorer høyt i test, lavt i production → test data er ikke representativt for production traffic

## Integrasjon med Microsoft-stakken

### Azure AI Foundry Evaluation

**Pre-production evaluation workflow:**
```
[Foundry Portal] → [Evaluations tab]
    ↓
1. Configure test data (upload .jsonl eller generer med GPT)
2. Select metrics (groundedness, relevance, coherence, etc.)
3. Map dataset columns → evaluator inputs
4. Submit evaluation run
    ↓
[Results dashboard]
    ├─ Aggregerte metrics (avg score, pass rate)
    ├─ Row-level results (per query)
    └─ Reason field (forklaring per score)
```

**Model evaluation** (sammenlign base models):
```python
# Foundry benchmark for model selection
client.evals.create(
    name="Compare GPT-4o vs GPT-4.1",
    data_source_config=data_source_config,
    testing_criteria=[
        {"type": "azure_ai_evaluator", "evaluator_name": "builtin.groundedness"},
        {"type": "azure_ai_evaluator", "evaluator_name": "builtin.relevance"}
    ]
)
```

### Azure Monitor + Log Analytics

**Eksporter evaluation metrics til Log Analytics:**
```python
# Diagnostic settings: send logs til Log Analytics workspace
# KQL query for trends
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.COGNITIVESERVICES"
| where OperationName == "EvaluationRun"
| extend groundedness = toint(parse_json(Properties).groundedness)
| summarize avg(groundedness) by bin(TimeGenerated, 1h)
| render timechart
```

### Azure AI Content Safety (Groundedness Pro)

```python
from azure.ai.evaluation import GroundednessProEvaluator

azure_ai_project = {
    "subscription_id": os.environ["AZURE_SUBSCRIPTION_ID"],
    "resource_group_name": os.environ["AZURE_RESOURCE_GROUP"],
    "project_name": os.environ["AZURE_PROJECT_NAME"]
}

groundedness_pro = GroundednessProEvaluator(
    azure_ai_project=azure_ai_project
)

result = groundedness_pro(
    query="Is Marie Curie born in Paris?",
    context="Marie Curie is born in Warsaw.",
    response="No, Marie Curie is born in Warsaw."
)
# Output: {"groundedness_pro_label": True, "groundedness_pro_reason": "All Contents are grounded"}
```

### Copilot Studio + Prompt Flow

**Evaluering i Prompt Flow:**
- Bruk `QAEvaluator` (composite evaluator som kjører groundedness, relevance, coherence, fluency, similarity, F1 samtidig)
- Integrer i CI/CD: kjør evaluation som del av deployment-pipeline

```python
from azure.ai.evaluation import QAEvaluator

qa_eval = QAEvaluator(
    model_config=model_config,
    groundedness_threshold=3,
    relevance_threshold=3,
    coherence_threshold=3
)

result = qa_eval(
    query="What is the capital of France?",
    response="Paris is the capital of France.",
    context="France is a country in Europe. Paris is its capital.",
    ground_truth="Paris"
)
```

### MLflow + Databricks

Azure Databricks støtter MLflow 3 GenAI evaluation:

```python
import mlflow
from mlflow.genai.scorers import RetrievalGroundedness, RetrievalRelevance

eval_results = mlflow.genai.evaluate(
    data=eval_dataset,
    predict_fn=rag_app,
    scorers=[
        RetrievalGroundedness(model="databricks:/databricks-gpt-oss-120b"),
        RetrievalRelevance(model="databricks:/databricks-gpt-oss-120b")
    ]
)
```

## Offentlig sektor (Norge)

### GDPR og datasuverenitet

**Utfordring:** AI-assisterte evaluatorer sender data til GPT-modeller for scoring — kan inneholde PII fra production traffic.

**Løsning:**
- Anonymiser/pseudonymiser data **før** evaluering:
  ```python
  # Eksempel: erstatt navn med placeholders
  query = "Hva er status for John Doe sin søknad?"
  anonymized = "Hva er status for [NAVN] sin søknad?"
  ```
- Bruk **Azure OpenAI i Norge-regioner** (Norway East) for data residency
- Vurder NLP-baserte metrics (BLEU, ROUGE) som **ikke** sender data til LLM — deterministisk, ingen privacy risk

### AI Act compliance (artikkel 10 + 15)

**Artikkel 10 (Data governance):**
- Dokumenter hvilke metrics som brukes og hvorfor → traceability
- Logg evaluation runs med metadata: timestamp, dataset versjon, model versjon
- Bevar evaluation results for audit trail

**Artikkel 15 (Accuracy + robustness):**
- Bruk **multiple metrics** for å demonstrere testing av accuracy (groundedness, relevance)
- Implementer **continuous evaluation** for å oppdage degradering over tid
- Dokumenter threshold-valg og trade-offs (e.g., hvorfor threshold=3 ikke threshold=4)

### Forvaltningsloven § 25 (begrunnelsesplikt)

**Utfordring:** Ved automatiserte vedtak, må system kunne forklare hvorfor et svar ble generert.

**Løsning:**
- Bruk evaluators med **reason field** (f.eks., `groundedness_reason`) som forklaring
- Logg: Query → Retrieved documents → Response → Evaluation score + reason
- Eksempel:
  ```json
  {
    "query": "Er jeg kvalifisert for støtte?",
    "response": "Ja, basert på din inntekt.",
    "groundedness_reason": "Response er konsistent med context som viser inntektsgrense.",
    "groundedness_result": "pass"
  }
  ```

### Schrems II og data transfers

**Issue:** Groundedness Pro bruker Azure AI Content Safety service — data kan teoretisk sendes til US-regioner.

**Mitigering:**
- Bruk **Groundedness (LLM-judge)** i stedet for Groundedness Pro — mer kontroll over model deployment region
- Deploy GPT-judge i Norge-region (Norway East)
- Bekreft at Azure AI Foundry project og OpenAI resource er i samme region

### DPIA for response quality metrics

**Vurderinger:**
- **Privacy risk**: Lav for NLP-metrics (BLEU, ROUGE), Medium for AI-assisterte evaluatorer (sender til GPT)
- **Mitigating measures**: Anonymisering, data residency i Norge, logging med limited retention
- **Lawful basis**: Legitimate interest (artikkel 6(1)(f)) for quality assurance, eller public task (artikkel 6(1)(e)) for public sector

## Kostnad og lisensiering

### Evaluation cost model

**AI-assisterte evaluatorer (GPT-judge):**
- **Cost per evaluator call**: ~500-1500 tokens (prompt for evaluation logic) + response tokens
- **Eksempel**: 1000 queries × 5 evaluatorer × 1500 tokens = 7.5M tokens
- **Pricing**: GPT-4o @ $2.50/1M input tokens → ~$18.75 per evaluation run

**NLP-baserte metrics:**
- **Gratis** (deterministisk beregning, ingen API calls)
- Bruk for cost-sensitive scenarios eller high-volume evaluation

### PTU vs. PAYG for evaluation

| Model | Anbefaling | Hvorfor |
|-------|------------|---------|
| **PAYG** (Pay-as-you-go) | Pre-production testing, ad-hoc evaluations | Fleksibel, kun betal for evaluations kjørt |
| **PTU** (Provisioned Throughput) | Continuous production evaluation (daglig batch) | Fast månedlig kostnad, garantert kapasitet |

**Break-even beregning:**
```
Monthly eval volume: 100K queries × 5 evaluatorer × 1500 tokens = 750M tokens/måned
PAYG cost: 750M × $2.50/1M = $1875/måned
PTU equivalent: ~300 PTUs @ $6/PTU = $1800/måned

→ Bruk PTU hvis eval volume > 100K queries/måned
```

### Groundedness vs. Groundedness Pro cost

| Evaluator | Cost | Latency | Accuracy |
|-----------|------|---------|----------|
| **Groundedness** (LLM-judge) | GPT tokens (variable) | 5-10 sek | Nondeterministisk |
| **Groundedness Pro** (AI Content Safety) | Fixed per call (~$0.002/call) | 2-3 sek | Deterministic |

**Anbefaling:**
- **Groundedness Pro** for high-volume, cost-sensitive scenarios (fast pris, raskere)
- **Groundedness** for customizable definition (kan tweake prompt) og edge cases (LLM bedre på edge cases)

### Lisensiering

**Nødvendig:**
- **Azure OpenAI** (for GPT-judge): Standard/Enterprise Agreement
- **Azure AI Foundry**: Gratis tier for evaluation UI, betaler kun for underliggende compute (GPT calls)
- **Azure AI Content Safety** (for Groundedness Pro): Inkludert i Azure subscription, pay-per-transaction

**Ikke nødvendig:**
- Ingen spesielle lisenser for Azure AI Evaluation SDK (open source Python library)

## For arkitekten (Cosmo)

### Spørsmål å stille kunden

1. **Har dere ground truth data for RAG-systemet?**
   - Ja → bruk Response Completeness og Document Retrieval for presise metrics
   - Nei → bruk Groundedness, Relevance, Retrieval (LLM-judge uten ground truth)

2. **Hvor kritisk er correctness i domenet?** (medisinsk, juridisk vs. generell kundeservice)
   - Høy criticality → strengere threshold (4-5), bruk Groundedness Pro
   - Medium/lav → standard threshold (3), bruk Groundedness

3. **Hva er evaluation-volumet?**
   - < 10K queries/måned → bruk PAYG GPT-judge
   - \> 100K queries/måned → vurder PTU for predictable cost

4. **Trenger dere real-time eller batch evaluation?**
   - Real-time → bruk Groundedness Pro (raskere, deterministisk)
   - Batch → bruk multi-dimensional evaluation med flere GPT-judges

5. **Har dere allerede logging av production queries?**
   - Ja → implementer sampling + scheduled batch evaluation
   - Nei → sett opp Azure Monitor diagnostics først

6. **Vil dere optimalisere retrieval-parametere?**
   - Ja → invester i ground truth labeling, bruk Document Retrieval evaluator
   - Nei → bruk Retrieval evaluator (LLM-judge, ingen ground truth)

7. **Hvilke Microsoft-tjenester bruker dere i dag?**
   - Azure AI Foundry → bruk innebygd Evaluations UI
   - Copilot Studio → integrer QAEvaluator i Prompt Flow
   - Databricks → bruk MLflow GenAI evaluation

8. **Har dere GDPR/privacy concerns med evaluation data?**
   - Ja → anonymiser før evaluering, bruk Norge-region OpenAI
   - Nei → standard setup

### Fallgruver

| Fallgruve | Konsekvens | Mitigering |
|-----------|------------|------------|
| **Bruke LLM-judge uten re-test ved model upgrade** | Scores kan endre seg når GPT-modell oppdateres | Pin judge model version i config, re-run baseline eval ved upgrade |
| **Ikke dokumentere threshold-valg** | Kan ikke forklare hvorfor threshold=3 vs. threshold=4 | Dokumenter rationale i ADR (Architecture Decision Record) |
| **Ignore "reason" field** | Debugging tar lang tid | Alltid inspiser reason field for low scores |
| **Bruke kun groundedness** | Mister completeness/relevance perspektiv | Bruk minst 3 metrics (groundedness, relevance, coherence) |
| **Ikke aggregere over tid** | Kan ikke spore quality trends | Lagre eval results i database, visualiser trender i dashboard |
| **Over-reliance på AI-judge** | Cost kan eksplodere | Kombiner AI-judge med NLP-metrics (BLEU, ROUGE) for å redusere cost |

### Anbefalinger per modenhetsnivå

**Level 1 — Proof of Concept:**
- Start med **Groundedness** og **Relevance** (to metrics)
- Bruk Foundry Evaluations UI for rask feedback
- Kjør ad-hoc evaluations på small dataset (10-50 queries)
- Kostnadsramme: < $50/måned

**Level 2 — Pilot:**
- Legg til **Coherence**, **Fluency**, **Retrieval** (5 metrics total)
- Implementer **Document Retrieval** hvis du har ground truth
- Kjør scheduled batch evaluation (ukentlig)
- Kostnadsramme: $200-500/måned

**Level 3 — Production:**
- Full metric suite (groundedness, relevance, coherence, fluency, retrieval, response completeness)
- **Continuous evaluation** med sampling av production traffic (5-10%)
- Integrer metrics i Azure Monitor dashboards
- Automatiske alerts ved quality degradering
- Kostnadsramme: $1000-3000/måned (avhengig av volume)

**Level 4 — Enterprise:**
- Multi-dimensional evaluation med custom evaluators
- **Parameter sweep** automation for retrieval optimization
- Integration med MLOps pipeline (eval som gate i deployment)
- A/B testing av ulike RAG-konfigurasjoner
- Kostnadsramme: $5000+/måned

## Kilder og verifisering

### Microsoft Learn (Verified via MCP)

1. [Observability in generative AI - What are evaluators?](https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/observability#what-are-evaluators) — RAG evaluators (Retrieval, Groundedness, Relevance, Response Completeness)
2. [Retrieval-Augmented Generation (RAG) evaluators](https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/evaluation-evaluators/rag-evaluators) — Detaljert dokumentasjon for alle RAG-evaluatorer, input/output formats
3. [Large language model end-to-end evaluation](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/rag/rag-llm-evaluation-phase) — Groundedness, completeness, utilization, relevance, correctness metrics
4. [Evaluate generative AI models and applications](https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/evaluate-generative-ai-app) — Foundry portal evaluation workflow, testing criteria configuration
5. [Submit a batch run and evaluate a flow](https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/flow-bulk-test-evaluation) — Built-in evaluation methods (QnA Groundedness, Relevance, Coherence)
6. [Evaluation of RAG performance basics](https://learn.microsoft.com/en-us/fabric/data-science/tutorial-evaluate-rag-performance) — AI-assisted metrics (groundedness, relevance, similarity), top-N retrieval rate
7. [Monitor Azure OpenAI](https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/monitor-openai) — Azure Monitor integration, KQL queries, diagnostic settings
8. [Use Risks & Safety monitoring](https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/risks-safety-monitor) — Content filtering metrics, severity distribution
9. [Azure AI Evaluation SDK - Python samples](https://github.com/Azure-Samples/azureai-samples/blob/main/scenarios/evaluate/) — Code examples for groundedness, relevance evaluators

### Code samples (Verified via MCP)

10. [GroundednessEvaluator Python sample](https://learn.microsoft.com/en-us/python/api/azure-ai-evaluation/azure.ai.evaluation.groundednessevaluator) — Conversation mode evaluation with multi-turn support
11. [QAEvaluator Python sample](https://learn.microsoft.com/en-us/python/api/azure-ai-evaluation/azure.ai.evaluation.qaevaluator) — Composite evaluator combining multiple quality metrics
12. [DocumentRetrievalEvaluator usage](https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/ai/azure-ai-projects/samples/evaluations/) — Parameter sweep for retrieval optimization

### Konfidensnivå per seksjon

| Seksjon | Confidence | Kilde |
|---------|-----------|-------|
| Kjernekomponenter | **Verified** | Microsoft Learn RAG evaluators doc + SDK samples |
| Arkitekturmønstre | **Verified** | Microsoft Learn evaluation guides + Azure Architecture Center |
| Beslutningsveiledning | **Verified** | Microsoft Learn LLM evaluation metrics + best practices |
| Integrasjon med Microsoft-stakken | **Verified** | Foundry portal docs, Azure Monitor docs, MLflow docs |
| Offentlig sektor | **Baseline** | Generell GDPR/AI Act kunnskap + Microsoft compliance docs |
| Kostnad og lisensiering | **Verified** | Azure OpenAI pricing, AI Content Safety pricing |

**MCP research calls:** 3 (microsoft_docs_search × 3, microsoft_docs_fetch × 2, microsoft_code_sample_search × 1)
**Unique URLs:** 12
