O CZYM PISZEMY?

Java + AI w 5 minut: prosty mikroserwis z analizą sentymentu z OpenAI (cz.2)

Opublikowano: 31.07.2025  Czas czytania: 4 minuty
Java + AI w 5 minut: prosty mikroserwis z analizą sentymentu z OpenAI (cz.2)
W 5 minut zbudujemy prosty mikroserwis w Spring Boot, który wykorzystuje OpenAI do analizy sentymentu tekstu. To szybki sposób, by dodać sztuczną inteligencję do swojej aplikacji w Javie – bez trenowania modeli.

Po co to komu?

Wyobraź sobie, że Twoi użytkownicy zostawiają komentarze, zgłoszenia, recenzje lub feedback po szkoleniu. Każdy z tych tekstów niesie ze sobą emocje – tylko trzeba je odczytać. I tu właśnie wkracza analiza sentymentu. Wystarczy jedno zapytanie do mikroserwisu, a otrzymujesz prostą, zrozumiałą odpowiedź: pozytywny, neutralny albo negatywny.

To daje Ci natychmiastowy wgląd w nastroje klientów i pozwala szybciej reagować – zareagować na frustrację, nagrodzić lojalność, poprawić jakość usług.

I co najważniejsze – wszystko to zrobisz bez użycia Pythona, bez bibliotek NLP, bez lokalnego trenowania modeli. Wystarczy Java, Spring Boot i OpenAI API. W naszym przykładzie zaczniemy od ręcznie wpisywanych opinii, by przetestować działanie serwisu. W kolejnej części pokażemy, jak zautomatyzować pobieranie prawdziwych opinii z internetu.

Co przygotować:

1. Konfiguracja projektu

Na początek potrzebujemy prostego szkieletu aplikacji w Spring Boot, który będzie naszym mikroserwisem. Skonfigurujemy zależności, ustawimy kontroler REST i zadbamy o możliwość komunikacji z OpenAI przez API. Nie martw się – nie będzie tu żadnej magii, tylko konkretne kroki, które możesz powtórzyć u siebie w projekcie.
Wejdź na stronę https://start.spring.io/ i wygeneruj nowy projekt z Javą 17 i Spring Bootem.

 

W Netbeansie w pliku build.gradle dodaj zależności:

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.boot:spring-boot-starter-webflux'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

W application.property:

spring.application.name=ai-demo
openai.api-key=sekret_key
openai.model=gpt-3.5-turbo

2. Serwis: analiza sentymentu z OpenAI

W tej części stworzymy serwis, który będzie odpowiedzialny za komunikację z modelem GPT-3.5. Naszym celem jest przesłanie tekstu użytkownika jako promptu i odebranie jednej, zwięzłej odpowiedzi: pozytywny, neutralny lub negatywny. Wykorzystamy do tego bibliotekę WebClient, która umożliwia wygodne wykonywanie zapytań HTTP w Spring Boot.

package com.itsilesia.ai.ai_demo;

import jakarta.annotation.PostConstruct;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.stereotype.Service;

@Service
public class OpenAiService {

    @Value("${openai.api-key}")
    private String apiKey;

    @Value("${openai.model}")
    private String model;
    
    private WebClient webClient;

    
    @PostConstruct
    public void init(){
        webClient = WebClient.builder()
                .baseUrl("https://api.openai.com/v1")
                .defaultHeader("Authorization", "Bearer " + apiKey)
                .defaultHeader("Content-Type", "application/json")
                .build();
    }

    public String analyzeSentiment(String text) {
        String prompt = "Analyze the sentiment of the following text. Respond with one word: Positive, Neutral or Negative.\nText: " + text;

        Map<String, Object> message = Map.of(
            "role", "user",
            "content", prompt
        );

        Map<String, Object> body = Map.of(
            "model", model,
            "messages", List.of(message)
        );

        return webClient.post()
                .uri("/chat/completions")
                .bodyValue(body)
                .retrieve()
                .bodyToMono(Map.class)
                .map(resp -> ((Map)((List)resp.get("choices")).get(0)).get("message").toString())
                .block();
    }
}

3. REST kontroler którego będziemy się odpytywali o wyniki sentymentu

W tej części stworzymy serwis, który będzie odpowiedzialny za komunikację z modelem GPT-3.5. Naszym celem jest przesłanie tekstu użytkownika jako promptu i odebranie jednej, zwięzłej odpowiedzi: pozytywny, neutralny lub negatywny. Wykorzystamy do tego bibliotekę WebClient, która umożliwia wygodne wykonywanie zapytań HTTP w Spring Boot.

package com.itsilesia.ai.ai_demo;

import java.util.Map;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/sentiment")
public class SentimentController {

    private final OpenAiService openAiService;

    public SentimentController(OpenAiService openAiService) {
        this.openAiService = openAiService;
    }

    @PostMapping
    public ResponseEntity analyze(@RequestBody Map<String, String> payload) {
        String text = payload.get("text");
        String result = openAiService.analyzeSentiment(text);
        return ResponseEntity.ok(result);
    }
}

4. Wynik

Wejdź do Insomnia i wykonaj zapytanie pod adresem http://localhost:8080/sentiment/

Alternatywnie w konsoli:

Java post curl

 

Podsumowanie

Zbudowaliśmy działający mikroserwis, który potrafi w kilka sekund ocenić, czy dany tekst ma wydźwięk pozytywny, neutralny czy negatywny. Wykorzystaliśmy do tego Javę, Spring Boota i API OpenAI, bez konieczności sięgania po zewnętrzne biblioteki NLP czy uczenie własnych modeli. Całość działa niezależnie od języka tekstu – tak, także w języku polskim – i może być łatwo zintegrowana z formularzami kontaktowymi, recenzjami produktów czy systemami zgłoszeń.

To rozwiązanie idealne dla programistów, którzy chcą szybko wzbogacić swoje aplikacje o analizę opinii – bez uczenia się Pythona czy zagłębiania się w świat przetwarzania języka naturalnego. Prosto, skutecznie i w pełni produkcyjnie – dokładnie tak, jak lubimy w świecie Javy.

W skrócie: Java + AI = działa. Prosto, szybko i skutecznie.

Co dalej?

  • w kolejnej cześć podłączymy to do internetu i sprawdzimy realne opinie
  • chcesz otrzymać kod źródłowy, zostaw komentarz „CODE” 👇