~/ / KI-Artikel / Lokale LLMs auf einem VPS / Embeddings mit Ollama: die Grundlagen für Suche und RAG
Embeddings mit Ollama: die Grundlagen für Suche und RAG
Eine Suche, die Textstellen nach ihrer Bedeutung findet, und RAG, bei dem ein Chat-Modell aus Ihren eigenen Dokumenten antwortet, beginnen beide mit Embeddings. Ollama kann sie auf demselben Server erzeugen, auf dem Ihr Chat-Modell läuft. Dieser Artikel behandelt die Anfrage, die Modelle, die die Ollama-Bibliothek listet, die Einstellungen, die das Ergebnis verändern, und den Vergleich der Vektoren, und zwar nur mit dem, was die Dokumentation und die Bibliotheksseiten von Ollama sagen. Mit zwei Tools auf dieser Seite können Sie die Schritte in Ihrem Browser ausprobieren.
Veröffentlicht: · 5 Min. Lesezeit · Die Angaben wurden am 2026-11-04 mit der Dokumentation und den Bibliotheksseiten von Ollama abgeglichen. Modelle und Felder ändern sich, prüfen Sie also die aktuellen Seiten, bevor Sie sich darauf verlassen.
Was ein Embedding ist
Auf der Embeddings-Seite von Ollama steht, dass Embeddings Text in numerische Vektoren verwandeln, die Sie in einer Vektordatenbank speichern, mit Kosinus-Ähnlichkeit durchsuchen oder in RAG-Pipelines verwenden können. Die Länge des Vektors hängt vom Modell ab; die Seite nennt typischerweise 384 bis 1024 Dimensionen.
Eine Suche erzeugt das Embedding der Frage mit demselben Modell und sucht die gespeicherten Vektoren, die ihm am ähnlichsten sind.
Embeddings mit /api/embed erzeugen
Der Endpunkt ist POST /api/embed. Die Anfrage braucht model und input, und input kann ein einzelner String oder ein Array von Strings sein. Bei einem Array enthält die Antwort im Feld embeddings einen Vektor pro String, in derselben Reihenfolge, sodass für einen Stapel von Textstellen nur eine Anfrage nötig ist.
Die Dokumentation zeigt auch die Kommandozeile: ollama run embeddinggemma "Hello world" gibt den Vektor als JSON-Array aus, und Text kann mit echo hineingeleitet werden.
| Feld | Was die API-Referenz sagt |
|---|---|
| model | Erforderlich. Der Modellname. |
| input | Erforderlich. Ein Text oder ein Array von Texten. |
| truncate | Standard true: Eingaben, die das Kontextfenster überschreiten, werden abgeschnitten. Bei false wird ein Fehler zurückgegeben. |
| dimensions | Die Anzahl der Dimensionen, für die Embeddings erzeugt werden. |
| keep_alive | Wie lange das Modell geladen bleibt. |
| options | Laufzeitoptionen, etwa num_ctx für die Kontextlänge. |
Ollama hat auch einen OpenAI-kompatiblen Endpunkt, /v1/embeddings. Seine Dokumentation führt model, input als String oder Array von Strings, encoding format und dimensions als unterstützt auf, Arrays von Tokens und user als nicht unterstützt.
Embedding-Modelle in der Ollama-Bibliothek
Die Ollama-Bibliothek hat eine Kategorie für Embeddings. Die Tabelle zeigt sechs der dort gelisteten Modelle, mit der Größe und dem Kontextfenster, die die Tags-Seite des jeweiligen Modells für das neueste Tag angibt. Vier der sechs sind kleiner als 1GB.
| Modell | Größe des neuesten Tags | Kontextfenster |
|---|---|---|
| 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 |
Andere Tags ändern die Größe: Die Bibliothek listet zum Beispiel qwen3-embedding:0.6b mit 639MB und einem Kontextfenster von 32K sowie embeddinggemma:300m-qat-q4_0 mit 239MB. Wir haben die Qualität dieser Modelle nicht verglichen; die Bibliotheksseiten ordnen sie nicht in eine Rangfolge. Als wir all-minilm mit Ollama 0.40.11 ausprobiert haben, zeigte ollama show eine Kontextlänge von 512 und den Parameter num_ctx mit 256, und eine lange Eingabe wurde bei 256 Tokens abgeschnitten. Prüfen Sie ollama show für das Modell, das Sie verwenden.
Lange Eingaben werden ohne Fehler abgeschnitten
Das Kontextfenster wird in Tokens gezählt. Weil truncate standardmäßig true ist, wird ein Text, der länger als das Kontextfenster des Modells ist, gekürzt und liefert trotzdem einen Vektor, ohne Fehler. Ein langes Dokument, das als eine einzige Eingabe gesendet wird, kann auf diese Weise sein Ende verlieren.
Zwei Dinge helfen. Teilen Sie lange Dokumente in kleinere Chunks auf und erzeugen Sie für jeden Chunk ein Embedding; so kann eine Suche auch genau den Teil zurückgeben, der die Frage beantwortet. Und senden Sie truncate mit false, damit Ollama einen Fehler zurückgibt, statt einen Chunk zu kürzen, der immer noch zu lang ist.
Der Chunker unten teilt Text an Absätzen, Zeilen, Sätzen und Leerzeichen, mit einer Überlappung, und erstellt eine /api/embed-Anfrage für alle Chunks. Er zählt Zeichen, nicht Tokens, weil jedes Modell seinen eigenen Tokenizer hat; lassen Sie deshalb unterhalb des Kontextfensters einen Spielraum.
Ausprobieren: RAG Text Chunker
Die Längen sind in Zeichen angegeben. Das Kontextfenster des Modells wird in Tokens gezählt, und wie viele Tokens ein Text braucht, hängt vom Modell ab; lassen Sie deshalb einen Spielraum.
curl-Befehl
Führen Sie ihn auf einem Rechner aus, der Ollama erreichen kann. Die Antwort enthält einen Vektor pro Chunk, in dieser Reihenfolge.
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
}'Chunks
3 Chunks. Der längste hat 294 Zeichen.
#0 · 294 Zeichen · beginnt bei Offset 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 · 202 Zeichen · beginnt bei Offset 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 · 169 Zeichen · beginnt bei Offset 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.
JSON-Body für /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
}Anfragefelder nach der Ollama-API-Referenz für /api/embed, geprüft am 2026-11-04. Ollama API: Generate embeddings
Alles geschieht in Ihrem Browser. Das Tool schreibt nur den Befehl und sendet nichts.
Ein Modell für Indexierung und Suche verwenden
Die Embeddings-Seite sagt, dass Sie für die Indexierung und für die Abfrage dasselbe Embedding-Modell verwenden sollen. Die Länge des Vektors hängt vom Modell ab, sodass Vektoren aus zwei verschiedenen Modellen nicht einmal dieselbe Anzahl von Dimensionen haben müssen.
Dasselbe gilt für dimensions: Wenn Sie den Wert beim Indexieren Ihrer Dokumente setzen, setzen Sie denselben Wert, wenn Sie die Fragen einbetten. Wenn Sie das Modell oder diese Einstellung ändern, erzeugen Sie die Embeddings der gespeicherten Dokumente neu.
Die Vektoren vergleichen
Die Dokumentation empfiehlt die Kosinus-Ähnlichkeit für die meisten Anwendungsfälle der semantischen Suche und sagt, dass /api/embed L2-normalisierte Vektoren mit Länge 1 zurückgibt. Bei Vektoren mit Länge 1 sind Kosinus-Ähnlichkeit und Skalarprodukt dieselbe Zahl, sodass eine Vektordatenbank, die auf eines von beiden eingestellt ist, die Ergebnisse gleich einordnet.
Um ein Modell mit Ihren eigenen Texten zu prüfen, bevor Sie etwas bauen, erzeugen Sie die Embeddings einer Frage und einiger Textstellen in einer einzigen Anfrage, mit der Frage zuerst. Fügen Sie die Antwort unten ein: Die Textstellen werden nach ihrer Kosinus-Ähnlichkeit zur Frage geordnet, und das Tool zeigt, ob jeder Vektor die Länge 1 hat und dieselben Dimensionen besitzt.
Ausprobieren: Embedding Similarity Calculator
Das Beispiel verwendet erfundene Vektoren mit Länge 1 und 4 Dimensionen, damit man sie lesen kann. Echte Embeddings haben Hunderte oder Tausende von Dimensionen.
Gelesen als eine Antwort von Ollama /api/embed: 4 Vektoren mit 4 Dimensionen. Alle Vektoren haben die Länge 1, daher sind Kosinus-Ähnlichkeit und Skalarprodukt gleich.
Rangfolge nach Kosinus-Ähnlichkeit
Verglichen mit #0 How do I keep a model loaded in Ollama?. Höher bedeutet ähnlicher.
| Rang | Text | Kosinus | Skalarprodukt | Abstand |
|---|---|---|---|---|
| 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 |
Matrix der Kosinus-Ähnlichkeit
Jede Zelle vergleicht den Vektor der Zeile mit dem Vektor der Spalte.
| #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 |
Vektoren
| Text | Dimensionen | Länge (L2-Norm) | Länge 1 |
|---|---|---|---|
| #0 How do I keep a model loaded in Ollama? | 4 | 1.000000 | Ja |
| #1 keep_alive controls how long the model stays in memory | 4 | 1.000000 | Ja |
| #2 Protect Ollama with nginx and a password | 4 | 1.000001 | Ja |
| #3 Tomorrow's weather forecast | 4 | 1.000000 | Ja |
Nach der Embeddings-Dokumentation und der API-Referenz von Ollama, geprüft am 2026-11-04. Ollama: Embeddings / Ollama API: Generate embeddings
Alles wird in Ihrem Browser berechnet. Nichts wird irgendwohin gesendet.
Arbeitsspeicher auf einem kleinen Server
Ein Embedding-Modell wird wie jedes andere Modell geladen. Die Ollama-FAQ sagt, dass OLLAMA_MAX_LOADED_MODELS, die Anzahl der Modelle, die gleichzeitig geladen sein können, wenn sie in den Speicher passen, standardmäßig das Dreifache der Anzahl der GPUs beträgt, bei CPU-Inferenz 3. Ein Chat-Modell und ein Embedding-Modell können also zusammen geladen bleiben, wenn der Speicher es zulässt.
Unser Artikel über den Arbeitsspeicher von Ollama erklärt ollama ps, keep_alive und die anderen Einstellungen, die bestimmen, was im Speicher bleibt.
Quellen
Als Nächstes lesen
- Ollama-Embeddings in PostgreSQL mit pgvector speichern und durchsuchenOllama-Embeddings mit pgvector in PostgreSQL speichern, mit HNSW oder IVFFlat durchsuchen und die Ergebnisse an /api/chat übergeben, damit die Antwort ihre Quellen zitiert.
- Den Arbeitsspeicher von Ollama auf einem kleinen VPS im Blick behaltenSehen Sie, was Ollama im Arbeitsspeicher hält, wie lange es dort bleibt und welche Einstellungen das ändern: ollama ps, keep_alive und die Grenzwerte, nach den offiziellen FAQ.
- Dify mit Ollama auf Ihrem eigenen VPS verbindenBetreiben Sie Dify auf Ihrem eigenen VPS und nutzen Sie Ollama als Modell: Installation, die Plugin-Felder, das Adressproblem in Docker und Embeddings, nach der offiziellen Dokumentation.
- Ein lokales LLM ohne teuren PC starten: Einsteigerleitfaden für den Einsatz eines VPSKein leistungsstarker PC? Mieten Sie einen VPS und betreiben Sie ein kleines lokales LLM im Browser: sechs Schritte von der Speicherschätzung bis zur geschützten Chat-Oberfläche, mit ehrlich benannten Grenzen.