Updates across all 5 skills: ms-ai-advisor, ms-ai-engineering, ms-ai-governance, ms-ai-security, ms-ai-infrastructure. Key changes: - Language Services (Custom Text Classification, Text Analytics, QnA): retirement warning 2029-03-31, migration guides to Foundry/GPT-4o - Agentic Retrieval: 50M free reasoning tokens/month (Public Preview) - Computer Use: Claude Sonnet 4.5 (preview) + OpenAI CUA models - Agent Registry: Risks column (M365 E7), user-shared/org-published types - Declarative agents: schema v1.5 → v1.6, Store validation requirements - MLflow 3: 13 built-in LLM judges, production monitoring, Genie Code - AG-UI HITL: ApprovalRequiredAIFunction (C#) + @tool(approval_mode) (Python) - Entra ID Ignite 2025: Agent ID Admin/Developer RBAC roles, Conditional Access - Security Copilot: 400 SCU/month per 1000 M365 E5 licenses, auto-provisioned - Fast Transcription API: phrase lists, 14-language multi-lingual transcription - Azure Monitor Workbooks: Bicep support, RBAC specifics - Power Platform Copilot: data residency (Norway/Europe → EU DB, Bing → USA) - RAG security-rbac: 4-approach table (GA + 3 preview access control methods) - IaC MLOps: Well-Architected OE:05 principles, Bicep/Terraform patterns - Translator: image file batch translation Preview (JPEG/PNG/BMP/WebP) All 106 files: Last updated 2026-04 | Verified: MCP 2026-04 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
12 KiB
Contextual Retrieval — Kontekstuell berikelse av chunks
Last updated: 2026-04 | Verified: MCP 2026-04 Status: GA (custom skill pattern), Preview (agentic retrieval) Category: RAG Architecture & Semantic Search
Introduksjon
Contextual Retrieval er en teknikk der hvert dokumentsegment (chunk) berikes med en LLM-generert kontekstbeskrivelse før embedding og indeksering. I tradisjonell RAG mister chunks kontekst når de løsrives fra kildedokumentet — pronomener, forkortelser og referanser blir tvetydige. Contextual Retrieval løser dette ved å prepende en 2-3-setningers forklaring som beskriver segmentets plass i dokumentet.
Anthropic dokumenterte teknikken i 2024 og viste at den reduserer retrieval failures med opptil 67% når den kombineres med BM25 og reranking. Microsoft Tech Community har validert tilnærmingen i Azure AI Search med 80-85% reduksjon i token-bruk per query og 31% forbedring i retrieval precision.
I Azure-stakken implementeres contextual retrieval via en Custom Web API Skill (Azure Functions) som genererer kontekstuell prefiks via Azure OpenAI GPT-4o, integrert i skillset-pipelinen mellom chunking og embedding.
Kjernekomponenter
Kontekstuell prefiks-generering
| Komponent | Beskrivelse |
|---|---|
| Custom Web API Skill | Azure Function som mottar chunk + metadata, returnerer kontekstuell prefiks |
| LLM (GPT-4o) | Genererer 2-3 setninger som forklarer chunkens plass i dokumentet |
| Text Merge Skill | Konkatenerer kontekstuell prefiks + original chunk |
| Embedding Skill | Embedder den berikede teksten (prefiks + chunk) |
Eksempel
Original chunk: "Forskningen understreket AI"
→ Problematisk: Hvem, når, hvilken AI?
Contextual chunk: "Fra Statens vegvesen sin 2025-rapport om autonome
kjøretøy. Dette avsnittet diskuterer AI-teknologier for selvkjørende biler.
Forskningen understreket AI"
→ Tydelig: LLM kan nå forstå konteksten
Custom Skill-konfigurasjon
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"name": "context-generation-skill",
"uri": "https://<function-app>.azurewebsites.net/api/generate-context",
"httpMethod": "POST",
"timeout": "PT90S",
"context": "/document/pages/*",
"inputs": [
{ "name": "chunk", "source": "/document/pages/*" },
{ "name": "documentTitle", "source": "/document/metadata_storage_name" },
{ "name": "documentMetadata", "source": "/document/metadata" }
],
"outputs": [
{ "name": "contextualPrefix", "targetName": "context" }
]
}
Azure Function (Python)
import azure.functions as func
from openai import AzureOpenAI
import json, os
client = AzureOpenAI(
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_KEY"),
api_version="2024-10-01-preview"
)
def main(req: func.HttpRequest) -> func.HttpResponse:
values = req.get_json()['values']
results = []
for record in values:
chunk = record['data']['chunk']
doc_title = record['data']['documentTitle']
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": f"""Generate a 2-3 sentence
contextual summary for this chunk.
Document: {doc_title}
Chunk: {chunk}
Include: document source/type, section/topic, temporal context."""}],
max_tokens=100,
temperature=0.3
)
context = response.choices[0].message.content
results.append({
"recordId": record['recordId'],
"data": {"contextualPrefix": context},
"errors": [], "warnings": []
})
return func.HttpResponse(
json.dumps({"values": results}),
mimetype="application/json"
)
Arkitekturmønstre
Mønster 1: Post-chunking context enrichment (anbefalt)
Arkitektur: Data source → Indexer → Document Layout/Text Split → Custom Context Skill → Text Merge → Embedding → Index
Fordeler:
- Enklest å integrere i eksisterende pipelines
- Bruker standard Azure AI Search skillset-mekanismer
- Kompatibel med alle chunking-strategier
Ulemper:
- Ekstra LLM-kall per chunk (GPT-4o kostnad)
- Økt indekseringstid (90s timeout per batch)
Anbefalt for: Alle RAG-systemer der retrieval-kvalitet er viktigere enn indekseringskostnad.
Mønster 2: Pre-chunking context med document summary
Arkitektur: Data source → Indexer → Document Summary Skill (1 per dokument) → Text Split → Inject Summary as Context → Embedding → Index
Fordeler:
- Kun ett LLM-kall per dokument (ikke per chunk)
- 60-80% kostnadsreduksjon vs. per-chunk context
- Caching-vennlig
Ulemper:
- Mindre spesifikk kontekst per chunk
- Document summary kan miste nyanser i store dokumenter
Anbefalt for: Kostnadsbevisste løsninger, homogene dokumentsamlinger.
Mønster 3: Contextual Retrieval + BM25 + Reranking
Arkitektur: Contextual embedding + BM25 full-text indeksering → Hybrid search (RRF) → Semantic Ranker → Top-k
Effekt (Anthropic benchmarks):
| Metode | Retrieval failure rate | Forbedring |
|---|---|---|
| Standard embeddings | 5.7% | Baseline |
| Contextual Embeddings | 3.7% | -35% |
| + Contextual BM25 | 2.9% | -49% |
| + Reranking | 1.9% | -67% |
Nøkkel: BM25 fanger kontekst-spesifikke termer (organisasjonsnavn, datoer) som embeddings kan miste.
Beslutningsveiledning
Beslutningstabell
| Scenario | Anbefalt mønster | Begrunnelse |
|---|---|---|
| Generell enterprise RAG | Mønster 1 (post-chunking) | Best kvalitet, akseptabel kostnad |
| Høyt dokumentvolum (>100K docs) | Mønster 2 (document summary) | Kostnadseffektiv |
| Kritisk retrieval-kvalitet | Mønster 3 (full hybrid) | Maksimal reduksjon i failures |
| Budget-begrenset PoC | Ingen contextual retrieval | Start med standard hybrid search |
Vanlige feil
| Feil | Konsekvens | Løsning |
|---|---|---|
| Genererer kontekst med gpt-4o-mini | Lavere kvalitet på kontekst | Bruk gpt-4o for kontekst-generering |
| Ingen caching av document summaries | Gjentatte LLM-kall for samme dokument | Cache summary og gjenbruk per chunk |
| Ignorerer BM25-indeksering av kontekst | Mister keyword-matching fordeler | Indekser berikede chunks i searchable felt |
| Overlap > timeout (PT90S) | Skill-feil ved store batcher | Reduser batch-størrelse eller øk timeout |
Integrasjon med Microsoft-stakken
| Tjeneste | Integrasjonspunkt |
|---|---|
| Azure AI Search | Skillset pipeline (Custom Web API Skill + Text Merge + Embedding) |
| Azure OpenAI | GPT-4o for kontekst-generering, text-embedding-3-large for embedding |
| Azure Functions | Hosting av custom skill (Python/C#), consumption plan |
| Azure AI Document Intelligence | Document Layout skill for strukturert chunking før context enrichment |
| Semantic Kernel | TextChunker + custom context injection i kode-basert pipeline |
| Application Insights | Monitorering av skill-latency, LLM token-bruk, feilrate |
Fullstendig skillset-pipeline
Blob Storage → Indexer → Skillset:
1. Document Layout skill (struktur → Markdown)
2. Text Split skill (chunk-størrelse kontroll)
3. Custom Context Generation skill (GPT-4o)
4. Text Merge skill (context + chunk)
5. Azure OpenAI Embedding skill (text-embedding-3-large)
→ Index (med index projections for parent-child)
→ Query (hybrid search + semantic ranker)
Offentlig sektor (Norge)
Dataplassering
- Azure AI Search: Norway East — data i Norge
- Azure Functions: Norway East — compute i Norge
- Azure OpenAI: Sweden Central (nærmeste region med GPT-4o) — data i EU/EØS
- GDPR: Kontekst-generering behandler dokumentinnhold via LLM — databehandleravtale påkrevd
Relevante vurderinger
| Krav | Implikasjon |
|---|---|
| Forvaltningsloven | Kontekstuell prefiks skal ikke endre dokumentets meningsinnhold |
| GDPR Art. 17 | Sletting av kildedokument kaskaderer til berikede chunks |
| AI Act | Dokumenter bruk av LLM i indekseringspipeline som del av AI-systemdokumentasjon |
| Sikkerhetsloven | Gradert informasjon kan ikke sendes til Azure OpenAI — bruk on-premises alternativ |
Kostnad og lisensiering
Kostnadskomponenter
| Komponent | Prismodell | Estimat (1 000 dokumenter, 20 chunks/doc) |
|---|---|---|
| Context generation (GPT-4o) | Per token | ~60 NOK (100 tokens/chunk × 20K chunks) |
| Text embedding (text-embedding-3-large) | Per token | ~5 NOK (berikede chunks er ~30% større) |
| Azure Functions (consumption) | Per invocation | ~2 NOK |
| Økt vektorlagring | Per GB | ~5 NOK/mnd (berikede chunks = større indeks) |
| Totalt ekstra vs. standard RAG | — | ~72 NOK per 1 000 dokumenter |
ROI-vurdering
Hvis contextual retrieval reduserer irrelevante LLM-kall med 30%:
- Savings per 1 000 queries: 300 × 10 NOK = 3 000 NOK
- Incremental cost per 1 000 docs: ~72 NOK
- Break-even: >24 queries per 1 000 dokumenter (svært lav terskel)
For arkitekten (Cosmo)
Spørsmål å stille kunden
- "Hvor ofte er retrieval-kvaliteten utilstrekkelig i dag?" — Contextual retrieval lønner seg mest ved dårlig baseline
- "Hva er typisk dokumentlengde?" — Lange dokumenter med mange seksjoner gir størst effekt
- "Er det mye tvetydig innhold (pronomen, forkortelser)?" — Indikerer høy verdi av kontekst
- "Hva er akseptabel indekseringskostnad?" — GPT-4o kall per chunk er ikke gratis
- "Bruker dere hybrid search (BM25 + vektor)?" — Contextual retrieval gir størst effekt med hybrid search
Fallgruver
- Hopper over baseline-måling: Uten metrics på nåværende retrieval-kvalitet kan du ikke bevise forbedring
- Kontekst som forvrenger mening: LLM-generert kontekst kan introdusere feil — valider med stikkprøver
- Over-investering i kontekst for enkle use cases: Noen dokumentsamlinger er allerede godt chunket
Anbefalinger per modenhetsnivå
| Modenhet | Anbefaling |
|---|---|
| Prototyp | Standard chunking + hybrid search. Mål baseline retrieval metrics. |
| Pilot | Legg til document summary-basert kontekst (mønster 2). Test med 500 docs. |
| Produksjon | Per-chunk contextual retrieval (mønster 1) + BM25 + semantic ranker. |
| Enterprise | Full mønster 3 med reranking. A/B-testing. Automated quality evaluation. |
Kilder og verifisering
| Kilde | Konfidens | URL |
|---|---|---|
| Contextual Retrieval (Anthropic) | Verified | anthropic.com |
| Context-Aware RAG System (MS Tech Community) | Verified | techcommunity.microsoft.com |
| Building Contextual Retrieval System (MS Tech Community) | Verified | techcommunity.microsoft.com |
| Custom skill interface (Azure AI Search) | Verified | learn.microsoft.com |
| Custom skill example (Python) | Verified | learn.microsoft.com |
| Retrieval failure benchmarks | Baseline | Anthropic research, validert av Microsoft |
Custom Skill Interface (oppdatert 2026-04)
Custom skills integreres i Azure AI Search enrichment pipeline via #Microsoft.Skills.Custom.WebApiSkill.
Interface-krav:
- HTTPS endpoint (Azure Functions, containers, eller annen Azure-hosted tjeneste)
- Aksepterer JSON batch:
{"values": [{"recordId": "...", "data": {...}}, ...]} - Returnerer JSON batch:
{"values": [{"recordId": "...", "data": {...}, "errors": [], "warnings": []}]} - Timeout: default 30s, maks 230s (
PT230S) - Autentisering: API-key i URI/header, eller managed identity med
authResourceId
Kontekstuell berikelse via custom skill: Custom skills brukes for contextual retrieval der hver chunk berikes med kontekst fra omliggende tekst (f.eks. "Dette er fra kapittel 3 om sikkerhet..."). Custom skill kaller LLM med original dokument + chunk, og returnerer kontekstualisert chunk for bedre embedding-kvalitet.