RAG na Vertex AI: czemu 1536 wymiarów zwraca HTTP 400
Ustawiłem 1536 wymiarów jak w tutorialu. Vertex zwrócił 400. Żadnego konkretnego komunikatu, ściana. Po 3 godzinach znalazłem przyczynę. Zapisuję, żeby następny nie tracił tych godzin.
Jeśli budujesz RAG i decydujesz się na Vertex AI Vector Search, pewnie przerabiasz ten sam scenariusz. Czytasz tutorial, kopiujesz konfigurację, odpalasz skrypt i nagle dostajesz HTTP 400 InvalidArgument. Żadnego konkretnego komunikatu, po prostu ściana. Zaczynasz jojczeć, bo deadline goni, a Ty nie wiesz, co jest nie tak.
Ten artykuł to konkretna kmina dla inżynierów i architektów, którzy ogarniają RAG na Vertex AI. Rozkminimy, dlaczego ślepe kopiowanie ustawień z poradników pod inne API embeddings to prosty sposób na bengier i jak poprawnie ustawić wymiary wektora, żeby system działał.
Skąd bierze się błąd 400?
Zacznijmy od faktów. Większość tutoriali w sieci bazuje na modelach embeddingowych innych dostawców (np. text-embedding-ada-002 generuje wektory o 1536 wymiarach). To standard, do którego wszyscy się przyzwyczaili. Kiedy więc konfigurujesz index w Vertex AI Vector Search, naturalnym odruchem jest wpisanie 1536 w parametrze dimensions.
Problem w tym, że Vertex AI Text Embeddings API działa inaczej. Modele od Google, takie jak textembedding-gecko@001, textembedding-gecko-multilingual@001, text-embedding-004 czy text-multilingual-embedding-002, generują wektory o 768 wymiarach.
Kiedy Twój index w Vertex AI oczekuje 768 wymiarów (bo taki model wybrałeś), a Ty próbujesz wrzucić do niego wektor o długości 1536 (bo skopiowałeś kod z tutoriala pod inne API), Vertex rzuca HTTP 400. To klasyczny dimension mismatch. System nie zgaduje, nie przycina wektora w locie. Odrzuca żądanie.
outputDimensionality: 1536 skutkuje HTTP 400. Bez negocjacji.
Zasada niezmienności indeksu
Jest jeszcze jeden haczyk, o którym milczy większość dokumentacji. Parametr dimension w Vertex AI Vector Search jest immutable.
Oznacza to, że kiedy już stworzysz index z określoną liczbą wymiarów, nie możesz tego zmienić. Nie ma opcji edycji, nie ma migracji w miejscu. Jeśli jorgnąłeś złą liczbę na etapie tworzenia indeksu, musisz go usunąć i zbudować od nowa. To kosztuje czas, a jeśli masz wgrane miliony dokumentów, kosztuje też obliczenia.
Dlatego zanim w ogóle odpalisz skrypt tworzący index, sprawdzasz dokładną specyfikację modelu embeddingowego, którego używasz. Nie zakładasz, nie kopiujesz z pamięci. Sprawdzasz.
Jak to ogarniamy w praktyce?
Zamiast błądzić po dokumentacji, trzymam się prostego algorytmu przy każdym nowym projekcie RAG:
- Wybierz model embeddingowy (np.
text-multilingual-embedding-002). - Sprawdź w oficjalnej dokumentacji Google Cloud jego
output dimension(dlatext-multilingual-embedding-002to 768). - Ustaw parametr
dimensionsw konfiguracji indeksu Vertex AI dokładnie na tę liczbę. - Upewnij się, że Twój kod generujący wektory używa tego samego modelu i nie hardcoduje innej wartości.
Jeśli musisz użyć 1536 wymiarów, bo np. migrujesz z innego dostawcy i nie chcesz robić re-embeddingu całej bazy, Vertex AI nie jest tu elastyczny w zakresie natywnych modeli. Musisz albo użyć zewnętrznego modelu, albo zaakceptować 768 wymiarów i przebudować bazę.
Tabela modeli Vertex AI i ich wymiarów
| Model | Wymiary | Uwagi |
|---|---|---|
text-multilingual-embedding-002 | 768 | Default w WF, wielojęzyczny |
text-embedding-004 | 768 | Angielski, dobry na kod |
textembedding-gecko@001 | 768 | Legacy, nie polecam nowym projektom |
textembedding-gecko-multilingual@001 | 768 | Legacy wielojęzyczny |
| modele zewnętrzne (np. OpenAI) | 1536+ | Nie natywne Vertex, inny flow |
Dimension mismatch to cichy zabójca RAG-ów. Błąd 400 bez kontekstu, trzy godziny debugowania. Zamiast jojczeć nad logami, sprawdź wymiary modelu zanim stworzysz indeks.
Key takeaways
- Błąd HTTP 400 przy dodawaniu wektorów w Vertex AI to zazwyczaj dimension mismatch.
- Modele Google (gecko, text-embedding-004, text-multilingual-embedding-002) zwracają 768 wymiarów, nie 1536.
- Parametr
dimensionsw indeksie Vertex AI Vector Search jest niezmienny po utworzeniu. - Zawsze weryfikuj wymiary w dokumentacji wybranego modelu przed stworzeniem indeksu.
- Nie kopiuj ślepo konfiguracji z tutoriali opartych na innych dostawcach API.
Najczęstsze pytania
Dlaczego Vertex AI Vector Search zwraca HTTP 400 przy dodawaniu wektorów?
Najczęstszy powód to dimension mismatch: indeks stworzony z inną liczbą wymiarów niż generuje wybrany model. Modele Google generują 768-wymiarowe wektory, nie 1536 jak część innych modeli. Jeśli skopiowałeś konfigurację z tutoriala, masz właśnie ten problem.
Czy można zmienić wymiary indeksu po jego utworzeniu?
Nie. Parametr dimensions w Vertex AI Vector Search jest niezmienny po utworzeniu indeksu. Jedyne wyjście to usunięcie indeksu i zbudowanie od nowa z poprawną liczbą wymiarów.
Ile wymiarów ma model text-multilingual-embedding-002?
768. To domyślny model w projektach Workin'Flows. Maksymalna wartość outputDimensionality to 768. Próba ustawienia 1536 skutkuje HTTP 400 InvalidArgument.
Budujesz RAG na Vertex AI?
Zaczynam od warsztatu procesu (90 minut, bezpłatny). Rozrysujemy architekturę, dobierzemy model embeddingowy i powiem wprost, gdzie najczęściej ludzie tracą czas przy Vertex AI. Bez wciskania jednego słusznego podejścia.
Zamów warsztat → Lub napisz bezpośrednio.