23 KiB
Domain-Specific Prompt Optimization
Last updated: 2026-06-24 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:
{
"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:
- Gjøre påstanden (første feil hvis feil)
- Finne sitatet (andre feil hvis feil)
- 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:
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:
{
"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
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:
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
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 å:
- Definere en "persona" med domeneekspertise
- Liste opp atferdsprinsipper som er kritiske for domenet
- 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:
# 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 |
{
"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 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:
- Custom topics — Definer topic triggers basert på domene-keywords
- Generative answers — Koble til Azure OpenAI On Your Data med domain-specific index
- Conversation boosting — Bruk SharePoint/Dataverse som knowledge source
- 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)
Microsoft Foundry
Domain-specific deployment pattern:
# 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 — Microsoft 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:
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:
{
"content_filter_config": {
"pii_detection": {
"enabled": true,
"categories": ["phone_number", "email", "ssn", "address"],
"action": "redact"
}
}
}
Logging for etterrettelighet:
# 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:
- Bruk GPT-3.5-turbo for enklere queries (10x billigere)
- Cache intent prompt hvis samme bruker stiller flere spørsmål
- Bruk semantic search for å redusere antall irrelevante chunks
- 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:
- ✅ Klient opererer i regulert domene (helse, finans, juss, offentlig)
- ✅ Feil kan ha store konsekvenser (økonomi, helse, personvern)
- ✅ Klient har eksisterende dokumentasjon (RAG mulig)
- ✅ Terminologi er spesialisert og konsistent
NEI hvis:
- ❌ Generisk FAQ uten compliance-krav
- ❌ Klient har ikke dokumentasjon (fine-tuning eller GPT-4 generell kunnskap)
- ❌ 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 | Microsoft 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
- Hva er konsekvensen av feil? (Lav/Medium/Høy) → Bestemmer strictness, inScope
- Har dere eksisterende dokumentasjon? → RAG vs. fine-tuning
- Hva er compliance-kravene? → System message disclaimers, content filters
- Hva er forventet volum? → Cost estimation (GPT-4 vs. GPT-3.5)
- Kreves det multi-språk støtte? → Separat indeks per språk
- Må svar være auditable? → Logging, citation, metadata tracking
Kilder og verifisering
Microsoft Learn dokumentasjon (fetched via MCP 2026-02-04)
-
Prompt engineering techniques (Azure OpenAI) https://learn.microsoft.com/en-us/azure/foundry/openai/concepts/prompt-engineering Source for: Best practices, few-shot learning, chain-of-thought, output structure
-
Azure OpenAI On Your Data https://learn.microsoft.com/en-us/azure/foundry-classic/openai/concepts/use-your-data Source for: RAG configuration, field mapping, strictness, multi-lingual support, token estimation
-
Transparency note for Azure OpenAI https://learn.microsoft.com/en-us/azure/foundry/responsible-ai/openai/transparency-note Source for: Model capabilities, limitations, responsible AI considerations
-
Azure OpenAI FAQ https://learn.microsoft.com/en-us/azure/foundry-classic/openai/faq Source for: Language handling, model behavior, grounding strategies
-
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