~/tools / Embedding'ler ve arama (RAG) / RAG Text Chunker

RAG Text Chunker — Metni örtüşen chunk'lara bölün ve RAG için Ollama /api/embed isteği oluşturun

Uzun bir belgeyi, RAG ya da anlamsal arama için embedding'ini üretmeden önce, en fazla bir uzunluğa ve örtüşmeye sahip chunk'lara bölün. Metin önce paragraflardan, sonra satırlardan, cümlelerden ve boşluklardan kesilir; bir kelimenin içinden yalnızca başka hiçbir şey sığmadığında kesilir. Chunk'ları ve tüm chunk'ları tek istekte içeren, Ollama'nın /api/embed uç noktası için çalıştırmaya hazır bir curl komutunu alırsınız. Hiçbir veri tarayıcınızdan çıkmaz.

Uzunluklar karakter cinsindendir. Modelin bağlam penceresi belirteç cinsindendir ve bir metnin kaç belirteç tuttuğu modele bağlıdır; bu yüzden bir pay bırakın.

curl komutu

Ollama'ya erişebilen bir makinede çalıştırın. Yanıt, her chunk için bu sırada bir vektör içerir.

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
}'

Chunk'lar

3 chunk. En uzunu 294 karakter.

  1. #0 · 294 karakter · 0 konumunda başlar

    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.

  2. #1 · 202 karakter · 294 konumunda başlar

    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.

  3. #2 · 169 karakter · 496 konumunda başlar

    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.

/api/embed için JSON gövdesi

{
  "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
}

İstek alanları Ollama'nın /api/embed API başvuru belgesindeki gibidir, 2026-11-04 tarihinde kontrol edildi. Ollama API: Generate embeddings

Her şey tarayıcınızda yapılır. Araç yalnızca komutu yazar ve hiçbir şey göndermez.

Ollama'nın /api/embed uç noktası tek bir metin ya da metin dizisi alır ve API başvuru belgesi, varsayılan olarak modelin bağlam penceresinden uzun girdilerin kesildiğini söyler. Bu yüzden tek metin olarak gönderilen uzun bir belge hiçbir hata olmadan sonunu kaybedebilir; ayrıca tüm belge için tek bir vektör, bir aramanın soruyu yanıtlayan bölümü döndürmesini zorlaştırır. Olağan çözüm, belgeyi daha küçük chunk'lara bölmek ve her birinin embedding'ini üretmektir. Bu araç metni, sığan en büyük sınırdan böler: önce paragraflar arasındaki boş satırlardan, sonra satır sonlarından, sonra cümle sonlarından (。!? dahil), sonra boşluklardan; tek karakterlerden ise yalnızca son çare olarak. Ayırıcıları korur, böylece chunk'lar yeniden birleştirildiğinde özgün metin elde edilir. Örtüşme, bir chunk'ın sonunu bir sonrakinin başında, bütün parçalar halinde tekrarlar; böylece bir sınırda bölünen bir cümle yine bir chunk'ta bütün olarak yer alır. Uzunluklar karakter cinsinden sayılır. Sonuç, tüm chunk'ları input dizisinde içeren bir /api/embed isteğidir; sessiz kesme yerine hata istiyorsanız truncate false olarak ayarlanır. Bölme, elle sayılmış örneklerle ve her chunk'ın özgün metnin gösterilen konumundaki bir parça olduğu doğrulanarak denetlendi.

Bu aracın temel mantığı MIT lisansıyla açık kaynaktır. github.com/seigo5555/toolkitbox-lib/src/text-chunk.ts

Kullanım örnekleri

  • Bir kılavuzu, bir FAQ'yi ya da bir README'yi kendi Ollama sunucunuzdaki bir RAG araması için hazırlamak ve tüm chunk'ların embedding'ini tek istekte üretmek
  • Boyutu değiştirip sınırların nereye düştüğüne bakarak paragrafları bir arada tutan bir chunk boyutu bulmak
  • Hiçbir şeyin sessizce kesilmediğinden emin olmak: truncate false'u açın; bir chunk model için çok uzunsa Ollama hata döndürür

Nasıl kullanılır

  1. Metni yapıştırın. Paragrafları mümkün olduğunca bir arada kalsınlar diye boş bir satırla ayırın.
  2. En fazla chunk uzunluğunu ve örtüşmeyi karakter cinsinden, embedding modelinin adını ve http://localhost:11434 değilse Ollama sunucunuzun adresini ayarlayın.
  3. curl komutunu kopyalayın ve Ollama'ya erişebilen bir makinede çalıştırın. Yanıt, her chunk için aynı sırada bir vektör içerir. Bu sitedeki Embedding Similarity Calculator bunları karşılaştırabilir.

SSS

Hangi chunk boyutunu kullanmalıyım?

Tek bir doğru boyut yoktur. Her chunk'ın, belirteç (token) cinsinden sayılan model bağlam penceresine sığması gerekir ve daha küçük chunk'lar bir aramanın daha belirli bir parçayı göstermesini sağlar. Bir ya da iki paragrafı bir arada tutan bir boyutla başlayın, sonra arama sonuçlarını Embedding Similarity Calculator ile karşılaştırın.

Neden belirteç değil de karakter?

Her embedding modelinin kendi tokenizer'ı vardır; bu yüzden aynı metin farklı modellerde farklı sayıda belirteç eder ve bir tarayıcı aracı bunları her model için tam olarak sayamaz. Ollama kütüphanesi her modelin bağlam penceresini belirteç cinsinden listeler; örneğin embeddinggemma ve nomic-embed-text için 2K, mxbai-embed-large ve all-minilm için 512 gösterir. Bir pay bırakın ve çok uzun chunk'ları bulmak için truncate false kullanın.

truncate false ne yapar?

Ollama API başvuru belgesi, truncate değerinin varsayılan olarak true olduğunu ve bağlam penceresini aşan girdileri kestiğini söyler. false olduğunda Ollama bunun yerine hata döndürür. Kutu işaretlendiğinde araç "truncate": false ekler; böylece çok uzun bir chunk kısaltılmak yerine yüksek sesle başarısız olur.

Örtüşme nasıl çalışır?

Yeni bir chunk başladığında, önceki chunk'ın son parçaları (cümleler, satırlar ya da kelimeler), örtüşme uzunluğuna sığdıkları ve chunk en fazla uzunluğun içinde kaldığı sürece, onun başında tekrarlanır. Parçalar örtüşmeyi doldurmak için asla kesilmez; bu yüzden gerçek örtüşme, belirlediğiniz sayıdan kısa olabilir.

Markdown'ı, HTML'i ya da kodu anlıyor mu?

Hayır. Her şeyi düz metin olarak ele alır ve paragraflardan, satırlardan, cümlelerden ve boşluklardan böler. Embedding'lerde olmasını istemediğiniz işaretlemeyi, metni yapıştırmadan önce kaldırın.

Metnim bir yere gönderiliyor mu?

Hayır. Metin tarayıcınızda bölünür ve araç yalnızca komutu yazar. Siz kendiniz çalıştırana kadar hiçbir şey gönderilmez.

İlgili makaleler

İlgili