Das Tool meiner Wahl für Notizen sowie Wissens- und Dokumentenmanagement ist seit Jahren Obsidian.

Wer ganz neu bei Obsidian ist und Grundlageninformationen benötigt, dem sei die offizielle Projektwebsite obsidian.md ans Herz gelegt.

Obsidian bringt von Haus aus sehr viele Funktionen mit, zudem gibt es eine Bibliothek von tausenden an Plugins, die Obsidian um nahezu jede vorstellbare Funktion erweitern.

Was Obsidian von Haus aus nicht mitbringt: die Möglichkeit, die eigenen Notizen und Dokumente mit einer KI durchsuchbar zu machen oder gar mit den eigenen Notizen zu chatten.
Genau das wollte ich erreichen und im Nachfolgenden skizziere ich meinen Weg dorthin.

Meine Voraussetzungen

Meinen Obsidian-Vault (der Speicherplatz für Notizen und Dokumente) befülle ich seit Jahren mit Texten, PDF-Dokumenten und Bildern.
Zudem verfüge ich über ein ChatGPT-Plus-Abo. Die naheliegende Idee wäre nun, Obsidian per API mit ChatGPT zu verbinden (das Plus-Abo braucht es dazu noch nicht mal).
Diese Lösung hat aber zwei Nachteile: zum einen fallen Kosten für die API-Nutzung an (wenngleich diese bei moderater Nutzung gering sein dürften), zum anderen verschafft man so der Firma Open AI Zugang zum eigenen Obsidian-Vault und damit zu sämtlichen seit Jahren angesammelten, oft persönlichen, Notizen.

Schnell war für mich klar: ich möchte eine lokale KI aufsetzen, die meine Informationen auf dem Notebook verarbeitet und nicht ins Internet schaufelt.

Eine weitere wichtige Voraussetzung:
Als Arbeitsgerät für das Projekt habe ich mein Macbook Air mit M3-Prozessor und 16 GB RAM verwendet.
Dieses Gerät hat genug Wumms, um die Anfragen an die KI lokal durchzuführen.
Spoiler: an der Wärmeentwicklung und am Akkuverbrauch merkt man dann auch schnell, dass die Hardware hier wirklich stark gefordert wird. Auf einem durchschnittlichen Windows-Computer dürfte mein Setup zwar auch laufen, man sollte sich aber auf Wartezeiten bei den Anfragen gefasst machen.

Die verwendeten Komponenten

Das Projekt ließe sich mit einer Vielzahl von Komponenten und Kombinationsmöglichkeiten lösen.
An dieser Stelle stelle ich beispielhaft mein Setup vor, welches für mich gut funktioniert.

Die Einrichtung

Die Einrichtung der Komponenten war mit viel Trial and Error verbunden. Im Folgenden schreibe ich, wie es für mich funktioniert hat und erwähne auch, wo ich ggf. Probleme hatte.

Ollama

Zunächst habe ich versucht, Ollama über Homebrew zu installieren. Homebrew ist vergleichbar mit WinGet auf Windows-Systemen oder APT unter Linux. Den Server bekam ich so aber nicht zum Laufen. Die Ursachen habe ich nicht weiter untersucht.

Stattdessen habe ich Ollama schließlich von der Website geladen und installiert: https://ollama.com/

Hier habe ich die Version für Mac heruntergeladen und wie üblich installiert. Es gibt auch Versionen für Windows und Linux. Auf dem Mac hat man nach erfolgter Installation ein freundliches Icon in Form eines Lamas, über das man den Server stoppen kann. Weitere Optionen gibt es hier nicht.

Update von Ollama:
Da bei mir die Installation via Homebrew nicht funktioniert hat, klappt natürlich auch ein Update mit „brew upgrade ollama" nicht. Man muss also von Zeit zu Zeit die Ollama-Website besuchen und bei Bedarf eine aktualisierte Version herunterladen und installieren.

Mistral

Sobald Ollama installiert ist, lässt sich das Mistral-Modell ganz leicht über einen Befehl im Terminal laden:

ollama pull mistral

Das komplette Sprachmodell wird damit heruntergeladen – Stand heute sind das etwa 4 GB an Daten.
Will man Mistral später updaten, kann man genau den gleichen Befehl ausführen. Ist keine neue Version vorhanden, wird die vorhandene Version nicht angetastet. Gibt es eine neue Version, wird diese vollständig heruntergeladen und die vorhandene Version ersetzt.

nomic-embed-text

Hier geht es um einen Prozess, der Ähnlichkeit mit einem RAG-System hat (Retrieval-Augmented Generation) – es ist aber kein vollständiges RAG.
Was hier passiert: Es werden sog. Embeddings erzeugt, diese werden als Vektoren lokal gespeichert und indexiert. Bei einer Frage an die KI werden die relevanten Vektoren abgerufen und die Antwort mit Ollama generiert.
Für die Nutzung des Systems ist das Verständnis hierfür später nicht erforderlich (ich verstehe es auch nicht so ganz…).

Installation:

ollama pull nomic-embed-text

Mit genau diesem Befehl kann man später auch ein Update durchführen.

Copilot

Um es gleich zu sagen: mit dem omnipräsenten Copilot von Microsoft hat das Plugin nichts zu tun!
Ich frage mich, wann Microsoft wohl juristisch gegen diesen Namen vorgeht… das soll aber nicht unser Problem sein.
Das Plugin Copilot for Obsidian wird von Logan Yang entwickelt.
Es gibt auch eine kostenpflichtige Plus-Version, mit der auch Bilder und PDF-Dateien indexiert werden können. Das ist mit der kostenlosen Version (leider) nicht möglich.
Die Kosten liegen bei ca. 12 Euro im Monat bei jährlicher Subscription. Es gibt auch eine „Believer" genannte Lifetime-Subscription für ca. 300 Euro.
Ich habe die kommerzielle Version angetestet (indem ich das Abo für einen Monat abgeschlossen habe) und sie hat mich nicht überzeugt. Allerdings befindet sich die Software noch in einer Beta-Phase und reift sicher noch deutlich aus.

Installation:
Wie bei Obsidian üblich wird das Plugin direkt über Obsidian im Bereich Community plugins installiert und muss danach aktiviert werden.

Einstellungen

Im Einstellungs-Dialog müssen nun einige sehr wichtige Parameter gesetzt werden:

Im Reiter „Model" habe ich zunächst sämtliche Modelle abgewählt, in dem ich das Häkchen bei „Enable" entfernt habe. Das mache ich sowohl bei „Chat Models" als auch bei „Embedding Models". Schließlich wollen wir ja ein eigenes, lokales Modell verwenden.

Ein eigenes Chat Model erzeugen wir, in dem wir auf „+ Add Custom Model" klicken.

Hier habe ich folgende Einstellungen vorgenommen:

Einstellungsdialog für ein eigenes Chat Model in Obsidian Copilot mit Modellname mistral und Provider Ollama
Die Einstellungen des lokalen Chat-Models

Ganz wichtig ist hier: der Model Name MUSS mistral lauten. Der Display-Name dagegen kann frei festgelegt werden. Als Provider wählen wir Ollama und Base URL kann leer bleiben (sofern wir z. B. den Port in Ollama nicht anders festgelegt haben). Einen API-Key benötigen wir nicht, da dies ja unser eigenes Modell ist.

Ein eigenes Embedding Model erzeugen wir, in dem wir auf „+ Add Custom Model" klicken.

Hier sind meine Einstellungen für das eigene Embedding-Model:

Einstellungsdialog für ein eigenes Embedding Model in Obsidian Copilot mit Modellname nomic-embed-text und Provider Ollama
Die Einstellungen des lokalen Embedding-Models

Ganz wichtig ist hier, exakt „nomic-embed-text" beim Model-Name einzutragen.
Der Display-Name ist wieder frei wählbar.
Als Provider geben wir „Ollama" an.
Die Base URL kann wieder leer bleiben, sofern wir Ollama nicht anders konfiguriert haben.
Einen API-Key brauchen wir wieder nicht.

Die Einstellungen im Reiter „Basic"

Jetzt erst, da wir unsere eigenen Modelle angelegt haben, können wir die notwendigen Einstellungen im Reiter Basic vornehmen.

Plugin-Einstellungen im Reiter Basic von Obsidian Copilot mit Default Chat Model und Embedding Model
Die Plugin-Einstellungen im Reiter Basic

Hier müssen nun noch wichtige Einstellungen vorgenommen werden, dann kann es losgehen!

Einen API Key müssen wir wie erwähnt nicht setzen, da wir eine eigene KI nutzen.

Ganz wichtig sind hier nun die Einstellungen bei „Default Chat Model" und bei „Embedding Model": hier wählen wir in den Comboboxen unsere jeweils vorher definierten Modelle aus. Diese sollten mit den von uns frei angegebenen Namen dort vorhanden sein.

Da wir hauptsächlich mit unserem Vault chatten wollen, stellen wir bei „Default Mode" „Vault QS (Basic)" ein.
Dann habe ich noch eingestellt, dass die Chats in der Sidebar laufen sollen und Chats im Standardordner „copilot-conversations" gespeichert werden soll. Mit diesen Einstellungen kann man experimentieren – entscheidend für das grundsätzliche Funktionieren sind nur die beiden Modelle.

An diese Stelle empfiehlt es sich, Obsidian zu beenden und neu zu starten: die Indexierung sollte beim Neustart von alleine starten und je nach Größe des Vault in einigen Sekunden oder Minuten beendet sein.

Anmerkung: später lässt sich der Index neu erzeugen, indem man im Chat ganz rechts unten auf das …-Menü klickt und dann „Refresh Vault Index" klickt. Außerdem habe ich in den Einstellungen auf dem Reiter „QA" den Schalter „Auto-Index Strategy" auf „ON STARTUP" gestellt. Das scheint mir aber nicht so richtig zuverlässig zu funktionieren.

Die Verwendung der KI

Wenn alles sauber konfiguriert ist, kann man den Chat direkt in der Obsidian-Oberfläche starten:
In der Seitenleiste ganz links findet sich der neue Button „Open Copilot Chat" – der Chat startet dann rechts in der Seitenleiste.

Hier kann man nun Fragen stellen wie „In welchen meiner Dokumente geht es um Power BI" oder „Wann habe ich mein Balkonkraftwerk in Betrieb genommen" oder was immer einem einfällt.

Was mir besonders gut gefallen hat: ich gebe seit Jahren immer mal wieder Geld für ein Projekt „XY" aus. Die Informationen hierzu finden sich in ganz unterschiedlichen Notizen.
Meine Frage: „Wie viel Geld habe ich insgesamt für Projekt XY ausgegeben?" hat mir die KI beantwortet, in dem sie alle relevanten Notizen aufgelistet hat, die Geldbeträge einzeln erwähnt und sogar die Gesamtsumme korrekt berechnet hat! Das fand ich beeindruckend.

Feature: Relevant Notes

Mit dem Feature Relevant Notes listet die KI bei einer geöffneten Notiz alle weiteren Notizen auf, die sie für relevant hält.
Das funktioniert mal mehr, meistens allerdings weniger. Das Feature lässt sich abschalten und das werde ich vermutlich auch tun. Bei einer Notiz über eine beim Hautarzt entfernte Warze wurde mir die Rechnung für die letzte Wartung der Gastherme als relevant angezeigt – das finde ich weniger intelligent.

Einschränkungen

Wir haben nun schon ein sehr leistungsfähiges und nützliches System.
Dennoch gibt es Grenzen und Einschränkungen:

Alternativen

Zum Schluss möchte ich noch einige mögliche Alternativen zu den von mir genutzten Komponenten erwähnen.

Das war mein erster Ausflug in die Welt selbst gehosteter KI.
Wenn ihr Anregungen oder Fragen habt, schreibt mir gerne!