ms-ai-architect/skills/ms-ai-advisor/references/copilot-extensibility/copilot-context-window-optimization.md
Kjell Tore Guttormsen 03d596e4ec docs(ms-ai-architect): KB-refresh tema-b — Foundry-navnesveip «Azure AI Foundry»→«Microsoft Foundry» (233 filer)
Verifisert mot offisiell MS-doc (juni 2026): «Microsoft Foundry» er det
gjeldende produkt-/portalnavnet; «Foundry (classic)» = gamle «Azure AI Foundry»
(/azure/foundry/ vs /azure/foundry-classic/). Premiss bekreftet før sveip.

Multi-regel, IKKE naiv s/Azure AI Foundry/Microsoft Foundry/ — MS dropper
«Azure AI» (legger IKKE til «Microsoft») for to produktvarianter:
- «Azure AI Foundry Agent[ Service|s]» → «Foundry Agent Service/Agents» (MS-form)
- «Azure AI Foundry Models» → «Foundry Models» (i «Azure OpenAI in Foundry Models»)
- «Azure AI Foundry SDK» → «Microsoft Foundry SDK» (operatør-valg)
- «Azure AI Foundry portal/project» + generisk → «Microsoft Foundry»
- Pre-eksisterende «Microsoft Foundry Models» (4) normalisert → «Foundry Models»

Bevart: «Azure OpenAI», «Azure AI Inference SDK», «Azure AI Search»,
«Azure AI Services», kode-IDer. Historisk ref «(tidligere Azure AI Foundry)»
i model-catalog-2026.md beskyttet via lookbehind. URL /azure/ai-foundry/→
/azure/foundry/ kun i owasp-llm-top10 (KB-ref); docs/-filer deferred.

Scope: skills (inkl. 3 SKILL.md) + commands + agents + README + CLAUDE.
Ekskludert: docs/ (interne), playground/+tests/ fixtures (testdata),
CHANGELOG.md (historisk logg), STATE.md (gitignored).

3 SKILL.md endret (advisor/engineering/security) → judge-cache teknisk
invalidert for disse, men scorer uendret: advisor 91, eng/gov/infra/sec 96
(alle ≥90). validate 239/0. 0 «Azure AI Foundry» igjen (utenom bevart ref).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 21:00:27 +02:00

22 KiB
Raw Blame History

Context Window Optimization for Copilot

Last updated: 2026-06-19 Status: GA Category: Copilot Extensibility & Integration


Introduksjon

Context window optimization er kritisk for å maksimere kvalitet, ytelse og kostnadseffektivitet i Copilot-løsninger. Kontekstvinduet definerer hvor mye informasjon (målt i tokens) en språkmodell kan prosessere i én forespørsel — både input (prompt, grounding data, samtalehistorikk) og output (generert respons).

Dårlig context window management fører til:

  • Trunkert kontekst — viktig informasjon kuttes ut
  • Kostnadssprekk — unødvendig høyt tokenforbruk
  • Degradert kvalitet — modellen får ikke nok kontekst til å svare presist
  • Gateway timeouts — langvarige oppgaver overskrider tidsgrenser

Microsoft tilbyr ulike mekanismer for context window management på tvers av Azure OpenAI, Copilot Studio, Microsoft 365 Copilot og Microsoft Fabric.

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


Kjernekomponenter / Nøkkelegenskaper

Token-anatomi

Tokens er ikke ord, men subword-enheter. Eksempel (Azure OpenAI tokenization):

  • "report" = 1 token
  • "." = 1 token
  • "optimization" = 2-3 tokens (modellavhengig)

Input tokens består av:

  1. User prompt — brukerens spørsmål/instruksjon
  2. Grounding data — RAG-dokumenter, schema, metadata
  3. System message / role information — persona og instruksjoner
  4. Conversation history — tidligere meldinger i tråden

Output tokens = generert respons fra LLM.

Totalt kontekstvindu = max_prompt_tokens + max_completion_tokens

Automatisk trunkeringsstrategi (Azure OpenAI Assistants API)

Assistants API håndterer automatisk trunkering når kontekstvinduet overskrides:

Strategi Beskrivelse Bruksområde
auto OpenAI's default — intelligently truncates based on relevance Generell bruk
last_messages Inkluderer N siste meldinger, kutter eldre Chat-assistenter med lang historikk

Kodeeksempel (Python):

# Assistants API — Run creation med token limits
run = client.beta.threads.runs.create(
    thread_id="thread_abc123",
    assistant_id="asst_abc123",
    max_prompt_tokens=500,
    max_completion_tokens=1000,
    truncation_strategy={"type": "last_messages", "last_messages": 10}
)

Beste praksis:

  • For File Search: max_prompt_tokens >= 20 000 (anbefalt 50 000+)
  • For lange samtaler: Fjern max_prompt_tokens-limit helt
  • Hvis Run når max_completion_tokens: Status = incomplete, sjekk incomplete_details

Verified (MCP: Azure OpenAI Assistants API documentation)

Copilot Studio: Samtale-tokens og limieter

Conversation context limits:

  • ACS channel (Omnichannel): Maks 28 KB total melding (inkl. variabler)
  • Transcript limit: 512 tegn per bot-respons i nedlastede transkripsjonar
  • Inaktivitet: Samtale lagres etter 30 min inaktivitet, ny tråd ved gjenopptaking
  • Telefoni: 3 min timeout etter "End Conversation"-event

Vanlig feil: Variable passing ved handoff til Dynamics 365 Customer Service feiler med MessageSizeExceeded hvis totale variablestørrelse > 28 KB. Løsning: Clear unødvendige variabler før transfer.

Verified (MCP: Copilot Studio quotas documentation)

Microsoft 365 Copilot Chat API: Context control

Known limitations:

  • Ingen støtte for action/content generation (filopprettelse, e-post, møtebooking)
  • Kun tekstrespons
  • Ingen code interpreter / graphic art tools
  • Long-running tasks prone to gateway timeouts — ingen context window persistence for langvarige operasjoner
  • Web search grounding må toggles av per melding (single-turn action)

Context window management:

  • Bruker både enterprise search grounding og web search grounding by default
  • Ingen eksplisitt max_tokens-kontroll eksponert i Chat API
  • Context begrenset av Semantic Index for Copilot limitations

Verified (MCP: Microsoft 365 Copilot Chat API documentation)

Azure OpenAI On Your Data: Runtime parameters

For RAG-scenarios med Azure OpenAI On Your Data (Azure AI Search-integrasjon):

Parameter Type Standardverdi Funksjon
topNDocuments int 5 Antall dokumentchunks sendt til LLM (3, 5, 10, 20)
chunk_size int 1024 Chunk-størrelse ved indeksering (tokens)
strictness int 3 Filtrerer irrelevante chunks (1-5)
inScope bool true Begrens svar til kun data (ikke modellens egen kunnskap)
temperature float 0.7 Randomness (anbefalt 0 for konsistens)

Token flow ved RAG:

  1. Intent generation — genererer search intents fra spørsmål + history
  2. Retrieval — henter relevante chunks
  3. Filtrationstrictness kutter irrelevante chunks
  4. Reranking — sorterer beste chunks på tvers av intents
  5. Parameter inclusiontopNDocuments chunks inkluderes i prompt
  6. Response generation — LLM genererer svar + citations

Optimalisering:

  • Øk topNDocuments hvis svar mangler viktig kontekst (men ikke for høyt — kan distrahere modellen)
  • Reduser strictness hvis korrekte chunks filtreres ut
  • Bruk chunk_size=1536 for dokumenter med store tabeller/detaljerte seksjoner
  • Sett temperature=0 for konsistente svar

Verified (MCP: Azure OpenAI On Your Data best practices documentation)


Arkitekturmønstre

1. Adaptive Token Budgeting (Assistants API)

Pattern: Dynamisk allokering av token-budsjett basert på Run-livssyklus.

from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(),
    "https://cognitiveservices.azure.com/.default"
)

client = OpenAI(
    base_url="https://YOUR-RESOURCE.openai.azure.com/openai/v1/",
    api_key=token_provider
)

# First completion: conservative budget
run = client.beta.threads.runs.create(
    thread_id=thread_id,
    assistant_id=assistant_id,
    max_prompt_tokens=500,
    max_completion_tokens=1000
)

# Monitor remaining budget
status = client.beta.threads.runs.retrieve(thread_id=thread_id, run_id=run.id)
if status.status == "incomplete":
    # Increase budget for retry
    retry_run = client.beta.threads.runs.create(
        thread_id=thread_id,
        assistant_id=assistant_id,
        max_prompt_tokens=1000,  # doubled
        max_completion_tokens=2000
    )

Når bruke:

  • Multi-turn samtaler hvor første svar ofte er tilstrekkelig, men noen cases krever mer dybde
  • File Search-scenarios med varierende dokumentkompleksitet
  • Cost-sensitive deployments

2. Conversation Pruning (Copilot Studio / Chat Completions)

Pattern: Eksplisitt kutt av eldre samtalehistorikk før kontekstvinduet fylles.

// Pseudo-code for Copilot Studio variable management
function pruneConversationContext(variables: Record<string, any>): Record<string, any> {
    const MAX_CONTEXT_SIZE_KB = 24; // Buffer under 28 KB ACS limit

    let currentSize = JSON.stringify(variables).length / 1024;

    if (currentSize > MAX_CONTEXT_SIZE_KB) {
        // Strategy 1: Remove oldest messages
        delete variables.history_message_1;
        delete variables.history_message_2;

        // Strategy 2: Summarize old context
        variables.conversation_summary = summarizeHistory(variables);

        // Strategy 3: Clear non-essential variables
        Object.keys(variables).forEach(key => {
            if (key.startsWith("temp_") || key.startsWith("debug_")) {
                delete variables[key];
            }
        });
    }

    return variables;
}

Når bruke:

  • Handoff til Dynamics 365 Customer Service (ACS channel limit)
  • Lange customer service-samtaler
  • Voice-based copilots (timeout-sensitiv)

3. Schema Reduction for Grounding Data (Fabric Copilot)

Pattern: Reduser grounding data (semantic model schema, lakehouse metadata) ved hjelp av embeddings.

Fabric Copilot bruker automatisk:

  • Embedding-basert kolonneutvelgelse — sender ikke hele schema, kun relevante kolonner
  • Prompt augmentation — omskriver prompt for spesifisitet
  • Hidden fields/private tables — ekskluder fra Copilot-kontekst

Manuell optimalisering:

  1. Hide irrelevante felt i semantic model (Power BI)
  2. Mark tables as private hvis de ikke skal være tilgjengelige
  3. Hide report pages/visuals bak bookmarks

Token impact:

  • Full schema: 5 00015 000 tokens (avhengig av modellstørrelse)
  • Reduced schema: 5002 000 tokens
  • Savings: 70-90% reduction i grounding data tokens

Verified (MCP: Fabric Copilot consumption documentation)

4. Predicted Outputs for Known Context (Azure OpenAI)

Pattern: Send kjent tekst (f.eks. eksisterende kode) som prediction for å akselerere respons.

code = """
for number in range(1, 101):
    if number % 3 == 0 and number % 5 == 0:
        print("FizzBuzz")
    elif number % 3 == 0:
        print("Fizz")
    elif number % 5 == 0:
        print("Buzz")
    else:
        print(number)
"""

completion = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "user", "content": "Replace 'FizzBuzz' with 'MSFTBuzz'"},
        {"role": "user", "content": code}
    ],
    prediction={
        "type": "content",
        "content": code  # Known text for latency optimization
    }
)

Når bruke:

  • Code refactoring (modellen ser mye av eksisterende kode)
  • Document editing (kjent baseline-tekst)
  • Iterative improvements

Verified (MCP: Azure OpenAI predicted outputs documentation)


Beslutningsveiledning

Når velge hvilken optimaliserings-strategi?

Scenario Anbefalt tilnærming Verktøy
Multi-turn chat med lang historikk Truncation strategy (last_messages) Assistants API
RAG med variable dokumentmengder Dynamisk topNDocuments + strictness tuning Azure OpenAI On Your Data
Copilot Studio handoff Conversation pruning før transfer Custom Logic (Power Automate)
Fabric Copilot (Power BI) Schema reduction (hide fields/tables) Semantic model config
Cost-sensitive produksjon max_prompt_tokens + max_completion_tokens limits Assistants API / Chat Completions
Langvarige analyser Unngå Chat API, bruk Assistants/Responses API Azure OpenAI Assistants
Copilot handoff med context Continuation tokens (maks 28 KB) M365 Copilot + Teams Bot Framework

Debugging context window-problemer

Symptom: "Information not present in retrieved documents" (men du vet det finnes)

  1. Sjekk retrieval — er riktige chunks i citations? (REST API: tool message)
  2. Sjekk filtration — reduser strictness (Azure OpenAI On Your Data)
  3. Sjekk reranking — øk topNDocuments
  4. Sjekk intent generation — inspiser intents field (REST API)
  5. Sjekk chunk size — øk til 1536 for tabeller/semistrukturert data

Symptom: Incomplete responses / gateway timeout

  1. Sjekk token limits — fjern max_prompt_tokens for File Search
  2. Sjekk Run statusincomplete_details field
  3. Sjekk conversation size — prune historikk (Copilot Studio < 28 KB)
  4. Unngå long-running tasks i Chat API — bruk Assistants API

Symptom: Inconsistent responses

  1. Sett temperature=0 for determinisme
  2. Sjekk conversation history — samme spørsmål, forskjellig history = forskjellig respons
  3. Oppgrader modell — GPT-4 > GPT-3.5 for intent generation

Integrasjon med Microsoft-stakken

Microsoft Foundry + Assistants API

Token management:

  • Bruk max_prompt_tokens og max_completion_tokens for budsjett-kontroll
  • File Search anbefaler minimum 20 000 prompt tokens (ideelt 50 000+)
  • Truncation strategy: auto (default) eller last_messages (eksplisitt)

Monitoring:

  • Enable Diagnostic Settings for long-term token usage tracking
  • Log incomplete_details når Runs feiler
  • Track token usage per Run (input + output tokens i response)

Copilot Studio + Dynamics 365 Omnichannel

Variable size management:

  • Pre-transfer pruning — clear unødvendige variabler før handoff
  • Monitor ACS channel limit — 28 KB max (inkl. serialiserte variabler)
  • Avoid authentication variables in voice — ikke støttet ved voice handoff

Best practice:

// Pre-handoff cleanup logic
const essentialVariables = {
    customerName: context.customerName,
    caseId: context.caseId,
    priority: context.priority
    // Only keep what Dynamics 365 agent needs
};

// Transfer with minimal context
transferToAgent(essentialVariables);

Microsoft 365 Copilot Extensibility

Message Extension Agents:

  • Copilot handoff — bruk continuation tokens (maks 28 KB context)
  • Deep link format: https://teams.microsoft.com/l/chat/.../continuation=<token>
  • Token lifecycle management — sett expiry, håndter replay-scenario

Custom Engine Agents:

  • No long-running task support i Chat API
  • Context maintenance: kun under aktiv sesjon (cleared ved app close)
  • Token limits: Underlagt Semantic Index for Copilot limitations

Power BI + Fabric Copilot

Grounding data optimization:

  • Schema reduction: Hide/private fields ekskluderes automatisk
  • Report metadata: Hide pages/visuals bak bookmarks
  • Token cost: Report creation = høy consumption (verbose output + schema)

Consumption rate:

  • Basert på input + output tokens
  • Smoothing: Background operations fordelt over 24 timer
  • No direct token control — optimalisering via item-konfigurasjon

Offentlig sektor (Norge)

GDPR og token logging

Problemstilling: Tokens kan inneholde personopplysninger — hvordan logger uten å bryte personvern?

Løsning:

  1. Aggregate metrics only — logg total token count, ikke token content
  2. Pseudonymization — hash user IDs før logging
  3. Retention policies — automatisk sletting etter 90 dager (Datatilsynets anbefaling)
  4. Diagnostic Settings (Azure) — enable for compliance, men konfigurer data residency (Norway East/West)

Kostnadsfordeling i statlige virksomheter

Utfordring: Hvordan allokere token-kostnader til riktig kode/prosjekt?

Løsning:

  1. Tagging strategycostCenter, projectId i Azure Resource tags
  2. Per-assistant tracking — separat Assistants API-instans per team/prosjekt
  3. Monthly token budgetsmax_prompt_tokens for cost control
  4. Chargeback model — FinOps-dashboards (Azure Cost Management + Power BI)

Språklige hensyn (norsk/samisk)

Token efficiency:

  • Norsk bokmål/nynorsk: ~1.3x flere tokens enn engelsk (subword tokenization)
  • Samisk: ~1.5-2x flere tokens (mindre representert i training data)
  • Implikasjon: Context window fylles raskere — vurder større modeller (GPT-4 32K/128K)

Anbefaling:

  • For norskspråklige chat-assistenter: Assistants API med truncation_strategy="last_messages" + norsk prompt engineering
  • For samiskspråklige: Vurder prompt compression techniques (summarization av eldre meldinger)

Kostnad og lisensiering

Azure OpenAI — Token pricing (NOK, eks. mva.)

Assistants API:

  • No additional cost for Assistants API itself
  • Code Interpreter: Charged per session
  • File Search: Charged per GB indexed + per query

Chat Completions (GPT-4o, Norway East region, estimert 2026):

  • Input tokens: ~0.035 NOK / 1K tokens
  • Output tokens: ~0.11 NOK / 1K tokens
  • Cached input tokens: ~0.0035 NOK / 1K tokens (10x discount for repeated context)

Eksempel — RAG-scenario (10 000 spørsmål/måned):

  • Avg. input: 2000 tokens (prompt + 5 chunks @ 300 tokens each)
  • Avg. output: 500 tokens
  • Monthly cost: (10K × 2K × 0.035 / 1K) + (10K × 0.5K × 0.11 / 1K) = 1 250 NOK

Optimalisering:

  • Bruk caching for repeterende grounding data (10x reduksjon)
  • Reduce topNDocuments fra 10 til 5 (50% input token saving)
  • Prompt compression — fjern verbose system messages

Copilot Studio — Capacity Units (CU)

Token → CU konvertering:

  • Smoothing: Background operations (Copilot in Fabric) fordelt over 24 timer
  • No direct visibility på tokenization — minimal bruker-kontroll
  • Optimization: Begrens knowledge sources, bruk hidden fields

Licensing:

  • Copilot Studio: Inkludert i Power Apps/Power Automate Premium
  • Per-user licensing — ikke direkte token-basert billing

Microsoft 365 Copilot

Token cost:

  • No extra cost for Chat API med M365 Copilot-lisens
  • Lisens-krav: Microsoft 365 Copilot add-on (per bruker)
  • Ingen token quotas eksponert til brukere

Ikke støttet uten lisens (per 2026-02).


For arkitekten (Cosmo)

Når foreslå context window optimization?

Trigger scenarios:

  1. Kunde rapporterer "missing information" i svar → RAG retrieval/filtration issue
  2. Intermitterende gateway timeouts → long-running tasks i Chat API
  3. Kostnad eksploderer → ingen token budgets satt
  4. Copilot Studio handoff feiler → > 28 KB variable size
  5. Inconsistent svar → conversation history ikke pruned, high temperature

Diagnostikk-sjekkliste

For Azure OpenAI On Your Data:

  • Sjekk topNDocuments (default 5 — øk til 10 hvis info mangler)
  • Sjekk strictness (default 3 — reduser til 2 hvis for aggressiv)
  • Sjekk chunk_size (default 1024 — øk til 1536 for tabeller)
  • Inspiser intents i API response (feil modell hvis tomme?)
  • Sjekk temperature (sett til 0 for konsistens)

For Assistants API:

  • Sjekk max_prompt_tokens (fjern limit for File Search)
  • Sjekk Run status (incomplete → øk token budget)
  • Sjekk truncation_strategy (bruk last_messages for lange chats)

For Copilot Studio:

  • Sjekk variable size før handoff (< 24 KB buffer)
  • Sjekk conversation timeout (30 min inaktivitet → ny tråd)
  • Sjekk voice handoff region (US/CA/EU/UK/Asia/Australia kun)

Arkitektur-tradeoffs

Tilnærming Fordel Ulempe Anbefalt for
Aggressive truncation Lav cost, rask respons Kan kutte viktig kontekst Cost-sensitive, short-form chat
No token limits Maksimal kvalitet Høy cost, potensielt treg Enterprise RAG, komplekse analyser
Conversation pruning Balansert cost/kvalitet Krever custom logic Multi-turn customer service
Schema reduction Lav grounding token cost Kan ekskludere relevante felt Power BI Copilot, Fabric

Anbefalinger for norsk offentlig sektor

Standardoppsett for statlige virksomheter:

  1. Assistants API med token budgets — transparens for kostnadsfordeling
  2. Diagnostic Settings enabled — compliance logging (Norway East data residency)
  3. Temperature=0 — konsistens viktigere enn kreativitet for forvaltning
  4. Truncation strategy: last_messages (10-20) — balanse mellom kontekst og cost
  5. Chunk size: 1536 — norske dokumenter ofte tabellrike (rundskriv, forskrifter)

Unngå:

  • Chat API for long-running tasks (bruk Assistants API)
  • Voice handoff utenfor støttede regioner (kun US/CA/EU/UK/Asia/AU)
  • Hardkodede token limits uten monitoring (Runs feiler uten synlig feilmelding)

Referansearkitektur: RAG med context optimization

User Query
    ↓
[Intent Generation]  ← GPT-4 (ikke GPT-3.5-turbo-1106)
    ↓
[Azure AI Search]    ← query_type="vectorSemanticHybrid"
    ↓
[Filtration]         ← strictness=2 (lavere enn default for recall)
    ↓
[Reranking]          ← Combine intents, top relevance
    ↓
[Parameter Inclusion] ← topNDocuments=10, chunk_size=1536
    ↓
[LLM Generation]     ← GPT-4o, temperature=0, max_tokens=1500
    ↓
Response + Citations

Token breakdown (typisk):

  • Intent generation: 200 tokens
  • Grounding data (10 chunks @ 400 tokens): 4000 tokens
  • System message: 300 tokens
  • Conversation history (5 turns): 1000 tokens
  • Total input: ~5500 tokens
  • Output: 500-1500 tokens
  • Total per query: ~7000 tokens (~0.30 NOK ved GPT-4o Norway East pricing)

Kilder og verifisering

MCP-verified sources (microsoft-learn):

  1. Azure OpenAI Assistants API — Context Window Management

  2. Troubleshooting and best practices for Azure OpenAI On Your Data

  3. Quotas and limits for Copilot Studio

  4. How Copilot in Microsoft Fabric works

  5. Overview of the Microsoft 365 Copilot Chat API (preview)

  6. Azure OpenAI Predicted Outputs

  7. Copilot handoff (Teams Bot Framework)

Confidence level:

  • Core mechanisms: Verified (MCP-basert research, januar 2026)
  • Pricing estimates: Baseline (modellantagelser basert på Azure pricing calculator, NOK exchange rate)
  • Offentlig sektor-anbefalinger: Baseline (basert på generelle GDPR/Datatilsynet-prinsipper, ikke produkt-spesifikk dokumentasjon)

Sist oppdatert: 2026-06-19 (Session-basert research via microsoft-learn MCP)