Spring AI – Integracja sztucznej inteligencji w aplikacjach Spring
Ostatnie lata w IT to okres niezwykle szybkiego rozwoju sztucznej inteligencji. Narzędzia generatywnej AI szybko zyskały (i dalej zyskują) na popularności, znajdując zastosowania w coraz to nowych dziedzinach.
Wraz z tym rozwojem pojawiło się wyzwanie, jak wykorzystać potencjał tego rodzaju narzędzi w istniejących aplikacjach. Jednym z frameworków, który stara się dostarczyć narzędzi pozwalających na integrację sztucznej inteligencji w aplikacjach javowych jest Spring AI.
Narzędzie to wpisuje się w pełni w ekosystem Springa – wykorzystuje istniejące koncepcje i rozwiązania. Pozwala na płynne rozpoczęcie pracy z AI, bez konieczności przeprowadzania skomplikowanej konfiguracji. Zamiast tego programiści skupić mogą się nad tworzonymi usługami i logiką biznesową.
Jedną z funkcjonalności Spring AI jest zapewnianie dostępu do czytników różnego rodzaju danych (dokumentów pdf, HTML, MS Word itp.), które dzięki temu można w prosty sposób odczytać, a następnie przetworzyć w swojej aplikacji:
W przypadku braku czytnika dla pożądanego przez nas formatu możliwe jest stworzenie w nieskomplikowany sposób własnej jej implementacji.
Do zalet Spring AI należy także prosta integracja z wektorowymi bazami danych. Korzystając z dotychczasowych rozwiązań (takich jak wstrzykiwanie zależności), możliwe jest proste zmienianie dostawcy bazy, pozostawiając logikę biznesową odseparowaną w odrębnej warstwie. Opisywana biblioteka daje możliwość filtrowania metadanych agnostycznie, niezależnie od implementacji wektorowej bazy danych. Poszczególne tego rodzaju bazy stosują różne algorytmy, których celem jest poprawa wydajności przy odpytywaniu dużych zbiorów danych. Różne implementacje baz stosują także różne metody tzw. filtrowania metadanych, czyli zawężania ilości danych, jeszcze przed wykonaniem wyszukiwania. Spring AI pozwala na niezależne od dostawcy bazy przeszukiwanie takich podzbiorów danych, zamiast skanowania całego ich zestawu. Spójrzmy na przykład z dokumentacji Springa, w którym przed właściwym wyszukaniem usuwana jest cześć zbioru danych w oparciu o metadane i filtr(obiekt FIlter.Expression):
Kolejną potężną funkcjonalnością Spring AI jest function-calling, czyli mechanizm umożliwiający wywoływanie funkcji w oparciu o dane generowane przez modele językowe. Spring AI upraszcza ten proces, pozwalając na definiowanie narzędzi (tools) i ich automatyczne wywoływanie w odpowiedzi na zapytania użytkownika. Dzięki temu aplikacje mogą dynamicznie korzystać z różnych usług, takich jak pobieranie danych, przetwarzanie informacji czy interakcja z bazami wiedzy. Integracja ta zwiększa możliwości modeli AI, umożliwiając im wykonywanie rzeczywistych operacji zamiast jedynie generowania tekstu. Spring AI obsługuje zarówno wbudowane, jak i niestandardowe funkcje, co pozwala na elastyczne dostosowanie systemu do konkretnych potrzeb biznesowych.
Przykładem zastosowania function calling w Spring AI jest funkcja obliczająca pole powierzchni prostokąta na podstawie podanych wymiarów:
Dzięki adnotacji @Tool oraz dodanemu opisowi (description), Spring AI może lepiej interpretować przeznaczenie funkcji i poprawnie ją wywoływać w odpowiednich kontekstach. Gdy model AI otrzyma zapytanie o obliczenie pola prostokąta, system automatycznie wykona funkcję i zwróci użytkownikowi wynik. To podejście pozwala na integrację AI z rzeczywistą logiką biznesową, czyniąc aplikacje bardziej interaktywnymi i użytecznymi.
Spring AI wprowadza także tzw. Advisors, czyli mechanizm upraszczający zarządzanie kluczowymi aspektami aplikacji AI, takimi jak logowanie, przekształcanie wiadomości czy zarządzanie pamięcią rozmów. Advisors działają w tle, automatycznie modyfikując i filtrując dane przesyłane między użytkownikiem a modelem AI, bez potrzeby ingerencji w główną logikę biznesową aplikacji. Dzięki temu kod pozostaje czysty i czytelny, a powtarzalne operacje wykonują się automatycznie.
Przykładem praktycznego zastosowania Advisors może być ich wykorzystanie w chatbocie:
W powyższym kodzie chatbot korzysta z dwóch advisorów. MessageChatMemoryAdvisor dba o kontekst rozmowy, automatycznie dodając wcześniejsze wiadomości do aktualnego zapytania, co sprawia, że AI „pamięta” wcześniejsze interakcje. SimpleLoggerAdvisor rejestruje zarówno zapytania użytkownika, jak i odpowiedzi modelu, co ułatwia analizę działania aplikacji oraz jej debugowanie.
Dzięki Advisors nie trzeba ręcznie programować tych funkcji – Spring AI robi to za nas, pozwalając skupić się na właściwej logice aplikacji, zamiast na powtarzalnych operacjach technicznych.
Każdy model AI ma swoje specyficzne cechy, które mogą utrudniać pracę deweloperom. Jednym z typowych problemów jest wymuszanie odpowiedzi w określonym formacie – np. w XML – zamiast standardowej, konwersacyjnej formy, do której modele LLM są naturalnie skłonne. Modele często dodają zbędne wstępy, wyjaśnienia lub formatowanie Markdown, co sprawia, że wynik nie nadaje się do automatycznego przetwarzania.
Spring AI rozwiązuje ten problem, automatycznie dostosowując instrukcje dla modelu, aby zapewnić spójny i przewidywalny format odpowiedzi. Dzięki temu, niezależnie od używanego modelu (czy to OpenAI, Claude, czy inny), można mieć pewność, że zwrócone dane spełnią oczekiwania aplikacji.
Przykładem tego podejścia jest implementacja odpowiedniej metody interfejsu FormatProvider wymuszająca odpowiedź w formacie XML:
Dzięki temu Spring AI automatycznie pilnuje, by model generował odpowiedzi w oczekiwanym formacie, eliminując konieczność ręcznego dopracowywania promptów i radzenia sobie z nieprzewidywalnymi wynikami. To pozwala skupić się na samej logice aplikacji, zamiast na walce z modelami AI.
Spring AI to narzędzie, które znacząco upraszcza integrację sztucznej inteligencji z aplikacjami opartymi na Springu. Dzięki funkcjom takim jak automatyczne zarządzanie pamięcią rozmowy za pomocą advisorów, wywoływanie funkcji w oparciu o dane generowane przez modele AI oraz łatwa integracja z bazami danych wektorowymi, Spring AI pozwala programistom skupić się na logice biznesowej, eliminując potrzebę zajmowania się technicznymi detalami. To tylko niektóre z wielu dostępnych możliwości.
Oprócz tego, Spring AI oferuje również wbudowaną obserwowalność, umożliwiającą monitorowanie wydajności i zdrowia aplikacji AI, integrację z narzędziami takimi jak Grafana i Tempo, a także uproszczone testowanie A/B różnych modeli AI. Dzięki temu deweloperzy mogą łatwiej optymalizować aplikacje AI i uzyskać lepsze wyniki.
Dodatkowo, automatyczne dostosowywanie wyników do oczekiwanych formatów, takich jak XML, za pomocą Structured Output Converters, zwiększa precyzyjność i przewidywalność odpowiedzi modelu.
Spring AI to narzędzie, które warto poznać, by w pełni wykorzystać potencjał sztucznej inteligencji w nowoczesnych aplikacjach.
Źródła:
https://spring.io/blog/2024/11/19/why-spring-ai https://docs.spring.io/spring-ai/reference/api/tools.html https://docs.spring.io/spring-ai/reference/api/vectordbs.html https://docs.spring.io/spring-ai/reference/api/structured-output-converter.html
