Einstieg in lokale Artificial Intelligence (AI) mit Ollama (Teil 6)

Dr.-Ing. Erhard Henkes, Stand: 28.09.2025

Zurück


Wir verwenden RAG

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:

Wer ist Schachweltmeister im Jahr 2025?

Es ist unmöglich, mit Sicherheit zu sagen, wer Schachweltmeister im Jahr 2025 sein wird. Es hängt von zukünftigen Turnieren und der Leistung der Spieler ab.

Aktueller Weltmeister (Stand heute, 13. Mai 2024): Ding Liren

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.

1. Ausgangsproblem

Fazit: Ohne Hilfe bleibt das Modell „im Jahr 2023/24 hängen“.


Also wie geht es praktisch weiter?

2. Lösung: RAG (Retrieval-Augmented Generation)

Prinzip:

Vorteil: Wir müssen das Modell nicht neu trainieren → wir ergänzen es dynamisch.


3. Praktisches Vorgehen

Schritt 1: Wissens-Snippet als JSON

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.

Schritt 2: Aufbau der ChromaDB

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.

Schritt 3: RAG-Abfrage mit Ollama

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.

4. Ergebnisvergleich


5. Fazit

 

Das Grundprinzip ist also:
User → Retriever (Chroma) → Kontext + Frage → Ollama → Antwort


Ergänzungen:

Wissensdatenbank vs. Modell


Kombination (RAG):

Das LLM formuliert → die Wissensdatenbank liefert die richtigen Fakten.

Man könnte sagen:

Reranking


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.“

  1. Das Modell weiß, wie man Antworten formuliert.

  2. Die Wissensdatenbank weiß, was aktuell gilt.

  3. Reranking sorgt dafür, dass die richtigen Infos aus der Datenbank im Vordergrund stehen.






  4. Hier geht es weiter