Dr.-Ing. Erhard Henkes, Stand: 28.09.2025
Lokale Modelle in Ollama
haben ihre zeitlichen Grenzen bezüglich des Wissens. Nehmen wir ein konkretes
Beispiel: Wer ist Schachweltmeister im Jahr 2025?
Die Antwort darauf wird
vermutlich "Ding Liren" lauten. Dieser hat im Dezember 2024 allerdings gegen
Gukesh D. verloren. Davon weiß das Modell aber nix.
Anfrage an gemma3:12b
in Ollama:
Ja, was machen wir denn
da mit unserer lokalen KI, damit sie nicht obsolet wird?
Um dauerhaft
etwas zu bewirken gibt es drei Wege:
1. Retraining/Fine-Tuning → sehr teuer,
meist GPU-lastig. Das schaffen wir privat nicht, also auf neues Modell warten.
2. LoRA/Adapter-Training → leichter, aber immer noch Training. Dann passt ein
Modell. Die anderen Modelle bleiben jedoch "beschränkt".
3. Externe
Wissensquelle (RAG) → interessenter Ansatz, vor allem flexibel und verändert das
Modell nicht, nur seine Antwort.
Lokale LLMs (wie Ollama mit gemma3:12b) haben einen Wissensstand, der beim Training eingefroren wurde.
Frage: „Wer ist Schachweltmeister 2025?“
Antwort: „Ding Liren (Stand 2023/2024)“ → veraltet.
Aber wir wissen, dass Gukesh D. im Dezember 2024 Ding Liren besiegt hat und 2025 Weltmeister ist.
Fazit: Ohne Hilfe bleibt das Modell „im Jahr 2023/24 hängen“.
Also wie geht es
praktisch weiter?
Prinzip:
Retriever: holt passendes Wissen aus einer externen Datenbank.
Augmentation: fügt dieses Wissen als „Kontext“ an die Frage an.
Generator (das LLM, hier Ollama): beantwortet die Frage unter Einbezug dieses Kontextes.
Vorteil: Wir müssen das Modell nicht neu trainieren → wir ergänzen es dynamisch.
Wir pflegen unser
eigenes Schach-Wissen in einer Datei
chess_knowledge.json:
[
{
"id": "c23",
"title": "Gukesh",
"text": "Gukesh D. wurde am 12.12.2024
der jüngste Schachweltmeister der Geschichte. Er besiegte in der letzten Partie
des auf 14 Partien angesetzten Matches den amtierenden Weltmeister Ding Liren.
Der Endstand betrug 7,5:6,5. Für seinen Erfolg wurde er Anfang 2025 mit dem
Rajiv Gandhi Khel Ratna ausgezeichnet."
}
]
Das ist unser "Chunk", den wir in der Wissensdatenbank verankern wollen.
Mit Python legen wir eine "Collection" an:
import chromadb, json
client =
chromadb.PersistentClient(path=r"E:\Wikipedia\chroma_db")
col =
client.get_or_create_collection("wikipedia_chess")
with
open("chess_knowledge.json", "r", encoding="utf-8") as f:
data = json.load(f)
col.upsert(
ids=[d["id"] for d in data],
documents=[d["text"] for d in data],
metadatas=[{"title": d["title"]} for d in data],
)
Wir verwenden "col.upsert", damit wir unser
Snippet pflegen und erneut über den vorhanden Chunk kopieren können, ohne
Dupletten anzulegen. Hierzu ist die id "c23" wichtig, die einmalig sein muss.
Jetzt liegt das Wissen in ChromaDB.
contexts =
col.query(query_texts=["Wer ist Schachweltmeister 2025?"], n_results=3)
context_text = "\n\n".join(contexts["documents"][0])
prompt = (
f"Hier sind relevante Kontexte:\n{context_text}\n\n"
f"Frage: Wer ist Schachweltmeister 2025?\n"
f"Antwort: "
)
Senden an Ollama (/api/chat)
→ Modell kombiniert Kontext + eigenes
Wissen.
Ohne RAG: „Ding Liren ist Weltmeister (Stand 2023).“
Mit RAG: „Gukesh D. ist 2025 Schachweltmeister. Er besiegte Ding Liren im WM-Match mit 7,5:6,5.“ → genau die Info aus unserer JSON.
Retraining ist schwierig und aufwändig.
RAG ist einfach, flexibel, lokal leicht umsetzbar.
Wir können beliebige Wissensbereiche ergänzen: Schach, Recht, Medizin, Firmendaten …
Das Modell bleibt unverändert, aber die Antworten sind immer aktuell, zumindest soweit wir unsere Datenbank pflegen.
Das Grundprinzip
ist also:
User →
Retriever (Chroma) → Kontext + Frage → Ollama → Antwort
Ergänzungen:
Das Modell (LLM):
enthält „eingefrorenes Weltwissen“ bis zum Stand seines Trainings (z. B. 2023).
kann gut formulieren, generalisieren, Schlüsse ziehen.
ist aber starr → weiß nichts über Ereignisse danach.
Die Wissensdatenbank (z.B. ChromaDB):
enthält aktuelle, gepflegte Chunks, die wir jederzeit ändern/ergänzen können.
ist strukturiert und durchschaubar (wir sehen genau, was drinsteht).
hat keine Intelligenz, sie liefert nur die richtigen Textstücke.
Kombination (RAG):
Das LLM formuliert → die Wissensdatenbank liefert
die richtigen Fakten.
Man könnte sagen:
LLM = Sprachkompetenz + eingefrorenes Basiswissen
DB = aktuelles, gezieltes Fachwissen
Problem: Die Vektorsuche in Chroma findet die „ähnlichsten Chunks“.
Ähnlich bedeutet nicht immer am relevantesten.
Beispiel: Frage nach „Schachweltmeister 2025“ → Treffer „Kasparov“ ist semantisch nah, aber nicht die gesuchte Info.
Lösung: Reranker-Modelle
(z. B. CrossEncoder
MiniLM)
prüfen jede Paarung Frage + Chunk genauer.
geben ein Relevanz-Score zurück.
sortieren die Treffer neu → die besten stehen oben.
Praktischer Effekt: Weniger Rauschen, sauberere Antworten.
Ohne Reranker: Top-3 sind Ding Liren, Carlsen, Kasparov.
Mit Reranker: Top-3 sind Ding Liren, Gukesh, WM-Match 2024.
Wir merken uns: „Reranker machen die Auswahl der Kontexte präziser. Für
kleine Datensätze reicht Vektorsuche, für große Sammlungen bringt Reranking
einen klaren Qualitätsgewinn.“
Das Modell weiß, wie man Antworten formuliert.
Die Wissensdatenbank weiß, was aktuell gilt.
Reranking sorgt dafür, dass die richtigen Infos aus der Datenbank im Vordergrund stehen.