Provider-Registry statt einem SDK
Erste Skizze hing an einem einzigen RAG-Framework. Nach zwei Upgrades, die das Chunking gebrochen haben, wurde jeder Provider zu einer Lazy-Factory hinter einer kleinen RAG2SQL-Schnittstelle. Wechsel von LangChain zu LlamaIndex oder DSPy ist jetzt Config, kein Refactor.
Zwei Guards schlagen einen klugen Prompt
Das Modell einfach um "nur lesen" zu bitten, hat nicht gereicht. Der Intent-Filter blockt Schreib-Verben in der Frage, der SQL-Validator läuft den geparsten Token-Tree und lehnt INSERT, UPDATE, DROP und Freunde auch in CTEs ab. Beide müssen grün sein, bevor Postgres das Statement sieht.
Retrieval schlägt Schema-Dump im Prompt
Den ganzen Banking-Schema-Dump in den Prompt zu kippen war teuer und laut. Hybrid-Suche über pgvector-Embeddings plus BM25-Keyword-Scores zieht nur die relevanten Tabellen, Enum-Typen und Custom-Docs. Der Prompt wurde kleiner, die Antworten wurden besser.
Fehler wurden Teil der Schleife
Frühe Demos starben sofort, wenn ein Spaltenname schief war. Jetzt klassifiziert der Executor die Exception: Verbindungsfehler stoppen, Syntax- und Spaltenfehler gehen zurück an das Modell zum Reparieren. Drei Versuche, danach saubere deutsche Fehlermeldung statt Crash.