Eine Spring-AI-RAG-Anwendung liest Dokumente ein, erzeugt Embeddings, speichert Text und
Vektoren in einem VectorStore, ruft bei einer Frage relevante Dokumente ab
und übergibt nur den ausgewählten Kontext an das Chatmodell.
Was ist Spring AI?
Spring AI überträgt etablierte Spring-Prinzipien auf generative KI. Das Framework bietet APIs und Auto-Konfigurationen für Chatmodelle, Embedding-Modelle, Vector Stores, Dokumentverarbeitung, Tool Calling und RAG. Anwendungen bleiben dadurch näher an vertrauten Spring-Boot-Mustern und müssen Modellanbieter nicht direkt in jeder Fachkomponente ansprechen.
Für einfache Frage-Antwort-Flows stellt Spring AI den
QuestionAnswerAdvisor bereit. Komplexere Abläufe lassen sich mit dem
RetrievalAugmentationAdvisor und austauschbaren Modulen für Query-Transformation,
Retrieval und Post-Processing strukturieren.
Architektur einer Spring-AI-RAG-Anwendung
Ingestion
Dokument lesen, bereinigen, in Chunks teilen, Embeddings erzeugen und mit Metadaten speichern.
Query
Frage analysieren, passende Chunks abrufen, Berechtigungen anwenden und Antwort generieren.
Warum PostgreSQL und pgvector?
pgvector erweitert PostgreSQL um Vektortypen und Ähnlichkeitssuche. Damit können relationale Geschäftsdaten, Text, Metadaten und Embeddings in derselben betrieblich bekannten Datenbank liegen. Für viele Anwendungen reduziert dies die Anzahl zusätzlicher Infrastrukturkomponenten.
pgvector unterstützt exakte Suche sowie approximative Indizes wie HNSW und IVFFlat. Ob PostgreSQL ausreicht, hängt von Datenmenge, Filterverteilung, Latenzziel und Betriebsmodell ab. Ein Benchmark mit dem eigenen Datenbestand ist aussagekräftiger als eine pauschale Empfehlung.
Wie sieht ein RAG-Flow mit Spring AI aus?
Der folgende Ausschnitt zeigt den von Spring AI dokumentierten Advisor-Ansatz. Er setzt
voraus, dass Dokumente bereits in einem VectorStore gespeichert sind:
ChatClient chatClient = ChatClient.builder(chatModel)
.defaultAdvisors(
QuestionAnswerAdvisor.builder(vectorStore).build()
)
.build();
String answer = chatClient.prompt()
.user(question)
.call()
.content(); Für Mandantentrennung oder Dokumenttypen reicht ein globaler Similarity Search nicht. Metadatenfilter müssen serverseitig und unabhängig von der Benutzereingabe erzwungen werden. Ein direkter Retrieval-Schritt kann beispielsweise so aussehen:
SearchRequest request = SearchRequest.builder()
.query(question)
.topK(8)
.similarityThreshold(0.35)
.filterExpression(
"knowledge_space_id == '" + trustedSpaceId + "'"
)
.build();
List<Document> hits = vectorStore.similaritySearch(request); Der Filterwert muss aus einer vertrauenswürdigen serverseitigen Identität stammen. Benutzereingaben dürfen nicht ungeprüft zu Filterausdrücken zusammengesetzt werden.
Was braucht Spring AI RAG für den Produktivbetrieb?
- Reproduzierbares Chunking und versionierte Embedding-Modelle
- Harte Mandanten- und ACL-Filter bereits beim Retrieval
- Hybrid Search für Semantik und exakte Begriffe
- Kontextbudget, Duplikatkontrolle und optionales Reranking
- Schutz vor indirekter Prompt Injection aus Dokumenten
- Zitatvalidierung und ein klares No-Answer-Verhalten
- Timeouts, Rate Limits, Monitoring und kontrollierte Fehlerantworten
- Golden Set und Regressionstests bei Modell- oder Promptänderungen
Weitere Architekturmuster beschreibt die Seite Advanced RAG: Hybrid Retrieval, Guardrails und Evaluation.
Wie misst man die Qualität einer RAG-Pipeline?
Eine Antwort, die in einer Demo gut aussieht, reicht nicht als Qualitätsnachweis. Ein Golden Set sollte erwartete Quellen, beantwortbare Fragen, themenfremde Fragen und Angriffsversuche enthalten. Wichtige Metriken sind Retrieval Precision/Recall, Faithfulness, Citation Accuracy, No-Answer Accuracy sowie p50-/p95-Latenz.
Allerate besitzt dafür eine versionierte Evaluationsgrundlage. Automatisierte Ergebniswerte werden erst veröffentlicht, wenn der vollständige Lauf reproduzierbar ausgeführt wurde.
Primärquellen
Spring AI RAG als Proof of Concept
Validieren Sie Datenquellen, Berechtigungen, Antwortqualität und Betrieb mit einem begrenzten realen Use Case.