# Grounding and Knowledge Injection Techniques **Last updated:** 2026-02 **Status:** GA **Category:** Prompt Engineering & LLM Optimization --- ## Introduksjon Grounding og knowledge injection er fundamentale teknikker for å sikre at store språkmodeller (LLMs) genererer nøyaktige, faktabaserte og troverdige svar. Uten grounding vil en LLM kun stole på sin treningskunnskap, som har en cutoff-dato og ikke inkluderer proprietær eller domene-spesifikk informasjon. Dette fører ofte til "hallucinations" – påstander som høres troverdige ut, men som er feilaktige eller ufullstendige. Grounding innebærer å gi modellen tilgang til ekstern, pålitelig informasjon som den kan trekke sine svar fra. Denne informasjonen kalles "grounding data" eller "grounding sources". Når grounding kombineres med Retrieval-Augmented Generation (RAG), oppnår du et system der modellen henter relevant kontekst fra dokumenter, databaser eller andre kilder før den genererer et svar. Resultatet er svar som er forankret i verifiserbar kunnskap, med mulighet for kildehenvisninger og sporbarhet. Knowledge injection går hånd i hånd med grounding – det handler om hvordan du strukturerer og presenterer denne kunnskapen i promptet. Jo nærmere grounding-dataen er den ønskede svarformen, desto mindre arbeid må modellen gjøre, og desto lavere er risikoen for feil. Microsoft tilbyr flere verktøy og tjenester for grounding: Azure OpenAI "On Your Data", Copilot Studio knowledge sources, Azure AI Search, og Groundedness Detection i Azure AI Content Safety. --- ## Kjernekomponenter ### RAG-arkitektur (Retrieval-Augmented Generation) RAG er grunnstenen i moderne grounding-systemer. En typisk RAG-workflow består av: | Steg | Komponent | Beskrivelse | |------|-----------|-------------| | **1. Indeksering** | Data Pipeline | Dokumenter chunkes, berikes med metadata, og vektoriseres via embedding-modeller (f.eks. text-embedding-ada-002) | | **2. Query formulation** | Orchestrator | Brukerens spørsmål transformeres til søkequeries (både keyword og semantisk søk) | | **3. Retrieval** | Vector Store / Search Engine | Azure AI Search, Azure Cosmos DB, eller annen vector database returnerer top-N relevante chunks | | **4. Context injection** | Prompt Construction | Retrieved chunks injiseres i system message eller user prompt som grounding context | | **5. Generation** | LLM (GPT-4, GPT-5) | Modellen genererer svar basert på både sin kunnskap og grounding-dataen | | **6. Verification** | Groundedness Detection | Azure AI Content Safety validerer at svaret er konsistent med kildene | ### Grounding Sources i Microsoft-stakken | Kilde | Beskrivelse | Plattform | Autentisering | |-------|-------------|-----------|---------------| | **Azure AI Search** | Hybrid search (keyword + vector), semantic ranking | Azure OpenAI "On Your Data" | Managed Identity, API Key | | **SharePoint Online** | Moderne SharePoint-sider, dokument-libraries | Copilot Studio, Microsoft 365 Copilot | Microsoft Graph, Entra ID | | **Microsoft Graph** | E-post, kalender, OneDrive, Teams-meldinger | Copilot Studio (Tenant Graph Grounding) | Delegated permissions | | **Copilot Connectors** | Tredjeparts-systemer (ServiceNow, Salesforce, osv.) | Copilot Studio | OAuth 2.0 via connector | | **Custom Data Sources** | Egne APIs, SQL-databaser, Cosmos DB | Custom orchestrators (Semantic Kernel, LangChain) | Custom authentication | | **Web Search (Bing)** | Bing Search API for sanntidsinformasjon | Azure AI Agents, Copilot Studio | API Key | ### Grounding Techniques #### 1. **Inline Grounding** (Prompt-level) Grounding-data injiseres direkte i promptet: ```markdown System: You are an AI assistant. Answer ONLY using the provided context. Context: --- [DOCUMENT 1]: Azure AI Foundry is a unified platform for building, testing, and deploying generative AI applications. Released: Nov 2024. [DOCUMENT 2]: Azure OpenAI Service offers GPT-4, GPT-4 Turbo, and o-series models... --- User: What is Azure AI Foundry? ``` **Fordeler:** Enkel å implementere, full kontroll over context. **Ulemper:** Token-grense begrenser mengde data, krever manuell orkestrering. #### 2. **Azure OpenAI "On Your Data"** Azure OpenAI kan hente grounding data direkte fra Azure AI Search eller Azure Blob Storage: ```python completion = client.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": "What are health benefits?"}], extra_body={ "data_sources": [{ "type": "azure_search", "parameters": { "endpoint": "https://my-search.search.windows.net", "index_name": "health-plans-index", "authentication": {"type": "api_key", "key": "***"} } }] } ) ``` **Fordeler:** Zero-code RAG, automatisk chunking og retrieval. **Ulemper:** Mindre kontroll over retrieval-logikk, støtter kun Azure-tjenester. #### 3. **Copilot Studio Knowledge Sources** Copilot Studio støtter flere knowledge sources: - **SharePoint sites** (automatisk indeksering av moderne sider og dokumenter) - **Public websites** (URL-based crawling) - **Custom files** (opplasting av PDF, Word, PowerPoint – maks 500 filer, 512 MB per fil) - **Copilot Connectors** (ServiceNow, Salesforce, Confluence, osv.) - **Web Search** (Bing Search API for sanntidsdata) **Tenant Graph Grounding:** Med Microsoft 365 Copilot-lisens får du tilgang til forbedret retrieval fra SharePoint via Microsoft Graph, inkludert metadata-filtrering og semantisk søk. #### 4. **Custom Orchestrator med Semantic Kernel** For full kontroll, implementer egen RAG-pipeline: ```python from azure.search.documents import SearchClient from openai import AzureOpenAI # Steg 1: Retrieve search_results = search_client.search( search_text=query, top=5, select="content,metadata" ) # Steg 2: Format context context = "\n".join([doc["content"] for doc in search_results]) # Steg 3: Inject and generate response = openai_client.chat.completions.create( model="gpt-4", messages=[ {"role": "system", "content": f"Answer using this context:\n{context}"}, {"role": "user", "content": query} ] ) ``` --- ## Arkitekturmønstre ### Mønster 1: Single-Tenant RAG med Orchestrator **Beskrivelse:** Én orchestrator henter grounding data fra én eller flere datastores per tenant. LLM-kall inneholder kun data som brukeren har tilgang til. **Arkitektur:** ``` User → App → Identity Provider → Orchestrator → [Vector DB, SQL, Blob Storage] → LLM ``` **Fordeler:** - Full kontroll over retrieval og sikkerhet - Enkel å auditere og logge datahenting - Støtter custom filtering og security trimming **Ulemper:** - Krever egen infrastruktur for orchestrator - Mer kompleks å vedlikeholde enn "On Your Data" **Bruk når:** Du har sensitive data, trenger audit-logging, eller har komplekse autorisasjonsregler. --- ### Mønster 2: Multitenant RAG med API-abstraksjon **Beskrivelse:** En API-layer innkapsler dataaksess-logikk og sikrer at hver tenant kun får tilgang til sine egne data. Orchestrator kaller API-laget i stedet for å snakke direkte med datastores. **Arkitektur:** ``` User → App → Identity Provider → Orchestrator → API Layer → [Shared DB, Tenant-specific DB] → LLM ``` **Tenant Isolation Strategies:** | Strategi | Beskrivelse | Fordeler | Ulemper | |----------|-------------|----------|---------| | **Store-per-tenant** | Hver tenant har egen database/search index | Sterk isolasjon, enkel kostnadstildeling | Høy overhead, skalerer ikke til tusenvis av tenants | | **Multitenant store** | Felles database, tenant-ID som partition key | Kostnadseffektivt, skalerer godt | Krever security trimming, risiko for "noisy neighbor" | | **Shared store** | Felles data for alle tenants (f.eks. offentlig dokumentasjon) | Kostnadseffektivt | Ikke egnet for proprietær data | **Fordeler:** - Enkel å validere og teste sikkerhet (all logikk i API-laget) - Støtter row-level security og custom filtering - Audit-logging på ett sted **Ulemper:** - Ekstra lag øker latency - Krever vedlikehold av API-kode **Bruk når:** Du har multitenant SaaS-løsning med strengt definerte autorisasjonsregler. --- ### Mønster 3: Hybrid Grounding (Web + Private Data) **Beskrivelse:** Kombiner private datastores med web search for å dekke både proprietær kunnskap og sanntidsdata. **Arkitektur:** ``` User → Orchestrator → [Private Data (RAG)] + [Bing Search API] → LLM ``` **Eksempel-use case:** - **Private data:** Interne policydokumenter, produktmanualer - **Web search:** Siste nyheter, konkurranseinformasjon, oppdaterte priser **Fordeler:** - Best of both worlds: proprietær + sanntidsdata - Reduserer hallucinations på time-sensitive spørsmål **Ulemper:** - Bing-kall kan øke kostnader - Cross-geo dataflow (Bing-data forlater enterprise boundary) - Må håndtere to ulike kildekategorier i responsen **Bruk når:** Applikasjonen trenger både intern kunnskap og sanntidsdata (f.eks. chatbot for kundeservice). --- ## Beslutningsveiledning ### Når skal du bruke grounding? | Scenario | Anbefaling | Verktøy | |----------|------------|---------| | **Faktabaserte spørsmål** (produktdetaljer, policydokumenter) | ✅ Påkrevd | Azure AI Search + RAG | | **Sanntidsdata** (valutakurser, nyheter) | ✅ Påkrevd | Web Search (Bing) | | **Kreativ tekst** (markedsføringstekst, historier) | ⚠️ Valgfritt | Baseline LLM (uten grounding) | | **Sensitive data** (medisinske journaler, juridiske dokumenter) | ✅ Påkrevd + Groundedness Detection | Azure AI Search + Content Safety | | **Offentlig kunnskap** (Wikipedia-lignende) | ⚠️ LLM kan håndtere uten grounding | Baseline LLM eller Web Search | ### Grounding Technique Decision Tree ``` START: Trenger du grounding? │ ├─ Ja → Er dataen sensitiv eller subject to compliance? │ ├─ Ja → Bruk Azure AI Search + Private endpoints + Groundedness Detection │ └─ Nei → Er dataen intern eller proprietær? │ ├─ Ja → Azure OpenAI "On Your Data" eller Custom RAG │ └─ Nei → Web Search (Bing) eller Public datasets │ └─ Nei → Baseline LLM (GPT-4, GPT-5) ``` ### Vanlige feil og hvordan unngå dem | Feil | Symptom | Løsning | |------|---------|---------| | **For mye context** | Token limit exceeded, høye kostnader | Chunk data bedre, bruk top-K filtering (f.eks. top-5 chunks) | | **Irrelevant context** | Modellen gir svar basert på feil kilder | Forbedre retrieval (hybrid search, semantic ranking) | | **Manglende citations** | Kan ikke verifisere kilder | Instruer modellen: "Include inline citations as [1], [2]" | | **Ungrounded responses** | Modellen "hallusinerer" fakta | Bruk Groundedness Detection, instruer "Answer ONLY from provided context" | | **Security leakage** | Modellen lekker data fra andre tenants | Implementer API-layer med security trimming, test grundig | ### Røde flagg (når du IKKE skal bruke grounding) - ❌ **Kreativ skriving der fakta ikke er kritisk** (f.eks. sci-fi-historier) - ❌ **Brainstorming-sesjoner** der modellen skal generere nye idéer - ❌ **Når grounding-data er utdatert** (da blir svaret verre enn baseline LLM) - ❌ **Når retrieval-kvaliteten er dårlig** (irrelevante chunks gir dårligere svar) --- ## Integrasjon med Microsoft-stakken ### Azure OpenAI "On Your Data" **Setup-steg:** 1. Opprett Azure AI Search-instans 2. Indekser dokumenter (manuelt eller via Azure Data Factory) 3. Konfigurer Azure OpenAI med data source: ```json { "dataSources": [{ "type": "AzureCognitiveSearch", "parameters": { "endpoint": "https://my-search.search.windows.net", "indexName": "my-index", "key": "***", "semanticConfiguration": "default", "queryType": "semantic", "inScope": true, "strictness": 3 } }] } ``` **Parametre å tune:** - `strictness` (1-5): Hvor strengt modellen skal holde seg til kildene (5 = strengest) - `top_n_documents`: Antall chunks å inkludere (default: 5) - `inScope`: Hvis `true`, svarer modellen kun basert på sources (anbefalt for kritiske use cases) ### Copilot Studio Knowledge Configuration **SharePoint som knowledge source:** 1. Gå til agent → **Knowledge** → **Add SharePoint** 2. Velg sites/libraries (modern SharePoint pages only) 3. Enable **Tenant Graph Grounding** (krever M365 Copilot-lisens) 4. Konfigurer metadata filters (f.eks. "only files modified last 30 days") **Web Search (Bing):** 1. **Advanced** → **Generative answers** → **Web Search** 2. Velg mellom: - **Open web search** (hele Bing-index) - **Custom search** (avgrens til spesifikke domener) 3. Konfigurer user location (for regionsspesifikke resultater) ### Azure AI Content Safety: Groundedness Detection **Validering av grounded responses:** ```python conn.request("POST", "/contentsafety/text:detectGroundedness?api-version=2024-09-15-preview", payload={ "domain": "Generic", "task": "QnA", "qna": {"query": "What is the interest rate?"}, "text": "The interest rate is 5%.", "groundingSources": ["As of July 2024, the interest rate is 4.5%."], "reasoning": True } ) ``` **Output:** Groundedness score (boolean), reasoning (why ungrounded), correction suggestions. **Bruk i produksjon:** - Kjør post-generation for kritiske use cases (medisin, jus, finans) - Log ungrounded responses for videre analyse - Bruk correction feature for automatisk retting --- ## Offentlig sektor (Norge) ### GDPR og datasuverenitet **Grounding data klassifisert som personopplysninger:** - ✅ **Azure AI Search i Norge-region** (Norway East, Norway West) – datalagring i Norge - ✅ **Azure OpenAI** – prosessering i EU/Norge (avhengig av deployment) - ⚠️ **Bing Search API** – data sendes til Bing (USA), ikke dekket av DPA (Data Protection Addendum) - ❌ **Tredjepartsconnectors** – vurder DPIA (Data Protection Impact Assessment) per connector **Schrems II compliance:** - Bruk Azure-tjenester i EU/Norge-regioner - Unngå Bing Search for personopplysninger - Dokumenter dataflyt i DPIA ### AI Act (EU AI-forordningen) **Grounding som risikoreduserende tiltak:** - **Høyrisiko-systemer** (f.eks. HR-beslutninger, offentlig forvaltning) → Påkrevd grounding + audit logs - **Begrenset risiko** (chatbots) → Anbefalt grounding for transparens - **Lav risiko** (kreativ AI) → Valgfritt **Dokumentasjonskrav:** - Logg hvilke grounding sources som ble brukt per respons - Implementer citation tracking (inline citations i svar) - Oppbevar audit logs i minimum 6 måneder (anbefalt: 2 år) ### Forvaltningsloven og begrunnelsesplikt **§ 24-25 (begrunnelse av enkeltvedtak):** - Automatiserte vedtak må kunne spores tilbake til grounding sources - Inline citations sikrer transparens: "Ifølge [1], er kravet..." - Lag system for å eksportere full reasoning chain (query → retrieval → LLM response) **Eksempel:** ``` User: Er jeg kvalifisert for stønad X? Response: Ja, du oppfyller kriteriene ifølge [1] fordi du har bodd i Norge i over 3 år [2]. Sources: [1] Stønadsdokument v2.3 (2025-01-15), side 4 [2] Folkeregisteret: Registrert bosatt siden 2021-06-01 ``` --- ## Kostnad og lisensiering ### Azure OpenAI "On Your Data" kostnadselementer | Komponent | Prisfaktor | Estimat (NOK/måned) | |-----------|-----------|---------------------| | **Azure OpenAI tokens** | Input + output tokens (GPT-4: ~0.35 NOK/1K tokens) | Varierer med volum | | **Azure AI Search** | Storage (per GB) + queries (per 1000) | 500-5000 NOK (avhengig av tier) | | **Embedding modell** | text-embedding-ada-002 (~0.001 NOK/1K tokens) | 100-500 NOK | | **Bing Search API** | Per query (~0.50 NOK/query) | 500-2000 NOK (100-400 queries/dag) | | **Egress traffic** | Data ut av Azure-region | Typisk neglisjerbart | **Total estimert kostnad (medium bruk):** 2000-8000 NOK/måned ### Optimaliseringstips | Tiltak | Besparelse | Trade-off | |--------|-----------|-----------| | **Reduser chunk size** | -20-30% token cost | Kan miste kontekst | | **Bruk GPT-4o mini i stedet for GPT-4** | -90% per token | Lavere kvalitet på komplekse oppgaver | | **Cache embeddings** | -50% embedding cost | Krever egen cache-løsning | | **Batch queries** | -10-15% search cost | Høyere latency | | **Bruk "strictness" parameter** | Reduserer unødvendige LLM-kall | Kan øke "jeg vet ikke"-svar | ### Copilot Studio lisensiering **Grounding inkludert i lisens:** - **Microsoft 365 Copilot-lisens:** SharePoint + Microsoft Graph grounding er zero-rated (ingen Copilot Credit usage) - **Copilot Studio standalone:** Grounding teller mot Copilot Credits (kompleksitet-basert) **Grounding som teller mot credits:** - Custom connectors (Power Platform connectors) - External APIs - Complex multi-step retrieval **Anbefaling:** For store organisasjoner, kombiner M365 Copilot-lisens (for SharePoint/Graph) med Copilot Studio for custom logic. --- ## For arkitekten (Cosmo) ### Spørsmål å stille kunden 1. **Datakilde og sensitivitet:** - Hvor ligger dataen som skal brukes til grounding? (SharePoint, SQL, Blob Storage, on-prem?) - Inneholder dataen personopplysninger eller sensitive forretningsdata? - Kreves det audit-logging av datahenting? 2. **Multitenancy og autorisasjon:** - Er dette en multitenant-løsning? - Hvilke autorisasjonsregler gjelder? (rolle-basert, dokument-basert, tenant-basert?) - Skal brukere kun se data de har tilgang til i kildesystemet? 3. **Datakvalitet og aktualitet:** - Hvor ofte oppdateres dataen? (sanntid, daglig, ukentlig?) - Hva er akseptabel "staleness" på grounding data? - Finnes det en "source of truth" for dataen? 4. **Teknisk modenhet:** - Har organisasjonen eksisterende RAG-erfaring? - Kan de vedlikeholde en custom orchestrator, eller trenger de managed solution? - Hvilket team skal eie embeddings-generering og indeksering? 5. **Compliance og risiko:** - Er dette et høyrisiko-system under AI Act? - Kreves det DPIA? - Må svaret kunne spores tilbake til eksakt kilde (inline citations)? 6. **Volum og kostnad:** - Hvor mange queries per dag forventes? - Hva er akseptabel responstid? (< 2s, < 5s, < 10s?) - Hva er budsjettet for grounding-infrastruktur? 7. **Fallback-strategi:** - Hva skal skje hvis retrieval feiler? (default svar, feilmelding, fallback til baseline LLM?) - Skal modellen kunne si "jeg vet ikke" hvis dataen mangler? 8. **Citation og transparens:** - Skal brukerne se hvilke kilder som ble brukt? - Kreves det inline citations i svaret? - Skal metadata (f.eks. publish-dato) vises? ### Fallgruver å unngå | Fallgruve | Konsekvens | Mitigering | |-----------|-----------|-----------| | **Dårlig chunking-strategi** | Irrelevante chunks, dårlig retrieval | Bruk semantic chunking (512-1024 tokens), overlapp 10-20% | | **Manglende metadata** | Kan ikke filtrere på dato, forfatter, sensitivitet | Berik chunks med metadata under indeksering | | **Ingen citation tracking** | Kan ikke verifisere kilder | Krev inline citations i system prompt | | **Overpopulert context** | Token limit overskrides, høye kostnader | Bruk top-K filtering, prioriter nyeste/mest relevante | | **Manglende security trimming** | Data leakage mellom tenants | Implementer API-layer, test grundig | | **Statiske embeddings** | Retrieval basert på utdatert semantikk | Re-index regelmessig (f.eks. månedlig) | | **Ingen groundedness validation** | Hallucinations går uoppdaget | Bruk Azure AI Content Safety Groundedness Detection | ### Anbefalinger per modenhetsnivå #### Nivå 1: Pilot/Proof-of-Concept - **Verktøy:** Azure OpenAI "On Your Data" + Azure AI Search - **Grounding:** Inline grounding via system prompt - **Datakilde:** Statiske dokumenter i Blob Storage (< 100 dokumenter) - **Fokus:** Proof of concept, iterere på prompt design - **Kostnad:** < 2000 NOK/måned #### Nivå 2: Produksjon (begrenset skala) - **Verktøy:** Copilot Studio med SharePoint knowledge sources - **Grounding:** "On Your Data" eller Copilot Studio built-in RAG - **Datakilde:** SharePoint (< 5000 dokumenter), evt. custom files - **Fokus:** Brukeropplevelse, citation tracking, groundedness detection - **Kostnad:** 5000-15000 NOK/måned (inkl. Copilot Studio-lisens) #### Nivå 3: Enterprise (full skala) - **Verktøy:** Custom orchestrator (Semantic Kernel/LangChain) + Azure AI Search - **Grounding:** Hybrid (private data + web search) - **Datakilde:** Multitenant SQL/Cosmos DB, API-layer for security trimming - **Fokus:** Skalerbarhet, multitenant security, audit logging, compliance - **Kostnad:** 20000-100000+ NOK/måned (avhengig av volum) #### Nivå 4: Spesialisert (høyrisiko, regulert) - **Verktøy:** Custom RAG + Groundedness Detection + audit pipeline - **Grounding:** Store-per-tenant, inline citations, reasoning tracking - **Datakilde:** On-prem integration (Azure Arc), private endpoints - **Fokus:** GDPR, AI Act compliance, full auditability, eksplonerbar reasoning - **Kostnad:** 100000+ NOK/måned (inkl. compliance overhead) --- ## Kilder og verifisering **MCP-kilder (Verified):** 1. Microsoft Learn: [Prompt Engineering Techniques](https://learn.microsoft.com/en-us/azure/ai-foundry/openai/concepts/prompt-engineering) – Groundedness context, citation best practices 2. Microsoft Learn: [Groundedness Detection Filter](https://learn.microsoft.com/en-us/azure/ai-foundry/openai/concepts/content-filter-groundedness) – RAG definition, ungroundedness detection 3. Microsoft Learn: [Secure Multitenant RAG](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/secure-multitenant-rag) – Tenant isolation, API-layer, security trimming 4. Microsoft Learn: [Copilot Studio Knowledge Sources](https://learn.microsoft.com/en-us/microsoft-copilot-studio/knowledge-copilot-connectors) – SharePoint, connectors, tenant graph grounding 5. Microsoft Learn: [Web Search in Copilot Studio](https://learn.microsoft.com/en-us/microsoft-copilot-studio/data-privacy-security-web-search) – Bing integration, privacy considerations 6. Microsoft Learn: [Azure AI Agents (Bing Grounding)](https://learn.microsoft.com/en-us/azure/ai-foundry/agents/how-to/tools/web-overview) – Web grounding workflow **Konfidensnivå per seksjon:** | Seksjon | Konfidensnivå | Kilde | |---------|---------------|-------| | Introduksjon | Verified | MCP: Prompt Engineering, Groundedness Detection | | RAG-arkitektur | Verified | MCP: Secure Multitenant RAG | | Grounding Sources | Verified | MCP: Copilot Studio, Azure AI Search | | Arkitekturmønstre | Verified | MCP: Secure Multitenant RAG | | Azure OpenAI "On Your Data" | Verified | MCP: Prompt Engineering (code samples) | | Copilot Studio | Verified | MCP: Knowledge Sources, Web Search | | Groundedness Detection | Verified | MCP: Content Filter Groundedness | | GDPR/AI Act | Baseline | Modellkunnskap (januar 2025) + etablert praksis | | Kostnad | Baseline | Modellkunnskap + Azure pricing (januar 2025) | | Spørsmål til kunden | Baseline | Arkitekturpraksis | **Disclaimer:** Kostnadsestimater er basert på januar 2025-priser og kan endres. Verifiser alltid med [Azure Pricing Calculator](https://azure.microsoft.com/en-us/pricing/calculator/) for nøyaktige tall.