feat(ultraplan-local): v1.6.0 — /ultraresearch-local deep research command
Add /ultraresearch-local for structured research combining local codebase analysis with external knowledge via parallel agent swarms. Produces research briefs with triangulation, confidence ratings, and source quality assessment. New command: /ultraresearch-local with modes --quick, --local, --external, --fg. New agents: research-orchestrator (opus), docs-researcher, community-researcher, security-researcher, contrarian-researcher, gemini-bridge (all sonnet). New template: research-brief-template.md. Integration: --research flag in /ultraplan-local accepts pre-built research briefs (up to 3), enriches the interview and exploration phases. Planning orchestrator cross-references brief findings during synthesis. Design principle: Context Engineering — right information to right agent at right time. Research briefs are structured artifacts in the pipeline: ultraresearch → brief → ultraplan --research → plan → ultraexecute. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
commit
baa2d0220b
488 changed files with 213221 additions and 0 deletions
|
|
@ -0,0 +1,596 @@
|
|||
# Vector Storage and Embedding Cost Optimization
|
||||
|
||||
**Last updated:** 2026-02
|
||||
**Status:** GA
|
||||
**Category:** Cost Optimization & FinOps for AI
|
||||
|
||||
---
|
||||
|
||||
## Introduksjon
|
||||
|
||||
Vector storage og embeddings utgjør ofte den største kostnadsposten i moderne RAG-løsninger (Retrieval Augmented Generation). En typisk embedding-modell genererer vektorer på 1536 dimensjoner (text-embedding-ada-002) eller opptil 3072 dimensjoner (text-embedding-3-large), der hver dimensjon lagres som et 32-bit flyttall (float32). Dette gir en råstørrelse på 6-12 KB per dokument, før man tar høyde for algoritme-overhead og indekseringsstrukturer.
|
||||
|
||||
For organisasjoner som indekserer millioner av dokumenter, kan kostnadene raskt løpe fra seg — både i form av Azure-lagringsregning og minnekrav for søkeytelse. Heldigvis finnes det nå flere Microsoft-støttede teknikker som kan redusere vector index-størrelse med opptil 92,5 % uten vesentlig tap av søkekvalitet.
|
||||
|
||||
Denne referansen dekker fem hovedområder for kostnadsoptimalisering: (1) valg av embedding-modell og dimensjonalitet, (2) quantization (scalar og binary), (3) lagringsoptimalisering, (4) Matryoshka Representation Learning (MRL) for dimension-reduksjon, og (5) algoritmevalg og skaleringsstrategier. Sammen utgjør disse en helhetlig tilnærming til å bygge kostnadseffektive, skalerbare vector search-løsninger på Microsoft Azure.
|
||||
|
||||
## Kjernekomponenter
|
||||
|
||||
### Embedding-modell-valg
|
||||
|
||||
| Modell | Dimensjoner | Pris (input, per 1M tokens) | Pris (output) | Bruksområde |
|
||||
|--------|-------------|------------------------------|---------------|-------------|
|
||||
| **text-embedding-ada-002** | 1536 | ~$0.10 USD | N/A | Legacy, god baseline-ytelse |
|
||||
| **text-embedding-3-small** | 1536 (default) | ~$0.02 USD | N/A | Kostnadseffektiv, god ytelse, MRL-støtte |
|
||||
| **text-embedding-3-large** | 3072 (default) | ~$0.13 USD | N/A | Høyeste kvalitet, MRL-støtte, støtter truncation |
|
||||
|
||||
**Konfidensgradering:**
|
||||
- Ada-002: Verified (Microsoft Learn, januar 2026)
|
||||
- text-embedding-3-*: Verified (Microsoft Learn, januar 2026)
|
||||
- Prisene er omtrentlige og kan variere per region og avtaletype
|
||||
|
||||
### Quantization-teknikker
|
||||
|
||||
| Metode | Kompresjon | Lagringsreduksjon | Kvalitetsimpakt | Rescoring |
|
||||
|--------|------------|-------------------|-----------------|-----------|
|
||||
| **Scalar (int8)** | float32 → int8 | 4x reduksjon | Minimal (med rescoring) | Krever original float32 |
|
||||
| **Binary** | float32 → 1 bit | Opptil 28x reduksjon | Lav (med oversampling) | Kan bruke dot-product |
|
||||
| **float16** | float32 → float16 | 2x reduksjon | Neglisjerbar | Ikke nødvendig |
|
||||
|
||||
**Benchmark (Azure AI Search interntesting):**
|
||||
- Baseline (float32): 21.36 MB storage, 4.83 MB vector index
|
||||
- Scalar quantization: 17.76 MB storage, 1.22 MB vector index (75 % reduksjon)
|
||||
- Binary quantization: 4.92 MB storage, 1.22 MB vector index (77 % total reduksjon)
|
||||
- **Alle teknikker kombinert**: 4.92 MB storage, 1.22 MB vector index (92,5 % reduksjon)
|
||||
|
||||
### Dimension-reduksjon (MRL)
|
||||
|
||||
Matryoshka Representation Learning (MRL) er bakt inn i text-embedding-3-modellene. Dette betyr at man kan trunkere dimensjoner fra 3072 → 1024 eller 1536 → 512 med minimal tap av semantisk informasjon.
|
||||
|
||||
| Modell | Original dim. | Trunkert dim. | Lagringsreduksjon | MTEB-score (approx) |
|
||||
|--------|---------------|---------------|-------------------|---------------------|
|
||||
| text-embedding-3-large | 3072 | 1024 | 3x | ~95 % av original |
|
||||
| text-embedding-3-small | 1536 | 512 | 3x | ~92 % av original |
|
||||
|
||||
MRL fungerer best i kombinasjon med binary quantization. Anbefalt minstegrense: 1024 dimensjoner ved bruk av binary quantization (under 1000 gir merkbar kvalitetsforringelse).
|
||||
|
||||
### Lagringsoptimalisering
|
||||
|
||||
Azure AI Search lagrer vektorer i to kopier:
|
||||
1. **Index copy** (i minne, brukes til query execution)
|
||||
2. **Stored copy** (på disk, brukes til retrieval i query response)
|
||||
|
||||
Ved å sette `stored: false` kan man spare opptil 50 % disklagring, men man mister muligheten til å returnere vektorer i query-responser. Dette er akseptabelt i de fleste RAG-scenarier der kun tekst/metadata returneres.
|
||||
|
||||
**Advarsel:** Ved `stored: false` må man re-sende fullstendige vektorer ved partial document updates, ellers går data tapt.
|
||||
|
||||
### Vector index-algoritmer
|
||||
|
||||
| Algoritme | Minnekrav | Query-latens | Bruksområde |
|
||||
|-----------|-----------|--------------|-------------|
|
||||
| **HNSW** | Høy (graph i minne) | 20-50 ms (standard tier) | Produksjon, høy throughput |
|
||||
| **Exhaustive KNN** | Lav (paged loading) | Høyere | Utviklingsmiljø, små datasett |
|
||||
|
||||
HNSW (Hierarchical Navigable Small Worlds) er anbefalt for produksjon, men krever at hele grafen ligger i minne. Dette driver opp vector quota-forbruk. Exhaustive KNN laster data on-demand og teller ikke mot vector quota, men er tregere.
|
||||
|
||||
## Arkitekturmønstre
|
||||
|
||||
### Mønster 1: Maksimal kompresjon (Binary + MRL + no stored)
|
||||
|
||||
**Beskrivelse:**
|
||||
Kombinerer binary quantization, MRL dimension-reduksjon, og `stored: false` for absolutt laveste kostnader.
|
||||
|
||||
**Fordeler:**
|
||||
- Opptil 96 % reduksjon i vector index size
|
||||
- 50 % disklagringsreduksjon
|
||||
- Raskere queries (mindre data å scanne)
|
||||
- Lavere minnekrav
|
||||
|
||||
**Ulemper:**
|
||||
- Krever text-embedding-3 modeller
|
||||
- Kan ikke returnere vektorer i responses
|
||||
- Krever omhyggelig testing av search quality (NDCG-metrics)
|
||||
- Partial document updates må inkludere fullstendige vektorer
|
||||
|
||||
**Egnet for:**
|
||||
- Store datasett (10M+ dokumenter)
|
||||
- Tight budsjetter
|
||||
- Embeddings > 1024 dimensjoner
|
||||
- Scenarier der kun tekst/metadata returneres
|
||||
|
||||
**Konfigurasjon (Azure AI Search):**
|
||||
```json
|
||||
{
|
||||
"vectorSearch": {
|
||||
"compressions": [{
|
||||
"name": "binary-mrl",
|
||||
"kind": "binaryQuantization",
|
||||
"rescoringOptions": {
|
||||
"enableRescoring": true,
|
||||
"defaultOversampling": 10,
|
||||
"rescoreStorageMethod": "discardOriginals"
|
||||
},
|
||||
"truncationDimension": 1024
|
||||
}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Mønster 2: Balansert tilnærming (Scalar + float16)
|
||||
|
||||
**Beskrivelse:**
|
||||
Bruker scalar quantization (int8) med float16 som base-type, beholder original vektorer for rescoring.
|
||||
|
||||
**Fordeler:**
|
||||
- God balanse mellom kostnad og kvalitet
|
||||
- Støtter rescoring med original precision
|
||||
- Enklere å implementere enn binary
|
||||
- Kan returnere vektorer i responses
|
||||
|
||||
**Ulemper:**
|
||||
- Krever lagring av både quantized og original vektorer
|
||||
- Mindre kompresjon enn binary (4x vs 28x)
|
||||
- Høyere minnekrav enn binary
|
||||
|
||||
**Egnet for:**
|
||||
- Medium datasett (1M-10M dokumenter)
|
||||
- Scenarier med strenge kvalitetskrav
|
||||
- Behov for vector-retur i responses
|
||||
- Organisasjoner som er nye på quantization
|
||||
|
||||
**Konfigurasjon (Azure AI Search):**
|
||||
```json
|
||||
{
|
||||
"fields": [{
|
||||
"name": "contentVector",
|
||||
"type": "Collection(Edm.Half)",
|
||||
"dimensions": 1536,
|
||||
"vectorSearchProfile": "scalar-profile"
|
||||
}],
|
||||
"vectorSearch": {
|
||||
"compressions": [{
|
||||
"name": "scalar-int8",
|
||||
"kind": "scalarQuantization",
|
||||
"scalarQuantizationParameters": {"quantizedDataType": "int8"},
|
||||
"rescoringOptions": {
|
||||
"enableRescoring": true,
|
||||
"defaultOversampling": 10,
|
||||
"rescoreStorageMethod": "preserveOriginals"
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Mønster 3: Hybrid (Full-precision + Quantized fields)
|
||||
|
||||
**Beskrivelse:**
|
||||
Kombinerer ett high-precision vector field (float32, ingen quantization) med ett quantized field (binary) i samme index. Bruker quantized field for rask pre-filtering, deretter rescoring mot full-precision.
|
||||
|
||||
**Fordeler:**
|
||||
- Maksimal search quality
|
||||
- Rask pre-filtering
|
||||
- Fleksibilitet i query-strategi
|
||||
|
||||
**Ulemper:**
|
||||
- Høyeste lagringskostnad
|
||||
- Kompleks index-design
|
||||
- Dobbel embedding-generering ved indeksering
|
||||
|
||||
**Egnet for:**
|
||||
- High-value search-scenarier (medisinsk, juridisk)
|
||||
- Hybrid search (vector + keyword) med strenge krav
|
||||
- Organisasjoner med budsjett til premium quality
|
||||
|
||||
**Konfigurasjon (Azure AI Search):**
|
||||
```json
|
||||
{
|
||||
"fields": [
|
||||
{
|
||||
"name": "contentVectorFull",
|
||||
"type": "Collection(Edm.Single)",
|
||||
"dimensions": 3072,
|
||||
"vectorSearchProfile": "full-precision-profile"
|
||||
},
|
||||
{
|
||||
"name": "contentVectorCompressed",
|
||||
"type": "Collection(Edm.Single)",
|
||||
"dimensions": 1024,
|
||||
"vectorSearchProfile": "binary-profile"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Beslutningsveiledning
|
||||
|
||||
### Beslutningstabell
|
||||
|
||||
| Scenario | Anbefalt tilnærming | Forventet besparelse |
|
||||
|----------|---------------------|---------------------|
|
||||
| **Stor kunnskapsbase (10M+ docs), tight budsjett** | Binary + MRL (1024 dim) + stored:false | 90-95 % |
|
||||
| **Medium dataset (1-10M docs), balansert kvalitet/kostnad** | Scalar + float16 + MRL (optional) | 70-80 % |
|
||||
| **Liten dataset (<1M docs), høy kvalitetskrav** | float16 eller float32, ingen quantization | 0-50 % |
|
||||
| **Legacy ada-002 embeddings, migrering planlagt** | Scalar quantization, behold originals | 60-70 % |
|
||||
| **text-embedding-3-large, ny løsning** | Binary + MRL (1024 dim) | 92-96 % |
|
||||
|
||||
### Vanlige feil
|
||||
|
||||
1. **Bruke binary quantization med <1000 dimensjoner**
|
||||
- Fører til merkbar kvalitetsforringelse
|
||||
- Løsning: Øk til minimum 1024 dimensjoner eller bruk scalar
|
||||
|
||||
2. **Glemme å teste NDCG-metrics før produksjon**
|
||||
- Quantization er lossy — alltid valider
|
||||
- Løsning: Sammenlign NDCG@10 mellom baseline og quantized index
|
||||
|
||||
3. **Sette stored:false uten å forstå konsekvensene**
|
||||
- Partial updates vil slette vector data
|
||||
- Løsning: Implementer full document replacement i update-logikk
|
||||
|
||||
4. **Oversampling satt for lavt**
|
||||
- Default er 4, anbefalt er 10-20 for binary quantization
|
||||
- Løsning: Tuner oversampling basert på query-tester
|
||||
|
||||
5. **Gjenbruke gamle vector profiles etter quantization-endringer**
|
||||
- Quantization-config krever ny vector profile
|
||||
- Løsning: Opprett ny profile, re-indekser dokumenter
|
||||
|
||||
### Røde flagg
|
||||
|
||||
- **Vector quota 90 %+ utnyttet:** Vurder umiddelbart quantization eller oppgradering til nyere search service (post-April 2024 har høyere quotas)
|
||||
- **Storage costs >50 % av total AI Search bill:** Sjekk om `stored: false` kan brukes
|
||||
- **Query latency >200ms:** For høy dimensjonalitet eller feil SKU (vurder dimension-reduksjon eller S2/S3 tier)
|
||||
- **Embedding costs >30 % av total AI-kostnad:** Bytt til text-embedding-3-small fra ada-002 eller -large
|
||||
|
||||
## Integrasjon med Microsoft-stakken
|
||||
|
||||
### Azure AI Search
|
||||
|
||||
**Vector quantization (GA siden 2024-11-01):**
|
||||
```http
|
||||
POST https://[service].search.windows.net/indexes?api-version=2025-09-01
|
||||
{
|
||||
"name": "cost-optimized-index",
|
||||
"fields": [...],
|
||||
"vectorSearch": {
|
||||
"profiles": [{
|
||||
"name": "binary-profile",
|
||||
"algorithm": "hnsw-algo",
|
||||
"compression": "binary-comp"
|
||||
}],
|
||||
"algorithms": [{
|
||||
"name": "hnsw-algo",
|
||||
"kind": "hnsw",
|
||||
"hnswParameters": {"m": 4, "efConstruction": 400, "metric": "cosine"}
|
||||
}],
|
||||
"compressions": [{
|
||||
"name": "binary-comp",
|
||||
"kind": "binaryQuantization",
|
||||
"rescoringOptions": {
|
||||
"enableRescoring": true,
|
||||
"defaultOversampling": 12,
|
||||
"rescoreStorageMethod": "discardOriginals"
|
||||
},
|
||||
"truncationDimension": 1024
|
||||
}]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Query med oversampling:**
|
||||
```http
|
||||
POST https://[service].search.windows.net/indexes/cost-optimized-index/docs/search?api-version=2025-09-01
|
||||
{
|
||||
"vectorQueries": [{
|
||||
"kind": "vector",
|
||||
"vector": [0.2, 0.33, ...],
|
||||
"fields": "contentVector",
|
||||
"k": 5,
|
||||
"oversampling": 12.0
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
### Azure OpenAI Embeddings
|
||||
|
||||
**text-embedding-3 med dimension-parameter (MRL):**
|
||||
```python
|
||||
from openai import AzureOpenAI
|
||||
|
||||
client = AzureOpenAI(
|
||||
azure_endpoint="https://<resource>.openai.azure.com",
|
||||
api_key="<key>",
|
||||
api_version="2024-02-01"
|
||||
)
|
||||
|
||||
response = client.embeddings.create(
|
||||
model="text-embedding-3-large",
|
||||
input="Eksempeltekst for embedding",
|
||||
dimensions=1024 # Redusert fra 3072
|
||||
)
|
||||
vector = response.data[0].embedding
|
||||
```
|
||||
|
||||
### Cosmos DB for MongoDB vCore
|
||||
|
||||
Støtter HNSW og IVF vector indexing med half-precision (float16):
|
||||
```javascript
|
||||
db.collection.createIndex(
|
||||
{ "contentVector": "cosmosSearch" },
|
||||
{
|
||||
cosmosSearchOptions: {
|
||||
kind: "vector-hnsw",
|
||||
dimensions: 1536,
|
||||
similarity: "COS",
|
||||
compression: "half" // Halverer storage
|
||||
}
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
### Azure SQL Database
|
||||
|
||||
Vector extension (preview) støtter float32 vektorer, men ikke native quantization. Anbefaling: Bruk pre-quantized embeddings fra client-side eller Azure AI Search for store datasett.
|
||||
|
||||
### Semantic Kernel
|
||||
|
||||
Støtter Azure AI Search connector med full quantization-konfigurasjon:
|
||||
```csharp
|
||||
var searchClient = new SearchIndexClient(endpoint, credential);
|
||||
var vectorStore = new AzureAISearchStore(searchClient);
|
||||
var collection = vectorStore.GetCollection<DataModel>(
|
||||
"cost-optimized-index",
|
||||
new VectorStoreRecordDefinition { VectorProperty = "contentVector" }
|
||||
);
|
||||
```
|
||||
|
||||
## Offentlig sektor (Norge)
|
||||
|
||||
### GDPR og datasuverenitet
|
||||
|
||||
**Vector storage i Norge/EU:**
|
||||
- Azure AI Search støtter Norway East og Norway West (full data residency)
|
||||
- Embedding-generering (Azure OpenAI): Norway East støttes for text-embedding-3 (verifiser regionstatus i Azure Portal)
|
||||
- Ved quantization: original vektorer kan slettes (`discardOriginals`), reduserer data residency-kompleksitet
|
||||
|
||||
**Schrems II-compliance:**
|
||||
- Vector data klassifiseres som personopplysninger hvis de er koblet til identifiserbare personer
|
||||
- Anbefaling: Anonymiser metadata, bruk `stored: false` for vektorer
|
||||
- Vurder customer-managed keys (CMK) i Azure Key Vault for ekstra kontroll
|
||||
|
||||
### Budsjettprosesser
|
||||
|
||||
**Kostnadsprognoser for offentlige virksomheter:**
|
||||
|
||||
Eksempel: 5 millioner dokumenter, gjennomsnittlig 2000 tokens per dokument
|
||||
|
||||
| Komponent | Baseline (float32) | Optimalisert (binary + MRL) | Besparelse |
|
||||
|-----------|--------------------|-----------------------------|------------|
|
||||
| **Embedding-generering (engangs)** | 10M tokens × $0.13/M = $1,300 | 10M tokens × $0.02/M = $200 (text-emb-3-small) | $1,100 (85 %) |
|
||||
| **Azure AI Search (S2, storage)** | ~$800/måned | ~$100/måned | $700/måned |
|
||||
| **Vector quota (S2, 1 partition)** | 200 GB (overskrides) | 15 GB (godt innenfor) | Unngår oppgradering |
|
||||
| **Totalt første år** | $1,300 + $9,600 = $10,900 | $200 + $1,200 = $1,400 | $9,500 (87 %) |
|
||||
|
||||
**Merknad:** Tall er omtrentlige. Bruk Azure Pricing Calculator for nøyaktige estimater basert på region og avtaletype (EA, CSP).
|
||||
|
||||
### Skaleringsscenarier
|
||||
|
||||
**Scenario 1: Kommunal kunnskapsbase**
|
||||
- 500K dokumenter (vedtekter, møtereferater, saksbehandling)
|
||||
- Budsjett: 50K NOK/år
|
||||
- Anbefaling: text-embedding-3-small + scalar quantization + S1 tier
|
||||
- Forventet kostnad: ~30K NOK/år
|
||||
|
||||
**Scenario 2: Fylkeskommune (helsesektor)**
|
||||
- 10M dokumenter (pasientjournaler, medisinske retningslinjer)
|
||||
- Strenge kvalitetskrav (NDCG >0.90)
|
||||
- Anbefaling: text-embedding-3-large + binary quantization (1536 dim) + S3 tier + rescoring
|
||||
- Forventet kostnad: ~250K NOK/år
|
||||
|
||||
## Kostnad og lisensiering
|
||||
|
||||
### Prismodell (Azure AI Search)
|
||||
|
||||
**Vector quota (per partition, post-April 2024 services):**
|
||||
|
||||
| Tier | Vector quota | Pris/måned (1 partition) | Egnet datasett |
|
||||
|------|--------------|--------------------------|----------------|
|
||||
| **Basic** | 1 GB | ~$75 USD | <100K docs |
|
||||
| **S1** | 12 GB | ~$250 USD | 100K-1M docs |
|
||||
| **S2** | 36 GB | ~$1,000 USD | 1M-5M docs |
|
||||
| **S3** | 72 GB | ~$2,000 USD | 5M-20M docs |
|
||||
|
||||
**Viktig:** Eldre services (pre-April 2024) har lavere quotas. Sjekk oppgraderingsmulighet: `az search service show --name <service> --resource-group <rg>`.
|
||||
|
||||
### Embedding-kostnader (Azure OpenAI)
|
||||
|
||||
| Modell | Input (per 1M tokens) | Use case |
|
||||
|--------|----------------------|----------|
|
||||
| text-embedding-ada-002 | $0.10 USD | Legacy |
|
||||
| text-embedding-3-small | $0.02 USD | Kostnadsoptimalisert |
|
||||
| text-embedding-3-large | $0.13 USD | Premium quality |
|
||||
|
||||
**Estimat:** 1M dokumenter á 500 tokens = 500M tokens input
|
||||
- Ada-002: $50 USD
|
||||
- text-embedding-3-small: $10 USD (80 % besparelse)
|
||||
|
||||
### TCO-eksempel (3-årsperiode)
|
||||
|
||||
**Baseline (ingen optimalisering):**
|
||||
- 5M dokumenter, text-embedding-ada-002, float32, Azure AI Search S2
|
||||
- Embedding: $2,500 (engangs)
|
||||
- Search: $12,000/år × 3 = $36,000
|
||||
- **Totalt:** $38,500
|
||||
|
||||
**Optimalisert (binary + MRL + text-embedding-3-small):**
|
||||
- Embedding: $500 (engangs)
|
||||
- Search: $1,500/år × 3 = $4,500 (lavere tier, mindre storage)
|
||||
- **Totalt:** $5,000
|
||||
|
||||
**Besparelse:** $33,500 (87 %) over 3 år.
|
||||
|
||||
### Lisensiering (Microsoft 365 Copilot context)
|
||||
|
||||
Hvis vector search brukes som grunnlag for Copilot for Microsoft 365:
|
||||
- Krever Microsoft 365 E3/E5 + Copilot-lisens ($30/bruker/måned)
|
||||
- Azure AI Search koster ekstra (ikke inkludert i Copilot-lisens)
|
||||
- Vurder Microsoft Foundry for unified billing (preview, februar 2026)
|
||||
|
||||
## For arkitekten (Cosmo)
|
||||
|
||||
### Spørsmål å stille klienten
|
||||
|
||||
1. **"Hvor mange dokumenter planlegger dere å indeksere (nå og om 2 år)?"**
|
||||
- Under 1M: Quantization er nice-to-have
|
||||
- 1-10M: Quantization anbefales sterkt
|
||||
- Over 10M: Quantization er kritisk
|
||||
|
||||
2. **"Hva er budsjettrammen for AI-infrastruktur i året?"**
|
||||
- Sammenlign mot TCO-estimat for å vurdere optimalisering
|
||||
|
||||
3. **"Trenger dere å returnere vektorer i API-responser?"**
|
||||
- Ja → Behold `stored: true`, vurder scalar over binary
|
||||
- Nei → Bruk `stored: false` for 50 % diskbesparelse
|
||||
|
||||
4. **"Hva er akseptabel search quality-degradering (NDCG-score)?"**
|
||||
- >0.95: Bruk scalar eller konservativ binary
|
||||
- 0.85-0.95: Binary med rescoring
|
||||
- <0.85: Ikke akseptabelt, bruk float16
|
||||
|
||||
5. **"Har dere eksisterende embeddings, eller starter dere fra scratch?"**
|
||||
- Eksisterende ada-002 → Vurder scalar quantization uten re-embedding
|
||||
- Ny løsning → Gå direkte til text-embedding-3-small/large med MRL
|
||||
|
||||
6. **"Hvilke compliance-krav gjelder (GDPR, Schrems II, helsepersonelloven)?"**
|
||||
- Identifiser behov for Norge-region, CMK, `discardOriginals`
|
||||
|
||||
7. **"Hva er forventet query-volum (QPS) og latenskrav?"**
|
||||
- Høy QPS (>100): HNSW med quantization
|
||||
- Lav QPS (<10): Exhaustive KNN for å spare vector quota
|
||||
|
||||
8. **"Planlegger dere partial document updates eller full replacement?"**
|
||||
- Partial → Ikke bruk `stored: false` uten mitigering
|
||||
- Full replacement → `stored: false` er trygt
|
||||
|
||||
### Fallgruver
|
||||
|
||||
1. **Over-optimalisering for små datasett**
|
||||
- Under 100K dokumenter: Quantization-kompleksitet overgår kostnadsbesparing
|
||||
- Anbefaling: Start med float16, optimaliser senere ved vekst
|
||||
|
||||
2. **Undervurdere testing-innsats**
|
||||
- Quantization krever NDCG-validering, A/B-testing, oversampling-tuning
|
||||
- Budsjetter 2-4 uker for POC og kvalitetsvalidering
|
||||
|
||||
3. **Ignorere vector quota-grenser**
|
||||
- Azure AI Search blokkerer indeksering ved quota-overskridelse
|
||||
- Monitorér quota via Azure Portal eller `Get Index Statistics` API
|
||||
|
||||
4. **Bruke feil rescoring-metode**
|
||||
- `preserveOriginals` (scalar): Krever lagring av float32
|
||||
- `discardOriginals` (binary): Kan ikke rescores mot originals, kun dot-product
|
||||
- Mismatch fører til indexing-feil
|
||||
|
||||
5. **Manglende kapasitetsplanlegging**
|
||||
- HNSW overhead: 1-20 % av raw vector size (avhenger av dimensjoner og `m`-parameter)
|
||||
- Regn inn overhead i quota-estimat
|
||||
|
||||
### Anbefalinger per modenhetsnivå
|
||||
|
||||
**Nivå 1 (Starter med RAG):**
|
||||
- Bruk text-embedding-3-small (dimensioner: 1536)
|
||||
- Ingen quantization, bare float16
|
||||
- Azure AI Search Basic eller S1
|
||||
- **Mål:** Lær grunnleggende før optimalisering
|
||||
|
||||
**Nivå 2 (Har produksjonsløsning, ønsker kostnadsreduksjon):**
|
||||
- Implementer scalar quantization
|
||||
- Vurder MRL (dimensions: 1024) hvis text-embedding-3
|
||||
- Test NDCG-impact i staging-miljø
|
||||
- **Mål:** 60-70 % kostnadsreduksjon med lav risiko
|
||||
|
||||
**Nivå 3 (Skalerer til millioner av dokumenter):**
|
||||
- Binary quantization + MRL (1024 dimensioner)
|
||||
- `stored: false` hvis ikke behov for vector-retur
|
||||
- Automatisert NDCG-monitoring i CI/CD
|
||||
- **Mål:** 90 %+ kostnadsreduksjon, industriell skalering
|
||||
|
||||
**Nivå 4 (Optimaliserer på marginer):**
|
||||
- Custom quantization-logikk (int4, product quantization)
|
||||
- Hybrid index-design (multiple vector fields)
|
||||
- Fine-tuned embedding-modeller for domenet
|
||||
- **Mål:** Maksimal ROI, konkurransefortrinn
|
||||
|
||||
## Kilder og verifisering
|
||||
|
||||
### Microsoft Learn (MCP-verifisert, februar 2026)
|
||||
|
||||
1. **Azure AI Search — Vector compression overview**
|
||||
https://learn.microsoft.com/en-us/azure/search/vector-search-how-to-configure-compression-storage
|
||||
Confidence: Verified (fetched via MCP microsoft_docs_fetch)
|
||||
|
||||
2. **Scalar and binary quantization**
|
||||
https://learn.microsoft.com/en-us/azure/search/vector-search-how-to-quantization
|
||||
Confidence: Verified (fetched via MCP microsoft_docs_fetch)
|
||||
|
||||
3. **MRL dimension truncation**
|
||||
https://learn.microsoft.com/en-us/azure/search/vector-search-how-to-truncate-dimensions
|
||||
Confidence: Verified (MCP search results, januar 2026)
|
||||
|
||||
4. **Azure AI Search pricing and cost management**
|
||||
https://learn.microsoft.com/en-us/azure/search/search-sku-manage-costs
|
||||
Confidence: Verified (MCP search results, januar 2026)
|
||||
|
||||
5. **Vector index size and limits**
|
||||
https://learn.microsoft.com/en-us/azure/search/vector-search-index-size
|
||||
Confidence: Verified (MCP search results, januar 2026)
|
||||
|
||||
6. **Azure OpenAI embeddings models**
|
||||
https://learn.microsoft.com/en-us/azure/ai-foundry/openai/concepts/models
|
||||
Confidence: Verified (MCP search results, januar 2026)
|
||||
|
||||
7. **Azure OpenAI cost management**
|
||||
https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/manage-costs
|
||||
Confidence: Verified (MCP search results, januar 2026)
|
||||
|
||||
8. **Storage optimization for vectors**
|
||||
https://learn.microsoft.com/en-us/azure/search/vector-search-how-to-storage-options
|
||||
Confidence: Verified (MCP search results, januar 2026)
|
||||
|
||||
### Tekniske artikler
|
||||
|
||||
9. **Azure AI Search: Cut Vector Costs Up To 92.5%**
|
||||
https://techcommunity.microsoft.com/blog/azure-ai-services-blog/azure-ai-search-cut-vector-costs-up-to-92-5-with-new-compression-techniques/4404866
|
||||
Confidence: Verified (Microsoft Tech Community, referert i MS Learn)
|
||||
|
||||
10. **Matryoshka Representation Learning (arXiv)**
|
||||
https://arxiv.org/abs/2205.13147
|
||||
Confidence: Baseline (akademisk paper, ikke Microsoft-first-party)
|
||||
|
||||
### Python code samples
|
||||
|
||||
11. **Vector quantization and storage options (Azure samples)**
|
||||
https://github.com/Azure/azure-search-vector-samples/blob/main/demo-python/code/vector-quantization-and-storage/README.md
|
||||
Confidence: Verified (Microsoft GitHub, februar 2026)
|
||||
|
||||
### Konfidensnivå per seksjon
|
||||
|
||||
| Seksjon | Konfidensgradering | Kilde |
|
||||
|---------|-------------------|-------|
|
||||
| Embedding-modell-valg | Verified | MS Learn 1, 6, 7 |
|
||||
| Quantization-teknikker | Verified | MS Learn 2, 9 |
|
||||
| Dimension-reduksjon (MRL) | Verified | MS Learn 3, 10 |
|
||||
| Lagringsoptimalisering | Verified | MS Learn 8 |
|
||||
| Arkitekturmønstre | Verified | MS Learn 2, 11 |
|
||||
| Azure AI Search-integrasjon | Verified | MS Learn 1, 2, 3 |
|
||||
| Azure OpenAI-integrasjon | Verified | MS Learn 6, 7 |
|
||||
| Cosmos DB-integrasjon | Baseline | (basert på Cosmos DB docs, ikke MCP-verifisert) |
|
||||
| Kostnad og lisensiering | Verified | MS Learn 4, 7 |
|
||||
| Offentlig sektor (Norge) | Baseline | (tilpasset generell GDPR-kunnskap) |
|
||||
|
||||
---
|
||||
|
||||
**Sist oppdatert av:** Cosmo Skyberg, Microsoft AI Solution Architect
|
||||
**MCP-research utført:** Februar 2026
|
||||
**Neste review:** August 2026 (etter Azure AI Search GA-updates)
|
||||
Loading…
Add table
Add a link
Reference in a new issue