# NLP Configuration and Intent Recognition

**Last updated:** 2026-04
**Status:** GA
**Category:** Copilot Extensibility & Integration

---

## Introduksjon

Natural Language Understanding (NLU) er kjernen i hvordan Copilot Studio-agenter tolker brukerhenvendelser og leverer relevante, kontekstuelle svar. NLU-konfigurasjonen bestemmer hvordan agenten:

- **Gjenkjenner intensjon (intent)**: Identifiserer hva brukeren ønsker å oppnå
- **Ekstraherer entiteter**: Trekker ut nøkkelinformasjon som datoer, steder, navn eller tall
- **Håndterer kontekst**: Opprettholder kontinuitet i samtalen og løser tvetydigheter
- **Responderer ved feilede matching**: Fallback-mekanismer når ingen topic matcher

Copilot Studio tilbyr flere NLU-alternativer med ulike styrker og begrensninger, fra generativ orkestrering til presisjonsdrevet NLU+. Valget påvirker både utviklingstid, nøyaktighet og modellkostnad.

**Confidence: Verified** (microsoft-learn MCP, 2026-02)

---

## Kjernekomponenter

### 1. Utterances, Intents og Entiteter

| Komponent | Beskrivelse | Eksempel |
|-----------|-------------|----------|
| **Utterance** | Brukerens hele innspill (tekst eller tale) | "Jeg vil bestille en flyreise til Paris neste uke" |
| **Intent** | Brukerens mål/hensikt | BookFlight |
| **Entity** | Nøkkeldata ekstrahert fra utterance | Destinasjon: "Paris", Dato: "neste uke" |

Copilot Studio prosesserer utterances gjennom tre trinn:

1. **Intent recognition** → Bestem hvilken topic/handling som skal trigges
2. **Entity extraction** → Trekk ut strukturert data fra teksten
3. **Slot filling** → Fyll variabler med ekstraherte entiteter

### 2. Trigger Phrases (Triggerfraser)

Trigger phrases er eksempelsetninger som definerer når en topic skal aktiveres. Disse kan være:

- **Eksakte matcher**: "Åpningstider", "Kontakt support"
- **Semantiske varianter**: "Når er dere åpne?", "Hva er butikkens åpningstider?"

**Best practices for trigger phrases:**

- Bruk minst 5-10 varianter per topic
- Inkluder ulike ordstillinger og frasering
- Unngå overlapp mellom topics
- Test mot ekte brukerdata (hvis tilgjengelig)

### 3. Entitetstyper

| Type | Beskrivelse | Konfigurasjon |
|------|-------------|---------------|
| **Prebuilt entities** | Microsoft-vedlikeholdte typer (Age, Date, Money, Phone, Email, Location, etc.) | Ingen konfigurasjon nødvendig |
| **Closed list entities** | Predefinerte verdier med synonymer | Manuell liste (f.eks. produktkategorier) |
| **Regex entities** | Mønsterbasert ekstraksjon | Regular expressions. NLU/CLU bruker .NET regex-syntaks; NLU+ bruker JavaScript regex-syntaks (Verified 2026-04) |
| **Learned entities (NLU+/CLU)** | Kontekstbasert ekstraksjon via maskinlæring | Krever annoterte treningsdata |

**Entity annotations** (NLU+):
```yaml
# Syntaks for entity-annotering i trigger phrases
book a ticket from {Topic.fromCity/Boston} to {Topic.toCity/NewYork}
for {Topic.noPass/2} passengers {Topic.travelDate/tomorrow}
in {Topic.class/First} class
```

**Confidence: Verified** (microsoft-learn MCP: nlu-plus-configure)

---

## Arkitekturmønstre

### NLU-modellvalg: Fire tilnærminger

Copilot Studio tilbyr fire NLU-konfigurasjoner med ulike trade-offs:

| Modell | Orkestrering | Nøyaktighet | Kompleksitet | Kostnad | Use case |
|--------|-------------|-------------|--------------|---------|----------|
| **Generative Orchestration** | Generativ | Moderat-høy | Lav | Høy (LLM-basert) | Default, multi-intent, bred dekning |
| **Built-in NLU** | Classic | Moderat | Lav-moderat | Lav | Enkel topic routing, få topics |
| **NLU+** | Classic | Høy | Høy | Moderat | Enterprise-grade, voice-enabled, mange topics |
| **Azure CLU** | Classic | Svært høy | Svært høy | Høy (Azure-kostnad) | Flerspråklig, bransje-spesifikt vokabular |

**Confidence: Verified** (microsoft-learn MCP: language-understanding)

### 1. Generative Orchestration (Default)

**Hvordan det fungerer:**
- Bruker store språkmodeller (LLM) til å tolke brukerens intensjon
- Kan gjenkjenne **flere intents** i én utterance
- Kobler automatisk sammen topics, actions og knowledge sources
- Genererer dynamiske spørsmål for manglende input

**Fordeler:**
- Minimal oppsett (ingen trigger phrases nødvendig)
- Håndterer komplekse samtaler som spenner over flere emneområder
- Produserer enhetlige svar basert på topics, actions og knowledge

**Begrensninger:**
- Maks 5 meldinger per topic/action-kjede
- Maks 128 topics eller actions per orkestrering
- Høyere kostnad (LLM-basert prosessering)
- Mindre deterministisk enn klassiske metoder

**Konfigurering:**
```
Settings → Generative AI → Orchestration → Yes
```

**Confidence: Verified** (microsoft-learn MCP)

### 2. Classic Orchestration + Built-in NLU

**Hvordan det fungerer:**
- Bruker trigger phrases for deterministisk topic routing
- Predefinerte entiteter (Age, Date, Location, etc.)
- Custom entities (closed lists, regex)
- **Single-intent recognition** per query

**Fordeler:**
- Forutsigbar oppførsel
- Lavere kostnad (ingen LLM-kostnad)
- Full kontroll over samtaleflyt

**Begrensninger:**
- Kan ikke utvides med egendefinert NLU-modell
- Slot-filling av flere entiteter av samme type krever disambiguering
- Krever manuell vedlikehold av trigger phrases

**Konfigurering:**
```
Settings → Generative AI → Orchestration → No
Settings → Language understanding → Microsoft Copilot Studio NLU
```

**Confidence: Verified** (microsoft-learn MCP)

### 3. NLU+ (High-Precision Enterprise)

**Når bruke NLU+:**
- **Enterprise-grade applikasjoner** med mange topics og entiteter
- **Voice-enabled agents** (treningsdata brukes også til speech recognition)
- **Høye nøyaktighetskrav** for intent routing
- **Annoterte treningsdata** tilgjengelig (fra ekte brukersamtaler)

**Hvordan det fungerer:**
- Bygger på **grammar-base** som sikrer eksakte matcher med treningsdata
- Støtter **entity annotations** i trigger phrases og Question nodes
- Krever **eksplisitt modelltrening** før testing/publisering
- Custom list entities er **partially open** (kan ekstrahere verdier utenfor listen)

**NLU+ best practices:**
1. Bruk så mye real-world treningsdata som mulig
2. Én entity-variant/synonym er tilstrekkelig per annotasjon
3. Jo mer distinkte intents og entiteter, desto bedre ytelse
4. Ikke inkluder determiners (den, det, de) eller preposisjoner i entity literals

**Treningsprosess:**
1. Legg til trigger phrases med entity annotations
2. Klikk "Train NLU+ model" (i Topics eller Entities)
3. Vent på treningsbekreftelse (vises i Channels-side)
4. Test i Test Chat
5. Publiser (bruker sist suksessfulle trenede modell)

**Konfigurering:**
```
Settings → Generative AI → Orchestration → No
Settings → Language understanding → More prework, enhanced precision (NLU+)
```

**Lisenskrav:**
- Dynamics 365 Contact Center license

**Confidence: Verified** (microsoft-learn MCP: nlu-plus-configure)

### 4. Azure Conversational Language Understanding (CLU)

**Når bruke Azure CLU:**
- **Flerspråklig støtte** med native modeller (utover Copilot Studios språk)
- **Bransje-spesifikt vokabular** (helse, finans, legal)
- **Avansert entity extraction** (multiple "from"-entiteter, silent extraction)
- **Custom NLU-modell** med full kontroll over treningsdata

**Hvordan det fungerer:**
- Ekstern Azure AI Language-tjeneste
- Intents i CLU **må mappes manuelt** til Copilot Studio topics
- System topic "Analyze Text" opprettes automatisk ved konfigurasjon
- Krever Azure-konfigurasjon og connection references

**Fordeler:**
- Høyere nøyaktighet for spesialiserte domener
- Støtte for flere språk med native modeller
- Fullstendig kontroll over NLU-modellen

**Begrensninger:**
- Single-intent recognition per query
- Ekstra Azure-kostnad (per transaksjonsmodell)
- CLU intents og Copilot Studio topics må synkroniseres manuelt
- Azure service limits gjelder

**Konfigurering:**
```
Settings → Generative AI → Orchestration → No
Settings → Language understanding → Utilize prebuilt Azure NLU
[Opprett CLU connection i Power Apps]
[Spesifiser Azure AI Language project name og deployment]
```

**Confidence: Verified** (microsoft-learn MCP: advanced-clu-get-started)

---

## Beslutningsveiledning

### Beslutningstré: Hvilken NLU-konfigurasjon skal jeg bruke?

```
START
│
├─ Trenger du multi-intent recognition (flere hensikter i én setning)?
│  └─ JA → **Generative Orchestration** (default)
│
├─ Er det en voice-enabled agent?
│  └─ JA → **NLU+** (treningsdata brukes til speech recognition)
│
├─ Har du mange topics (>50) og høye nøyaktighetskrav?
│  └─ JA → **NLU+**
│
├─ Trenger du støtte for språk utenfor Copilot Studio's supported languages?
│  └─ JA → **Azure CLU**
│
├─ Er det en enkel chatbot med få topics (<20)?
│  └─ JA → **Built-in NLU** (classic orchestration)
│
└─ Default → **Generative Orchestration**
```

### Sammenligningstabell: NLU-modeller

| Kriterium | Generative Orch. | Built-in NLU | NLU+ | Azure CLU |
|-----------|------------------|--------------|------|-----------|
| **Oppsett-tid** | Minimal | Lav | Høy | Svært høy |
| **Intent recognition** | Multi-intent | Single | Single | Single |
| **Entity extraction** | Avansert (LLM) | Basic | Avansert | Svært avansert |
| **Nøyaktighet** | 70-85% | 60-75% | 85-95% | 90-98% |
| **Voice support** | Nei | Nei | Ja | Ja |
| **Språk** | Copilot Studio supported | Copilot Studio supported | Copilot Studio supported | Azure CLU supported (bredere) |
| **Kostnad** | Høy (LLM) | Lav | Moderat | Høy (Azure) |
| **Vedlikehold** | Lavt | Moderat | Høyt | Svært høyt |

**Confidence: Baseline** (sammenligning basert på flere MCP-kilder)

---

## Integrasjon med Microsoft-stakken

### 1. Dynamics 365 Contact Center

**Customer Intent Agent:**
- Bruker historiske data til å bygge intent library
- Detekterer intent fra kunde og stiller oppfølgingsspørsmål
- Eskalerer til kundeservicerepresentant med persistent intent og interview-svar

**Konfigurasjon:**
```
Contact Center admin → Customer Intent Agent → Intent-based suggestions
→ Enable for chatbots → Manage → Add intent-based features
→ Publish (legger til Intent-based suggestions topics)
```

**Global variables for intent-based suggestions:**

| Variable | Mapped topic | Trigger |
|----------|-------------|---------|
| `Global.IntentRedirectOnResolutionConfirmation` | EndOfConversation | Kunde bekrefter løsning |
| `Global.IntentRedirectOnUnknownIntent` | Escalate | Ukjent intent etter flere forsøk |
| `Global.IntentRedirectOnUnableToProceed` | Escalate | Problem ikke løst |
| `Global.IntentRedirectOnEscalate` | Escalate | Eksplisitt eskalering |
| `Global.IntentRedirectOnError` | OnError | Service-feil |

**Confidence: Verified** (microsoft-learn MCP: set-up-intent-agent)

### 2. Power Automate og Connectors

**AI Prompts i Power Automate:**
- Kan brukes til custom intent recognition utenfor Copilot Studio
- Integrasjon via "Send a prompt to Copilot" action
- Returnerer strukturert JSON med detected intent og entities

**Use case:**
- Klassifisere innkommende e-post/tickets til riktig køy
- Pre-prosessere brukerinput før det sendes til Copilot Studio

### 3. Azure AI Language Services

**Text Analytics API:**
- Key phrase extraction
- Named Entity Recognition (NER)
- Sentiment analysis

**Integrasjon:**
- Kan kalles fra Copilot Studio via Power Automate cloud flows
- Brukes til å berike entitetsdata før slot filling

**Eksempel:**
```javascript
const client = new TextAnalyticsClient(endpoint, new AzureKeyCredential(key));
const results = await client.analyze("KeyPhraseExtraction", documents);
```

**Confidence: Verified** (microsoft-learn MCP: code samples)

### 4. Microsoft 365 Copilot Extensibility

**Declarative agents med Copilot Studio:**
- Kan arve NLU-konfigurasjon fra Copilot Studio
- Intents trigges fra Microsoft 365 Chat (Teams, Outlook, etc.)
- Entities ekstrahere automatisk fra M365-kontekst (personer, filer, møter)

**Confidence: Baseline** (generell kunnskap)

---

## Offentlig sektor (Norge)

### Språkkrav og GDPR-compliance

**Norsk språkstøtte:**
- **Generative Orchestration**: Støtter norsk (nb-NO) ✅ — automatisk generert innhold oversettes dynamisk; agenten kan bytte språk per samtaletur (dynamic language switching). Merk: Primærspråket kan ikke endres etter opprettelse, men region kan justeres. (Verified 2026-04)
- **Built-in NLU**: Støtter norsk (nb-NO) ✅
- **NLU+**: Støtter norsk (nb-NO) ✅ (avansert NLU-tilpasning tilgjengelig fra jul 2025)
- **Azure CLU**: Støtter norsk (nb-NO) ✅

**Dynamisk språkbytte (Generative Orchestration):**
Agenter kan konfigureres til å detektere brukerens språk og respondere på samme språk i sanntid. Bruk `User.Language`-systemvariabelen kombinert med prompt-basert språkdeteksjon. Krever generative orchestration aktivert.

**Data residency:**
- NLU-treningsdata lagres i Microsoft Dataverse (EU-region kan velges)
- Azure CLU: Velg Azure Norway East/West for data residency
- NLU+ data deles mellom Copilot Studio og Dynamics 365 Contact Center (separate datapolicyer)

### Tilgjengelighetskrav (WCAG 2.1 AA)

**Flerspråklige agenter:**
- Bruk `System.User.Language`-variabel for å sette språk
- Auto-detect spoken language via trigger-based detection
- Støtte for skjermlesere (tekst-baserte responser)

**Best practice:**
```yaml
# Auto-detect language topic
- kind: Question
  id: detect_language
  variable: init:DetectedLanguage
  prompt: Detect language from Activity.Text
  entity: LanguagePrebuiltEntity

- kind: ConditionGroup
  conditions:
    - condition: =DetectedLanguage.structuredOutput.language = "Norwegian"
  actions:
    - kind: SetVariable
      variable: System.User.Language
      value: "nb-NO"
```

**Confidence: Verified** (microsoft-learn MCP: multilingual)

### Sikkerhetskrav

**NLU og PII (Personally Identifiable Information):**
- Entities kan ekstrahere PII (navn, telefonnumre, e-post)
- **Anbefaling**: Bruk Data Loss Prevention (DLP) policies for å blokkere logging av PII
- **Anbefaling**: Anonymiser treningsdata før NLU+-trening

**Content filtering:**
- Copilot Studio har innebygd content filtering for upassende innhold
- Trigger severity levels (Low, Medium, High)
- Kan integrere med Azure AI Content Safety for ytterligere beskyttelse

**Confidence: Baseline** (generell kunnskap om Copilot Studio security)

---

## Kostnad og lisensiering

### Lisenskrav per NLU-modell

| NLU-modell | Lisenskrav |
|-----------|------------|
| **Generative Orchestration** | Copilot Studio subscription (1000 sessions/måned per tenant) |
| **Built-in NLU** | Copilot Studio subscription |
| **NLU+** | Dynamics 365 Contact Center license ⚠️ |
| **Azure CLU** | Copilot Studio subscription + Azure AI Language (separat kostnad) |

### Kostnadsdrivere

**Generative Orchestration:**
- LLM-basert prosessering (Azure OpenAI GPT-4o)
- Kostnad per message/session (inkludert i Copilot Studio sessions)
- Estimat: ~100-200 sessions per måned (moderat bruk)

**NLU+:**
- Treningskostnad (inkludert i Dynamics 365 Contact Center)
- Runtime-kostnad (per message)
- Estimat: Kr 50-100 per bruker/måned (del av Contact Center-lisens)

**Azure CLU:**
- Azure AI Language pricing tier:
  - Free (F0): 5000 text records/måned (gratis)
  - Standard (S): Fra $2/1000 text records
- **Estimat Norge**: Kr 2000-5000/måned for medium-scale agent (10 000-20 000 queries/måned)

**Confidence: Verified** (microsoft-learn MCP: Azure pricing)

### TCO-sammenligning (24 måneder, 5000 users)

| NLU-modell | Lisensiering | Azure-kostnad | Utviklingskostnad | Total TCO (24 mnd) |
|-----------|-------------|---------------|-------------------|--------------------|
| **Generative Orch.** | Kr 0 (inkludert) | Kr 0 | Kr 200 000 | **Kr 200 000** |
| **Built-in NLU** | Kr 0 (inkludert) | Kr 0 | Kr 300 000 | **Kr 300 000** |
| **NLU+** | Kr 1 500 000 (Contact Center) | Kr 0 | Kr 800 000 | **Kr 2 300 000** |
| **Azure CLU** | Kr 0 (inkludert) | Kr 96 000 | Kr 1 200 000 | **Kr 1 296 000** |

**Confidence: Baseline** (estimat basert på typiske prosjektstørrelser)

---

## For arkitekten (Cosmo)

### Når anbefale hver modell

**Generative Orchestration (default for 90% av cases):**
- Kundens behov: "Rask time-to-market, bred dekning av brukerspørsmål"
- Teknisk kapasitet: Lav-moderat (ingen NLU-ekspertise nødvendig)
- Budget: Moderat (inkludert i Copilot Studio)
- Vedlikehold: Lavt (auto-tuning via LLM)

**Built-in NLU (fallback-metode):**
- Kundens behov: "Enkel FAQ-bot, forutsigbar oppførsel"
- Teknisk kapasitet: Moderat (trigger phrase engineering)
- Budget: Lavt
- Vedlikehold: Moderat (manuell oppdatering av trigger phrases)

**NLU+ (premium-valg for enterprise):**
- Kundens behov: "Voice-enabled customer service, høy nøyaktighet"
- Teknisk kapasitet: Høy (data annotation, modelltrening)
- Budget: Høyt (Dynamics 365 Contact Center required)
- Vedlikehold: Høyt (kontinuerlig treningsdata-innsamling)

**Azure CLU (spesialiserte domener):**
- Kundens behov: "Flerspråklig helsevesen-bot med medisinsk terminologi"
- Teknisk kapasitet: Svært høy (Azure CLU ekspertise, synkronisering)
- Budget: Høyt (Azure-kostnad)
- Vedlikehold: Svært høyt (CLU-topic synkronisering)

### Red flags: Når IKKE bruke Generative Orchestration

1. **Deterministiske workflows**: "Vi må garantere at steg A alltid kommer før steg B"
   - → Bruk Classic Orchestration (Built-in NLU eller NLU+)

2. **Compliance-kritiske domener**: "Agenten må aldri foreslå handling X"
   - → Bruk Classic Orchestration med eksplisitt topic routing

3. **Budget-begrenset**: "Vi har ikke råd til LLM-baserte modeller"
   - → Bruk Built-in NLU

4. **Voice-first**: "Dette er en telefonbasert kundeservice-agent"
   - → Bruk NLU+ (treningsdata brukes til speech recognition)

### Arkitekturbeslutninger: Sjekkliste

Før du foreslår NLU-konfigurasjon, sjekk:

- [ ] **Antall topics**: <20 (Built-in), 20-100 (Generative), >100 (NLU+/CLU)
- [ ] **Multi-intent behov**: Ja (Generative), Nei (Classic)
- [ ] **Voice-enabled**: Ja (NLU+), Nei (andre)
- [ ] **Språk**: Norsk (alle), Andre (Azure CLU)
- [ ] **Budget for lisensiering**: Dynamics 365 Contact Center? (NLU+)
- [ ] **Budget for Azure**: Azure AI Language? (CLU)
- [ ] **Teknisk kapasitet**: Data annotation-kompetanse? (NLU+/CLU)
- [ ] **Vedlikeholdsbehov**: Lavt (Generative), Moderat (Built-in), Høyt (NLU+/CLU)

### Typiske migrasjonsveier

1. **MVP → Production:**
   - Start: Generative Orchestration (rask MVP)
   - Produksjon: Samme (hvis tilstrekkelig nøyaktighet)
   - Alternativ: Bytt til NLU+ hvis voice eller høy nøyaktighet kreves

2. **Legacy Power Virtual Agents → Copilot Studio:**
   - Legacy: Built-in NLU
   - Copilot Studio: Generative Orchestration (recommended)
   - Fallback: Classic + Built-in NLU (hvis deterministisk routing kreves)

3. **Custom LUIS/CLU → Copilot Studio:**
   - Legacy: Azure CLU
   - Copilot Studio: Fortsett med Azure CLU (hvis spesialisert modell)
   - Alternativ: Test Generative Orchestration først (kan være tilstrekkelig)

**Confidence: Baseline** (basert på Cosmos erfaring)

---

## Kilder og verifisering

### MCP-kilder (microsoft-learn)

Følgende Microsoft Learn-dokumentasjon ble brukt (april 2026):

1. **Design effective language understanding**
   - URL: https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/language-understanding
   - Dekker: Generative Orchestration, Classic Orchestration, NLU+, Azure CLU, sammenligningstabell

2. **Configure NLU+**
   - URL: https://learn.microsoft.com/en-us/microsoft-copilot-studio/nlu-plus-configure
   - Dekker: NLU+ setup, entity annotations, training workflow, best practices

3. **Configure intent-based suggestions for Copilot agents**
   - URL: https://learn.microsoft.com/en-us/dynamics365/contact-center/administer/set-up-intent-agent
   - Dekker: Dynamics 365 Contact Center integrasjon, Customer Intent Agent, global variables

4. **Get started with conversational language understanding integration**
   - URL: https://learn.microsoft.com/en-us/microsoft-copilot-studio/advanced-clu-get-started
   - Dekker: Azure CLU setup, connection references, Analyze Text topic

5. **Use entities and slot filling in agents**
   - URL: https://learn.microsoft.com/en-us/microsoft-copilot-studio/advanced-entities-slot-filling
   - Dekker: Prebuilt entities, custom entities (closed list + regex), slot filling, proactive slot filling, multiple entity recognition (maks 5 per Question-node), entity literals (Verified 2026-04)

6. **Configure and create multilingual agents**
   - URL: https://learn.microsoft.com/en-us/microsoft-copilot-studio/multilingual
   - Dekker: System.User.Language, auto-detect language, localization best practices, dynamic language switching (generative orchestration), secondary language management. Primærspråk kan ikke endres etter opprettelse (Verified 2026-04)

7. **Code samples**
   - microsoft_code_sample_search: Entity extraction, trigger phrases, YAML topic definitions

### Baseline (modell-kunnskap)

Følgende seksjoner er basert på Claude Opus 4.5s baseline-kunnskap (januar 2025):

- TCO-sammenligning (estimater)
- Nøyaktighets-prosenter (estimater)
- Typiske migrasjonsveier (Cosmos erfaringsbaserte anbefalinger)

### Verifiseringsmetode

Alle "Verified"-markeringer er basert på:
1. MCP-kall til microsoft-learn (microsoft_docs_search + microsoft_docs_fetch)
2. Kryssreferering mot flere dokumentasjonskilder
3. Kodeeksempler fra microsoft_code_sample_search

"Baseline"-markeringer indikerer:
1. Modellkunnskap (januar 2025)
2. Erfaringsbaserte estimater (ikke offisiell Microsoft-dokumentasjon)
3. Sammenligninger basert på tolkning av flere kilder

### Siste oppdatering

- **Dokument opprettet**: 2026-02-04
- **MCP-data hentet**: 2026-04-10
- **Siste innholdsoppdatering**: 2026-04
- **Microsoft Learn-versjon**: April 2026
- **Copilot Studio-versjon**: GA (Generally Available)

---

**For spørsmål om NLU-konfigurasjon, kontakt Cosmo Skyberg via `/architect`.**
