ms-ai-architect/skills/ms-ai-advisor/references/prompt-engineering/token-optimization-and-efficiency.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

Token Optimization and Cost Efficiency

Last updated: 2026-02 Status: GA Category: Prompt Engineering & LLM Optimization


Introduksjon

Token-optimalisering er kritisk for både kostnadseffektivitet og ytelse i Azure OpenAI-løsninger. Hver API-forespørsel koster basert på antall tokens prosessert (input + output), og ineffektiv token-bruk kan raskt eskalere både kostnader og responstider. Denne guiden dekker praktiske teknikker for å redusere token-forbruk, utnytte caching-mekanismer, og balansere kostnad mot ytelse.

Nøkkelkonsept: Azure OpenAI-modeller prosesserer tekst ved å dele den opp i tokens. Ett token er ca. 4 tegn for vanlig engelsk tekst. Både input (prompt) og output (completion) blir målt i tokens, og prisene varierer betydelig mellom modeller og deployment-typer.


Kjernekomponenter

Token-basert prismodell

Komponent Beskrivelse Kostnadsfaktor
Input tokens Tokens i prompt (system message + user input + conversation history) Lavest kostnad per token
Output tokens Tokens generert av modellen som respons 2-4× høyere enn input
Cached tokens Input tokens som matcher cached content 50-100% rabatt (avhenger av deployment-type)
Reasoning tokens Ekstra tokens brukt av o-series modeller for resonnering Egen prisstruktur (kun synlig i API-respons)

Eksempel GPT-4o-mini (standard deployment):

  • Input: ~$0.15 per 1M tokens
  • Output: ~$0.60 per 1M tokens
  • Cached input: ~$0.075 per 1M tokens (50% rabatt)

Deployment-typer og token-optimalisering

Deployment Type Token-strategi Best For
Standard (pay-as-you-go) Fokus på å redusere totale tokens; prompt caching gir moderat rabatt Variabel last, utvikling, testing
Provisioned Throughput (PTU) Optimalisere for throughput (tokens/min); cached tokens kan gi opptil 100% rabatt Forutsigbar, høy last; latenskritiske workloads
Global Standard Balansere token-effektivitet med geografisk fleksibilitet Multi-region workloads uten data residency-krav
Batch Maksimere token-volum; 50% kostnadsbesparing Bulk-prosessering, ikke-sanntid (24t turnaround)

Token-optimaliserings-teknikker

1. Prompt Engineering for Token-effektivitet

Kortere prompts uten kvalitetstap

❌ Ineffektivt (150 tokens):
"You are an extremely helpful and knowledgeable assistant with expertise
in multiple domains. Please provide a comprehensive and detailed analysis
of the following situation, ensuring that you consider all relevant factors
and provide actionable recommendations..."

✅ Effektivt (25 tokens):
"You are an expert analyst. Analyze the situation and provide actionable
recommendations."

Teknikk: Few-shot vs. Zero-shot

  • Few-shot bruker flere tokens (eksempler i prompt), men gir bedre output-kvalitet
  • Zero-shot sparer input-tokens, men kan kreve regenerering hvis kvalitet er dårlig
  • Trade-off: Evaluer om ekstra input-tokens er billigere enn å regenerere output

Strukturerte outputs reduserer output-tokens

# ❌ Ustrukturert output (400+ tokens)
"Explain the benefits of Azure OpenAI with examples and details..."

# ✅ Strukturert output (150 tokens)
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "List 3 Azure OpenAI benefits"}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "benefits",
            "schema": {
                "type": "object",
                "properties": {
                    "benefits": {
                        "type": "array",
                        "items": {"type": "string"},
                        "maxItems": 3
                    }
                }
            }
        }
    }
)

2. Prompt Caching (automatisk funksjonalitet)

Status: GA for GPT-4o, GPT-4.1-serien, o-series (o1, o3-mini, o4-mini)

Prompt caching reduserer kostnader ved å cache de første 1024+ tokens i en prompt. Når identisk innhold gjentas, betaler du redusert pris for cached tokens.

Hvordan det fungerer

Faktor Krav
Minimum prompt-lengde 1024 tokens
Cache-treff Første 1024 tokens må være identiske
Granularitet Cache-treff per 128 tokens etter første 1024
Cache-levetid 5-10 min inaktivitet (max 1 time for Microsoft Foundry; 24t for Foundry Models)
Deling Ikke delt mellom Azure subscriptions

Design for cache-hits

# ✅ Strukturer prompts for caching-effektivitet
system_context = """You are a Norwegian public sector AI assistant.
[... 2000 tokens med policy-dokumenter, guidelines, etc. ...]
"""  # Dette blir cached

messages = [
    {"role": "system", "content": system_context},  # Cached
    {"role": "user", "content": user_query}         # Variabel (ikke cached)
]

# Cache-nøkkel (optional) for å forbedre hit rate
response = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
    prompt_cache_key="public-sector-v1"  # Forbedrer routing
)

# Sjekk cache-hits i respons
cached = response.usage.prompt_tokens_details.cached_tokens
print(f"Cached tokens: {cached}/{response.usage.prompt_tokens}")

Konfidensmarkør: 🟢 Høy Prompt caching er GA og godt dokumentert.

Best practices for caching

  1. Plasser statisk innhold først: System messages, dokumenter, eksempler
  2. Hold variabelt innhold sist: User queries, timestamps, session-spesifikk data
  3. Bruk prompt_cache_key for workloads med mange parallelle requests (>15 req/min)
  4. Overvåk cache hit rate: Sjekk cached_tokens i API-respons

Anti-pattern:

# ❌ Variabel innhold først = ingen cache hits
messages = [
    {"role": "user", "content": f"Timestamp: {now()} - {user_query}"},  # Endres hver gang
    {"role": "system", "content": long_static_context}  # For sent i token-sekvens
]

3. Max Tokens-kontroll

max_tokens-parameteren begrenser output-lengde. Dette påvirker ikke kvalitet, men hindrer unødvendig lange svar.

# ❌ Ukontrollert output (kan generere 4000+ tokens)
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Explain Microsoft Foundry"}]
)

# ✅ Kontrollert output
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Explain Microsoft Foundry in 3 sentences"}],
    max_tokens=150,
    stop=["\n\n"]  # Stopp ved double line break
)

Konfidensmarkør: 🟢 Høy max_tokens er standard API-funksjonalitet.

4. Streaming for opplevd ytelse

Streaming reduserer ikke totale tokens eller totaltid, men forbedrer brukeropplevelse ved å vise output inkrementelt.

stream = client.chat.completions.create(
    model="gpt-4o",
    messages=messages,
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end='')

Når å bruke streaming:

  • Chatbots, conversational interfaces (brukeren ser respons umiddelbart)
  • Lange genereringer (unngå client-side timeouts)

Når å ikke bruke streaming:

  • Bulk-prosessering (sentiment analysis, oversettelse)
  • Når du trenger hele responsen før videre prosessering

5. Batch API for massiv kostnadsbesparelse

Status: GA

Azure OpenAI Batch API gir 50% kostnadsrabatt for asynkrone workloads med 24-timers turnaround.

Fordel Detalj
Kostnadsreduksjon 50% rabatt vs. global standard
Separat quota Enqueued token quota påvirker ikke online workloads
Turnaround 24 timer (target), ikke garantert
Cancellation Cancel jobb når som helst; betal kun for completed work

Use cases:

  • Large-scale data analysis
  • Content generation (bulk artikler, produktbeskrivelser)
  • Dokumentrevidering og oppsummering
  • NLP-tasks (sentiment analysis, translation på store datasett)

Konfidensmarkør: 🟢 Høy Batch API er GA og anbefales av Microsoft for bulk-workloads.

6. Modellvalg for kostnad vs. ytelse

Modell Input Cost Output Cost Best For
GPT-4.1-nano Lavest Lavest Enkel klassifisering, routing, strukturert output
GPT-4.1-mini Veldig lav Lav De fleste use cases; beste kostnad/ytelse-balanse
GPT-4.1 / GPT-4o Moderat Moderat Kompleks resonnering, kreativt innhold
o3-mini Høy Høy (reasoning tokens) Matematikk, kode, logisk resonnering
GPT-5 Høyest Høyest Mest krevende oppgaver (sjelden nødvendig)

Strategi: Start med GPT-4.1-mini, oppgrader kun hvis kvalitet er utilstrekkelig.


Arkitekturmønstre

Mønster 1: Multi-tier model cascade

Bruk billige modeller for routing/filtering, dyre modeller kun for komplekse oppgaver.

User Query
    ↓
[GPT-4.1-nano: Intent classification] (5 tokens output)
    ↓
    ├─→ [Simple query] → Cache lookup → Response
    └─→ [Complex query] → [GPT-4o: Full reasoning] → Response

ROI: 70-80% av queries kan håndteres av billigere modeller.

Mønster 2: Context compression med embeddings

Erstatt lange dokumenter med semantic search + RAG.

❌ Direkte document injection (10 000 tokens/request):
system_message = f"Context: {full_documents}"  # Dyrt hver gang

✅ RAG med embeddings (500 tokens/request):
1. Index documents med Azure AI Search (engangs-kostnad)
2. Query → embedding → semantic search → top 3 relevante chunks
3. Inject kun relevante chunks (500 tokens) i prompt

Besparelse: 95% reduksjon i input tokens (10k → 500).

Mønster 3: Fine-tuning for prompt-reduksjon

Fine-tune modeller for domene-spesifikke oppgaver → kortere prompts.

❌ Base model med lang prompt (2000 tokens instruction):
"You are a Norwegian legal expert. Follow these guidelines: [1800 tokens]"

✅ Fine-tuned model (50 tokens):
"Analyze contract" → Modellen har allerede lært domene-spesifikk kunnskap

Trade-off:

  • Opfront kostnad: Training (token-basert) + hosting ($1.70/time for fine-tuned deployment)
  • Løpende besparelse: 95% reduksjon i input tokens per request
  • Break-even: Evaluer etter forventet request-volum (typisk >100k requests)

Konfidensmarkør: 🟡 Moderat Fine-tuning kostnad/nytte varierer sterkt med use case.


Beslutningsveiledning

Når å prioritere token-optimalisering

Scenario Prioritet Teknikk
Høyt request-volum (>1M requests/måned) 🔴 Kritisk Alle teknikker; vurder fine-tuning
Repetitive prompts (chatbot, support) 🔴 Kritisk Prompt caching, RAG, model cascade
Lange dokumenter i context 🔴 Kritisk RAG, context compression
Batch-prosessering 🟡 Viktig Batch API (50% rabatt)
Prototyping, lav last 🟢 Lav Fokus på funksjonalitet først

Decision tree: Kostnadsoptimalisering

Start: Høye token-kostnader?
    │
    ├─→ Høyt request-volum? (>100k/mnd)
    │   ├─→ Ja: Vurder Provisioned Throughput (PTU)
    │   └─→ Nei: Optimaliser per-request tokens
    │
    ├─→ Repetitive prompts? (>50% overlapp)
    │   └─→ Ja: Design for prompt caching (system message først)
    │
    ├─→ Lange dokumenter i context? (>5k tokens)
    │   └─→ Ja: Implementer RAG + Azure AI Search
    │
    ├─→ Bulk-prosessering? (ikke-sanntid OK)
    │   └─→ Ja: Bruk Batch API (50% rabatt)
    │
    └─→ Kompleks domene-logikk? (lang instruction prompt)
        └─→ Ja: Vurder fine-tuning (break-even >100k requests)

Integrasjon med Microsoft-stakken

Microsoft Foundry: Token monitoring

# Overvåk token-bruk i Azure Monitor
from azure.monitor.query import MetricsQueryClient

metrics_client = MetricsQueryClient(credential)

# Hent Processed Prompt Tokens (input TPM)
response = metrics_client.query_resource(
    resource_uri=f"/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{account}",
    metric_names=["ProcessedPromptTokens"],
    timespan=timedelta(days=7),
    granularity=timedelta(minutes=1),
    aggregations=["Average", "Maximum"]
)

# Hent Generated Completion Tokens (output TPM)
completion_response = metrics_client.query_resource(
    resource_uri=resource_uri,
    metric_names=["GeneratedCompletionTokens"],
    timespan=timedelta(days=7),
    granularity=timedelta(minutes=1),
    aggregations=["Average", "Maximum"]
)

Nøkkel-metrics:

  • ProcessedPromptTokens: Input TPM (inkludert cached tokens)
  • GeneratedCompletionTokens: Output TPM
  • TokenTransaction: Total tokens prosessert

Azure API Management: Token rate limiting

Implementer token-baserte quotas per consumer/application.

<llm-token-limit
    counter-key="@(context.Subscription.Id)"
    tokens-per-minute="10000"
    estimate-prompt-tokens="true"
    remaining-tokens-variable-name="remainingTokens">
</llm-token-limit>

Fordeler:

  • Forhindre at én app bruker all quota
  • Pre-calculate prompt tokens → avvis requests før de når backend
  • Rettferdig fordeling av TPM på tvers av apps

Copilot Studio: Token-bevissthet

Copilot Studio abstraherer token-håndtering, men:

  • Lange conversation histories akkumulerer tokens (automatisk summarization etter 10-15 meldinger)
  • Adaptive Cards og rich content legger til tokens
  • Generative answers fra data sources kan bli dyre (hele documents injectes)

Anbefaling: Bruk Generative Answers med Azure AI Search (semantic ranking) istedenfor full document injection.


Offentlig sektor (Norge)

Budsjettstyring og kostnadskontroll

Offentlige virksomheter må ha forutsigbare IT-kostnader. Token-optimalisering er kritisk for:

  1. Årsbudsjett-compliance: Unngå overforbruk midt i budsjettåret
  2. Anbud og kontrakter: Estimere token-kostnader for 3-5 års driftsperiode
  3. Transparens: Kunne forklare kostnader til politisk ledelse

Praktisk tilnærming:

1. Baseline-måling (1 måned):
   - Mål faktisk token-bruk i pilot (Azure Monitor)
   - Identifiser kostnadsdrivere (store prompts? høyt volum?)

2. Optimaliser (2-4 uker):
   - Implementer prompt caching (rask win)
   - Evaluer modellvalg (GPT-4.1-mini vs. GPT-4o)
   - Vurder RAG hvis lange dokumenter brukes

3. Produksjon med budsjett-alerts:
   - Sett Azure Cost Management budgets
   - Alerts ved 80% / 100% av månedlig budsjett
   - Action groups for automatisk skalering/throttling

Data residency og token-kostnader

Krav Deployment Type Token-strategi
Data residency Norge Standard (regional) eller Data Zone Standard Må akseptere høyere kostnader; fokus på token-effektivitet
Ingen residency-krav Global Standard 10-30% rabatt; kan bruke mer tokens innenfor samme budsjett

Anbefaling: For ikke-personopplysninger (FAQ, interne dokumenter), bruk Global Standard → mer rom for tokens.

Compliance og token-logging

GDPR/logging-krav: API requests logges i Azure Monitor, inkludert token-bruk. Sikre at:

  • PII ikke injectes i prompts (kan logges)
  • Stored Completions (hvis brukt) har data retention policies
  • Token-bruk kan audits for kostnadskontroll

Kostnad og lisensiering

Azure OpenAI prismodell (per 1M tokens, Feb 2026)

Standard deployment (pay-as-you-go)

Modell Input Output Cached Input
GPT-4.1-nano $0.10 $0.40 $0.05
GPT-4.1-mini $0.20 $0.80 $0.10
GPT-4.1 $2.50 $10.00 $1.25
GPT-4o $2.50 $10.00 $1.25
GPT-4o-mini $0.15 $0.60 $0.075
o3-mini $1.10 $4.40 $0.55

Merk: Reasoning tokens (o-series) har separat pricing.

Batch API (50% rabatt)

Modell Input Output
GPT-4.1-mini $0.10 $0.40
GPT-4o $1.25 $5.00
o3-mini $0.55 $2.20

Provisioned Throughput (PTU-basert)

PTU-prising er basert på kapasitet (PTUs), ikke tokens. Token-optimalisering påvirker:

  • Hvor mange PTUs du trenger: Færre tokens → lavere PTU-krav
  • Cached tokens: Opptil 100% rabatt (frigjør PTU-kapasitet)

Eksempel:

  • Workload: 500k input TPM + 150k output TPM = 30 PTUs
  • Med 50% cache hit rate: 250k input TPM (cached, gratis) + 250k input TPM + 150k output = 20 PTUs
  • Besparelse: 33% reduksjon i PTU-kostnad

Konfidensmarkør: 🟢 Høy Priser hentet fra offisiell Azure-dokumentasjon (Feb 2026).

Fine-tuning kostnader

Kostnadstype Beregning Eksempel (GPT-4.1)
Training Tokens × epochs × training price 1M tokens × 2 epochs × $2/M = $4
Hosting $1.70/time (standard deployment) $1,224/måned (kontinuerlig)
Inference Input + output tokens (samme som base + hosting) 20M input × $1.10 + 40M output × $4.40 = $198

Break-even analyse:

Besparelse per request (prompt-reduksjon): 1800 tokens × $0.20/1M = $0.00036
Månedlig hosting-kostnad: $1,224
Break-even requests/måned: $1,224 / $0.00036 = 3.4M requests

→ Kun lønnsomt ved **svært** høyt volum (>3M requests/måned)

ROI-kalkulator for token-optimalisering

Scenario: Chatbot for offentlig sektor (1M requests/måned)

Tiltak Token-reduksjon Månedlig besparelse (NOK)
Baseline (ingen optimalisering) - Kostnad: 15 000 kr
Prompt caching (50% cache hit) 50% input Sparer: 3 750 kr (25%)
Kortere prompts (-30% input) 30% input Sparer: 2 250 kr (15%)
Strukturerte outputs (-20% output) 20% output Sparer: 2 400 kr (16%)
Bytt til GPT-4.1-mini fra GPT-4o - Sparer: 10 500 kr (70%)
Total optimalisering Kombinert Sparer: 12 000 kr/måned (80%)

Konfidensmarkør: 🟡 Moderat Besparelser varierer med workload; disse er representative estimater.


For arkitekten (Cosmo)

Praktiske spørsmål under arkitekturrådgivning

  1. "Hvor mange requests forventer dere per måned?"

    • <100k: Standard deployment, fokus på funksjonalitet
    • 100k-1M: Optimaliser tokens (caching, compression)
    • 1M: Vurder PTU, Batch API, fine-tuning

  2. "Har dere repetitive prompts (chatbot, FAQ, support)?"

    • Ja → Design for prompt caching (system message først)
    • Nei → Fokus på andre optimaliseringsteknikker
  3. "Bruker dere lange dokumenter som context?"

    • Ja → Implementer RAG + Azure AI Search (95% token-reduksjon)
    • Nei → Standard prompt engineering
  4. "Har dere budsjettbegrensninger eller årsbudsjett?"

    • Ja → Sett Azure Cost Management budgets + alerts
    • Implementer token rate limiting i API Management
  5. "Er sanntids-respons kritisk?"

    • Ja → Standard/PTU + streaming
    • Nei → Vurder Batch API (50% rabatt)

Red flags for kostnadsfeller

🚩 "Vi sender hele PDF-filer (100+ sider) som context" → RAG er obligatorisk; ellers 50k+ tokens per request

🚩 "Fine-tuned modell har vært deployed i 6 måneder uten bruk" → $1.70/time × 24 × 180 dager = $7,344 hosting-kostnad uten verdi

🚩 "Vi bruker GPT-4o for alt" → 80% av use cases kan bruke GPT-4.1-mini (5× billigere)

🚩 "Vi har ikke monitoring på token-bruk" → Kostnader kan eskalere ukontrollert; sett opp Azure Monitor metrics

Anbefalte arkitekturmønstre per scenario

Scenario Anbefalt mønster Estimert besparelse
Kundeservice chatbot (repetitive spørsmål) Prompt caching + model cascade (nano for routing) 60-70%
Dokumentanalyse (lange PDF-er) RAG + Azure AI Search + GPT-4.1-mini 80-90%
Bulk content generation (ikke-sanntid) Batch API + strukturerte outputs 50-60%
Kompleks resonnering (kode, matematikk) o3-mini (kun når nødvendig) + caching 30-40%
Intern FAQ (lavt volum) Standard deployment + GPT-4.1-mini 70% (vs. GPT-4o)

Validering av løsning: Token-effektivitets-checklist

Prompt design:

  • Statisk innhold (system message, dokumenter) plassert først?
  • max_tokens satt til minimum nødvendig?
  • Stop sequences definert for å hindre overgenerering?

Caching:

  • Prompts >1024 tokens har statisk prefix?
  • prompt_cache_key brukt for high-frequency workloads?
  • Cache hit rate monitores i Azure Monitor?

Modellvalg:

  • Bruker GPT-4.1-mini som default (oppgrader kun hvis nødvendig)?
  • Model cascade implementert (billig modell for routing)?

Kostnadsovervåking:

  • Azure Cost Management budgets satt opp?
  • Alerts ved 80%/100% av budsjett?
  • Token-metrics logges og analyseres månedlig?

Arkitektur:

  • RAG implementert for lange dokumenter?
  • Batch API vurdert for bulk-workloads?
  • Content filtering justert (hvis lavrisiko use case)?

Kilder og verifisering

Offisiell Microsoft-dokumentasjon:

  1. Prompt caching for Azure OpenAI
  2. Plan and manage costs for Azure OpenAI
  3. Performance and latency optimization
  4. Batch API for Azure OpenAI
  5. Azure OpenAI pricing

Verifisert: Februar 2026 via microsoft-learn MCP-server

Confidence level: 🟢 Høy for GA-funksjoner (prompt caching, batch API, standard pricing), 🟡 Moderat for ROI-estimater (workload-avhengige).


Sist oppdatert av Cosmo Skyberg, Microsoft AI Solution Architect For spørsmål om token-optimalisering i din løsning, start en arkitektursesjon med /architect.