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 .
- 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
vectorpgvector: indeks HNSW wymaga rzutowania nahalfvec. - 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 klasycznymvector(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.
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.
| Kryterium | 768 wymiarów | Wymiary 1536 | 3072 wymiary |
|---|---|---|---|
| Powiązane modele | Obcięcie OpenAI lub model starszy/otwarty (natywny). | osadzanie tekstu-3-małe (natywne) lub obcięte 3-duże | osadzanie tekstu-3-duże (natywne) |
| Średni wynik MTEB | nie wydany natywnie przez OpenAI w tym rozmiarze | 62,3 % | 64,6 % |
| Orientacyjna cena OpenAI / 1M tokenów | zależy od wybranego modelu, a nie od rozmiaru | 0,02 USD (mały) lub 0,13 USD (duży obcięty) | 0,13 USD (osadzanie tekstu-3-dużego) |
| Masa zmagazynowana brutto/wektor | 3 KB (float32) | 6 KB (float32) | 12 KB (wektor) lub 6 KB (halfvec, Aurabase) |
| Natywny indeks pgvector HNSW | Tak | Tak | nie: wymagany odlew halfvec (>2000 przyciemnień) |
| Kolumna Aurabase (kod zweryfikowany) | osadzanie_768 | osadzanie_1536 | osadzanie_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.).
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.
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.
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.
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.
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.
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.
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.
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.
O co jesteśmy pytani najczęściej
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.