Adrian RomoAdrian Romo
Aktiv

Homelab Zweitgehirn

Eine kompilierte Memory-Schicht, die Infrastrukturfragen in 2–5K Tokens mit Quellenangaben beantwortet

Überblick

Kontext, Ansatz und Ergebnis.

Problem

Ich wollte ein lokales Modell, auf meiner eigenen GPU, das Fragen zu meiner eigenen Infrastruktur beantworten kann — was hängt wovon ab, warum ist etwas so konfiguriert, wie es ist, was hat sich kürzlich geändert. Einfaches Retrieval über meine Dokumentation kostete pro Frage 30.000 bis 50.000 Tokens und hatte kein Zeitverständnis: Eine Entscheidung aus dem Juni und eine Beobachtung von heute Morgen kamen mit gleicher Autorität zurück.

Meine Rolle

Ich habe das komplette System alleine entworfen und gebaut, in etwa acht Wochen, als 220 gemergte Pull Requests.

Rahmenbedingungen

  • Muss komplett lokal laufen. Eine 24GB Consumer-GPU, die oft mit anderen Aufgaben beschäftigt ist.
  • Darf niemals eine weitere Quelle der Wahrheit werden. Git und Live-Runtime-Beobachtungen bleiben maßgeblich; alles Abgeleitete muss löschbar und rekonstruierbar sein.
  • Muss ehrlich sein. Ein Operations-Assistent, der halluziniert, ist schlimmer als gar keiner, weil du eine dünne Antwort nicht von einer falschen unterscheiden kannst.

Architektur

Eine kompilierte Schicht über den maßgeblichen Quellen: ein temporaler Fakten-Store, der Fakten schließt statt sie zu überschreiben, ein Beziehungsgraph (940 Knoten, 1.449 Kanten), generationsgestempelte Zusammenfassungskapseln und ein Vektorindex — alles zusammengebaut zu einem token-budgetierten Kontextpaket.

Das Retrieval ist gestuft und bricht früh ab: exakt, dann lexikalisch BM25, dann Kapsel, dann Graph, dann semantisch. Konflikte werden durch feste Priorität gelöst: Runtime vor Fakt vor Kapsel, und ein abgeleitetes Artefakt, dessen Generation hinter der Quelle zurückliegt, wird als veraltet markiert, sodass der Query-Pfad auf die Rohdaten zurückfällt.

Darüber liegen die Analyse-Schichten: Verfall (welche dokumentierten Entscheidungen sind nicht mehr gültig), Korrektheitsvalidierung gegen Live-Quellen mit einem festgeschriebenen Baseline und einer CI-Regression-Absicherung, Drift-Abgleich zwischen deklarierter und beobachteter Realität, Blindspot-Erkennung, kausales und Multi-Hop-Reasoning sowie ein gesteuerter Detect-Propose-Approve-Act-Loop, dessen Executor bei einem Draft-Pull-Request stoppt und niemals merged.

Durchgehend gilt eine Regel: begründet oder blockiert. Auswahl und Ranking sind deterministisch und offline reproduzierbar. Ein Sprachmodell darf ein bereits ausgewähltes Ergebnis formulieren, aber niemals eines hinzufügen, entfernen oder umklassifizieren.

Ergebnis

Etwa 99 % weniger Tokens pro Query, validiert im Shadow-Mode gegen den bisherigen Ansatz vor der Umstellung. 31 Kommandozeilentools, 93 Read-Only-Tools über Model Context Protocol exponiert und 293 Tests allein über das Memory-Subsystem innerhalb einer 116.000-Zeilen-Python-Operations-Schicht mit 1.865 Tests.

Was ich anders machen würde

Ich habe den Fakten-Store gebaut, bevor ich das System gebaut habe, das prüft, ob die Fakten noch stimmen. Die gehören in denselben Release — ein Gedächtnis ohne Selbst-Audit ist ein selbstbewusster Cache. Und ich hätte von Anfang an „was habe ich beobachtet“ von „was schließe ich daraus“ im Detector-Contract getrennt; das Vermischen hat eine Reihe gut belegter Alerts produziert, die alle denselben Bug hatten.

Erkenntnisse

Was ich mitnehme.

Das Schwierigste an einem Retrieval-System ist nicht das Abrufen selbst, sondern die getrennte Darstellung dessen, was aktuell wahr ist, von dem, was irgendwann einmal aufgeschrieben wurde. Und es hat sich herausgestellt, dass das Verweigern einer Antwort ein Feature ist, das ich täglich nutze: Blockierte Schlussfolgerungen werden so zu einer Aufgabenliste statt zu einem plausiblen Satz, den ich erst gegenprüfen muss.

Stack

Tools und Plattformen.

PythonSQLite FTS5QdrantOllamaModel Context ProtocolFastAPIPostgressystemd

Verwandte Texte

Notizen aus diesem Projekt.

Reden wir

Möchtest du über solche Arbeit sprechen?

Wenn du für ähnliche Backend-, AWS-, Voice- oder Integrations-Arbeit einstellst — oder einfach Architektur-Notizen vergleichen willst — melde dich direkt.