~/ / Yapay zeka makaleleri / VPS'te yerel LLM / Ollama ile embedding: arama ve RAG için temeller

Ollama ile embedding: arama ve RAG için temeller

Metin parçalarını anlamlarına göre bulan bir arama ve bir sohbet modelinin kendi belgelerinizden yanıt verdiği RAG, ikisi de embedding ile başlar. Ollama bunları sohbet modelinizi çalıştıran sunucuda üretebilir. Bu yazı isteği, Ollama kütüphanesinin listelediği modelleri, sonucu değiştiren ayarları ve vektörlerin nasıl karşılaştırılacağını ele alır; yalnızca Ollama'nın belgelerinin ve kütüphane sayfalarının söylediklerine dayanır. Bu sayfadaki iki araç, adımları tarayıcınızda denemenizi sağlar.

Yayın: · 4 dk okuma · Bilgiler, 2026-11-04 tarihinde Ollama'nın belgelerine ve kütüphane sayfalarına karşı kontrol edildi. Modeller ve alanlar değişir; bu yüzden güvenmeden önce güncel sayfalara bakın.

Embedding nedir

Ollama'nın embedding sayfası, embedding'lerin metni, bir vektör veritabanında saklayabileceğiniz, kosinüs benzerliğiyle arayabileceğiniz ya da RAG hatlarında kullanabileceğiniz sayısal vektörlere dönüştürdüğünü söyler. Vektörün uzunluğu modele bağlıdır; sayfa tipik olarak 384 ile 1024 boyut verir.

Bir arama, soruyu aynı modelle embedding'e çevirir ve ona en çok benzeyen saklı vektörleri arar.

/api/embed ile embedding üretme

Uç nokta POST /api/embed'dir. İstek için model ve input gerekir; input tek bir metin ya da metin dizisi olabilir. Dizi gönderildiğinde yanıt, embeddings alanında her metin için aynı sırada bir vektör içerir; böylece bir grup metin parçası için tek istek yeter.

Belgeler komut satırını da gösterir: ollama run embeddinggemma "Hello world" vektörü bir JSON dizisi olarak yazdırır ve metin echo ile boru hattından verilebilir.

AlanAPI başvuru belgesi ne diyor
modelZorunlu. Modelin adı.
inputZorunlu. Bir metin ya da metin dizisi.
truncateVarsayılan true: bağlam penceresini aşan girdiler kesilir. false ise hata döndürülür.
dimensionsEmbedding'lerin üretileceği boyut sayısı.
keep_aliveModelin ne kadar süre yüklü kalacağı.
optionsÇalışma zamanı seçenekleri; örneğin bağlam uzunluğu için num_ctx.

Ollama'nın OpenAI uyumlu bir uç noktası da vardır: /v1/embeddings. Belgeleri model, dizi ya da metin olarak input, encoding format ve dimensions alanlarını desteklenen olarak, belirteç dizilerini ve user alanını ise desteklenmeyen olarak listeler.

Ollama kütüphanesindeki embedding modelleri

Ollama kütüphanesinde bir embedding kategorisi vardır. Tablo, orada listelenen modellerden altısını, her modelin etiketler sayfasının en son etiket için verdiği boyut ve bağlam penceresiyle birlikte gösterir. Altısından dördü 1GB'tan küçüktür.

ModelEn son etiketin boyutuBağlam penceresi
all-minilm46MB512
nomic-embed-text274MB2K
embeddinggemma622MB2K
mxbai-embed-large670MB512
bge-m31.2GB8K
qwen3-embedding4.7GB40K

Diğer etiketler boyutu değiştirir: örneğin kütüphane qwen3-embedding:0.6b'yi 639MB ve 32K bağlam penceresiyle, embeddinggemma:300m-qat-q4_0'ı ise 239MB olarak listeler. Bu modellerin kalitesini karşılaştırmadık; kütüphane sayfaları onları sıralamaz. all-minilm'i Ollama 0.40.11 üzerinde denediğimizde ollama show bağlam uzunluğunu 512, num_ctx parametresini 256 olarak gösterdi ve uzun bir girdi 256 tokende kesildi. Kullandığınız model için ollama show çıktısına bakın.

Uzun girdi hata verilmeden kesilir

Bağlam penceresi belirteç (token) cinsinden sayılır. truncate varsayılan olarak true olduğu için, modelin bağlam penceresinden uzun bir metin kısaltılır ve yine de hata vermeden bir vektör döndürür. Tek girdi olarak gönderilen uzun bir belge bu şekilde sonunu kaybedebilir.

İki şey yardımcı olur. Uzun belgeleri daha küçük parçalara (chunk) bölün ve her parçanın embedding'ini üretin; bu, aramanın soruyu yanıtlayan bölümü döndürmesini de sağlar. Ve truncate değerini false olarak gönderin; böylece Ollama hâlâ çok uzun olan bir parçayı kısaltmak yerine hata döndürür.

Aşağıdaki chunker, metni paragraflardan, satırlardan, cümlelerden ve boşluklardan, bir örtüşmeyle (overlap) böler ve tüm parçalar için tek bir /api/embed isteği oluşturur. Belirteçleri değil karakterleri sayar, çünkü her modelin kendi tokenizer'ı vardır; bu yüzden bağlam penceresinin altında bir pay bırakın.

Deneyin: RAG Text Chunker

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.

İndeksleme ve arama için tek model kullanın

Embedding sayfası, hem indeksleme hem de sorgulama için aynı embedding modelinin kullanılmasını söyler. Vektörün uzunluğu modele bağlıdır; bu yüzden iki farklı modelin vektörleri aynı sayıda boyuta bile sahip olmayabilir.

Aynısı dimensions için de geçerlidir: belgelerinizi indekslerken ayarladıysanız, soruların embedding'ini üretirken de aynı değeri ayarlayın. Modeli ya da bu ayarı değiştirirseniz, saklı belgelerin embedding'lerini yeniden üretin.

Vektörleri karşılaştırma

Belgeler, anlamsal arama kullanım durumlarının çoğu için kosinüs benzerliğini önerir ve /api/embed'in L2 ile normalleştirilmiş, birim uzunlukta vektörler döndürdüğünü söyler. Birim uzunluktaki vektörlerde kosinüs benzerliği ile nokta çarpımı aynı sayıdır; bu yüzden ikisinden birine ayarlanmış bir vektör veritabanı sonuçları aynı şekilde sıralar.

Bir şey kurmadan önce bir modeli kendi metinlerinizde denemek için bir soruyu ve birkaç metin parçasını, soru ilk sırada olacak şekilde, tek istekte embedding'e çevirin. Yanıtı aşağıya yapıştırın: metin parçaları sorguya olan kosinüs benzerliğine göre sıralanır ve araç her vektörün birim uzunlukta olup olmadığını ve aynı boyutlara sahip olup olmadığını gösterir.

Deneyin: Embedding Similarity Calculator

Örnek, okunabilsin diye 4 boyutlu, birim uzunlukta uydurma vektörler kullanır. Gerçek embedding'lerin yüzlerce ya da binlerce boyutu vardır.

bir Ollama /api/embed yanıtı olarak okundu: 4 vektör, 4 boyut. Tüm vektörlerin uzunluğu 1, bu yüzden kosinüs benzerliği ile nokta çarpımı eşit.

Kosinüs benzerliğine göre sıralama

#0 How do I keep a model loaded in Ollama? ile karşılaştırıldı. Daha yüksek değer daha benzer demektir.

SıraMetinKosinüsNokta çarpımıUzaklık
1#1 keep_alive controls how long the model stays in memory0.99620.99620.0876
2#2 Protect Ollama with nginx and a password0.40370.40371.0921
3#3 Tomorrow's weather forecast0.01000.01001.4071

Kosinüs benzerliği matrisi

Her hücre, satırdaki vektörü sütundaki vektörle karşılaştırır.

#0#1#2#3
#01.0000.9960.4040.010
#10.9961.0000.475-0.005
#20.4040.4751.000-0.377
#30.010-0.005-0.3771.000

Vektörler

MetinBoyutlarUzunluk (L2 normu)Birim uzunluk
#0 How do I keep a model loaded in Ollama?41.000000Evet
#1 keep_alive controls how long the model stays in memory41.000000Evet
#2 Protect Ollama with nginx and a password41.000001Evet
#3 Tomorrow's weather forecast41.000000Evet

Ollama'nın embedding belgelerine ve API başvuru belgesine dayanır, 2026-11-04 tarihinde kontrol edildi. Ollama: Embeddings / Ollama API: Generate embeddings

Her şey tarayıcınızda hesaplanır. Hiçbir yere hiçbir şey gönderilmez.

Küçük bir sunucuda bellek

Bir embedding modeli de diğer modeller gibi yüklenir. Ollama FAQ'si, belleğe sığıyorlarsa aynı anda yüklenebilecek model sayısı olan OLLAMA_MAX_LOADED_MODELS değerinin varsayılan olarak GPU sayısının 3 katı, CPU çıkarımında ise 3 olduğunu söyler. Bu yüzden bellek izin verirse bir sohbet modeli ile bir embedding modeli birlikte yüklü kalabilir.

Ollama'nın bellek kullanımını izleme yazımız, ollama ps, keep_alive ve belleğte nelerin kalacağına karar veren diğer ayarları açıklar.

Kaynaklar

Sırada ne okunmalı