Posts

Posts mit dem Label "Spring" werden angezeigt.

RAG Chatbot mit Spring AI, AWS Bedrock und Vektor Datenbank

Bild
Wie bringt man einem KI Chatbot Unternehmens-Knowhow bei? Retrieval Augmented Generation (RAG) ist eine Lösung, die ich in diesem Artikel mit Amazon Bedrock, der Vektor Datenbank pgvector und Spring AI umsetze. RAG Architektur-Überblick Der Benutzer chattet mit dem Chatbot unserer Anwendung (hier "RAG Chat Service"). Diesen Teil implementieren wir selbst mit Java und Spring AI. Als LLM bzw. Chat-Service verwendet unsere Spring AI Anwendung den AWS Dienst Bedrock mit dem Sprachmodell Titan (eine Alternative zu GPT von OpenAI). Ohne eigene Dokumente in einer Vektor Datenbank, hätten wir so einen Chatbot ohne Unternehmens-spezifisches Wissen - vergleichbar mit ChatGPT. So etwas habe ich schon mit GPT gebaut, siehe dazu  gpt-3 in deiner Java Webanwendung . Unsere Anwendung sucht in der Vektor Datenbank nach zur Chat-Anfrage des Benutzers passenden Dokumenten. Mit diesen Unternehmens-spezifische Texten reichert unsere Anwendung die Interaktion mit dem Bedrock Titan Chat Service an...

AI Assistent mit LangChain4j und Spring Boot

Bild
LangChain4j ist ein neues und populäres Framework, um LLMs, Vektor-Datenbanken und weitere KI-Funktionen in Java Systemen zu nutzen. In diesem Artikel integrieren wir LangChain4j in eine Spring Boot Anwendung. Spring Boot mit LangChain4j Maven Dependencies Stand 22.07.2024 hat LangChain4j noch eine Nuller-Version im Maven Repository. LangChain4j integrieren wir als 3rd-Party Bibliothek in unser Spring Boot Projekt: < dependencies > < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-web</ artifactId > </ dependency > < dependency > < groupId >dev.langchain4j</ groupId > < artifactId >langchain4j-spring-boot-starter</ artifactId > < version >0.32.0</ version > </ dependency > < dependency > < groupId >dev.langchain4j</ groupId > < artifactId >langchain4j-azure-op...

CronJobs mit Spring

Bild
Mit Spring können zeitgesteuerte Aufgaben in Java Code integriert werden. CronJobs wie wir sie in Linux kennen, definieren wir mit Spring einfach per Annotation. In diesem Artikel zeige ich wie das geht und wie Spring die CronJobs entsprechend unserer Definition ausführt. Was ist ein CronJob? Unter CronJob verstehen wir die zeitlich gesteuerte Ausführung eines Kommandos zur Erledigung einer Aufgabe bzw. eines Jobs. Das Kommando wird durch einen bestimmten Zeitpunkt oder eine zeitliche Bedingung angestoßen. Typische Beispiele für durch CronJobs gestartete Aufgaben sind: Regelmäßiges Aufräumen der Datenbank - z. B. um veraltete Daten zu löschen oder DSGVO konform persönliche Daten nach einer definierten Zeit zu löschen. Wöchentlicher Versand von Newslettern oder Werbung per Email Nächtliche Datenbank-Backups Monatliches Erstellen von Rechnungen (z.B. Telefon-Rechnung) Das Betriebssystem Linux bietet crontab zum Erstellen von CronJobs an. Mit crontab könnten wir eine Spring Anwendung star...

Reaktive REST-Webservices mit Spring WebFlux

Bild
Mit Spring WebFlux entwickeln wir deutlich performanterer Web-Anwendungen und REST-Services. WebFlux ist Teil vom Spring Reactor Projekt. Es ist die moderne, reaktive Alternative zu Spring MVC. In diesem Artikel baue ich mit Mono und Flux eine reaktive API. Unterschied zwischen WebFlux und Spring MVC Das Reactor Projekt bildet die Grundlage des reaktiven Stacks in Spring. Es bietet eine Event-basierte, nicht blockierende Architektur, so dass darauf aufbauende Anwendungen mehr Leistung aus ihren CPU-Ressourcen herausholen. Spring WebFlux ist Teil des reaktiven Stacks. Es ist das reaktive Gegenstück zu Spring MVC im klassischen Servlet Stack. Weitere Infos zu Spring MVC findet ihr in meinem Blog:  spring-mvc-thymeleaf.html Weitere Details zum Spring Reactor Projekt findet ihr hier:  https://spring.io/reactive Von dort stammt die folgende Gegenüberstellung zur besseren Einordnung der einzelnen Komponenten aus dem Servlet und reaktivem Stack. Gegenüberstellung Reactive und Servlet...

Spring WebClient der reaktive HTTP Client im Performance-Vergleich zum RestTemplate

Bild
Spring Reactive ist der moderne, reaktive Technologie Stack von Spring. Es ist die skalierbare, resiliente, responsive und Event-basierte Alternative zum klassischen Servlet Stack - dem bisherigen Standard in jedem Spring Web Projekt. Teil des reaktiven Stacks ist Spring WebFlux und dessen WebClient zum Verschicken von HTTP Requests. In diesem Artikel zeige ich, dass der WebClient unter Last deutlich schneller als der klassische Spring RestTemplate ist. Spring WebFlux Das Reactor Projekt bildet die Grundlage des reaktiven Stacks in Spring. Es bietet eine Event-basierte, nicht blockierende Architektur, so dass darauf aufbauende Anwendungen mehr Leistung aus ihren CPU-Ressourcen herausholen. Spring WebFlux ist Teil des reaktiven Stacks und damit das reaktive Gegenstück zu Spring MVC im klassischen Servlet Stack. Weitere Infos zu Spring MVC findet ihr in meinem Blog: spring-mvc-thymeleaf.html Weitere Details zum Spring Reactor Projekt findet ihr hier:  https://spring.io/reactive Von d...