~/tools / Embeddingi i wyszukiwanie (RAG) / RAG Text Chunker
RAG Text Chunker — Dziel tekst na chunki z nakładaniem i buduj żądanie Ollama /api/embed dla RAG
Podziel długi dokument na chunki o maksymalnej długości i z nakładaniem (overlap), zanim utworzysz jego embeddingi dla RAG lub wyszukiwania semantycznego. Tekst jest cięty najpierw na akapitach, potem na wierszach, zdaniach i spacjach, a wewnątrz słowa tylko wtedy, gdy nic innego się nie mieści. Otrzymasz chunki oraz gotowe do uruchomienia polecenie curl dla /api/embed Ollamy ze wszystkimi chunkami w jednym żądaniu. Nic nie opuszcza Twojej przeglądarki.
Długości podano w znakach. Okno kontekstu modelu liczy się w tokenach, a liczba tokenów zużywanych przez tekst zależy od modelu, więc zostaw margines.
Polecenie curl
Uruchom je na komputerze, który ma dostęp do Ollama. Odpowiedź zawiera jeden wektor na chunk, w tej kolejności.
curl http://localhost:11434/api/embed -d '{
"model": "embeddinggemma",
"input": [
"Embeddings turn text into numeric vectors. You can store them in a vector database and search them with cosine similarity, or use them in a RAG pipeline.\n\nThe length of each vector depends on the embedding model. Use the same model when you index your documents and when you embed a question.\n\n",
"Ollama'\''s /api/embed endpoint takes a single string or an array of strings. By default, input that is longer than the model'\''s context window is truncated. Set truncate to false to get an error instead.\n\n",
"Split long documents into smaller chunks before you embed them, so that each chunk fits in the context window and a search can return the part that answers the question."
],
"truncate": false
}'Chunki
Liczba chunków: 3. Najdłuższy ma 294 znaków.
#0 · znaków: 294 · zaczyna się na pozycji 0
Embeddings turn text into numeric vectors. You can store them in a vector database and search them with cosine similarity, or use them in a RAG pipeline. The length of each vector depends on the embedding model. Use the same model when you index your documents and when you embed a question.
#1 · znaków: 202 · zaczyna się na pozycji 294
Ollama's /api/embed endpoint takes a single string or an array of strings. By default, input that is longer than the model's context window is truncated. Set truncate to false to get an error instead.
#2 · znaków: 169 · zaczyna się na pozycji 496
Split long documents into smaller chunks before you embed them, so that each chunk fits in the context window and a search can return the part that answers the question.
Treść JSON dla /api/embed
{
"model": "embeddinggemma",
"input": [
"Embeddings turn text into numeric vectors. You can store them in a vector database and search them with cosine similarity, or use them in a RAG pipeline.\n\nThe length of each vector depends on the embedding model. Use the same model when you index your documents and when you embed a question.\n\n",
"Ollama's /api/embed endpoint takes a single string or an array of strings. By default, input that is longer than the model's context window is truncated. Set truncate to false to get an error instead.\n\n",
"Split long documents into smaller chunks before you embed them, so that each chunk fits in the context window and a search can return the part that answers the question."
],
"truncate": false
}Pola żądania według dokumentacji API Ollamy dla /api/embed, sprawdzone dnia 2026-11-04. Ollama API: Generate embeddings
Wszystko dzieje się w Twojej przeglądarce. Narzędzie tylko zapisuje polecenie i niczego nie wysyła.
Endpoint /api/embed Ollamy przyjmuje pojedynczy ciąg znaków albo tablicę ciągów, a dokumentacja API podaje, że domyślnie dane wejściowe dłuższe niż okno kontekstu modelu są ucinane. Długi dokument wysłany jako jeden ciąg może więc stracić koniec bez żadnego błędu, a pojedynczy wektor dla całego dokumentu utrudnia wyszukiwaniu zwrócenie tej części, która odpowiada na pytanie. Zwykłe rozwiązanie to podzielenie dokumentu na mniejsze chunki i utworzenie embeddingu każdego z nich. To narzędzie dzieli tekst na największej granicy, która jeszcze pasuje: najpierw na pustych wierszach między akapitami, potem na podziałach wierszy, potem na końcach zdań (w tym 。!?), potem na spacjach, a na pojedynczych znakach tylko w ostateczności. Zachowuje separatory, więc chunki złożone z powrotem dają oryginalny tekst. Nakładanie powtarza koniec jednego chunka na początku następnego, w całych kawałkach, aby zdanie przecięte na granicy pojawiało się w całości w jednym chunku. Długości liczone są w znakach. Wynikiem jest żądanie /api/embed ze wszystkimi chunkami w tablicy input, z truncate ustawionym na false, jeśli wolisz błąd zamiast cichego ucinania. Podział sprawdzono na ręcznie policzonych przykładach oraz upewniając się, że każdy chunk jest fragmentem oryginalnego tekstu w pokazanym miejscu.
Główna logika tego narzędzia jest otwartoźródłowa, na licencji MIT. github.com/seigo5555/toolkitbox-lib/src/text-chunk.ts
Zastosowania
- Przygotować instrukcję, FAQ lub README do wyszukiwania RAG na własnym serwerze Ollama i utworzyć embeddingi wszystkich chunków w jednym żądaniu
- Znaleźć rozmiar chunka, który trzyma akapity razem, zmieniając rozmiar i obserwując, gdzie wypadają granice
- Upewnić się, że nic nie jest ucinane po cichu: włącz truncate false, a Ollama zwróci błąd, gdy chunk jest za długi dla modelu
Jak używać
- Wklej tekst. Oddzielaj akapity pustym wierszem, aby w miarę możliwości zostawały razem.
- Ustaw maksymalną długość chunka i nakładanie w znakach, nazwę modelu embeddingów oraz adres swojego serwera Ollama, jeśli to nie jest http://localhost:11434.
- Skopiuj polecenie curl i uruchom je na komputerze, który ma dostęp do Ollama. Odpowiedź zawiera jeden wektor na chunk, w tej samej kolejności. Embedding Similarity Calculator na tej stronie może je porównać.
FAQ
Jakiego rozmiaru chunka użyć?
Nie ma jednego właściwego rozmiaru. Każdy chunk musi się zmieścić w oknie kontekstu modelu, liczonym w tokenach, a mniejsze chunki pozwalają wyszukiwaniu wskazać bardziej konkretny fragment. Zacznij od rozmiaru, który trzyma razem jeden lub dwa akapity, a potem porównaj wyniki wyszukiwania za pomocą Embedding Similarity Calculator.
Dlaczego znaki, a nie tokeny?
Każdy model embeddingów ma własny tokenizer, więc ten sam tekst to różna liczba tokenów w różnych modelach, a narzędzie w przeglądarce nie potrafi dokładnie policzyć ich dla każdego modelu. Biblioteka Ollamy podaje okno kontekstu każdego modelu w tokenach; na przykład pokazuje 2K dla embeddinggemma i nomic-embed-text oraz 512 dla mxbai-embed-large i all-minilm. Zostaw margines i użyj truncate false, aby znaleźć zbyt długie chunki.
Co robi truncate false?
Dokumentacja API Ollamy podaje, że truncate domyślnie ma wartość true, co ucina dane wejściowe przekraczające okno kontekstu. Przy false Ollama zwraca zamiast tego błąd. Narzędzie dodaje "truncate": false, gdy pole jest zaznaczone, aby zbyt długi chunk kończył się głośnym błędem, a nie został skrócony.
Jak działa nakładanie?
Gdy zaczyna się nowy chunk, ostatnie kawałki poprzedniego (zdania, wiersze lub słowa) są powtarzane na jego początku, o ile mieszczą się w długości nakładania, a chunk mieści się w maksimum. Kawałki nigdy nie są przecinane, by wypełnić nakładanie, więc rzeczywiste nakładanie może być krótsze niż ustawiona liczba.
Czy rozumie Markdown, HTML lub kod?
Nie. Traktuje wszystko jako zwykły tekst i dzieli na akapitach, wierszach, zdaniach i spacjach. Usuń znaczniki, których nie chcesz mieć w embeddingach, zanim wkleisz tekst.
Czy mój tekst jest dokądś wysyłany?
Nie. Tekst jest dzielony w Twojej przeglądarce, a narzędzie tylko zapisuje polecenie. Nic nie jest wysyłane, dopóki sam go nie uruchomisz.
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.