Steg 9 (R4): unified migrate-corpus.mjs --write over engineering/governance/ infrastructure/security. 327 filer mutert, verified=null, prosa byte-identisk (fra første ## seksjon), advisor urørt (0 endringer). To applier-fixes oppdaget under kjøring (TDD, RED→GREEN): - insertHeaderFields: anker faller nå tilbake når en meta-linje selv passerer 500B (2 filer pakket et avsnitt i **Status:** → Type/Source landet utenfor scan-vinduet, applierens post-write-assertion fanget + restaurerte). - normalizeStaleVerified: fjerner nå ALLE stale non-date **Verified:** i 500B-vinduet, inkl. stray body-dup rett under --- (9 mlops-genaiops-filer var ellers falskt "verified"/fresh, droppet fra worklist). Operatør-godkjent utvidelse av carve-out; kun stray metadata-linjer, aldri prosa. test-transform-criterion: precondition oppdatert til post-migrasjons-sannhet (fila bærer nå Source). Suite 728/728 grønn.
372 lines
14 KiB
Markdown
372 lines
14 KiB
Markdown
# GPT-4o Vision Architecture and Capabilities
|
|
|
|
**Last updated:** 2026-02
|
|
**Status:** GA
|
|
**Category:** Multi-Modal AI
|
|
**Type:** reference
|
|
|
|
---
|
|
|
|
## Innhold
|
|
|
|
- [Introduksjon](#introduksjon)
|
|
- [GPT-4o Vision Capabilities](#gpt-4o-vision-capabilities)
|
|
- [Token-berekningsmodell for bilete](#token-berekningsmodell-for-bilete)
|
|
- [Native vs. External Vision Integration](#native-vs-external-vision-integration)
|
|
- [Performance og Latency-optimalisering](#performance-og-latency-optimalisering)
|
|
- [Brukstilfelle for norsk offentleg sektor](#brukstilfelle-for-norsk-offentleg-sektor)
|
|
- [Avgrensingar og kjende utfordringar](#avgrensingar-og-kjende-utfordringar)
|
|
- [For Cosmo](#for-cosmo)
|
|
|
|
## Introduksjon
|
|
|
|
GPT-4o (Omni) representerer en fundamental endring i korleis multimodale AI-modellar fungerer. I motsetnad til tidlegare tilnærmingar der tekst- og bildeforståing var separate modellar kopla saman, integrerer GPT-4o tekst og bilete i ein enkelt modell. Dette gir lågare latency, betre kontekstuell forståing og meir nøyaktige svar som kombinerer visuell og tekstuell informasjon.
|
|
|
|
For norsk offentleg sektor opnar GPT-4o vision nye moglegheiter innanfor dokumentanalyse, tilgjengelegheitsvurdering, kartanalyse, byggesaksbehandling og kvalitetssikring av offentlege tenester. Modellen er tilgjengeleg via Azure OpenAI Service, noko som sikrar at data blir behandla innanfor Microsofts enterprise-grade tryggleiksrammeverk med full GDPR-etterleving.
|
|
|
|
Microsoft Foundry gir ein samla plattform for å deploye, administrere og overvake GPT-4o vision-deployments med innebygd innhaldsfiltrering, kostnadshandtering og tilgangskontroll via Microsoft Entra ID.
|
|
|
|
---
|
|
|
|
## GPT-4o Vision Capabilities
|
|
|
|
### Modelloversikt
|
|
|
|
| Eigenskap | GPT-4o | GPT-4o mini | GPT-4 Turbo with Vision |
|
|
|-----------|--------|-------------|------------------------|
|
|
| **Max kontekstvindu** | 128 000 tokens | 128 000 tokens | 128 000 tokens |
|
|
| **Max output tokens** | 16 384 | 16 384 | 4 096 |
|
|
| **Bildeinndata** | Ja | Ja | Ja |
|
|
| **JSON Mode** | Ja | Ja | Ja |
|
|
| **Parallel function calling** | Ja | Ja | Ja |
|
|
| **Structured outputs** | Ja (2024-08-06+) | Ja | Nei |
|
|
| **Fleirspråkleg ytelse** | Overlegen | God | Standard |
|
|
| **Vision fine-tuning** | Ja (2024-08-06) | Nei | Nei |
|
|
|
|
### Støtta bildeformat
|
|
|
|
GPT-4o aksepterer bilete i følgjande format:
|
|
|
|
- **JPEG** — Mest kompakt, eigna for foto
|
|
- **PNG** — Støttar transparens, eigna for diagram og skjermbilete
|
|
- **WEBP** — Moderne format med god komprimering
|
|
- **GIF** — Statiske bilete (ikkje animerte)
|
|
|
|
Bilete kan leverast på to måtar:
|
|
|
|
1. **URL-referanse** — Offentleg tilgjengeleg URL til bildet
|
|
2. **Base64-koda data** — Inline bildedata i API-kallet
|
|
|
|
```json
|
|
{
|
|
"messages": [
|
|
{
|
|
"role": "user",
|
|
"content": [
|
|
{
|
|
"type": "text",
|
|
"text": "Beskriv innhaldet i dette dokumentet."
|
|
},
|
|
{
|
|
"type": "image_url",
|
|
"image_url": {
|
|
"url": "data:image/jpeg;base64,<base64_encoded_data>",
|
|
"detail": "high"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Ansiktsblurring og personvern
|
|
|
|
Azure OpenAI utfører automatisk ansiktsblurring på alle bildeinndata til GPT-4o. Dette beskyttar personvernet til individ i bileta og er spesielt relevant for norsk offentleg sektor som må etterleve personopplysningslova. Blurringa skal ikkje påverke kvaliteten på analysen i dei fleste tilfelle, men modellen kan i nokre tilfelle referere til blurringa.
|
|
|
|
> **Viktig:** Modellen utfører ikkje ansiktsgjenkjenning eller individuell identifisering. Kontekstuelle signal (som klede, logo, stadier) kan framleis gjere at modellen identifiserer kjende personar.
|
|
|
|
---
|
|
|
|
## Token-berekningsmodell for bilete
|
|
|
|
### Lav oppløysingsmodus (detail: low)
|
|
|
|
Lav oppløysningsmodus prosesserer biletet som ein 512x512 versjon uavhengig av originalstorleik.
|
|
|
|
| Modell | Token per bilete | Kommentar |
|
|
|--------|-----------------|-----------|
|
|
| **GPT-4o** | 85 tokens | Flat rate, uavhengig av storleik |
|
|
| **GPT-4o mini** | 2 833 tokens | Flat rate, uavhengig av storleik |
|
|
|
|
**Brukstilfelle:** Rask klassifisering, generell bildeforståing der detaljar ikkje er kritiske.
|
|
|
|
### Høg oppløysingsmodus (detail: high)
|
|
|
|
Høg oppløysningsmodus gir detaljert analyse gjennom ein fleirstegs prosess:
|
|
|
|
**Steg 1: Resizing**
|
|
1. Biletet blir skalert til å passe innanfor eit 2048 x 2048 pikslar kvadrat
|
|
2. Om kortaste side er større enn 768 pikslar, skalerast bildet slik at kortaste side er 768 pikslar
|
|
3. Aspektforholdet bevares
|
|
|
|
**Steg 2: Tile-beregning**
|
|
- Det skalerte bildet delast i 512 x 512 piksel-fliser
|
|
- Delvis utfylte fliser rundast opp til heile fliser
|
|
|
|
**Steg 3: Token-beregning**
|
|
|
|
| Modell | Token per tile | Base tokens | Formel |
|
|
|--------|---------------|-------------|--------|
|
|
| **GPT-4o** | 170 | 85 | `(tiles x 170) + 85` |
|
|
| **GPT-4o mini** | 5 667 | 2 833 | `(tiles x 5667) + 2833` |
|
|
|
|
### Eksempel: Token-beregning for ulike biletestorleikar
|
|
|
|
| Originalstorleik | Resized til | Tiles | GPT-4o tokens | GPT-4o mini tokens |
|
|
|-------------------|-------------|-------|---------------|-------------------|
|
|
| 512 x 512 | 512 x 512 | 1 | 255 | 8 500 |
|
|
| 1024 x 1024 | 768 x 768 | 4 | 765 | 25 501 |
|
|
| 2048 x 4096 | 768 x 1536 | 6 | 1 105 | 36 835 |
|
|
| 4096 x 8192 (low) | 512 x 512 | - | 85 | 2 833 |
|
|
|
|
### Detail-parameter
|
|
|
|
```json
|
|
{
|
|
"type": "image_url",
|
|
"image_url": {
|
|
"url": "<image_url>",
|
|
"detail": "high" // "low", "high", eller "auto"
|
|
}
|
|
}
|
|
```
|
|
|
|
| Verdi | Oppførsel |
|
|
|-------|-----------|
|
|
| `auto` | Standard. Modellen vel mellom low og high basert på biletestorleik |
|
|
| `low` | Brukar alltid 512x512, raskare respons, færre tokens |
|
|
| `high` | Full analyse med tile-basert prosessering |
|
|
|
|
---
|
|
|
|
## Native vs. External Vision Integration
|
|
|
|
### Native integrasjon (Chat Completions API)
|
|
|
|
Native bildeanalyse brukar GPT-4o direkte via Chat Completions API. Bileta sendast som ein del av meldingsstrukturen.
|
|
|
|
**Fordelar:**
|
|
- Lågast latency — eitt API-kall
|
|
- Full kontekstuell forståing mellom tekst og bilete
|
|
- Structured outputs for standardisert respons
|
|
- Enkel implementering
|
|
|
|
**Avgrensingar:**
|
|
- Maks 64 bilete per request (ved vision fine-tuning)
|
|
- Kvar bilete maks 10 MB
|
|
- Ingen spesialisert dokumentforståing (layout, tabellar)
|
|
|
|
```python
|
|
from openai import AzureOpenAI
|
|
|
|
client = AzureOpenAI(
|
|
api_version="2024-08-06",
|
|
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
|
|
azure_ad_token_provider=token_provider
|
|
)
|
|
|
|
response = client.chat.completions.create(
|
|
model="gpt-4o",
|
|
messages=[
|
|
{
|
|
"role": "system",
|
|
"content": "Du er ein dokumentanalytiker for norsk offentleg sektor."
|
|
},
|
|
{
|
|
"role": "user",
|
|
"content": [
|
|
{"type": "text", "text": "Analyser dette skjemaet og ekstraher nøkkelfelter."},
|
|
{
|
|
"type": "image_url",
|
|
"image_url": {
|
|
"url": f"data:image/png;base64,{encoded_image}",
|
|
"detail": "high"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
],
|
|
max_tokens=4096
|
|
)
|
|
```
|
|
|
|
### External vision med Azure AI Services
|
|
|
|
For avanserte dokumentscenario, kombiner GPT-4o med spesialiserte Azure AI-tenester:
|
|
|
|
| Teneste | Brukstilfelle | Integrasjon med GPT-4o |
|
|
|---------|--------------|----------------------|
|
|
| **Azure Document Intelligence** | Strukturert dokumentekstraksjon, tabellar, skjema | Ekstraher strukturdata, send til GPT-4o for resonnering |
|
|
| **Azure AI Vision** | Objektdeteksjon, OCR, bildeanalyse | Detaljert bildeanalyse som input til GPT-4o |
|
|
| **Azure Video Indexer** | Videoanalyse, ansiktsdeteksjon | Ekstraher keyframes, analyser med GPT-4o |
|
|
| **Azure Content Understanding** | Semantisk chunking, cross-page tabellar | Avansert dokumentforståing |
|
|
|
|
**Arkitekturmønster: Enrichment pipeline**
|
|
|
|
```
|
|
Dokument → Document Intelligence → Strukturerte felt
|
|
→ Tabellar (JSON)
|
|
→ Bilete (ekstraherte)
|
|
↓
|
|
GPT-4o Vision Analysis
|
|
↓
|
|
Kombinert innsikt (tekst + visuell)
|
|
```
|
|
|
|
### Vision Fine-Tuning
|
|
|
|
GPT-4o (versjon 2024-08-06) støttar fine-tuning med bildedata:
|
|
|
|
**Krav:**
|
|
- Maks 50 000 eksempel med bilete per treningsfil
|
|
- Maks 64 bilete per eksempel
|
|
- Kvar bilete maks 10 MB
|
|
- Format: JPEG, PNG, WEBP (RGB eller RGBA)
|
|
- Minimum 10 eksempel
|
|
|
|
**Avgrensingar:**
|
|
- Bilete med personar/ansikt blir ekskludert frå treningsdata
|
|
- CAPTCHAs blir ekskludert
|
|
- Bilete kan ikkje vere output frå assistant-meldingar
|
|
|
|
---
|
|
|
|
## Performance og Latency-optimalisering
|
|
|
|
### Strategiar for lågare latency
|
|
|
|
| Strategi | Effekt | Trade-off |
|
|
|----------|--------|-----------|
|
|
| Bruk `detail: low` | 50-70% raskare | Lågare bildekvalitet |
|
|
| Reduser bildeoppløysing før sending | 20-40% raskare | Manuell preprosessering |
|
|
| Batch-prosessering | Betre throughput | Høgare per-request latency |
|
|
| Streaming responses | Opplevd raskare | Inga endring i total tid |
|
|
| Bruk GPT-4o mini | Raskare, billegare | Noko lågare kvalitet |
|
|
|
|
### Bildeoptimalisering for Azure OpenAI
|
|
|
|
```python
|
|
from PIL import Image
|
|
import io
|
|
import base64
|
|
|
|
def optimize_image_for_vision(image_path, max_size=2048, quality=85):
|
|
"""Optimaliser bilete for GPT-4o vision API."""
|
|
img = Image.open(image_path)
|
|
|
|
# Resize om nødvendig
|
|
if max(img.size) > max_size:
|
|
ratio = max_size / max(img.size)
|
|
new_size = (int(img.size[0] * ratio), int(img.size[1] * ratio))
|
|
img = img.resize(new_size, Image.LANCZOS)
|
|
|
|
# Konverter til RGB om nødvendig
|
|
if img.mode in ('RGBA', 'P'):
|
|
img = img.convert('RGB')
|
|
|
|
# Komprimer til JPEG
|
|
buffer = io.BytesIO()
|
|
img.save(buffer, format='JPEG', quality=quality)
|
|
buffer.seek(0)
|
|
|
|
return base64.b64encode(buffer.read()).decode('utf-8')
|
|
```
|
|
|
|
### Rate Limits og kvotering
|
|
|
|
| Deployment type | TPM (Tokens Per Minute) | RPM (Requests Per Minute) |
|
|
|-----------------|------------------------|--------------------------|
|
|
| Standard | Varierer per region | Avheng av TPM |
|
|
| Global Standard | Høgare kvoter | Avheng av TPM |
|
|
| Provisioned (PTU) | Garantert throughput | Avheng av PTU-tal |
|
|
|
|
> **Viktig:** Bilete telles mot TPM-kvoten. Eit stort bilete i `high` detail-modus kan bruke over 1000 tokens, noko som reduserer effektiv RPM.
|
|
|
|
### Caching-strategi for biletanalyse
|
|
|
|
For gjentakande analysar av same bilete, implementer caching:
|
|
|
|
```python
|
|
import hashlib
|
|
import json
|
|
from functools import lru_cache
|
|
|
|
def get_image_hash(image_data: bytes) -> str:
|
|
"""Generer hash for biletecaching."""
|
|
return hashlib.sha256(image_data).hexdigest()
|
|
|
|
# Redis-basert caching for produksjon
|
|
async def analyze_image_cached(image_data: bytes, prompt: str, cache_client):
|
|
cache_key = f"vision:{get_image_hash(image_data)}:{hashlib.md5(prompt.encode()).hexdigest()}"
|
|
|
|
cached = await cache_client.get(cache_key)
|
|
if cached:
|
|
return json.loads(cached)
|
|
|
|
result = await call_gpt4o_vision(image_data, prompt)
|
|
await cache_client.set(cache_key, json.dumps(result), ex=3600)
|
|
return result
|
|
```
|
|
|
|
---
|
|
|
|
## Brukstilfelle for norsk offentleg sektor
|
|
|
|
### Dokumentanalyse og saksbehandling
|
|
|
|
| Scenario | Detail-modus | Tilnærming |
|
|
|----------|--------------|-----------|
|
|
| Byggesøknad med teikningar | `high` | Ekstraher mål, material, plassering |
|
|
| Passfoto-validering | `low` | Grunnleggjande kvalitetssjekk (ansiktsblurring aktiv) |
|
|
| Vegskilt-inventering | `high` | Klassifisering og tilstandsvurdering |
|
|
| Kartanalyse | `high` | Identifiser markerte område, målestokk |
|
|
| Fakturabehandling | `high` | Kombiner med Document Intelligence |
|
|
|
|
### Tilgjengelegheitsvurdering
|
|
|
|
GPT-4o kan analysere bilete av offentlege bygg og infrastruktur for tilgjengelegheitsutfordringar:
|
|
|
|
```python
|
|
accessibility_prompt = """
|
|
Analyser dette biletet av ein offentleg bygning.
|
|
Vurder følgjande tilgjengelegheitskriterier:
|
|
1. Rullestolrampe tilgjengeleg?
|
|
2. Taktile leielinjer synlege?
|
|
3. Kontrastmerking på trapper?
|
|
4. Automatiske dører?
|
|
Gje ein strukturert vurdering i JSON-format.
|
|
"""
|
|
```
|
|
|
|
---
|
|
|
|
## Avgrensingar og kjende utfordringar
|
|
|
|
| Avgrensing | Detaljar | Workaround |
|
|
|-----------|---------|-----------|
|
|
| Ingen bildegenereringsevne | GPT-4o analyserer bilete, genererer ikkje | Bruk DALL-E 3 / GPT-image-1 |
|
|
| Metadata ikkje tilgjengeleg | EXIF, geo-data, kamerainfo blir ikkje lest | Ekstraher metadata separat |
|
|
| Spatial resonnering | Avgrensa evne til nøyaktig avstandsvurdering | Bruk spesialiserte vision-modellar |
|
|
| Handskrift | Variabel kvalitet, spesielt for norsk | Kombiner med Document Intelligence |
|
|
| Tidsavgrensing | Komplekse bilete kan ta opptil 60 sekund | Optimaliser biletestorleik |
|
|
|
|
---
|
|
|
|
## For Cosmo
|
|
|
|
- **GPT-4o vision brukar ein to-nivå token-modell:** `low` (flat 85 tokens) vs. `high` (tile-basert, 170 tokens per 512x512 tile + 85 base). Alltid berekn token-kostnad før du designar ein pipeline med mange bilete.
|
|
- **Ansiktsblurring er automatisk i Azure OpenAI** og kan ikkje deaktiverast for GPT-4o. Dette er ein fordel for norsk personvern, men avgrensar brukstilfelle som ansiktsbasert identifisering.
|
|
- **Kombiner native vision med Azure Document Intelligence** for strukturert dokumentanalyse. GPT-4o gir generell forståing; Document Intelligence gir presis feltekstraksjon.
|
|
- **Vision fine-tuning er tilgjengeleg for GPT-4o (2024-08-06)** og kan forbetrast for spesifikke domene som norske byggesøknadar eller vegskilt. Merk at bilete med personar blir filtrert ut.
|
|
- **For kostnadsoptimalisering, bruk `detail: auto`** som standard og `low` for screeing/klassifisering. Reservar `high` for tilfelle der detaljar er kritiske.
|