~/ / 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.
| Alan | API başvuru belgesi ne diyor |
|---|---|
| model | Zorunlu. Modelin adı. |
| input | Zorunlu. Bir metin ya da metin dizisi. |
| truncate | Varsayılan true: bağlam penceresini aşan girdiler kesilir. false ise hata döndürülür. |
| dimensions | Embedding'lerin üretileceği boyut sayısı. |
| keep_alive | Modelin 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.
| Model | En son etiketin boyutu | Bağlam penceresi |
|---|---|---|
| all-minilm | 46MB | 512 |
| nomic-embed-text | 274MB | 2K |
| embeddinggemma | 622MB | 2K |
| mxbai-embed-large | 670MB | 512 |
| bge-m3 | 1.2GB | 8K |
| qwen3-embedding | 4.7GB | 40K |
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.
#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.
#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.
#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ıra | Metin | Kosinüs | Nokta çarpımı | Uzaklık |
|---|---|---|---|---|
| 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 |
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 | |
|---|---|---|---|---|
| #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 |
Vektörler
| Metin | Boyutlar | Uzunluk (L2 normu) | Birim uzunluk |
|---|---|---|---|
| #0 How do I keep a model loaded in Ollama? | 4 | 1.000000 | Evet |
| #1 keep_alive controls how long the model stays in memory | 4 | 1.000000 | Evet |
| #2 Protect Ollama with nginx and a password | 4 | 1.000001 | Evet |
| #3 Tomorrow's weather forecast | 4 | 1.000000 | Evet |
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ı
- Ollama embedding'lerini pgvector ile PostgreSQL'de saklama ve aramaOllama embedding'lerini pgvector ile PostgreSQL'de saklayın, HNSW veya IVFFlat ile arayın ve sonuçları /api/chat'e iletin; yanıt kaynaklarını belirtsin.
- Küçük bir VPS'te Ollama'nın bellek kullanımını izleyinOllama'nın bellekte neyi tuttuğunu, orada ne kadar kaldığını ve hangi ayarların bunu değiştirdiğini görün: ollama ps, keep_alive ve sınırlar, resmî FAQ'ye göre.
- Dify'ı kendi VPS'inizdeki Ollama'ya bağlayınDify'ı kendi VPS'inizde çalıştırın ve modeli Ollama'dan alın: kurulum, eklenti alanları, Docker adres sorunu ve embedding'ler, resmî belgelere dayanarak.
- Pahalı bir bilgisayar olmadan yerel LLM başlatın: VPS kullanımı için yeni başlayanlara rehberGüçlü bir bilgisayarınız yok mu? Bir VPS kiralayın ve küçük bir yerel LLM'yi tarayıcınızdan çalıştırın: bellek tahmininden korumalı sohbet ekranına altı adım, sınırlar dürüstçe belirtilerek.