~/tools / Embeddingi i wyszukiwanie (RAG) / Embedding Similarity Calculator
Embedding Similarity Calculator — Porównuj wektory embeddingów z Ollama /api/embed: podobieństwo cosinusowe, iloczyn skalarny
Wklej odpowiedź z /api/embed Ollamy albo z endpointu /v1/embeddings zgodnego z OpenAI i porównaj wektory: podobieństwo cosinusowe, iloczyn skalarny i odległość euklidesową, uszeregowane względem wybranego wektora, oraz macierz podobieństwa. Narzędzie pokazuje też wymiary i długość każdego wektora, dzięki czemu widać, czy wektory są znormalizowane i czy pochodzą z tego samego modelu. Nic nie opuszcza Twojej przeglądarki.
Przykład używa zmyślonych wektorów o długości 1 i 4 wymiarach, aby dało się je przeczytać. Prawdziwe embeddingi mają setki lub tysiące wymiarów.
Odczytano jako odpowiedź Ollama /api/embed: wektorów: 4, wymiarów: 4. Wszystkie wektory mają długość 1, więc podobieństwo cosinusowe i iloczyn skalarny są równe.
Ranking według podobieństwa cosinusowego
Porównanie z #0 How do I keep a model loaded in Ollama?. Wyższa wartość oznacza większe podobieństwo.
| Miejsce | Tekst | Cosinus | Iloczyn skalarny | Odległość |
|---|---|---|---|---|
| 1 | #1 keep_alive controls how long the model stays in memory | 0.9962 | 0.9962 | 0.0876 |
| 2 | #2 Protect Ollama with nginx and a password | 0.4037 | 0.4037 | 1.0921 |
| 3 | #3 Tomorrow's weather forecast | 0.0100 | 0.0100 | 1.4071 |
Macierz podobieństwa cosinusowego
Każda komórka porównuje wektor z wiersza z wektorem z kolumny.
| #0 | #1 | #2 | #3 | |
|---|---|---|---|---|
| #0 | 1.000 | 0.996 | 0.404 | 0.010 |
| #1 | 0.996 | 1.000 | 0.475 | -0.005 |
| #2 | 0.404 | 0.475 | 1.000 | -0.377 |
| #3 | 0.010 | -0.005 | -0.377 | 1.000 |
Wektory
| Tekst | Wymiary | Długość (norma L2) | Długość 1 |
|---|---|---|---|
| #0 How do I keep a model loaded in Ollama? | 4 | 1.000000 | Tak |
| #1 keep_alive controls how long the model stays in memory | 4 | 1.000000 | Tak |
| #2 Protect Ollama with nginx and a password | 4 | 1.000001 | Tak |
| #3 Tomorrow's weather forecast | 4 | 1.000000 | Tak |
Na podstawie dokumentacji o embeddingach i dokumentacji API Ollamy, sprawdzone dnia 2026-11-04. Ollama: Embeddings / Ollama API: Generate embeddings
Wszystko jest liczone w Twojej przeglądarce. Nic nie jest nigdzie wysyłane.
Model embeddingów zamienia fragment tekstu w listę liczb, czyli wektor. Dokumentacja Ollamy opisuje używanie tych wektorów do wyszukiwania semantycznego z podobieństwem cosinusowym oraz do RAG. Zanim napiszesz kod wyszukiwania, warto spojrzeć na liczby: czy pytanie naprawdę wypada najbliżej fragmentu, który na nie odpowiada? To narzędzie odczytuje JSON, który Ollama zwraca z /api/embed ({"embeddings": [[…], …]}), postać zgodną z OpenAI z /v1/embeddings ({"data": [{"embedding": […]}]}) albo zwykłą tablicę wektorów. Szereguje każdy wektor według podobieństwa cosinusowego do wybranego przez Ciebie wektora, a także pokazuje iloczyn skalarny i odległość euklidesową. Dokumentacja Ollamy podaje, że /api/embed zwraca wektory znormalizowane w L2 (o długości 1); dla takich wektorów podobieństwo cosinusowe i iloczyn skalarny to ta sama liczba, a narzędzie pokazuje długość każdego wektora, abyś mógł to sprawdzić. Dokumentacja mówi też, by do indeksowania i do zapytań używać tego samego modelu embeddingów. Wektorów o różnej liczbie wymiarów w ogóle nie da się porównać, a narzędzie przerywa z błędem, gdy takie znajdzie. Obliczenia sprawdzono na wartościach policzonych osobno w Pythonie.
Główna logika tego narzędzia jest otwartoźródłowa, na licencji MIT. github.com/seigo5555/toolkitbox-lib/src/embedding-similarity.ts
Zastosowania
- Utworzyć w jednym żądaniu /api/embed embeddingi pytania i kilku kandydatów na fragmenty tekstu i zobaczyć, który fragment jest pierwszy, zanim zbudujesz wyszukiwanie
- Porównać dwa modele embeddingów na tych samych zdaniach, jeden model po drugim, aby zobaczyć, który wyraźniej oddziela teksty powiązane od niepowiązanych
- Sprawdzić, czy zapisane wektory mają długość 1 i oczekiwane wymiary, zanim wybierzesz miarę odległości dla swojej bazy wektorowej
Jak używać
- Wyślij teksty do swojego modelu w jednym żądaniu, na przykład curl http://localhost:11434/api/embed -d '{"model": "embeddinggemma", "input": ["question", "passage 1", "passage 2"]}', i wklej całą odpowiedź JSON.
- Opcjonalnie wpisz po jednej etykiecie w wierszu, w tej samej kolejności co dane wejściowe, aby wyniki pokazywały teksty zamiast numerów.
- Wybierz, z którym wektorem porównywać (domyślnie #0, czyli pierwsze wejście). Tabela szereguje pozostałe według podobieństwa cosinusowego; macierz pokazuje każdą parę, gdy wektorów jest 10 lub mniej.
FAQ
Którego podobieństwa powinienem użyć?
Strona Ollamy o embeddingach mówi, by w większości zastosowań wyszukiwania semantycznego używać podobieństwa cosinusowego. Podobieństwo cosinusowe porównuje kierunek dwóch wektorów i pomija ich długość; 1 oznacza ten sam kierunek. Narzędzie pokazuje też iloczyn skalarny i odległość euklidesową, ponieważ bazy wektorowe często pozwalają wybierać spośród nich.
Dlaczego podobieństwo cosinusowe i iloczyn skalarny są takie same?
Ponieważ wektory mają długość 1. Dokumentacja Ollamy podaje, że /api/embed zwraca wektory znormalizowane w L2, o długości 1, a dla wektorów o długości 1 podobieństwo cosinusowe jest równe iloczynowi skalarnemu. Narzędzie pokazuje długość każdego wektora i informuje, czy wszystkie mają długość 1 (z dokładnością do 0.001).
Narzędzie mówi, że wymiary się nie zgadzają. Co to znaczy?
Dwa wektory można porównać tylko wtedy, gdy mają tyle samo liczb. Długość zależy od modelu, a dokumentacja podaje ją typowo jako od 384 do 1024 wymiarów; żądanie /api/embed przyjmuje też pole dimensions. Różne długości zwykle oznaczają, że wektory pochodzą z różnych modeli lub ustawień. Dokumentacja mówi, by do indeksowania i do zapytań używać tego samego modelu embeddingów.
Czy mogę wkleić odpowiedź z embeddingami w base64?
Nie. Narzędzie odczytuje tylko liczby. Jeśli wywołujesz endpoint /v1/embeddings zgodny z OpenAI, poproś o embeddingi jako liczby zmiennoprzecinkowe, a nie base64.
Czy podobieństwo 0.8 jest dobre?
Nie ma stałego progu. Wartości zależą od modelu i od Twoich tekstów, więc porównuj wyniki fragmentów powiązanych i niepowiązanych z tego samego modelu, zamiast oceniać jedną liczbę osobno.
Czy moje dane są dokądś wysyłane?
Nie. Obliczenia odbywają się w Twojej przeglądarce. Narzędzie nigdy nie wywołuje Ollamy ani żadnego innego serwera; żądanie do swojego modelu wysyłasz sam.
Powiązane artykuły
- Embeddingi w Ollamie: podstawy wyszukiwania i RAGTwórz embeddingi przez /api/embed w Ollamie: modele i ich rozmiary, truncate i dimensions, wektory jednostkowe i podobieństwo cosinusowe, według oficjalnej dokumentacji.
- Przechowywanie i wyszukiwanie embeddingów Ollamy w PostgreSQL z pgvectorEmbeddingi Ollamy w PostgreSQL z pgvector, wyszukiwanie przez HNSW lub IVFFlat i przekazanie wyników do /api/chat, aby odpowiedź podawała źródła.