feat(ultraplan-local): v1.6.0 — /ultraresearch-local deep research command

Add /ultraresearch-local for structured research combining local codebase
analysis with external knowledge via parallel agent swarms. Produces research
briefs with triangulation, confidence ratings, and source quality assessment.

New command: /ultraresearch-local with modes --quick, --local, --external, --fg.
New agents: research-orchestrator (opus), docs-researcher, community-researcher,
security-researcher, contrarian-researcher, gemini-bridge (all sonnet).
New template: research-brief-template.md.

Integration: --research flag in /ultraplan-local accepts pre-built research
briefs (up to 3), enriches the interview and exploration phases. Planning
orchestrator cross-references brief findings during synthesis.

Design principle: Context Engineering — right information to right agent at
right time. Research briefs are structured artifacts in the pipeline:
ultraresearch → brief → ultraplan --research → plan → ultraexecute.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-04-08 08:58:35 +02:00
commit baa2d0220b
488 changed files with 213221 additions and 0 deletions

View file

@ -0,0 +1,602 @@
# 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