Startseite / Artikel

Ein privater KI-Zweitverstand: Lokales RAG mit AnythingLLM, Ollama und Obsidian

Ein privater zweiter Gehirn: AnythingLLM sowie ein Embedding-Modell auf einer Proxmox-VM ermöglichen es, mit tatsächlichem Ressourcenverbrauch, dass das lokale Mistral 7B über Ollama RAG in Obsidian-Notizen sucht.

Verlag: REACTAPP.TOP8 Min. Lesezeit1758 Wörter

Quellen: Giving My Local AI a Memory: Turning It Into a Private AI Second Brain with RAG and AnythingLLM

Ein brillanter Amnesiker

Ein lokales Sprachmodell kann Gespräche führen, Konzepte erklären und bei der Überlegung von Ideen helfen – und das, ohne dass ein einziger Byte das Gebäude verlässt. Was es jedoch nicht von vornherein kann, ist, sich an etwas zu erinnern, was Sie gespeichert haben.

Stellen Sie sich ein Jahr an angesammelten Obsidian-Notizen vor: Links, die mitten in der Nacht markiert wurden, halbfertige Gedanken, ein langer eingefügter Artikel über Suchmaschinen, Stellenanzeigen und Notizen von Workshops. All das befindet sich in einer Datei auf einem Laptop und ist für eine KI, die ein ganzes Wochenende gebraucht hat, um offline zu laufen, unsichtbar.

Der Speicher war nie das Problem. Das Abrufen ist es. Die richtige Notiz zum richtigen Zeitpunkt abzurufen, ist es, was eine Datei voller Links in Wissen verwandelt – anstatt in einen gut organisierten Schrank voller Unordnung. Daher ist der natürliche nächste Schritt bei einer privaten KI-Einrichtung, ihr Zugang zu diesen Notizen zu geben.

Was RAG ist und warum es wichtig ist

Die meisten Anleitungen zu „KI lokal ausführen“ überspringen diesen Teil, vermutlich weil Embeddings langweilig klingen. Sie sind tatsächlich etwas langweilig, aber es lohnt sich, sie zu verstehen.

RAG steht für Retrieval-Augmented Generation. Dadurch kann ein Sprachmodell auf Ihre eigenen Dokumente zugreifen, ohne neu trainiert zu werden oder Daten auf den Server eines Dritten hochzuladen.

Stellen Sie sich vor, Sie beauftragen einen sehr schnellen Bibliothekar anstelle davon, die KI zu bitten, jedes Buch auswendig zu lernen. Der Bibliothekar kennt Ihre Notizen nicht auswendig, weiß aber, welches Dokument er holen soll, wenn Sie eine Frage stellen.

So läuft der Prozess im Detail ab:

  1. Die Dokumente werden in Abschnitte aufgeteilt und in Embeddings umgewandelt – numerische Darstellungen der Bedeutung, die in einer Vektordatenbank gespeichert werden.
  2. Auch eine Frage wird in ein Embedding umgewandelt.
  3. Die Datenbank findet die Abschnitte, die in ihrer Bedeutung am nächsten an der Frage liegen.
  4. Diese Abschnitte werden als Kontext an das Sprachmodell übermittelt.
  • Das Modell antwortet auf Grundlage Ihrer echten Dokumente und nicht nur auf das, was es während des Trainings aufgenommen hat.
  • Das Tool: AnythingLLM

    AnythingLLM eignet sich aus mehreren Gründen für diese Konfiguration:

    • Workspaces speichern getrennte Wissensbasen für unterschiedliche Kontexte wie Notizen, Forschungsergebnisse oder Blogentwürfe.
    • Es liest Markdown nativ, sodass Obsidian-Notizen keine Umwandlung benötigen.
    • Es verbindet sich direkt mit Ollama.
    • Es wird selbst gehostet und als Docker-Container ausgeführt – ohne Account und ohne Cloud.
    • Es gibt außerdem eine Desktop-App, die Menschen hilft, die kein Homelab besitzen.

    Es ist nicht die einzige Option. Open WebUI verfügt ebenfalls über integriertes RAG. Doch AnythingLLMs Workspace-Modell passt besser zur Vorstellung eines „zweiten Gehirns“, und seine Benutzeroberfläche ist freundlich genug, um sie auch Nicht-Technikern zu empfehlen.

    Erstellung der Umgebung

    Ausgangspunkt

    Die Konfiguration setzt eine solche Basis voraus:

    • ein Proxmox VE-Host auf Bare-Metal-Basis;
    • eine Ubuntu 24.04-VM, die Ollama mit Mistral 7B enthält;
    • Open WebUI als Chat-Frontend.

    Durch den Aufbau wird eine weitere VM hinzugefügt.

    Eine neue VM in Proxmox

    Erstellen Sie eine neue Ubuntu 24.04 LTS-VM für AnythingLLM. Dadurch, dass sie von der Ollama-VM getrennt ist, können Snapshots erstellt sowie gezielt Störungen verursacht und wieder behoben werden, ohne die eigentliche Inferenz-Konfiguration zu beeinträchtigen. Absichtlich etwas kaputtzumachen ist besser, als es später versehentlich zu tun.

    Empfohlene Spezifikationen:

    • 4 vCPUs
    • 8 GB RAM
    • 40 GB Festplatte, da Vektordatenbanken Platz benötigen

    Hier gibt es nichts Schwieriges. Die Dokumentation behandelt alles, und etwas Ausprobieren hilft zusätzlich – besonders für diejenigen, die bereits eine Ollama-VM eingerichtet haben. Die eigentliche Einschränkung ist die verfügbare Hardware, und darin zu arbeiten, ist das Ziel dieser Übung.

    Installieren des Embedding-Modells

    Die meisten Anleitungen überspringen diesen Schritt, was am meisten Kopfzerbrechen verursacht.

    RAG benötigt zwei Modelle. Eines ist das Inferenzmodell, das Mistral 7B bereits bereitstellt. Das andere ist ein Embedding-Modell, das Text in Vektoren umwandelt. Es handelt sich dabei um unterschiedliche Konzepte, und nur wenige Anleitungen machen das von vornherein klar.

    Auf der vorhandenen Ollama-VM das Embedding-Modell herunterladen:

    ollama pull nomic-embed-text
    

    nomic-embed-text ist mit etwa 270 MB relativ klein, arbeitet schnell auf einer CPU und ist bei englischen Texten zufriedenstellend – eine sinnvolle Wahl für Hardware ohne GPU.

    Noch ein Problem: Ollama hört standardmäßig nur auf localhost zu. Damit AnythingLLM auf einer anderen VM darauf zugreifen kann, muss Ollama an alle Schnittstellen gebunden werden. Beginnen Sie damit, den Dienst zu bearbeiten:

    sudo systemctl edit ollama
    

    Fügen Sie dann diese Überschreibung hinzu:

    [Service]
    Environment="OLLAMA_HOST=0.0.0.0"
    

    Überladen Sie systemd und starten Sie den Dienst erneut:

    sudo systemctl daemon-reload
    sudo systemctl restart ollama
    

    Dann öffnen Sie im Proxmox-Feuerwall Port 11434 zwischen den beiden VMs. Die Lektion wiederholt sich: Der Dienst funktionierte einwandfrei und das Modell ebenfalls. Was fehlgeschlagen ist, war die Annahme, dass alles standardmäßig miteinander kommunizieren kann.

    Die Netzwerkeinstellungen könnten strenger sein – und sollten vermutlich irgendwann auch so gestaltet werden. Das ist eine typische Hobbystellung: Zuerst alles zum Laufen bringen, verstehen, was gebaut wurde, und anschließend alles abreißen, um es ordentlich neu aufzubauen.

    AnythingLLM über Docker

    Installieren Sie auf der neuen VM zunächst Docker:

    # Install Docker
    curl -fsSL <https://get.docker.com> | sh
    sudo usermod -aG docker $USER
    newgrp docker
    

    Dann starten Sie AnythingLLM:

    # Run AnythingLLM
    docker run -d \
      -p 3001:3001 \
      --name anythingllm \
      -v ~/.anythingllm:/app/server/storage \
      mintplexlabs/anythingllm
    

    Öffnen Sie http://<new-vm-ip>:3001 in einem Browser. Die Konfiguration bei erster Ausführung ist wie folgt:

    • LLM-Anbieter: Ollama, unter http://<ollama-vm-ip>:11434
    • Chat-Modell: Mistral 7B
    • Embedding-Anbieter: Ollama, mit nomic-embed-text
    • Vektor-Datenbank: LanceDB, die bereits integriert ist und keine zusätzliche Einrichtung erfordert

    Übermittlung der Notizen

    Erstellen Sie eine Arbeitsumgebung mit dem Namen „Second Brain“ und weisen Sie AnythingLLM auf den Obsidian-Speicher hin. Sein Dokumentenmanager akzeptiert das Hochladen von Ordnern, daher geben Sie ihm den Ordner mit den Notizen und lassen Sie es alles verarbeiten.

    Es verarbeitet Dateien im Format .md, .txt, .pdf, .docx und .csv. Obsidian-Canvas-Dateien bestehen im Grunde aus JSON, daher verursachen sie keinen Fehler, liefern aber auch keine nützlichen Ergebnisse.

    Nach der Eingabe zeigt die Arbeitsfläche die Anzahl der Blöcke sowie den Status der Einbettung an. Jede Notiz wird in überlappende Blöcke à etwa 500 Token unterteilt, wodurch ein langer eingefügter Artikel über Suchmaschinen zu Dutzenden von getrennt abrufbaren Fragmenten wird.

    Der Moment des Klicks

    Die eigentliche Prüfung besteht aus einer einfachen Anfrage, wie zum Beispiel dem Befehl an den Assistenten, eine bestimmte Notiz mit dem Titel „Homelab-Verbesserungen“ zu überprüfen.

    Er findet die tatsächliche Datei, nennt sie beim Namen und zitiert die genaue Zeile zusammen mit einem Zeitstempel. Die Quellenangabe enthält den Namen des Dokuments sowie das Veröffentlichungsdatum. Die Abruffunktion funktioniert genau wie versprochen: Eine Datei wird benannt und gefunden, ohne erfundene Inhalte oder vage Umformulierungen – lediglich die richtigen Informationen zusammen mit einer Quellenangabe.

    Der lustige Teil kommt, wenn das Modell versucht, die Notiz zu erklären. Es beschreibt Claude Code als eine Art persönlicher Assistent oder Dienst. Mistral 7B, das offline auf einem Home-Lab-Rechner mit nur einer CPU läuft, hat keine Ahnung, was Claude Code oder ein MCP-Server ist. Es kann die Wörter abrufen, versteht sie aber nicht vollständig.

    Das ist die nützlichere Lektion: Abrufen und Verständnis sind getrennte Probleme. RAG stellt dem Modell den richtigen Kontext zur Verfügung, doch das Verständnis dieses Kontexts bleibt weiterhin vom Modell selbst begrenzt. Mit einem kleinen 7B-Modell ohne Internet erreicht diese Grenze schnell ihr Ende.

    Was schiefgelaufen ist und was daraus gelernt wurde

    Mehrere Annahmen hielten der Umsetzung nicht stand.

    • RAG ist kein Wundermittel. Es ist nur so nützlich wie das, was ihm zur Verfügung gestellt wird, und unordentliche Notizen ergeben unordentliche Ergebnisse – „Garbage in, Garbage out“.
    • Das Netzwerk wird bereits früh im Projekt integriert. Sobald die Dienste auf mehreren Maschinen verteilt sind, ist es genauso wichtig, dass sie zuverlässig miteinander kommunizieren können, wie jede einzelne Maschine zu konfigurieren.
    • Verurteilen Sie das Modell nicht zu schnell. Manchmal liegt das Problem im bereitgestellten Kontext. Eine gute Abruffunktion kann ein kleines Modell überraschend nützlich machen, doch sie kann kein Wissen liefern, das das Modell nie hatte.

    Was am Ende herauskommt und dessen Kosten

    Ein Jahr lang gespeicherte Links, Ideen und unvollendete Gedanken werden abrufbar – und zwar nicht nur über Schlüsselwörter, sondern auch semantisch. Wenn man nach einem Konzept fragt, werden verwandte Notizen angezeigt, an die man sich nicht mehr erinnert hatte, dass sie zusammenhängen, wobei jede Notiz mit einer Verweisung auf ihre Quelldatei versehen ist.

    Die Testmaschine war ein EliteDesk mit einem i5-Prozessor, 32 GB RAM und ohne GPU, und alles lief offline. Messwerte aus diesem einzigen Testlauf:

    Element Ergebnis
    Zeit für die gesamte Abfrage 1 Minute 35,9 Sekunden, wobei AnythingLLM eine Generierungszeit von 41,9 Sekunden angibt
    Arbeitsspeicher von AnythingLLM im Ruhezustand etwa 440 MB von insgesamt 7,76 GB
    Verwendeter Arbeitsspeicher der Ollama-VM 7,8 GB von 19 GB
    Arbeitsspeicher während des Betriebs von Mistral etwa 6,5 GB
    nomic-embed-text etwa 360 MB
    Open WebUI etwa 1 GB

    Der etwa 54 Sekunden lange Unterschied zwischen den beiden Zeiten ist unerklärlich. Eine mögliche Ursache ist, dass Ollama das Modell von der Festplatte neu lädt.

    Keine dieser Werte ist besonders schnell – und das soll auch noch nicht der Fall sein. Es ist erst der erste Tag einer noch in der Entwicklung befindlichen RAG-Setup-Umgebung im Heimlabor, und es handelt sich dabei nicht um einen Vergleichswert für ernsthafte Anwendungen. Es wird interessant sein, auf diese Werte zurückzublicken, sobald die lokale Hardware deutlich mehr Tokens pro Sekunde verarbeiten kann.

    Was bleibt Ihnen übrig

    Das Projekt beginnt mit einem einfachen Ziel: einer lokalen KI die Möglichkeit zu geben, Ihre Notizen anzusehen, und lehrt dabei noch viel mehr. Im Laufe des Prozesses lernen Sie, wie RAG funktioniert, was Vektordatenbanken leisten, was eine gute Suche ausmacht und warum der richtige Kontext wichtiger sein kann als ein größeres Modell.

    Noch wichtiger ist, dass das Ergebnis etwas ist, das Sie tatsächlich nutzen können. Zwölf Monate an gespeichertem Wissen, das sonst in Ordnern verstreut wäre, wird zu etwas, nach dem Sie einfach fragen können. Alles läuft auf einem gebrauchten Laptop in der Ecke des Raumes – was für eine Maschine, die eigentlich schon in den Ruhestand geschickt werden sollte, gar nicht schlecht ist.

    RAG funktioniert. Das Verständnis ist eine andere Geschichte.

    Weiterführende Literatur

    Die Dokumentation zu AnythingLLM, Ollama, LanceDB und Obsidian enthält alle Details. Der ursprüngliche RAG-Artikel „Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks“ erläutert die zugrunde liegende Idee. Alles, was beschrieben wird, läuft auf umgenutztem Hardware – ohne Cloud, ohne Abonnement und ohne dass Daten das Netzwerk verlassen.