Embeddingi i bazy wektorowe po ludzku (z testem po polsku)
Embedding i baza wektorowa wytłumaczone prosto, z testem dwóch darmowych modeli na polskich tekstach i tabelą: kiedy numpy, Chroma, pgvector.

👁 117 przeczytań
- Model bge-m3 znalazł właściwy przepis z polskich ustaw w 8 przypadkach na 10, podczas gdy nomic-embed-text tylko w 4 na 10.
- bge-m3 ma wektor 1024-wymiarowy i zajmuje 664 MB pamięci karty, a nomic-embed-text 768 wymiarów i 323 MB, przy licencjach odpowiednio MIT i Apache 2.0.
- W bge-m3 pytanie spoza dokumentów uzyskało podobieństwo maksymalnie 0,43, co pozwala ustawić próg i odpowiadać 'nie wiem', czego nie da się zrobić z nomic-embed-text.
Embedding to zamiana tekstu na listę liczb (wektor), w której teksty o podobnym znaczeniu dostają podobne liczby. Baza wektorowa przechowuje takie wektory i szybko znajduje te najbliższe pytaniu. Na tym stoi wyszukiwanie „po znaczeniu”, RAG i pamięć agentów AI. Poniżej tłumaczę to bez matematyki i pokazuję test dwóch darmowych modeli embeddingów na polskich zdaniach i polskich ustawach: jeden znalazł właściwy przepis w 8 przypadkach na 10, drugi w 4. Tekst jest częścią ścieżki Agenci AI od zera.
Stan na 4 października 2026
- Testowałem dwa modele uruchamiane lokalnie w Ollamie 0.35.1 na RTX 4090:
bge-m3(licencja MIT) inomic-embed-text(Apache 2.0). Oba można używać komercyjnie. - Test: 5 zdań do porównania oraz 10 pytań do 920 fragmentów trzech polskich ustaw.
- Koszt: 0 zł, wszystko liczone na moim komputerze.
- Kod testu jest w paczce promptowy-agenci-starter (
04_rag.py).
Embedding, prostymi słowami
Wyobraź sobie mapę, na której każde zdanie jest punktem. Zdania o kaucji za mieszkanie leżą blisko siebie, zdania o urlopie trochę dalej, a zdania o pogodzie na drugim końcu mapy. Embedding to współrzędne zdania na takiej mapie. Różnica jest taka, że mapa nie ma dwóch wymiarów, tylko kilkaset albo ponad tysiąc.
Tak wygląda początek embeddingu zdania „Ile wynosi kaucja za wynajem mieszkania?” z modelu bge-m3:
[-0.0375, 0.0463, -0.0196, -0.0042, 0.0015, ... ] (razem 1024 liczby)Pojedyncze liczby nic nie znaczą. Znaczenie ma odległość między wektorami. Najczęściej liczy się ją jako podobieństwo cosinusowe: 1 to identyczny kierunek (to samo znaczenie), okolice 0 to brak związku.
Test na pięciu zdaniach
Porównałem zdanie „Ile wynosi kaucja za wynajem mieszkania?” z czterema innymi. Dobry model powinien uznać za najbliższe zdanie o tym samym sensie, nawet jeśli używa innych słów albo innego języka.
| Zdanie porównywane | bge-m3 | nomic-embed-text |
|---|---|---|
| How much is the rental deposit for a flat? (to samo po angielsku) | 0,736 | 0,416 |
| Jaki depozyt wpłaca najemca lokalu? (ten sam sens, inne słowa) | 0,678 | 0,665 |
| Kaucja za butelki zwrotne w sklepie (to samo słowo, inny sens) | 0,569 | 0,713 |
| Ile dni urlopu wypoczynkowego mam w roku? (inny temat) | 0,442 | 0,755 |
bge-m3 ułożył zdania dokładnie tak, jak zrobiłby to człowiek: tłumaczenie najbliżej, potem parafraza, potem „kaucja za butelki”, a urlop najdalej. nomic-embed-text uznał pytanie o urlop za najbardziej podobne do pytania o kaucję, a angielskie tłumaczenie za najmniej. To model trenowany głównie na angielskim i po polsku łapie raczej budowę zdania („Ile wynosi… / Ile dni…”) niż jego sens.
Test na polskich ustawach
W tekście RAG krok po kroku zbudowałem wyszukiwarkę po Kodeksie pracy, ustawie o ochronie praw lokatorów i ustawie o prawach pacjenta (920 fragmentów). Zadałem 10 pytań potocznym językiem i sprawdziłem, na którym miejscu wyników pojawia się właściwy artykuł.
| Cecha | bge-m3 | nomic-embed-text |
|---|---|---|
| Właściwy artykuł na 1. miejscu | 5 z 10 | 2 z 10 |
| Właściwy artykuł w pierwszej piątce | 8 z 10 | 4 z 10 |
| Wymiary wektora | 1024 | 768 |
| Maksymalna długość tekstu (kontekst w Ollamie) | 8192 tokeny | 2048 tokenów |
| Pamięć karty po załadowaniu | 664 MB | 323 MB |
| Rozmiar indeksu 920 fragmentów | 8,5 MB | 7,5 MB |
| Czas indeksowania 920 fragmentów* | 155 s | 105 s |
| Rozrzut podobieństw (pytanie spoza dokumentów vs trafne) | 0,43 vs 0,64-0,72 | 0,69 vs 0,69-0,77 |
| Licencja | MIT | Apache 2.0 |
* Karta była w czasie pomiaru obciążona innym zadaniem, więc czasy traktuj orientacyjnie. Na wolnej karcie oba modele są szybsze.
Ostatni wiersz jest równie ważny jak trafność. W bge-m3 pytanie o prędkość na autostradzie (brak w ustawach) dostało najwyższe podobieństwo 0,43, wyraźnie niżej niż trafne fragmenty. Można więc ustawić próg i odpowiadać „nie wiem” bez pytania modelu. W nomic-embed-text wszystko ma podobieństwo około 0,7 i takiego progu nie da się ustawić.
Co to jest baza wektorowa
Baza wektorowa to miejsce, w którym trzymasz embeddingi razem z tekstem i metadanymi (plik, numer artykułu, data) i które umie szybko znaleźć najbliższe wektory. Przy małych zbiorach wystarczy zwykła tablica w numpy: moje 920 wektorów to 8,5 MB, a przeszukanie ich to jedno mnożenie macierzy. Bazę bierzesz, gdy:
- masz setki tysięcy fragmentów i liczenie wszystkiego naraz robi się wolne;
- chcesz filtrować wyniki po metadanych („tylko Kodeks pracy”, „tylko dokumenty z 2026 roku”);
- dokumenty często dochodzą i nie chcesz przeliczać całego indeksu;
- z wyszukiwarki korzysta wiele osób naraz.
| Rozwiązanie | Gdzie działa | Dla kogo |
|---|---|---|
| numpy (plik .npz) | w Twoim skrypcie | nauka, do kilkudziesięciu tysięcy fragmentów |
| Chroma | lokalnie, plik na dysku albo serwer | pierwszy projekt, prototypy |
| pgvector (PostgreSQL) | Twoja baza PostgreSQL | masz już PostgreSQL i chcesz jednego miejsca na dane |
| Qdrant, Weaviate, Milvus | serwer własny albo chmura | duże zbiory, wielu użytkowników |
Sprawdziłem, że Chroma 1.5.9 zwraca dla moich danych dokładnie te same wyniki co numpy. Baza wektorowa nie poprawia trafności, poprawia wygodę i skalę. Trafność zależy od modelu embeddingów i od tego, jak potniesz tekst.
Jak wybrać model embeddingów do polskiego
Nie przepłacaj za te subskrypcje
Prowadzę sklep z rocznymi dostępami do narzędzi AI - te same konta, o których piszę wyżej, tylko taniej niż w cenniku producenta.
- Wybierz model wielojęzyczny. Z darmowych lokalnych sprawdziłem
bge-m3i dobrze radzi sobie z polskim. - Zbuduj mały zestaw testowy: 10-20 pytań, do których znasz właściwy fragment. Bez tego wybór modelu to zgadywanie.
- Mierz „czy właściwy fragment jest w pierwszej piątce”, bo właśnie tyle fragmentów zwykle dostaje model w RAG.
- Sprawdź rozrzut podobieństw dla pytań spoza tematu. Duża różnica oznacza, że da się ustawić próg „nie wiem”.
- Pamiętaj o prefiksach:
nomic-embed-textwymaga dopiskusearch_query:przed pytaniem isearch_document:przed dokumentem. Bez nich wyniki są jeszcze gorsze.
Embeddingi oferują też API w chmurze (OpenAI, Google, Mistral, Cohere). Płacisz wtedy za tokeny, a dokumenty wysyłasz do dostawcy. Jak liczyć tokeny i koszt, opisuje tekst o tokenach.
Gdzie embeddingi przydają się poza RAG
- Wyszukiwarka w sklepie albo bazie wiedzy, która rozumie „buty na deszcz” jako „obuwie wodoodporne”.
- Wykrywanie duplikatów zgłoszeń, pytań na forum albo artykułów.
- Grupowanie opinii klientów w tematy bez ręcznego tagowania.
- Pamięć agenta: agent zapisuje wnioski jako embeddingi i przy nowym zadaniu wyszukuje podobne sytuacje z przeszłości. Przykłady agentów: Agent AI: 12 przykładów.
Najczęstsze pytania
Embedding co to jest w jednym zdaniu?
Lista liczb opisująca znaczenie tekstu, dzięki której komputer może porównywać teksty po sensie, a nie po słowach.
Czym się różni embedding od tokenu?
Token to kawałek tekstu (część słowa), na które model dzieli tekst. Embedding to wektor opisujący znaczenie całego fragmentu. Model embeddingów najpierw dzieli tekst na tokeny, a potem zamienia je na jeden wektor.
Czy embeddingi trzeba liczyć na karcie graficznej?
Nie, małe modele działają też na procesorze, tylko wolniej. bge-m3 zajmował u mnie 664 MB pamięci karty, więc zmieści się na prawie każdej karcie z ostatnich lat.
Czy mogę mieszać embeddingi z różnych modeli?
Nie. Każdy model ma własną „mapę”. Pytanie musi być zamienione na wektor tym samym modelem co dokumenty. Po zmianie modelu trzeba przeliczyć cały indeks.
Baza wektorowa czy zwykła baza danych?
Zwykła baza szuka po słowach i wartościach, wektorowa po znaczeniu. Najlepsze wyniki daje często połączenie obu (wyszukiwanie hybrydowe), bo słowa kluczowe łapią nazwy własne i numery, a wektory parafrazy.
Ile kosztują embeddingi?
Lokalnie nic poza prądem. W API to jedne z najtańszych zapytań do modeli AI, zwykle ułamki dolara za milion tokenów. Aktualne ceny sprawdzaj w cenniku dostawcy.
Google · Twoje źródłaPromptowy wyżej w Twoim Google - jednym kliknięciemDodaj do preferowanych źródeł →Źródła i data sprawdzenia
- bge-m3 i nomic-embed-text w bibliotece Ollamy (sprawdzone 4.10.2026).
- Dokumentacja Chroma.
- Pomiary: mój komputer (RTX 4090, Windows 11, Ollama 0.35.1), 4 października 2026, 14:30-15:00.
Cały tydzień w AI, w jednym mailu
Wybrane premiery, narzędzia i analizy. Raz w tygodniu, prosto do skrzynki.
Zapisz się za darmo →
