Spring AI für Enterprise AI, RAG und Tool-Integration
Spring AI überträgt Spring-Prinzipien wie Portabilität, modulare Konfiguration und POJO-basierte Entwicklung auf AI-Anwendungen.
Fachliche Einordnung
Enterprise AI braucht mehr als einen API-Call zum LLM: Prompt-Versionierung, Modellabstraktion, RAG, Vektorstores, Tool-Aufrufe, Observability und Sicherheitsgrenzen.
Enterprise-Merksatz: Spring AI überträgt Spring-Prinzipien wie Portabilität, modulare Konfiguration und POJO-basierte Entwicklung auf AI-Anwendungen.
Technische Darstellung
Kernkonzepte
- ChatClient als einheitliche Schnittstelle.
- Model Provider Abstraktionen.
- Embedding Models und Vector Stores.
- Retrieval Augmented Generation.
- Tools/Functions mit klaren Berechtigungen.
- Prompt Templates und Auswertung.
Wann einsetzen?
- Du baust interne Assistenten mit Unternehmenswissen.
- Du willst Modellanbieter austauschbar halten.
- Du brauchst RAG statt Halluzinationsrisiko durch freie Antworten.
Typische Fehler und Risiken
- Geheime Daten ungefiltert in Prompts senden.
- RAG ohne Dokumentbereinigung und Quellenanzeige.
- Tool-Aufrufe ohne Autorisierung und Audit.
Legacy- und Modernisierungssicht
Legacy-Wissen aus PDFs, Datenbankhandbüchern und SOAP-Verträgen kann in geprüfte Wissensbestände überführt und über RAG nutzbar gemacht werden.
Ausführliches Beispiel
Das Beispiel zeigt bewusst nicht nur Annotationen, sondern auch die Verantwortung der Schicht. In echten Projekten sollte der technische Spring-Code an Adapter- oder Konfigurationsrändern bleiben, während die Fachlogik testbar und möglichst frameworkarm bleibt.
@Service
class PolicyAssistant {
private final ChatClient chatClient;
private final VectorStore vectorStore;
String answer(String question) {
List<Document> docs = vectorStore.similaritySearch(SearchRequest.query(question).withTopK(5));
return chatClient.prompt()
.system("Antworte nur auf Basis der bereitgestellten Quellen und nenne Unsicherheit.")
.user(u -> u.text("Frage: {question}
Quellen: {docs}")
.param("question", question)
.param("docs", docs))
.call()
.content();
}
}
Checkliste für Reviews
- Ist die Verantwortung des Bausteins klar: Framework steuert Lebenszyklus, Library wird gezielt benutzt?
- Ist die Fachlogik außerhalb von Controller, Listener, Repository-Implementierung oder Konfiguration?
- Sind Fehlerfälle, Timeouts, Security, Monitoring und Tests sichtbar modelliert?
- Gibt es klare Grenzen zwischen DTO, Domäne, Persistence und Infrastruktur?