PRODSuwerenna europejska platforma BaaSOtwórz Panel →

Natywna sztuczna inteligencja · 7 min odczytu

Rozmiar osadzania: wymiary 768, 1536 czy 3072?

Affane Daylami · Fondateur · 3 kwietnia 2026

Powrót do bloga

Wybór pomiędzy wymiarami 768, 1536 i 3072 nie jest korektą kosmetyczną. Ustawia pojemność bazy danych wektorów, typ indeksu, którego można użyć i cenę płaconą za każde wywołanie API. Samo OpenAI dokumentuje różnicę w jakości pomiędzy dwoma obecnymi modelami: Text-embedding-3-small, w 1536 natywnych wymiarach, osiągnął 62,3% w teście MTEB w porównaniu z 64,6% w przypadku Text-embedding-3-large w 3072 natywnych wymiarach. Prawdziwy zysk, ale taki, za który płaci się gdzie indziej, niż mogłoby się wydawać.

Ten tekst w języku angielskim został wygenerowany automatycznie na podstawie francuskiego oryginału i nie był jeszcze recenzowany.
Ta strona została przetłumaczona automatycznie. Wersja angielska jest miarodajna.

Artykuł ten opiera się na oficjalnej dokumentacji opublikowanej przez OpenAI, na opiniach zespołu zebranych w dyskusjach społeczności programistów OpenAI oraz na zachowaniu zweryfikowanym w kodzie Aurabase, który natywnie kieruje te trójwymiarowe klasy do trzech odrębnych kolumn wektorowych. Każda figura zewnętrzna jest datowana i pochodzi; Metodologię, którą stosujemy do naszych własnych pomiarów, można znaleźć w naszym filarze metodologii wzorcowej .

Najważniejsze
  • Wymiary 1536 pozostają najbardziej zrównoważonym wyborem w większości przypadków: natywne osadzanie tekstu-3-małe lub obcięte osadzanie tekstu-3-duże, bez odchodzenia od natywnej obsługi HNSW pgvector.
  • 3072 wymiary (text-embedding-3-large) oferują najwyższy wynik MTEB opublikowany przez OpenAI (64,6% w porównaniu z 62,3%), ale przekraczają limit wymiarów 2000 typu vector pgvector: indeks HNSW wymaga rzutowania na halfvec.
  • Obcięcie osadzania za pomocą parametru OpenAI dimensions (technika Matryoshki) zmniejsza ilość miejsca na dysku i przyspiesza wyszukiwanie, ale nie zmniejsza ceny: zależy to od badanego modelu, a nie od rozmiaru zwróconego wektora.
  • Dzięki pamięci halfvec (2 bajty na wymiar) wektor 3072-wymiarowy zajmuje tę samą surową przestrzeń dyskową w Aurabase, co wektor 1536 w klasycznym vector (4 bajty na wymiar): około 6 KB.
  • Aurabase natywnie obsługuje dokładnie 3 klasy wymiarów, 768, 1536 i 3072, każda w osobnej kolumnie (zaznaczone w aura-ai/src/embeddings/mod.rs): brak wolnego pola wymiaru.
#
Przegląd

768, 1536 lub 3072: co naprawdę zmienia każdy poziom

Jasne jest, że wybór pomiędzy osadzaniem tekstu-3-małego a osadzaniem tekstu-3-dużego sprowadza się najpierw do wyboru pomiędzy 1536 a 3072 wymiarami natywnymi, zanim w ogóle zaczniemy mówić o obcinaniu. Poniższa tabela podsumowuje możliwe do sprawdzenia fakty na trzech poziomach, które pgvector natywnie rozpoznaje po stronie indeksowania, oraz na trasie Aurabase.

Kryterium768 wymiarówWymiary 15363072 wymiary
Powiązane modeleObcięcie OpenAI lub model starszy/otwarty (natywny).osadzanie tekstu-3-małe (natywne) lub obcięte 3-dużeosadzanie tekstu-3-duże (natywne)
Średni wynik MTEBnie wydany natywnie przez OpenAI w tym rozmiarze62,3 %64,6 %
Orientacyjna cena OpenAI / 1M tokenówzależy od wybranego modelu, a nie od rozmiaru0,02 USD (mały) lub 0,13 USD (duży obcięty)0,13 USD (osadzanie tekstu-3-dużego)
Masa zmagazynowana brutto/wektor3 KB (float32)6 KB (float32)12 KB (wektor) lub 6 KB (halfvec, Aurabase)
Natywny indeks pgvector HNSWTakTaknie: wymagany odlew halfvec (>2000 przyciemnień)
Kolumna Aurabase (kod zweryfikowany)osadzanie_768osadzanie_1536osadzanie_3072

Źródła: OpenAI, oficjalny blog „Nowe modele osadzania i aktualizacje API”, 25 stycznia 2024 (wyniki MTEB i ceny uruchomienia, przed użyciem sprawdź aktualny cennik); aura-ai/src/embeddings/mod.rs, Aurabase (obsługa kolumn i indeksów, zweryfikowana 24 sierpnia 2026 r.).

#
Składowanie

Wpływ na przechowywanie: obliczenia, które zmieniają wszystko

Osadzanie jest przechowywane w postaci tablicy liczb zmiennoprzecinkowych. W pgvector klasyczny typ vector koduje każdy wymiar na 4 bajtach (float32): zatem 768 wymiarów waży około 3 KB surowych danych na wektor, 1536 wymiarów około 6 KB, a 3072 wymiary około 12 KB, nawet przed obliczeniem nagłówka pgvector i obciążenia strony Postgres.

W tym miejscu pojawia się typ halfvec pgvector, który koduje każdy wymiar w 2 bajtach (float16) zamiast 4. 3072-wymiarowy wektor przechowywany w halfvec waży około 6 KB: dokładnie tyle samo, co 1536-wymiarowy wektor przechowywany w klasycznym vector.

3KB
768 niedz
wektor, float32 (4 bajty/wym)
6KB
1536 niedziela
wektor, float32: taka sama waga jak 3072 w halfvec
12KB
3072 niedz
klasyczny wektor, float32 (przed rzutem halfvec)

Bezpośrednia i nieintuicyjna konsekwencja: w Aurabase przejście z 1536 do 3072 wymiarów nie podwaja rzeczywistej ilości miejsca na dysku, ponieważ zapytanie do kolumny embedding_3072 jest wykonywane poprzez rzutowanie halfvec. Prawdziwym dodatkowym kosztem wymiarów 3072 nie jest zatem przede wszystkim dysk: jest to cena powiązanego modelu OpenAI i wynik natywnej obsługi indeksów typu vector, szczegółowo opisane w następnej sekcji.

#
pgvector / HNSW

Dlaczego wymiary 3072 zmieniają typ indeksu w pgvector

Typ vector pgvector nie pozwala na budowanie indeksu HNSW lub IVFFlat przekraczającego 2000 wymiarów. Zatem 3072 wymiary przekraczają ten limit: żadne zapytanie wyszukiwania wektorowego w kolumnie vector(3072) nie może opierać się na przybliżonym indeksie, opiera się na pełnym skanowaniu sekwencyjnym, bezużytecznym w skali korpusu RAG w produkcji.

Kod Aurabase obsługuje ten przypadek jawnie: kolumna embedding_3072 jest rzutowana na halfvec(3072) przy każdym zapytaniu wstawiania i wyszukiwania, a typ ten pgvector może indeksować do 4000 wymiarów. Kolumny 768 i 1536 pozostają natywne vector, nieobsługiwane, ponieważ nie zbliżają się do limitu.

embeddings/mod.rs (extrait simplifié)rust
// Dla 3072 (>2000) HNSW nie indeksuje typu `vector` → 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(...), // nieobsługiwany wymiar
    }
}

Ten szczegół wyjaśnia również, dlaczego wymiar osadzania, który nie jest wymieniony w [768, 1536, 3072], wyraźnie zawodzi po stronie Aurabase, zamiast zostać zaakceptowany, a następnie słabo zindeksowany: nazwa kolumny zawsze pochodzi ze stałej listy dozwolonych, nigdy z darmowej wartości przesłanej przez klienta. Aby głębiej zagłębić się w budowanie indeksu HNSW w Postgres poza tym konkretnym przypadkiem, zobacz nasz artykuł Indeks HNSW i wyszukiwanie wektorów Postgres.

#
Koszt API

Zmniejszanie wymiaru bez utraty wszystkiego: obcięcie Matrioszki w OpenAI

Od stycznia 2024 r. interfejs API Embeddings OpenAI akceptuje parametr dimensions, który skraca zwracany wektor bez ponownego wywoływania innego modelu. Technika ta nazywa się uczeniem reprezentacji Matrioszki: model jest szkolony tak, aby koncentrował przydatne informacje w pierwszych wymiarach wektora, tak że obcięcie traci precyzję stopniowo, a nie gwałtownie.

OpenAI ilustruje skuteczność tej techniki konkretnym przykładem w swoim ogłoszeniu: text-embedding-3-large, obcięty do zaledwie 256 wymiarów, nadal przewyższa wynik MTEB starego tekstu-embedding-ada-002 użytego w pełnym rozmiarze 1536 wymiarów (źródło: OpenAI, oficjalny blog, 25 stycznia 2024). Wektor 12 razy mniejszy, który w tym konkretnym teście porównawczym działa lepiej niż pełny wektor.

llm/openai.rs (extrait, requête d'embedding)rust
let body = json!({
    "model": self.embed_model,       // np. „osadzanie tekstu-3-dużego”
    "input": text,
    "dimensions": self.embed_dimensions, // obcina 3072 → skonfigurowaną wartość
});

Ważna uwaga, ale często źle rozumiana: obcięcie nie powoduje obniżenia ceny. Opłaty OpenAI opierają się na zapytanym modelu, a nie na rozmiarze zwróconego wektora, ponieważ rzeczywisty koszt jest obliczeniem wykonanym na podstawie tekstu wejściowego. Zażądanie 1536 wymiarów z Text-embedding-3-large kosztuje zatem tę samą cenę, co 3072 natywne wymiary (źródło: OpenAI, oficjalny blog, 25 stycznia 2024 r.); zmienia się tylko szybkość przechowywania i wyszukiwania.

Jest to dokładnie domyślny wybór Aurabase, zweryfikowany w config/mod.rs: model skonfigurowany domyślnie to text-embedding-3-large, ale wymiar wyjściowy skonfigurowany domyślnie to 1536, a nie 3072. Dlatego usługa płaci za reprezentację szerokiego modelu, obciętego tak, aby pozostał w indeksowalnej kolumnie vector w natywnym HNSW, bez rzutowania halfvec wymaganego dla 3072.

#
Decyzja

Który wymiar wybrać w zależności od przypadku użycia

Wymiary 1536 pozostają rozsądnym punktem wyjścia dla większości projektów RAG lub wyszukiwania semantycznego: wynik MTEB dla tekstu-embedding-3-small (62,3%) pozostaje bliski wynikowi dużego modelu, pamięć pozostaje niewielka, a klasyczny typ vector indeksów pgvector w HNSW bez żadnej szczególnej konfiguracji.

Wymiary 3072 mają uzasadnienie w przypadku, gdy korpus jest niejednoznaczny lub techniczny, gdzie różnica w jakości pomiędzy 62,3% a 64,6% przekłada się na wyraźnie lepsze wyniki wyszukiwania na podstawie własnych zapytań, a nie ogólnego benchmarku OpenAI. Kilka opinii zespołów zarejestrowanych w dyskusjach społeczności programistów OpenAI wskazuje na ten kierunek: wzmocnienie 3072 wymiarów jest mierzone indywidualnie dla każdego przypadku i nie można tego zakładać.

Wymiary 768 są szczególnie przydatne, gdy objętość ma pierwszeństwo przed niuansami: duży korpus, w którym prawdziwym ograniczeniem jest budżet na przechowywanie lub obliczenia, lub użycie starszego modelu osadzania już w natywnych wymiarach 768.

Prosta zasada przed podjęciem decyzji

Nie ustawiaj wymiaru, dopóki nie zmierzysz jakości wyszukiwania na reprezentatywnej próbie własnego korpusu, a nie tylko na ogólnym wyniku MTEB opublikowanym przez OpenAI. MTEB średnio dziesiątki heterogenicznych zadań; twój korpus RAG jest tylko jeden.

Ten wybór wymiaru jest częścią większego stosu RAG, osadzania, indeksu HNSW, wyszukiwania hybrydowego, które dokumentuje nasza strona Natywna sztuczna inteligencja.

#
Często zadawane pytania

O co jesteśmy pytani najczęściej

Czy możemy zmienić rozmiar już zaindeksowanego korpusu bez ponownego indeksowania wszystkiego?+
Nie. Aurabase filtruje każde wyszukiwanie semantyczne według dokładnego modelu ORAZ wymiaru (kolumnaembedding_model + kolumna dedykowana wymiarowi). Korpus indeksowany w wymiarach 1536 staje się niewidoczny dla wyszukiwania prowadzonego w 3072 i odwrotnie: zmiana wymiaru wymaga ponownego indeksowania korpusu w nowej klasie.
Czy Bliźnięta pozwalają Ci wyjść poza 3072 wymiary?+
Nie. Klient Gemini firmy Aurabase wyraźnie ogranicza wymiar do 3072 (outputDimensionality). 3072 to pułap wspólny dla trzech klas obsługiwanych przez Aurabase, łącznie wszystkich dostawców.
Czy zawsze należy wybierać wymiary 3072, aby uzyskać najlepsze rezultaty?+
Nie koniecznie. Różnica w wyniku MTEB pomiędzy 1536 a 3072 (62,3% w porównaniu z 64,6% według OpenAI) pozostaje skromna w obliczu zmiany architektury sugerowanej przez 3072: udostępnienie natywnej obsługi HNSW typu vector, obowiązkowa obsada halfvec i cena szerokiego modelu. Zysk należy zweryfikować w korpusie przed uzasadnieniem tego kosztu.
osadzanie tekstu-3-małe lub osadzanie tekstu-3-duże dla projektu RAG w fazie produkcyjnej?+
To zależy od budżetu i charakteru korpusu, a nie od uniwersalnej zasady. Text-embedding-3-small (1536 wymiarów natywnych) obejmuje większość przypadków przy niższych kosztach; Text-embedding-3-large jest uzasadniony w niejednoznacznym korpusie, w którym przyrost precyzji jest mierzony konkretnie na podstawie własnych zapytań testowych, a nie tylko na podstawie ogólnego wyniku MTEB.
#
Podsumowując

Właściwy wybór nie jest najlepszy, jest najlepiej wymierzony

Wymiary 768, 1536 i 3072 nie są podzielone na jednej osi. 3072 zyskuje w wyniku MTEB opublikowanym przez OpenAI, ale pozostawia natywną obsługę HNSW pgvector i płaci cenę dużego modelu, niezależnie od ostatecznie żądanego wymiaru. 1536 pozostaje najczęstszym saldem domyślnym, w tym w Aurabase. 768 służy do przypadków, w których objętość ma pierwszeństwo przed niuansami.

Parametr dimensions OpenAI zmienia pytanie: nie jest to już „który model wybrać”, ale „które obcięcie zaakceptować, jaki zysk zmierzono na moim korpusie”. Przed sfinalizowaniem wyboru w produkcji przetestuj jakość wyszukiwania na prawdziwej próbce, a nie tylko na ogólnym benchmarku. Nasz przewodnik Potok RAG z pgvector szczegółowo opisuje całą konfigurację, od pozyskiwania po wyszukiwanie hybrydowe.

GOTOWY DO WDROŻENIA?

Twój backend w pięć minut.

Karta kredytowa nie jest wymagana · 500 MB za darmo · 50 000 MAU