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>
11 KiB
Self-Reflective RAG — Selvevaluerende retrieval
Last updated: 2026-02 Status: GA (Azure AI Foundry evaluators), Preview (agentic retrieval) Category: RAG Architecture & Semantic Search
Introduksjon
Self-Reflective RAG er en arkitektur der systemet evaluerer og raffinerer sine egne retrieval-beslutninger i en iterativ loop. I tradisjonell RAG aksepteres retrieved chunks ukritisk — selv når de er irrelevante eller utilstrekkelige. Self-reflective RAG innfører en evalueringsmekanisme som scorer retrieved dokumenter og trigger re-retrieval, query-reformulering eller fallback-strategier ved lav confidence.
To fremtredende forskningsbidrag definerer feltet: CRAG (Corrective RAG) bruker en lightweight evaluator som returnerer confidence-grader (Correct/Incorrect/Ambiguous) for å trigge korrektive handlinger, og Self-RAG der modellen kritiserer og verifiserer sine egne outputs under generering.
Azure AI Foundry tilbyr innebygde evaluatorer for RAG quality assessment (groundedness, relevance, coherence — alle 1-5 skala) som kan integreres i en feedback loop. Azure AI Search agentic retrieval (preview) forbedrer retrieval-relevans med opptil 40% gjennom LLM-assistert query planning.
Kjernekomponenter
CRAG-arkitektur
| Komponent | Beskrivelse | Handling |
|---|---|---|
| Retrieval Evaluator | Scorer retrieved dokumenter | Confidence: Correct / Incorrect / Ambiguous |
| Correct (høy confidence) | Dokumenter er relevante | Gå direkte til generering |
| Ambiguous (middels) | Delvis relevante | Decompose-then-recompose: filtrer irrelevant innhold |
| Incorrect (lav confidence) | Dokumenter er irrelevante | Re-retrieve med reformulert query eller web search fallback |
Azure AI Foundry evaluatorer
| Evaluator | Type | Scoring | Bruksområde |
|---|---|---|---|
| Retrieval | Prosess | 1-5 Likert | Query-context relevans (uten ground truth) |
| Groundedness | System | 1-5 Likert | Response alignment med context (precision) |
| Groundedness Pro | System | Binary | Strikt consistency via Azure AI Content Safety |
| Relevance | System | 1-5 Likert | Response adresserer query fullstendig |
| Response Completeness | System | 1-5 Likert | Response dekker all kritisk info (recall) |
| Document Retrieval | Prosess | NDCG, XDCG | Krever ground truth labels |
Self-reflective loop
Query → Initial Retrieval → Evaluering
├─ Score ≥ threshold → Generer svar → Groundedness-check
│ ├─ Grounded → Returner svar
│ └─ Ikke grounded → Re-generate med justert prompt
└─ Score < threshold → Query reformulering → Re-retrieval → Evaluering
Arkitekturmønstre
Mønster 1: CRAG med Azure AI Foundry evaluators
Arkitektur: Query → Azure AI Search → Retrieval Evaluator → [Correct: Generate] / [Ambiguous: Filter + Generate] / [Incorrect: Reformulate + Re-retrieve]
Implementering:
from azure.ai.evaluation import RetrievalEvaluator, GroundednessEvaluator
retrieval_eval = RetrievalEvaluator(model_config=model_config, threshold=3)
groundedness_eval = GroundednessEvaluator(model_config=model_config, threshold=3)
# Steg 1: Initial retrieval
results = search_client.search(query, vector_queries=[...], top=5)
context = "\n".join([r["chunk"] for r in results])
# Steg 2: Evaluer retrieval-kvalitet
retrieval_score = retrieval_eval(query=query, context=context)
if retrieval_score["retrieval"] >= 4: # Correct
response = generate_response(query, context)
elif retrieval_score["retrieval"] >= 2: # Ambiguous
filtered = filter_relevant_passages(context, query)
response = generate_response(query, filtered)
else: # Incorrect
reformulated = reformulate_query(query)
new_results = search_client.search(reformulated, ...)
response = generate_response(reformulated, new_results)
# Steg 3: Groundedness-check
grounded = groundedness_eval(
query=query, context=context, response=response
)
if grounded["groundedness_result"] == "fail":
response = regenerate_with_stricter_prompt(query, context)
Fordeler:
- Managed evaluators — ingen custom modelltrening
- Integrert med Azure AI Foundry observability
- Støtter reasoning-modeller (o-series) med
is_reasoning_model=True
Anbefalt for: Produksjonssystemer der svarkvalitet er kritisk.
Mønster 2: Iterativ query refinement med Semantic Kernel
Arkitektur: Agent med OnDemandFunctionCalling → Søk → Evaluer → Reformuler → Søk igjen
Implementering (C#):
var options = new TextSearchProviderOptions
{
SearchTime = RagBehavior.OnDemandFunctionCalling,
Top = 5,
PluginFunctionName = "SearchKnowledge"
};
ChatCompletionAgent agent = new()
{
Name = "ReflectiveAssistant",
Instructions = """
Before answering, search for relevant information.
After retrieving results, assess if they are sufficient.
If not, reformulate your search query and try again.
Maximum 3 search attempts per question.
Always cite your sources.
""",
Kernel = kernel,
UseImmutableKernel = true
};
Fordeler:
- Agent styrer iterativ loop naturlig via instruksjoner
- Fleksibel — kan tilpasses domene-spesifikke evalueringskriterier
- Integrert med Semantic Kernel ecosystem
Anbefalt for: Code-first teams som vil ha full kontroll over refleksjon-logikken.
Mønster 3: Parameter sweep-optimalisering
Arkitektur: Systematisk testing av retrieval-parametere mot golden metrics
Prosess:
- Definer golden metrics (XDCG, Fidelity, NDCG)
- Opprett ground truth labels (human eller LLM-basert)
- Kjør parameter sweep over re-ranker thresholds, target indices, knowledge sources
- Velg optimal konfigurasjon basert på groundedness + relevance scores
Azure AI Foundry-støtte:
| Metric | Formål |
|---|---|
| Max Relevance N | Maks relevans-score i top-k chunks |
| XDCG | Resultatkvalitet innenfor top-k dokumenter |
| Fidelity | Hvor nøyaktig retrieval matcher ground truth |
Anbefalt for: Enterprise-teams med ground truth-data og kapasitet til systematisk evaluering.
Beslutningsveiledning
Beslutningstabell
| Scenario | Anbefalt mønster | Begrunnelse |
|---|---|---|
| Kritisk svarkvalitet (helse, jus) | Mønster 1 (CRAG + evaluators) | Systematisk kvalitetssikring |
| Code-first team | Mønster 2 (SK iterativ) | Full kontroll, fleksibelt |
| Ground truth tilgjengelig | Mønster 3 (parameter sweep) | Kvantitativ optimalisering |
| Kostnadsbevisst | Mønster 2 med max 2 iterasjoner | Begrens LLM-kall |
Vanlige feil
| Feil | Konsekvens | Løsning |
|---|---|---|
| Uendelig refleksjon-loop | Høy kostnad, timeout | Sett maks iterasjoner (2-3) |
| Threshold for lav | Alle retrievals trigges som «incorrect» | Start med threshold=3, kaliber |
| Kun groundedness uten relevance | Grounded men irrelevante svar | Kombiner groundedness + relevance |
| Ingen baseline-metrics | Umulig å vite om refleksjon hjelper | Mål metrics FØR og ETTER |
Røde flagg
- Self-reflective RAG for enkle FAQ-systemer (overkill)
- Ingen logging av evaluator-scorer over tid
- Refleksjon uten mål (ingen metrics å optimalisere mot)
- Groundedness Pro i produksjon uten fallback (avhengig av Content Safety API)
Integrasjon med Microsoft-stakken
| Tjeneste | Integrasjonspunkt |
|---|---|
| Azure AI Foundry | Innebygde evaluatorer (Groundedness, Relevance, Retrieval) |
| Azure AI Search | Retrieval backend + agentic retrieval (preview) |
| Semantic Kernel | OnDemandFunctionCalling for iterativ retrieval |
| Azure OpenAI | GPT-4o for evaluering og generering |
| Application Insights | Logging av evaluator-scorer, iterasjoner, latency |
| Azure AI Content Safety | Groundedness Pro (binary consistency check) |
Offentlig sektor (Norge)
Dataplassering
- Azure AI Foundry evaluators: Kjøres via Azure OpenAI (Sweden Central) — data i EU/EØS
- Azure AI Content Safety: Sjekk regional tilgjengelighet for Groundedness Pro
Relevante vurderinger
| Krav | Implikasjon |
|---|---|
| AI Act | Self-reflective mekanismer støtter krav om robusthet og pålitelighet |
| Forvaltningsloven | Evaluator-logger dokumenterer beslutningsgrunnlag |
| GDPR | Evaluator-kall behandler brukerdata — databehandleravtale |
| NSM | Grading-krav → on-premises evaluering for gradert info |
Kostnad og lisensiering
Kostnadskomponenter
| Komponent | Kostnad per query | Notat |
|---|---|---|
| Initial retrieval | ~0.5 NOK | Standard search + embedding |
| Retrieval evaluator (GPT-4o) | ~0.3 NOK | LLM-basert scoring |
| Groundedness evaluator | ~0.3 NOK | LLM-basert scoring |
| Re-retrieval (ved feil) | ~0.5 NOK | Trigges i ~20-30% av queries |
| Gjennomsnittlig total | ~1.5-2.5 NOK | vs. ~1 NOK for standard RAG |
ROI-vurdering
Hvis self-reflective RAG reduserer feilaktige svar fra 15% til 5%:
- Kostnad: +50-150% per query
- Gevinst: 10% færre feilaktige svar → redusert manuell korreksjon, høyere tillit
For arkitekten (Cosmo)
Spørsmål å stille kunden
- "Hva er konsekvensen av feil svar?" — Høy konsekvens (helse, jus) → self-reflective RAG
- "Har dere ground truth-data?" — Ja → parameter sweep, nei → LLM-basert evaluering
- "Hva er akseptabel ekstra latency?" — Self-reflection = 1-3 ekstra LLM-kall
- "Trenger dere audit trail for beslutninger?" — Evaluator-logger dekker dette
- "Har dere kapasitet til å kalibrere thresholds?" — Krever iterativ tuning
Fallgruver
- Evaluator som gospel: LLM-baserte evaluatorer har selv feilrate — bruk som signal, ikke absolutthet
- Over-refleksjon: Mer enn 3 iterasjoner gir sjelden bedre svar, men øker kostnad drastisk
- Glemmer menneske-i-loopen: Self-reflective er ikke det samme som feilfri
Anbefalinger per modenhetsnivå
| Modenhet | Anbefaling |
|---|---|
| Prototyp | Standard RAG. Mål baseline groundedness og relevance. |
| Pilot | Legg til Groundedness evaluator post-generation. Logg scores. |
| Produksjon | CRAG-mønster med retrieval + groundedness evaluering. Max 2 iterasjoner. |
| Enterprise | Full parameter sweep + automated threshold-kalibrering + A/B-testing. |
Kilder og verifisering
| Kilde | Konfidens | URL |
|---|---|---|
| RAG Evaluators (Azure AI Foundry) | Verified | learn.microsoft.com |
| RAG LLM Evaluation Phase | Verified | learn.microsoft.com |
| Semantic Kernel Agent RAG | Verified | learn.microsoft.com |
| Corrective RAG (CRAG) paper | Verified | arxiv.org |
| Evaluating RAG Agents (MS Tech Community) | Verified | techcommunity.microsoft.com |
| Azure AI Search agentic retrieval (40% improvement) | Baseline | infoq.com |