# Domain-Specific Prompt Optimization **Last updated:** 2026-02 **Status:** GA **Category:** Prompt Engineering & LLM Optimization --- ## Introduksjon Domain-specific prompt optimization handler om å tilpasse prompts for spesialiserte fagområder som medisin, juss, finans, teknisk support eller offentlig sektor. Generelle promptingteknikker fungerer ofte dårlig når domenet krever presisjon, terminologi, compliance-krav eller kontekstforståelse som LLM-en ikke har i sin generelle treningsdata. Ved å optimalisere prompts for et spesifikt domene kan man: - **Øke presisjonen** — Få svar som respekterer fagterminologi og kontekst - **Redusere hallusinasjoner** — Hindre modellen i å fabricere "fakta" fra generell kunnskap - **Sikre compliance** — Følge regulatoriske krav (GDPR, helsepersonelloven, arkivloven) - **Forbedre brukeropplevelse** — Gi svar som matcher brukerens forventninger til faglig nivå **Viktighet for offentlig sektor:** Norske offentlige virksomheter opererer med strenge krav til presisjon, etterrettelighet og personvern. Domain-specific prompting er ikke valgfritt — det er en forutsetning for ansvarlig bruk av AI. --- ## Kjernekomponenter ### 1. Domain Context Declaration Definer domenet eksplisitt i system message for å "prime" modellen: | Domene | Eksempel system message | |--------|-------------------------| | **Medisin** | *"You are an AI assistant designed to help users extract information from retrieved medical documents. Please scrutinize the documents carefully before formulating a response. Always include medical disclaimers and never provide diagnostic advice."* | | **Juss** | *"You are a legal document assistant. Answer using legal terminology accurately. Always cite sources. If legal interpretation is required, state 'consult a qualified attorney'."* | | **Offentlig sektor (Norge)** | *"Du er en AI-assistent for offentlig sektor i Norge. Følg arkivloven, offentlighetsloven og GDPR. Svar på norsk med presise referanser til regelverk."* | | **Teknisk support** | *"You are an expert incident support assistant that helps users solve technical issues. Base answers on similar incidents in the retrieved documents. Provide step-by-step troubleshooting."* | *(Confidence: HIGH — basert på Microsoft Learn dokumentasjon om system messages)* ### 2. Output Structure Specification Struktur i output reduserer feil og øker grunnlag for verifisering: ```json { "CLAIM": "Påstand fra modellen", "CITATION": "Kildehenvisning", "CONFIDENCE": "HIGH/MEDIUM/LOW", "DISCLAIMER": "Relevant advarsel eller forbehold" } ``` **Hvorfor dette virker:** Ved å kreve strukturert output må modellen: 1. Gjøre påstanden (første feil hvis feil) 2. Finne sitatet (andre feil hvis feil) 3. Gradere tillit (tredje feil hvis feil) Dette gjør at hallusinasjoner krever *flere feil i sekvens*, noe som reduserer sannsynligheten for dem. *(Confidence: HIGH — prompt engineering best practice fra Azure OpenAI dokumentasjon)* ### 3. Domain-Specific Few-Shot Examples Few-shot learning er særlig effektivt for domener med: - Spesialisert terminologi - Standardiserte svarmønstre - Compliance-krav **Eksempel — Medisinsk assistent:** ```yaml System: "You are a medical information assistant. Always include safety disclaimers." User: "What is the recommended dosage for aspirin?" Assistant: "According to medical guidelines, adult aspirin dosage for pain relief is typically 325-650mg every 4-6 hours, not exceeding 4g/24h. **Disclaimer:** This is general information only. Consult your doctor or pharmacist for personalized medical advice." User: "Can I take aspirin with ibuprofen?" Assistant: "Concurrent use of aspirin and ibuprofen may reduce aspirin's cardioprotective effects and increase gastrointestinal bleeding risk. **Disclaimer:** This is not medical advice. Consult your healthcare provider before combining medications." ``` *(Confidence: MEDIUM — basert på prompt engineering best practices, men krever domenespesifikk validering)* ### 4. Retrieval Augmented Generation (RAG) med domenfiltrering For domener med store dokumentmengder (f.eks. lovverk, helsedokumentasjon, teknisk support): | RAG-konfigurasjon | Anbefaling for domene | |-------------------|----------------------| | **Chunk size** | Juss: 1536 tokens (kontekst viktig), Medisin: 512 tokens (presisjon viktig) | | **Strictness** | Høy (4-5) for compliance-domener, moderat (3) for general knowledge | | **Search type** | Hybrid (vector + keyword) + semantic for flerspråklige domener | | **Field mapping** | Map `content`, `title`, `citation`, `legal_tag` eller `classification` | **Eksempel — Norwegian public sector:** ```json { "data_sources": [{ "type": "AzureCognitiveSearch", "parameters": { "indexName": "offentlig-regelverk-index", "fieldsMapping": { "contentFields": ["paragraph_text", "section_title"], "titleField": "law_name", "urlField": "lovdata_url", "filepathField": "document_id" }, "inScope": true, "strictness": 4, "topNDocuments": 5 } }] } ``` *(Confidence: HIGH — Azure OpenAI On Your Data dokumentasjon)* ### 5. Multi-Lingual Domain Handling For domener som opererer på flere språk (f.eks. norsk lovverk vs. EU-direktiver): **Best practice:** - Separat indeks per språk hvis mulig - Eksplisitt språkinstruksjon i system message - Semantic search for cross-lingual retrieval ```yaml System: "You are an AI assistant designed to help users extract information from retrieved Norwegian legal documents. Please scrutinize the Norwegian documents carefully before formulating a response. The user's query will be in Norwegian, and you must respond in Norwegian with references to Norwegian law." ``` *(Confidence: HIGH — Microsoft Learn anbefaler dette for multi-lingual scenarios)* --- ## Arkitekturmønstre ### Pattern 1: Chain-of-Thought for Domain Reasoning For komplekse domener (medisin, juss, ingeniørfag) hvor resonnering er kritisk: ```yaml System: "You are a legal assistant. For each query, think step-by-step: 1. Identify the legal question 2. Find relevant statutes in retrieved documents 3. Apply legal reasoning 4. State conclusion with citations Format: QUESTION → RELEVANT LAW → REASONING → CONCLUSION" User: "Can an employer terminate without notice?" Assistant: "QUESTION: Employment termination without notice legality RELEVANT LAW: Arbeidsmiljøloven § 15-14 states that termination without notice requires 'særlig grunner' (special grounds) REASONING: Special grounds typically include serious breach of duty or criminal activity by employee CONCLUSION: No, employer cannot terminate without notice unless special grounds exist per AML § 15-14. [Citation: Arbeidsmiljøloven § 15-14]" ``` *(Confidence: MEDIUM-HIGH — Chain-of-thought er dokumentert effektivt, men krever testing per domene)* ### Pattern 2: Role-Based Prompting with Domain Expertise ```yaml System: "You are a senior incident response analyst with 10 years experience in Microsoft Azure infrastructure. You: - Prioritize security over convenience - Always check for related incidents in the knowledge base - Escalate if unsure rather than guess - Document all troubleshooting steps" ``` Dette mønsteret virker ved å: 1. Definere en "persona" med domeneekspertise 2. Liste opp atferdsprinsipper som er kritiske for domenet 3. Gi modellen en "mental model" for hvordan eksperter tenker *(Confidence: MEDIUM — Ikke direkte dokumentert i Microsoft sources, men widely recognized pattern)* ### Pattern 3: Conditional Domain Routing For systemer som håndterer flere domener: ```python # Pseudo-code for domain routing user_query = "What are the symptoms of diabetes?" if classify_domain(user_query) == "medical": system_message = MEDICAL_SYSTEM_PROMPT add_disclaimer = True strictness = 5 elif classify_domain(user_query) == "technical": system_message = TECHNICAL_SYSTEM_PROMPT add_disclaimer = False strictness = 3 response = openai.chat.completions.create( model="gpt-4", messages=[ {"role": "system", "content": system_message}, {"role": "user", "content": user_query} ] ) ``` *(Confidence: MEDIUM — Pattern basert på generell arkitekturpraksis)* ### Pattern 4: Grounding with Domain-Specific Metadata For Azure AI Search indexer med domeneinformasjon: | Metadata-felt | Eksempel verdi | Formål | |---------------|----------------|--------| | `classification` | "Helsepersonelloven", "GDPR-relevant" | Compliance-filtrering | | `confidence_level` | "peer_reviewed", "draft", "official" | Kildevurdering | | `effective_date` | "2024-01-01" | Tidsrelevans (viktig for juss, regelverk) | | `domain_tags` | ["diabetes", "type2", "symptoms"] | Presisjonssøk | ```json { "fieldsMapping": { "contentFields": ["content"], "titleField": "title", "urlField": "url", "vectorFields": ["content_vector"], "metadataFields": ["classification", "effective_date", "confidence_level"] } } ``` *(Confidence: HIGH — Azure AI Search field mapping er GA-funksjonalitet)* --- ## Beslutningsveiledning ### Når velge domain-specific prompting? | Kriterium | Vurdering | |-----------|-----------| | **Høy presisjonskrav** | JA → Domain prompting kritisk | | **Regulatoriske krav** | JA → Må ha (compliance, personvern) | | **Spesialisert terminologi** | JA → Few-shot examples nødvendig | | **Lav toleranse for feil** | JA → Strictness = 5, grounding required | | **Generisk FAQ** | NEI → Standard prompting holder | ### Decision Tree: Hvilken prompting-strategi? ``` START ├─ Har du eksisterende dokumentasjon (RAG)? │ ├─ JA → Bruk Azure OpenAI On Your Data │ │ ├─ Compliance-kritisk? → Strictness 4-5, inScope=true │ │ └─ General knowledge? → Strictness 3, hybrid search │ └─ NEI → Fine-tuning eller GPT-4 med few-shot │ ├─ <50 eksempler? → Few-shot learning │ └─ >500 eksempler? → Vurder fine-tuning │ └─ Krever domenet multi-turn reasoning? ├─ JA → Chain-of-thought + conversation history └─ NEI → Single-turn med strukturert output ``` *(Confidence: MEDIUM — Basert på Azure OpenAI best practices og prompt engineering guidance)* --- ## Integrasjon med Microsoft-stakken ### Azure OpenAI On Your Data **Best practice for domain-specific prompting:** ```python # Python SDK example from openai import AzureOpenAI client = AzureOpenAI( api_key=os.getenv("AZURE_OPENAI_API_KEY"), api_version="2024-02-01", azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT") ) # Domain-specific configuration response = client.chat.completions.create( model="gpt-4", messages=[ { "role": "system", "content": """You are a medical information assistant for healthcare professionals in Norway. Rules: - Answer in Norwegian - Always cite sources from Helsedirektoratet or approved medical literature - Include medical disclaimers - Never provide diagnostic advice""" }, { "role": "user", "content": "Hva er anbefalte screeningintervaller for diabetes type 2?" } ], extra_body={ "data_sources": [{ "type": "azure_search", "parameters": { "endpoint": os.getenv("AZURE_SEARCH_ENDPOINT"), "index_name": "helsedirektoratet-index", "authentication": { "type": "api_key", "key": os.getenv("AZURE_SEARCH_KEY") }, "in_scope": True, # Limit to grounding data only "strictness": 4, # High strictness for medical domain "top_n_documents": 5 } }] } ) print(response.choices[0].message.content) ``` *(Confidence: HIGH — basert på Azure OpenAI SDK dokumentasjon)* ### Copilot Studio med domain grounding For public sector: 1. **Custom topics** — Definer topic triggers basert på domene-keywords 2. **Generative answers** — Koble til Azure OpenAI On Your Data med domain-specific index 3. **Conversation boosting** — Bruk SharePoint/Dataverse som knowledge source 4. **Compliance guardrails** — Bruk content filters + custom system message | Konfigurasjon | Anbefaling for offentlig sektor | |---------------|--------------------------------| | **Data source** | SharePoint med klassifiserte dokumenter | | **System message** | Inkluder referanser til offentlighetsloven § 3 | | **Content moderation** | Høy (block PII, sensitive topics) | | **Citation style** | Inline citations med dokumentklassifisering | *(Confidence: MEDIUM-HIGH — Copilot Studio best practices)* ### Azure AI Foundry **Domain-specific deployment pattern:** ```yaml # AI Foundry project configuration project: name: "medisinsk-assistent-pilot" region: "norwayeast" deployments: - name: "gpt-4-medical" model: "gpt-4" sku: "Standard" capacity: 10 system_message: | You are a medical information assistant... [domain-specific system message] - name: "embedding-medical" model: "text-embedding-ada-002" sku: "Standard" data_connections: - type: "azure_ai_search" name: "medical-knowledge-base" index_name: "helsedirektoratet-retningslinjer" safety: content_filters: - category: "medical_advice" severity: "high" action: "block" ``` *(Confidence: MEDIUM — Azure AI Foundry er relativt nytt, pattern basert på generell guidance)* --- ## Offentlig sektor (Norge) ### Juridiske og etiske rammeverk | Regelverk | Implikasjon for prompting | |-----------|---------------------------| | **Offentlighetsloven § 3** | System message må inkludere: *"If document classification is 'UNNTATT', do not include in response"* | | **Arkivloven § 6** | Alle AI-genererte svar må logges med metadata (timestamp, user, query, sources) | | **GDPR Art. 22** | Hvis AI gjør "automated decision", må bruker informeres — legg til disclaimer | | **Personopplysningsloven § 11** | PII må filtreres ut av prompts — bruk Azure OpenAI content filters | *(Confidence: HIGH — Norsk lovverk er kjent, men krever juridisk validering for spesifikke use cases)* ### Use case: NAV selvbetjeningsbot **Scenario:** NAV ønsker en chatbot som hjelper brukere med spørsmål om dagpenger. **Domain-specific prompt design:** ```yaml System: | Du er NAV Assistent, en AI-assistent som hjelper brukere med spørsmål om NAVs tjenester. REGLER: - Svar alltid på norsk (bokmål) - Referer til offisielle NAV-sider (nav.no) - Hvis spørsmålet gjelder personlig situasjon, svar: "For å vurdere din konkrete situasjon, ta kontakt med NAV på telefon 55 55 33 33 eller book time via nav.no" - Aldri gi juridisk rådgivning — referer til Folketrygdloven med paragraf - Hvis usikker, svar: "Jeg er usikker på dette. Ta kontakt med NAV for sikker informasjon." STRUKTUR: - Start med direkte svar - Gi lenke til relevant NAV-side - Avslutt med "Trenger du mer hjelp? Ring 55 55 33 33" User: "Hvor mye kan jeg tjene ved siden av dagpenger?" Assistant: | Du kan tjene inntil 60% av dagpengegrunnlaget ditt uten at dagpengene reduseres. Overstiger du dette, reduseres dagpengene krone for krone. Les mer: https://www.nav.no/dagpenger#hvor-mye (Ref: Folketrygdloven § 4-18) Trenger du mer hjelp? Ring 55 55 33 33 eller book time via nav.no. ``` **RAG-konfigurasjon:** | Parameter | Verdi | Begrunnelse | |-----------|-------|-------------| | `inScope` | `true` | Kun bruk NAV.no som kilde | | `strictness` | `4` | Høy — feil kan ha store konsekvenser | | `topNDocuments` | `3` | Fokusert svar, ikke overload | | `roleInformation` | System message over | Domain-specific instruksjoner | *(Confidence: HIGH — Basert på Azure OpenAI On Your Data og offentlig sektor best practices)* ### Personvernhensyn **PII-filtrering:** ```json { "content_filter_config": { "pii_detection": { "enabled": true, "categories": ["phone_number", "email", "ssn", "address"], "action": "redact" } } } ``` **Logging for etterrettelighet:** ```python # Pseudo-code import logging logger = logging.getLogger("nav-assistent") def log_conversation(user_id, query, response, sources): logger.info({ "timestamp": datetime.utcnow().isoformat(), "user_id_hash": hash(user_id), # Anonymized "query_length": len(query), "response_length": len(response), "sources_used": [s["title"] for s in sources], "model": "gpt-4", "deployment": "nav-assistent-prod" }) ``` *(Confidence: MEDIUM-HIGH — Best practice, men krever organisasjonsspesifikk vurdering)* --- ## Kostnad og lisensiering ### Token-estimat per domene Basert på testing (Azure OpenAI dokumentasjon): | Konfigurasjon | Generation prompt tokens | Intent prompt tokens | Response tokens | Total avg | |---------------|--------------------------|---------------------|-----------------|-----------| | **Default (chunk 1024, top 5)** | 4297 | 1366 | 111 | ~5774 | | **Medical (chunk 512, top 5, strictness 5)** | ~3800 | ~1200 | ~120 | ~5120 | | **Legal (chunk 1536, top 10, strictness 4)** | ~7200 | ~1500 | ~150 | ~8850 | **Kostnad (gpt-4, ca. priser):** - Medical domain: ~5120 tokens × $0.00003/token (input) = $0.15 per query - Legal domain: ~8850 tokens × $0.00003/token = $0.27 per query **Optimaliseringstips:** 1. Bruk **GPT-3.5-turbo** for enklere queries (10x billigere) 2. Cache **intent prompt** hvis samme bruker stiller flere spørsmål 3. Bruk **semantic search** for å redusere antall irrelevante chunks 4. **Chunk size 512** for presisjon vs. 1024 for kontekst *(Confidence: HIGH — basert på Azure OpenAI pricing og token usage documentation)* ### Lisenskrav | Microsoft-produkt | Relevant for | Lisens | |-------------------|--------------|--------| | **Azure OpenAI** | Alle domener | Azure subscription + Azure OpenAI access (application required) | | **Azure AI Search** | RAG-baserte løsninger | Standard tier ($250/month+) for semantic search | | **Copilot Studio** | Public-facing bots | Per-user ($200/month) eller per-session ($100/1000 sessions) | | **M365 Copilot** | Internal assistants | Microsoft 365 E3/E5 + Copilot ($30/user/month) | *(Confidence: MEDIUM — Priser endres, sjekk offisiell Microsoft pricing)* --- ## For arkitekten (Cosmo) ### Når anbefale domain-specific prompting? **JA hvis:** 1. ✅ Klient opererer i regulert domene (helse, finans, juss, offentlig) 2. ✅ Feil kan ha store konsekvenser (økonomi, helse, personvern) 3. ✅ Klient har eksisterende dokumentasjon (RAG mulig) 4. ✅ Terminologi er spesialisert og konsistent **NEI hvis:** 1. ❌ Generisk FAQ uten compliance-krav 2. ❌ Klient har ikke dokumentasjon (fine-tuning eller GPT-4 generell kunnskap) 3. ❌ Budsjettet er svært begrenset (domain prompting øker token-bruk) ### Typiske feil å unngå | Feil | Konsekvens | Fix | |------|------------|-----| | **For generisk system message** | Modellen gir generiske svar uten domenetilpasning | Legg til eksplisitt rolleinformasjon og compliance-krav | | **Manglende disclaimers** | Juridisk/etisk risiko | Inkluder disclaimers i system message + output structure | | **For stor chunk size** | Modellen drukner i informasjon | Reduser chunk size til 512 for presisjonsdomener | | **inScope=false** | Modellen hallusinerer ved siden av grounding data | Sett `inScope=true` for compliance-domener | | **Manglende citation** | Ikke mulig å verifisere svar | Bruk `"type": "CONTENT"` citation pattern i API | *(Confidence: HIGH — Basert på Azure OpenAI best practices og Cosmo's erfaring)* ### Anbefalte verktøy | Fase | Verktøy | Formål | |------|---------|--------| | **Prompt-testing** | Azure AI Foundry Playground | Iterativ testing av system messages | | **Evaluation** | Prompt Flow + Custom evaluators | Måle domain accuracy (presisjon, recall, F1) | | **Deployment** | Azure OpenAI API + RAG | Produksjon med logging og monitoring | | **Monitoring** | Azure Monitor + Application Insights | Token usage, latency, error rate | ### Spørsmål å stille klienten 1. **Hva er konsekvensen av feil?** (Lav/Medium/Høy) → Bestemmer strictness, inScope 2. **Har dere eksisterende dokumentasjon?** → RAG vs. fine-tuning 3. **Hva er compliance-kravene?** → System message disclaimers, content filters 4. **Hva er forventet volum?** → Cost estimation (GPT-4 vs. GPT-3.5) 5. **Kreves det multi-språk støtte?** → Separat indeks per språk 6. **Må svar være auditable?** → Logging, citation, metadata tracking --- ## Kilder og verifisering ### Microsoft Learn dokumentasjon (fetched via MCP 2026-02-04) 1. **Prompt engineering techniques** (Azure OpenAI) https://learn.microsoft.com/en-us/azure/ai-foundry/openai/concepts/prompt-engineering *Source for: Best practices, few-shot learning, chain-of-thought, output structure* 2. **Azure OpenAI On Your Data** https://learn.microsoft.com/en-us/azure/ai-foundry/openai/concepts/use-your-data *Source for: RAG configuration, field mapping, strictness, multi-lingual support, token estimation* 3. **Transparency note for Azure OpenAI** https://learn.microsoft.com/en-us/azure/ai-foundry/responsible-ai/openai/transparency-note *Source for: Model capabilities, limitations, responsible AI considerations* 4. **Azure OpenAI FAQ** https://learn.microsoft.com/en-us/azure/ai-foundry/openai/faq *Source for: Language handling, model behavior, grounding strategies* 5. **Apply prompt engineering with Azure OpenAI Service - Training** https://learn.microsoft.com/en-us/training/modules/apply-prompt-engineering-azure-openai/ *Source for: Prompt engineering learning objectives, prerequisites* ### Confidence markers brukt i dokumentet - **HIGH** — Direkte dokumentert i Microsoft Learn eller Azure OpenAI docs - **MEDIUM-HIGH** — Logisk utledning basert på dokumentasjon + generell best practice - **MEDIUM** — Best practice fra industrien, ikke eksplisitt dokumentert av Microsoft - **MEDIUM-LOW** — Antatt basert på generell kunnskap, bør verifiseres ### Verifiseringsmetode - **MCP-søk** — 3 søk mot microsoft-learn (2026-02-04) - **Fetch** — 2 fullstendige dokumenter hentet via microsoft_docs_fetch - **Code samples** — Søk mot microsoft_code_sample_search (ingen direkte treff for "domain prompting", men generelle patterns funnet) --- **Cosmo's anbefaling:** *Start med Azure OpenAI On Your Data + RAG for domener med dokumentasjon. Bruk GPT-4 med high strictness (4-5) og inScope=true for compliance-kritiske domener. Test grundig med representative queries før produksjon. For offentlig sektor: alltid inkluder disclaimers, logging og PII-filtering.* --- **Dato generert:** 2026-02-04 **Generert av:** Cosmo Skyberg (AI Architect) via MCP-research **Neste review:** 2026-08 (6 måneder) eller ved major Azure OpenAI API update