Reference files, test fixtures, the playground demo project and one design document now use generic, fictitious examples (buildings, energy, water, grants, municipal services). The playground demo (17 fixtures plus the embedded demo state) tells one consistent story: a municipal customer chatbot that pre-screens housing-benefit applications, classified under Annex III point 5(a). The embedded demo copies were edited in place rather than regenerated, because they already carry newer AI Act dates than the fixture files. Legal text is unchanged. Test semantics are unchanged. Four dark-theme onboarding screenshots with outdated placeholder text are removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 KiB
Multimodal Prompt Design with Images and Text
Last updated: 2026-06-19 Status: GA Category: Prompt Engineering & LLM Optimization
Introduksjon
Multimodal prompt design handler om å utforme effektive instruksjoner som kombinerer tekst og bilder for å maksimere responskvaliteten fra Large Multimodal Models (LMM). Vision-enabled modeller som GPT-4o, GPT-4o mini, GPT-4 Turbo with Vision, GPT-5-serien og o-serien kan analysere bilder og generere tekstlige responser basert på både visuelt og tekstlig innhold.
Nøkkelkonsepter:
- Vision-enabled modeller kombinerer Natural Language Processing (NLP) med visuell forståelse
- Støtter både URL-baserte bilder (HTTP/HTTPS) og Base64-enkodede bilder
- Bildeinput teller som tokens og påvirker kostnad og latency
- Kan håndtere opptil 10 bilder per chat request
- Detail-parameter (
low,high,auto) styrer tokenforbruk og responskvalitet
Tekniske tokens:
| Modell | Low detail | High detail (1024×1024) |
|---|---|---|
| GPT-4o / GPT-4 Turbo | 85 tokens | 4160 tokens |
| GPT-4o mini | 2833 tokens | Varierer med dimensjon |
Kjernekomponenter
1. Input-formater
URL-basert bildeinnput:
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.jpg",
"detail": "high"
}
}
Base64-enkodet bildeinnput:
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,<base64_string>"
}
}
Python-eksempel for lokal fil:
import base64
from mimetypes import guess_type
def local_image_to_data_url(image_path):
mime_type, _ = guess_type(image_path)
if mime_type is None:
mime_type = 'application/octet-stream'
with open(image_path, "rb") as image_file:
base64_encoded_data = base64.b64encode(image_file.read()).decode('utf-8')
return f"data:{mime_type};base64,{base64_encoded_data}"
2. Detail Parameter Settings
| Setting | Oppførsel | Use case | Token-påvirkning |
|---|---|---|---|
auto |
Modellen velger selv basert på bildestørrelse | Default, balansert | Varierer |
low |
512×512 lavoppløselig analyse | Rask responsgivning, grov kategorisering | Lavt (85 tokens GPT-4o) |
high |
Segmentert analyse i 512×512-blokker | Detaljanalyse, OCR, objektdeteksjon | Høyt (4160+ tokens) |
3. Message Content Array Structure
Multimodale prompts bruker content-array i stedet for enkel string:
messages=[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Describe this picture:"
},
{
"type": "image_url",
"image_url": {
"url": "<image_url>",
"detail": "high"
}
}
]
}
],
max_tokens=2000
Viktig: Alltid sett max_tokens eller output blir trunkert.
Arkitekturmønstre
Pattern 1: Single Image Analysis
Bruksområde: Bildeanalyse, beskrivelse, kategorisering Best practice: Plasser bildet FØR teksten i prompten
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": image_url}},
{"type": "text", "text": "What objects are visible in this image?"}
]
}
],
max_tokens=500
)
Pattern 2: Multi-Image Comparison
Bruksområde: Before/after, A/B testing, damage assessment Begrensning: Maks 10 bilder per request
content = [
{"type": "text", "text": "Compare these two images and identify differences:"},
{"type": "image_url", "image_url": {"url": image1_url, "detail": "high"}},
{"type": "image_url", "image_url": {"url": image2_url, "detail": "high"}}
]
Pattern 3: Few-shot Learning with Images
Bruksområde: Konsistent formatering, klassifisering med eksempler
messages = [
{"role": "system", "content": "You classify dog breeds with weight and height."},
{"role": "user", "content": [
{"type": "text", "text": "Q: What breed is this?"},
{"type": "image_url", "image_url": {"url": pomeranian_url}}
]},
{"role": "assistant", "content": "Breed: Pomeranian; weight: 3-7 lbs; height: 8-14 inches"},
{"role": "user", "content": [
{"type": "text", "text": "Q: What breed is this?"},
{"type": "image_url", "image_url": {"url": new_dog_url}}
]}
]
Pattern 4: Step-by-step Visual Analysis
Bruksområde: Komplekse scenarioer, recipe extraction, damage assessment
# Steg 1: Beskrivelse
"First, describe everything you see in this image in detail."
# Steg 2: Ekstraksjon
"Based on your description, extract the recipe ingredients and instructions."
# Steg 3: Strukturering
"Format the output as a JSON object with 'ingredients' and 'steps' arrays."
Pattern 5: Multimodal RAG (Retrieval-Augmented Generation)
Bruksområde: Enterprise search over dokument med bilder/diagrammer
To tilnærminger:
- Image verbalization: LLM beskriver bilder → embeddes som tekst → hybrid search
- Direct multimodal embeddings: Bilder og tekst embeddes direkte i samme vektorrom
| Tilnærming | Fordel | Ulempe | Use case |
|---|---|---|---|
| Verbalization | Semantisk dybde, LLM-sitérbare beskrivelser | LLM-kall per bilde, høyere latency | Diagrammer, flowcharts, infografikk |
| Direct embeddings | Rask, ingen LLM-kall ved indexing | Ingen forklaring av relasjoner | Visual similarity, produktsøk |
Azure AI Search multimodal pipeline (Verified MCP 2026-08-25):
- Content extraction — to anbefalte innebygde skills:
- Document Extraction skill: rask prototyping/produksjon der eksakt posisjon ikke kreves; bilde-posisjonsmetadata kun for PDF; ingen innebygd chunking (bruk Text Split skill)
- Azure Content Understanding skill: avansert — cross-page tabeller, semantisk chunking (innebygd), AI-genererte bildebeskrivelser (når
modelNameogmodelDeploymenter konfigurert, tilgjengelig fra REST API2026-05-01-preview), og tekst-/bilde-posisjonsmetadata for blant annet PDF, DOCX, XLSX og PPTX - (Document Layout skill er fortsatt støttet for eksisterende pipelines, men for nye skillsets anbefaler Microsoft Azure Content Understanding skill, som slår sammen ekstraksjon og chunking i én skill.)
- Text chunking: Text Split skill (ikke nødvendig med Content Understanding, som chunker semantisk)
- Image verbalization: GenAI Prompt skill + LLM (phi-4, gpt-4o, gpt-5) → naturlig-språklig beskrivelse
- Embedding: Azure OpenAI / Microsoft Foundry / Azure Vision multimodal embeddings
- Knowledge store: Lagrer bilder for retrieval; image-lokasjon lagres i indeks for sitert visning
To retrieval-stier:
- Verbalized content → hybrid queries (text + vector). Gir semantisk dybde og LLM-siterbare beskrivelser.
- Direct multimodal embeddings (Azure Vision) → image-to-vector queries. Effektiv visual similarity uten LLM-kall ved indexing.
- Mange løsninger kombinerer begge: forklaringsrike visuals verbaliseres, foto/produktbilder embeddes direkte.
Beslutningsveiledning
Når bruke multimodal prompting?
| Scenario | Anbefalt tilnærming | Detail setting |
|---|---|---|
| Produktkatalog beskrivelser | Single image + kontekstuell system prompt | auto eller high |
| Skadevurdering (forsikring) | Multi-image + task-oriented prompt | high |
| OCR + strukturert ekstraksjon | High detail + step-by-step prompting | high |
| Social media content moderation | Low detail for rask screening | low |
| Medisinske bilder | IKKE bruk (out of scope for modellen) | N/A |
Prompt Engineering Prinsipper
| Prinsipp | Beskrivelse | Eksempel |
|---|---|---|
| Contextual specificity | Legg til kontekst om bruksområde | "Describe for an outdoor product catalog, enthusiastic tone" |
| Task-oriented | Definer spesifikk oppgave | "Analyze car damage for insurance report, detail all visible damage" |
| Handle refusals | Be om forklaring, bryt ned request | "What information do you need to plan this meal?" |
| Add examples | Few-shot learning med bilde+tekst par | Se Pattern 3 over |
| Break down requests | Del komplekse oppgaver i steg | Se Pattern 4 over |
| Define output format | Spesifiser JSON, Markdown, HTML, osv. | "Return as JSON with 'ingredients' and 'steps' arrays" |
Håndtering av refusals
# Initial prompt
"Plan this meal" # → "Sorry, I can't provide that information."
# Follow-up strategy
"What information do you need?"
# → Modellen lister opp: antall personer, allergier, anledning, osv.
# Refined prompt
"Plan a dinner for 4 people, vegetarian, casual setting. Image shows [...]"
# → Modellen gir detaljert plan
Integrasjon med Microsoft-stakken
Azure OpenAI Service
Endpoint: https://{RESOURCE_NAME}.openai.azure.com/openai/v1/chat/completions
Autentisering:
- API key:
api-keyheader - Managed Identity:
DefaultAzureCredential+ bearer token provider
Python SDK:
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
)
Microsoft Foundry (tidligere Azure AI Studio)
Supported models for multimodal:
- GPT-5 series (gpt-5, gpt-5-mini, gpt-5-nano)
- GPT-4.1 series
- GPT-4.5
- GPT-4o series (gpt-4o, gpt-4o-mini)
- o-series reasoning models (o1, o3, o4-mini)
Model deployment types:
- Standard deployment (region-bound)
- Global-standard deployment (dynamic routing, høyere quota)
Prompt Flow Integration
Azure OpenAI GPT-4 Turbo with Vision tool:
# Prompt template
# system:
As an AI assistant, your task involves interpreting images and responding to questions.
Remember to provide accurate answers based on the information present in the image.
# user:
Can you tell me what the image depicts?

Tool configuration:
- Select Azure OpenAI connection
- Specify deployment (GPT-4o, GPT-4o-mini, etc.)
- Set
image_inputparameter (URL eller upload) - Validate and parse input
- Run flow
Azure AI Search Multimodal Integration
Import data wizard → Multimodal RAG:
Forutsetninger:
| Provider | Image verbalization | Multimodal embeddings |
|---|---|---|
| Azure Foundry | phi-4, gpt-4o, gpt-5 (LLM) + text-embedding-3-* | N/A |
| Azure OpenAI | gpt-4o, gpt-5 (LLM) + text-embedding-3-* | N/A |
| Azure Vision | N/A | Multimodal embeddings (built-in) |
Pipeline-steg (wizard):
- Data source: Azure Blob / ADLS Gen2
- Content extraction: Document Extraction skill eller Azure Content Understanding skill (Document Layout skill kun for eksisterende pipelines)
- Text chunking: Text Split skill
- Image verbalization (optional): GenAI Prompt skill
- Embedding: Azure OpenAI / Foundry / Azure Vision
- Knowledge store: Lagrer bilder for retrieval
Query-tid:
- Hybrid queries (text + vector) for verbalized content
- Image-to-vector queries KUN med Azure Vision multimodal embeddings vectorizer
Power Platform Integration
AI Builder + GPT-4o via Azure OpenAI connector:
- Custom connector til Azure OpenAI endpoint
- Parse Base64-enkoded input fra Power Apps
- Return response til Power Automate flow
Offentlig sektor (Norge)
Compliance og databehandling
| Aspekt | Vurdering |
|---|---|
| GDPR | Bilder kan inneholde personopplysninger → databehandleravtale påkrevd |
| Schrems II | Azure OpenAI EU-regioner (West Europe, North Europe) anbefales |
| Sikkerhetsloven | Klassifisert informasjon: IKKE send til sky-LLM |
| Offentleglova | Vurder om bildeinnhold er offentlig eller unntatt |
Use cases offentlig sektor
| Sektor | Use case | Multimodal pattern |
|---|---|---|
| Kommunal eiendom | Skaderegistrering av bygg fra drone-bilder | Multi-image damage assessment |
| NAV | Automatisk dokumentklassifisering (skjema med vedlegg) | OCR + structured extraction |
| Helsedirektoratet | Visuell analyse av offentlige helsedata (grafer) | ⚠️ IKKE medisinske bilder |
| Kulturminnevern | Katalogisering av bygninger/artefakter | Product catalog pattern |
| Krisehåndtering | Situasjonsanalyse fra feltbilder | Step-by-step visual analysis |
Viktig: Multimodal embeddings er IKKE designet for medisinsk diagnostikk.
Kostnadskontroll
Strategier:
- Bruk
lowdetail for initielt screening,highkun for prioriterte bilder - Pre-filter bilder med Azure AI Vision (klassisk) før LLM-analyse
- Batch-prosessering med Azure Batch + OpenAI
- Monitor token usage via Azure Monitor + Cost Management
Kostnad og lisensiering
Token-kostnader (per bilde)
GPT-4o (2024-11-20 deployment):
| Detail | Dimensjon | Input tokens | Estimert kostnad (NOK)* |
|---|---|---|---|
low |
Any | 85 | ~0.11 kr |
high |
1024×1024 | 4160 | ~5.41 kr |
high |
1024×1536 (portrait) | 6240 | ~8.11 kr |
high |
1536×1024 (landscape) | 6208 | ~8.07 kr |
GPT-4o mini (2024-07-18 deployment):
| Detail | Dimensjon | Input tokens | Estimat kostnad (NOK)* |
|---|---|---|---|
low |
Any | 2833 | ~0.47 kr |
high |
1024×1024 | Lavere enn GPT-4o | ~1-2 kr |
*Basert på ca. $0.0025 per 1K input tokens GPT-4o, $0.00015 per 1K GPT-4o mini (jan 2026), vekslingskurs ~10.5 NOK/USD. Verifiser aktuelle priser.
Lisensiering
Azure OpenAI:
- Krever Azure-abonnement
- Pay-as-you-go (consumption-based)
- Ingen lisenskostnad utover API-kall
M365 Copilot:
- Multimodal capabilities i Copilot for M365 (chat with images)
- Krever M365 E3/E5 + Copilot lisens (~$30/bruker/måned)
- Begrenset til M365-kontekst (SharePoint, OneDrive, Teams)
Power Platform:
- AI Builder credits for custom connectors til Azure OpenAI
- Premium connector: $40/bruker/måned eller $200/kapasitet/måned
- Per-request costing via Azure OpenAI on top
TCO-optimalisering
| Strategi | Besparelse | Trade-off |
|---|---|---|
| Bruk GPT-4o mini i stedet for GPT-4o | ~94% | Noe lavere kvalitet |
low detail i stedet for high |
~98% (GPT-4o) | Mister findetaljer |
| Pre-filter med Azure AI Vision | 50-80% | Ekstra kompleksitet |
| Batch-prosessering (asynkront) | 50% rabatt (Azure OpenAI batch API) | Latency 24t |
| Cache responses (semantic cache) | Varierer | Treff-rate avhengig |
For arkitekten
Discovery-spørsmål
Når kunde ønsker multimodal løsning, kartlegg:
-
Bildetyper:
- Hva slags bilder? (foto, skjermbilder, diagrammer, dokumenter)
- Typisk oppløsning og størrelse?
- Volum (bilder/dag, bilder/måned)?
-
Use case:
- Hva skal skje med bildene? (kategorisering, OCR, beskrivelse, damage assessment)
- Responstidskrav? (sanntid vs. batch)
- Ønsket output-format? (JSON, tekst, strukturert data)
-
Integrasjon:
- Hvor kommer bildene fra? (bruker-upload, blob storage, SharePoint)
- Hvor skal responser? (app, database, Power BI)
- Eksisterende systemer?
-
Compliance:
- Inneholder bildene personopplysninger?
- Klassifiseringsnivå (offentlig, begrenset, konfidensiell)?
- GDPR-krav?
Decision Tree
Multimodal scenario?
├─ Volum < 100 bilder/dag
│ └─ Azure OpenAI direct API (GPT-4o mini, low detail)
│
├─ Volum 100-10k bilder/dag
│ ├─ Sanntid påkrevd?
│ │ ├─ Ja → Azure OpenAI + caching + auto-scaling
│ │ └─ Nei → Azure OpenAI Batch API (50% rabatt)
│ └─ OCR primært? → Azure AI Document Intelligence i stedet
│
├─ Volum > 10k bilder/dag
│ └─ Azure AI Search multimodal pipeline + Azure Vision embeddings
│
├─ Trengs søk over historiske bilder?
│ └─ Azure AI Search multimodal RAG (verbalization eller direct embeddings)
│
└─ RAG over PDF/Office-dokumenter med embedded diagrammer?
├─ Forklaringsrike visuals: Azure Content Understanding skill (eller Document Extraction) + GenAI Prompt verbalization
└─ Visual similarity: Azure Content Understanding + Azure Vision embeddings
Red Flags
⚠️ Unngå multimodal LLM når:
- Medisinsk diagnostikk (out of scope)
- Høy sikkerhetsgradert materiale (risiko for datalekkasje)
- Sanntids-video (bruk Azure Video Indexer i stedet)
- Kun OCR behov (Azure AI Document Intelligence er billigere)
- Ekstrem høy volum real-time (cost explosion)
Proof-of-Concept anbefaling
2-ukers POC:
-
Uke 1: Bygg baseline med Azure OpenAI Playground
- Test 20-50 representative bilder
- Evaluer
lowvshighdetail - Test 3-5 prompt-variasjoner
- Mål accuracy og token usage
-
Uke 2: Implementer mini-pipeline
- Python/C# script med OpenAI SDK
- Integrer med blob storage
- Logger tokens og cost
- Demo til stakeholders
Success criteria:
- Accuracy > 85% på use case
- Token cost innenfor budsjett
- Latency < 5 sekunder (95th percentile)
Arkitekturmaler
Template 1: Simple image analysis API
User → Azure Function (HTTP trigger)
→ OpenAI SDK (GPT-4o mini)
→ Parse response
→ Return JSON
Template 2: Multimodal RAG
Documents (PDF) → Azure AI Search Multimodal wizard
→ GenAI Prompt skill (verbalization)
→ Azure OpenAI embedding
→ Vector index
User query → Hybrid search (text + vector)
→ GPT-4o with grounding
→ Response + image citations
Template 3: Batch processing
Blob upload → Event Grid trigger
→ Azure Function (queue message)
→ OpenAI Batch API submit
→ Poll for completion (24h)
→ Write results to Cosmos DB
Monitoring og observability
Nøkkel-metrikker:
- Tokens per request (avg, p50, p95, p99)
- Cost per image analyzed (NOK)
- Latency (end-to-end)
- Error rate (content filter, API errors)
- Accuracy (human-in-the-loop validation)
Azure Monitor dashboard:
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.COGNITIVESERVICES"
| where OperationName == "ChatCompletions_Create"
| extend tokens_used = toint(properties_s.usage.total_tokens)
| extend has_image = properties_s contains "image_url"
| summarize avg(tokens_used), percentile(tokens_used, 95) by bin(TimeGenerated, 1h), has_image
Kilder og verifisering
Microsoft Learn dokumentasjon (re-verifisert MCP 2026-06-19):
- Use vision-enabled chat models — Offisiell how-to guide for GPT-4o/GPT-4 Turbo with Vision
- Image prompt engineering techniques — Best practices for multimodal prompting
- Multimodal search in Azure AI Search (Re-verified MCP 2026-06-19) — RAG-arkitektur; to anbefalte extraction skills (Document Extraction og Azure Content Understanding; Document Layout kun for eksisterende pipelines); verbalization vs direct embeddings; image-to-vector-queries krever Azure Vision / AML multimodal embeddings-vectorizer; hybrid query-alternativ
- Azure OpenAI models — Modelloversikt og token-kostnader
- Quickstart: Multimodal search in Azure portal — Wizard-basert oppsett
- Get started with multimodal vision chat apps (Re-verified MCP 2026-06-19) — End-to-end sample app: Base64-enkoder opplastet bilde i frontend (FileReader), sender via Azure OpenAI Responses API (
input_image/input_text, default gpt-4o), managed identity-autentisering, deploy til Azure Container Apps
Code samples:
- Azure-Samples/cognitive-services-sample-data-files (GitHub)
- Microsoft Foundry multimodal RAG sample app (https://aka.ms/azs-multimodal-sample-app-repo)
Confidence markers:
- ✅ High confidence: Token counts, API structure, detail parameter behavior (direkte fra offisiell docs)
- ✅ High confidence: Prompt engineering patterns (bekreftet i Microsoft Learn)
- ⚠️ Medium confidence: Kostberegninger i NOK (basert på jan 2026 pricing, kan variere)
- ⚠️ Medium confidence: Offentlig sektor use cases (inferert fra generelle patterns, ikke Microsoft-spesifikt)
Sist verifisert: 2026-06-19 Neste review: 2026-09-19 (eller ved nye GPT-modeller/AI Search features)