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.
Verwandte Texte
Notizen aus diesem Projekt.
- The Alert That Named a Thing and Called It EvidenceFive high-severity alerts from my own monitoring. All five were the same defect: a record that names something being read as an observation of a property it never measured.
- A Write Loop That Never Merges AnythingMy homelab brain noticed problems and did nothing about them. Closing the loop meant four human gates and an executor whose defining feature is that it stops at a draft PR.
- Teaching a System to Say “I Don’t Know”The most useful thing my homelab brain does is refuse to answer. Grounded-or-blocked: every claim cites the fact that produced it, or it never reaches me.
- A Second Brain That Refuses to GuessAnswering an operational question was costing a local model a 30-50K token dump. I built a compiled memory layer that does it in 2-5K, and blocks itself when it cannot cite a source.
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.