PRODPiattaforma BaaS europea sovranaApri Dashboard →

IA nativa · 7 lettura minima

Dimensioni di incorporamento: dimensioni 768, 1536 o 3072?

Affane Daylami · Fondateur · 3 aprile 2026

Torniamo al blog

La scelta tra le dimensioni 768, 1536 e 3072 non è una regolazione estetica. Imposta il volume di archiviazione del tuo database vettoriale, il tipo di indice che può essere utilizzato e il prezzo pagato per ciascuna chiamata API. OpenAI stessa documenta il divario di qualità tra i suoi due modelli attuali: text-embedding-3-small, in 1536 dimensioni native, ha raggiunto il 62,3% sul benchmark MTEB, rispetto al 64,6% per text-embedding-3-large in 3072 dimensioni native. Un guadagno reale, ma che si paga altrove di quanto si possa pensare.

Questo testo inglese è stato generato automaticamente dall'originale francese e non è stato ancora rivisto.
Questa pagina è stata tradotta automaticamente. Fa fede la versione inglese.

Questo articolo si basa sulla documentazione ufficiale pubblicata da OpenAI, sul feedback del team raccolto nelle discussioni della comunità di sviluppatori OpenAI e sul comportamento verificato nel codice Aurabase, che instrada nativamente queste tre classi dimensionali su tre colonne vettoriali distinte. Ogni figura esterna è datata e di provenienza; per la metodologia che applichiamo alle nostre misurazioni, consulta il nostro pilastro della metodologia di benchmark .

L'essenziale
  • Le dimensioni 1536 rimangono la scelta più equilibrata per la maggior parte dei casi: text-embedding-3-small nativo o text-embedding-3-large troncato, senza discostarsi dal supporto HNSW nativo di pgvector.
  • Le dimensioni 3072 (text-embedding-3-large) offrono il punteggio MTEB più alto pubblicato da OpenAI (64,6% contro 62,3%), ma supera il limite di 2000 dimensioni del tipo vector di pgvector: l'indice HNSW richiede un cast su halfvec.
  • Troncare un incorporamento tramite il parametro OpenAI dimensions (tecnica Matrioska) riduce lo spazio di archiviazione e velocizza la ricerca, ma non riduce il prezzo: questo dipende dal modello interrogato, non dalla dimensione del vettore restituito.
  • Grazie all'archiviazione halfvec (2 byte per dimensione), un vettore a 3072 dimensioni occupa lo stesso spazio su disco grezzo in Aurabase di un vettore 1536 nel classico vector (4 byte per dimensione): circa 6 KB.
  • Aurabase supporta nativamente esattamente 3 classi di dimensione, 768, 1536 e 3072, ciascuna sulla propria colonna (selezionata in aura-ai/src/embeddings/mod.rs): nessun campo dimensione libero.
#
Panoramica

768, 1536 o 3072: cosa cambia veramente in ogni livello

Chiaramente, scegliere prima tra text-embedding-3-small e text-embedding-3-large equivale a scegliere tra 1536 e 3072 dimensioni native, prima ancora di parlare di troncamento. La tabella seguente riassume i fatti verificabili sui tre livelli che pgvector riconosce nativamente sul lato dell'indicizzazione e che Aurabase instrada.

Criterio768 dimensioni1536 dimensioni3072 dimensioni
Modelli correlatiTroncamento OpenAI o modello legacy/open source (nativo).text-embedding-3-small (nativo) o troncato 3-largetext-embedding-3-large (nativo)
Punteggio medio MTEBnon rilasciato nativamente da OpenAI a queste dimensioni62,3 %64,6 %
Prezzo OpenAI indicativo/1 milione di tokendipende dal modello richiesto, non dalla taglia$ 0,02 (piccolo) o $ 0,13 (grande troncato)$ 0,13 (incorporamento testo-3-grande)
Peso lordo stoccato/vettore3KB (float32)6KB (float32)12 KB (vettoriale) o 6 KB (halfvec, Aurabase)
Indice pgvettore HNSW nativosìsìno: è necessario cast halfvec (>2000 dims)
Colonna Aurabase (codice verificato)incorporamento_768incorporamento_1536incorporamento_3072

Fonti: OpenAI, blog ufficiale “Nuovi modelli di incorporamento e aggiornamenti API”, 25 gennaio 2024 (punteggi MTEB e prezzi di lancio, controllare la pagina dei prezzi attuali prima dell'uso); aura-ai/src/embeddings/mod.rs, Aurabase (colonne e supporto dell'indice, verificato il 24 agosto 2026).

#
Stoccaggio

L'impatto sullo storage: il calcolo che cambia tutto

Un incorporamento viene archiviato come un array di numeri in virgola mobile. In pgvector, il classico tipo vector codifica ogni dimensione su 4 byte (float32): 768 dimensioni pesano quindi circa 3 KB di dati grezzi per vettore, 1536 dimensioni circa 6 KB e 3072 dimensioni circa 12 KB, anche prima di contare l'intestazione pgctor e l'overhead della pagina Postgres.

È qui che entra in gioco il tipo halfvec di pgvector, che codifica ciascuna dimensione in 2 byte (float16) invece di 4. Un vettore a 3072 dimensioni memorizzato in halfvec pesa circa 6 KB: esattamente il peso di un vettore a 1536 dimensioni memorizzato nel classico vector.

3KB
768 sole
vettore, float32 (4 byte/dim)
6KB
1536 domenica
vettore, float32: stesso peso di 3072 in halfvec
12KB
3072 sole
vettore classico, float32 (prima del cast halfvec)

Conseguenza diretta e non intuitiva: in Aurabase, passare da 1536 a 3072 dimensioni non raddoppia lo spazio di archiviazione effettivo su disco, poiché la colonna embedding_3072 viene interrogata tramite un cast halfvec. Il vero costo aggiuntivo delle dimensioni 3072 non è quindi principalmente il disco: è il prezzo del modello OpenAI associato e l'output del supporto dell'indice nativo del tipo vector, dettagliato nella sezione seguente.

#
pgvettore/HNSW

Perché le dimensioni 3072 cambiano il tipo di indice in pgvettoriale

Il tipo vector di pgvector non consente la creazione di un indice HNSW o IVFFlat oltre le 2000 dimensioni. 3072 dimensioni supera quindi questo limite: nessuna query di ricerca vettoriale su una colonna vector(3072) può basarsi su un indice approssimativo, si ricorre ad una scansione sequenziale completa, inutilizzabile sulla scala di un corpus RAG in produzione.

Il codice Aurabase gestisce questo caso in modo esplicito: la colonna embedding_3072 viene convertita in halfvec(3072) su ogni query di inserimento e ricerca, un tipo che pgvector può indicizzare fino a 4000 dimensioni. Le colonne 768 e 1536 rimangono native vector, non convertite, poiché non si avvicinano al limite.

embeddings/mod.rs (extrait simplifié)rust
// Per 3072 (>2000), HNSW non indicizza il tipo "vettore" → cast halfvec
fn vec_query_parts(dims: usize) -> AuraResult<(&'static str, &'static str, &'static str)> {
    match dims {
        768  => Ok(("embedding_768",  "", "::vector")),
        1536 => Ok(("embedding_1536", "", "::vector")),
        3072 => Ok(("embedding_3072", "::halfvec(3072)", "::halfvec(3072)")),
        other => Err(...), // dimensione non supportata
    }
}

Questo dettaglio spiega anche perché una dimensione di incorporamento non elencata in [768, 1536, 3072] fallisce esplicitamente sul lato Aurabase, anziché essere accettata e quindi indicizzata in modo inadeguato: il nome della colonna proviene sempre da una lista consentita fissa, mai da un valore libero inviato dal client. Per approfondire la creazione di un indice HNSW su Postgres oltre questo caso specifico, vedere il nostro articolo Indice HNSW e ricerca vettoriale Postgres.

#
Costo dell'API

Ridurre le dimensioni senza perdere tutto: il troncamento della matrioska di OpenAI

A partire da gennaio 2024, l'API Embeddings di OpenAI accetta un parametro dimensions che accorcia il vettore restituito senza richiamare nuovamente un modello diverso. La tecnica si chiama Matryoshka Representation Learning: il modello è addestrato a concentrare le informazioni utili nelle prime dimensioni del vettore, in modo che un troncamento perda precisione gradualmente anziché bruscamente.

OpenAI illustra l'efficacia di questa tecnica con un esempio specifico nel suo annuncio: text-embedding-3-large, troncato a sole 256 dimensioni, supera ancora il punteggio MTEB del vecchio text-embedding-ada-002 utilizzato alla sua dimensione completa di 1536 dimensioni (fonte: OpenAI, blog ufficiale, 25 gennaio 2024). Un vettore 12 volte più piccolo che si comporta meglio di un vettore completo, su questo benchmark specifico.

llm/openai.rs (extrait, requête d'embedding)rust
let body = json!({
    "model": self.embed_model,       // ad es. "incorporamento-testo-3-grande"
    "input": text,
    "dimensions": self.embed_dimensions, // tronca 3072 → il valore configurato
});

Punto importante e spesso frainteso: il troncamento non riduce il prezzo applicato. OpenAI addebita i costi in base al modello richiesto, non alla dimensione del vettore restituito, poiché il costo effettivo è il calcolo eseguito sul testo di input. Richiedere 1536 dimensioni da text-embedding-3-large costa quindi lo stesso prezzo delle sue 3072 dimensioni native (fonte: OpenAI, blog ufficiale, 25 gennaio 2024); cambiano solo la velocità di archiviazione e di ricerca.

Questa è proprio la scelta di default di Aurabase, verificata in config/mod.rs: il modello configurato di default è text-embedding-3-large, ma la dimensione di output configurata di default è 1536, non 3072. Il servizio paga quindi per la rappresentazione del modello wide, troncato per rimanere su una colonna indicizzabile vector in HNSW nativo, senza il cast halfvec richiesto per 3072.

#
Decisione

Quale dimensione scegliere in base al proprio caso d'uso

Le dimensioni 1536 rimangono il punto di partenza ragionevole per la maggior parte dei progetti RAG o di ricerca semantica: il punteggio MTEB di text-embedding-3-small (62,3%) rimane vicino a quello del modello large, l'archiviazione rimane leggera e il classico tipo vector degli indici pgctor in HNSW senza alcuna configurazione particolare.

Le dimensioni 3072 sono giustificate quando il corpus è ambiguo o tecnico, dove il divario di qualità tra il 62,3% e il 64,6% si traduce in risultati di ricerca visibilmente migliori sulle tue stesse query, non sul benchmark generale di OpenAI. Diversi feedback del team registrati nelle discussioni della comunità degli sviluppatori OpenAI vanno in questa direzione: il guadagno di 3072 dimensioni viene misurato caso per caso, non può essere dato per scontato.

Le dimensioni 768 sono particolarmente adatte quando il volume ha la precedenza sulle sfumature: un corpus di grandi dimensioni in cui il budget di archiviazione o calcolo è il vero vincolo, o l'uso di un modello di incorporamento legacy già in 768 dimensioni native.

Una semplice regola prima di decidere

Non impostare la dimensione finché non hai misurato la qualità della ricerca su un campione rappresentativo del tuo corpus, non solo sul punteggio MTEB generale pubblicato da OpenAI. L'MTEB esegue in media dozzine di compiti eterogenei; il tuo corpus RAG è solo uno.

Questa scelta di dimensione fa parte di uno stack RAG più ampio, incorporamenti, indice HNSW, ricerca ibrida, che la nostra pagina AI nativadocumenta.

#
Domande frequenti

Quello che ci viene chiesto più spesso

Possiamo modificare la dimensione di un corpus già indicizzato senza reindicizzare tutto?+
No. Aurabase filtra ogni ricerca semantica per modello esatto E dimensione (colonnaembedding_model + colonna dedicata alla dimensione). Un corpus indicizzato nelle dimensioni 1536 diventa invisibile ad una ricerca effettuata in 3072, e viceversa: il cambiamento di dimensione richiede la reindicizzazione del corpus sotto la nuova classe.
I Gemelli ti permettono di andare oltre le 3072 dimensioni?+
No. Il client Gemini di Aurabase limita esplicitamente la dimensione a 3072 (outputDimensionality). 3072 è il tetto comune alle tre classi supportate da Aurabase, sommando tutti i fornitori.
Dovresti sempre scegliere le dimensioni 3072 per ottenere i migliori risultati?+
Non necessariamente. La differenza nel punteggio MTEB tra 1536 e 3072 (62,3% contro 64,6% secondo OpenAI) rimane modesta a fronte del cambiamento architetturale implicito nel 3072: rilascio del supporto HNSW nativo del tipo vector, cast halfvec obbligatorio e prezzo del modello wide. Il guadagno deve essere verificato sul proprio corpus prima di giustificare questo costo.
text-embedding-3-small o text-embedding-3-large per un progetto RAG in produzione?+
Dipende dal budget e dalla natura del corpus, non da una regola universale. Text-embedding-3-small (1536 dimensioni native) copre la maggior parte dei casi a un costo inferiore; text-embedding-3-large è giustificato su un corpus ambiguo in cui il guadagno di precisione viene misurato concretamente sulle proprie query di test, non solo sul punteggio MTEB generale.
#
In sintesi

La scelta giusta non è la più grande, è quella meglio misurata

Le dimensioni 768, 1536 e 3072 non sono divise su un unico asse. 3072 guadagna nel punteggio MTEB pubblicato da OpenAI, ma lascia il supporto HNSW nativo di pgvector e paga il prezzo del modello di grandi dimensioni, qualunque sia la dimensione richiesta alla fine. 1536 rimane il saldo predefinito più comune, anche in Aurabase. 768 serve casi in cui il volume ha la precedenza sulla sfumatura.

Il parametro dimensions di OpenAI cambia la domanda da porsi: non è più "quale modello scegliere", ma "quale troncamento accettare, per quale guadagno misurato sul mio corpus". Prima di finalizzare una scelta produttiva, testare la qualità della ricerca su un campione reale, non solo su un benchmark generale. La nostra guida Pipeline RAG con pgvector descrive in dettaglio la configurazione completa, dall'acquisizione alla ricerca ibrida.

PRONTO PER L'IMPLEMENTAZIONE?

Il tuo backend in cinque minuti.

Nessuna carta di credito richiesta · 500 MB gratuiti · 50.000 MAU