Wie du einer KI nur die passenden Notizen gibst, damit sie besser antwortet

Unzählige feine Fasern laufen auf eine schmale Messingöffnung zu, nur ein dünner heller Strahl tritt auf der anderen Seite aus

Du fragst die KI, was für deinen Umzug noch zu erledigen ist. In deinem Notizordner liegen aber auch alte Reisepläne, Garantiebelege und eine überholte Terminliste. Wenn du alles weitergibst, muss die KI erst herausfinden, was zu deiner Frage gehört. Eine kleine, nachvollziehbare Auswahl erleichtert dir die Kontrolle ihrer Antwort.

Die Serie als Video

Das Video zur Serie zeigt in gut sechs Minuten, wie alle fünf Teile zusammenpassen. Die Angaben im Umzugsbeispiel sind erfunden.

Im ersten Teil hast du einen Vault angelegt und einige Notizen von Hand in einen Chat kopiert. Jetzt gehst du einen Schritt weiter: Du wählst passende Dateien gezielt aus und kannst dir dabei von einem einfachen Python-Skript helfen lassen. Dieses Skript durchsucht Notizen; es ruft kein KI-Modell auf und überträgt keine Daten.

Die Anleitung und Beispiele zu diesem Teil findest du im Serienordner auf GitHub. Das gesamte Repository als ZIP enthält auch das Material der anderen Teile. Für die Befehle öffnest du innerhalb des entpackten Repositorys den Serienordner serien/obsidian-und-ki. Dort liegt die zugehörige README.md.

Was mit Kontext gemeint ist

Der Kontext ist das Material, das ein Modell bei seiner Antwort zur Verfügung hat: deine Frage, die mitgegebenen Notizen und gegebenenfalls weitere Vorgaben des verwendeten Dienstes. Eine Datei auf deinem Rechner gehört erst dazu, wenn du sie übergibst oder ein eingerichtetes Werkzeug sie tatsächlich lädt.

Eine Vorauswahl wird häufig als Kontext-Routing bezeichnet. Das klingt größer als der erste praktische Schritt: Du entscheidest, welche Unterlagen zur Frage passen. Ein Ordnername oder ein Obsidian-Link kann dabei helfen, ersetzt aber keine Prüfung des Inhalts.

Mehr Text ist nicht grundsätzlich schlechter. Ein längeres Dokument kann wichtige Zusammenhänge enthalten. Unpassendes, doppelte Fassungen und unklar bezeichnete Altstände machen die Auswahl jedoch schwerer. Bei Tarifen mit verbrauchsabhängiger Abrechnung kann unnötig viel Eingabetext auch Kosten verursachen.

Angenommen, ein Ordner enthält 200 Notizen mit durchschnittlich 300 Wörtern. Das sind 60.000 Wörter. Drei ausgewählte Notizen mit zusammen 900 Wörtern entsprechen 1,5 Prozent dieser Textmenge. Die Rechnung beschreibt nur die Textmenge. Wie gut die KI damit antwortet, ist damit nicht geprüft.

Erst auswählen, dann beantworten

Beim Umzugsbeispiel passen zur Frage nach der Kündigung die Notiz zur alten Wohnung und ihre Quelle. Für die Frage nach dem Transport brauchst du dagegen den Beschluss zur Transportplanung. Die Quelle allein sagt noch nicht, ob bereits ein Fahrzeug gebucht ist.

Trenne drei Aufgaben:

  1. Suchen: Welche Dateien könnten zur Frage passen?
  2. Lesen: Welche davon enthalten wirklich die nötigen Angaben, und welche sind noch ungeprüft?
  3. Antworten und prüfen: Welche Aussage lässt sich mit welcher Textstelle belegen?

Die Suche kann ein Skript übernehmen. Ob ein Beleg die Antwort trägt, musst du weiterhin prüfen. Auch eine ausdrückliche Anweisung „Rate nicht“ garantiert keine fehlerfreie Antwort.

Ein Notizkopf für die ganze Serie

Die Beispiele dieser Serie verwenden dieselben Eigenschaften. Sie stehen am Dateianfang zwischen zwei Zeilen mit jeweils drei Bindestrichen. Obsidian kann solche YAML-Kopfzeilen als Eigenschaften anzeigen.

---
Titel: Alte Wohnung Kündigung
Thema: Umzug
Status: zu prüfen
Stand: 2026-10-29
Kurz: Kündigungsfrist, Vertrag, Übergabe
Quelle: "[[Mietvertrag alte Wohnung]]"
---

Status unterscheidet gilt, zu prüfen und veraltet. Stand bezeichnet den Tag der letzten inhaltlichen Prüfung. Quelle nennt den Ursprung. Ein optionales Gilt bis gibt eine zeitliche Grenze an. Das Speicherdatum einer Datei belegt nicht, dass jemand ihren Inhalt geprüft hat.

Die Anführungszeichen um einen Link im Kopf helfen, ihn als Textwert zu lesen. Im normalen Notiztext schreibst du den Link wie gewohnt als [[Mietvertrag alte Wohnung]].

Die Skripte verstehen diese einfache Form sowie die älteren Kopfzeilen ohne Bindestriche. Sie sind keine vollständigen YAML-Werkzeuge: Verwende pro Eigenschaft eine einfache Zeile. Im Text darunter darf ein Doppelpunkt vorkommen, ohne dass er den Kopfstatus verändert.

Der erste Test bleibt Handarbeit

Öffne die drei Fachnotizen aus dem Umzugsbeispiel von Teil 1. Lies sie einmal selbst und kopiere die für deine Frage nötigen Texte in den Chat. Setze davor:

Beantworte die Frage anhand der Notizen unten.
Nenne für Angaben daraus den relativen Dateipfad und die Belegstelle.
Angaben mit „zu prüfen“ bleiben unbestätigt.
Bei fehlenden oder widersprüchlichen Angaben: benenne die Lücke.
Erfinde keine Termine und keine Zusagen.

FRAGE: Was ist für den Transport schon entschieden und was noch offen?

Im Beispiel ist die Entscheidung für einen Transporter notiert. Ein verbindliches Angebot, Fahrerzusagen und ein Buchungstermin fehlen. Eine Antwort, die einen bereits reservierten Transporter nennt, wäre also unbelegt. Du kannst die Antwort an den wenigen Dateien direkt kontrollieren.

Die Auswahl mit Python vorbereiten

Im Beispielpaket zur Serie liegt 02-kontext-router/router.py. Entpacke das Repository und öffne ein Terminal im Serienordner serien/obsidian-und-ki. Die folgenden Befehle setzen Python ab Version 3.10 voraus. Unter Windows kannst du den Launcher mit py --version, unter Linux mit python3 --version prüfen. Für diese Beispiele brauchst du unter Windows kein WSL.

Unter Linux:

python3 02-kontext-router/router.py beispiele/umzug "Was ist für den Transport schon entschieden?"

Unter Windows in PowerShell:

py 02-kontext-router/router.py beispiele\umzug "Was ist für den Transport schon entschieden?"

Das Skript liest die Markdown-Dateien im angegebenen Ordner und seinen Unterordnern. Es sucht nach Wörtern und gemeinsamen Wortanfängen aus deiner Frage. Treffer in Titel, Thema und Kurzbeschreibung erhalten zusätzliches Gewicht. Aus den besten drei Dateien baut es eine Textausgabe mit deiner Frage und einer Anweisung zur Quellenprüfung. Du kopierst die Ausgabe selbst in den Chat. Das Skript versendet nichts.

Mit einer letzten Zahl legst du eine andere Höchstzahl fest:

python3 02-kontext-router/router.py beispiele/umzug "Welche Kündigungsfrist ist notiert?" 2

Status: veraltet wird übersprungen. Ein überschrittenes oder ungültig geschriebenes Gilt bis führt ebenfalls dazu, dass die Datei nicht ausgewählt wird. Zu prüfen darf als ausdrücklich unbestätigte Information mitgehen. Ein fehlendes Ablaufdatum bedeutet dabei nicht, dass eine Notiz fachlich noch stimmt.

In der Ausgabe stehen relative Pfade, etwa Wissen/Alte Wohnung Kündigung.md. Das ist genauer als nur der Dateiname, denn verschiedene Ordner können gleichnamige Dateien enthalten.

Was die Wortsuche nicht versteht

Das Beispielskript erkennt keine Bedeutung. Gemeinsame Wortanfänge helfen bei „kündigen“ und „Kündigungsfrist“, liefern aber auch Zufallstreffer. Synonyme, Verneinungen und die Bedeutung eines Datums beurteilt es nicht zuverlässig. Für „Umzug beenden“ kann es deshalb andere Notizen auswählen als für „Kündigung“.

Nutze die Zeile Kurz für naheliegende Suchbegriffe. Prüfe die ausgewählten Dateien vor dem Weitergeben. Wenn eine Antwort Informationen aus zwei Notizen benötigt, reicht die bestbewertete Einzeldatei unter Umständen nicht.

Ein Obsidian-Link wird vom Skript als Text gelesen. Es folgt dem Link nicht automatisch. Benötigst du die verlinkte Quelle, wählst du sie zusätzlich aus. Später kann ein Werkzeug diesen Schritt übernehmen; an der Pflicht, die Quelle zu prüfen, ändert das nichts.

Vorhandene Unterlagen importieren

Das Paket enthält außerdem 02-kontext-router/umwandeln.py für die optionale Umwandlung von Dokumenten mit MarkItDown. Wenn du schon Markdown-Notizen hast, kannst du diesen Abschnitt überspringen.

Das Skript liest Originale aus einem Quellordner und schreibt umgewandelte Dateien in einen getrennten Zielordner. Importierte Notizen erhalten Status: zu prüfen. Stand bleibt zunächst leer; Das Skript vermerkt Importdatum und Änderungsdatum der Quelldatei getrennt. Eine erfolgreiche Konvertierung ist keine Inhaltsprüfung.

Für MarkItDown empfiehlt sich eine eigene Python-Umgebung. Unter Linux mit vorhandener Python-venv-Unterstützung:

python3 -m venv .venv-import
.venv-import/bin/python -m pip install 'markitdown[pdf,docx,pptx,xlsx]'
.venv-import/bin/python 02-kontext-router/umwandeln.py Unterlagen Notizen-Import

Unter Windows:

py -m venv .venv-import
.\.venv-import\Scripts\python.exe -m pip install "markitdown[pdf,docx,pptx,xlsx]"
.\.venv-import\Scripts\python.exe 02-kontext-router\umwandeln.py Unterlagen Notizen-Import

Vergleiche das Ergebnis mit dem Original, besonders Zahlen, Tabellen und gescannte Seiten. Je nach Datei kann zusätzliche Texterkennung nötig sein. Vorhandene Zieldateien werden übersprungen, nicht aktualisiert. Hat sich ein Original geändert, brauchst du daher eine bewusst erzeugte neue Fassung und einen Vergleich. Bewahre das Original auf.

Einen Suchtest statt eines Erfolgsversprechens machen

Schreibe drei Fragen auf: eine mit vorhandener Antwort, eine mit einer ausdrücklich offenen Angabe und eine zu etwas, das in den Notizen nicht vorkommt. Prüfe jeweils zuerst die Dateiauswahl und danach die KI-Antwort.

Beim Umzug könntest du nach dem Transportbeschluss, einem bereits gebuchten Fahrzeug und dem Namen eines Helfers fragen. Das Beispiel enthält nicht für alles einen Beleg. Wenn die KI eine Lücke benennt, kann das ein korrektes Ergebnis sein. Wenn das Skript eine vorhandene Quelle verfehlt, ist zunächst die Suche zu verbessern.

Im nächsten Teil geht es darum, was passiert, wenn die gefundenen Notizen von gestern zwar passend, heute aber überholt sind.