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ć:
- Java 17+
- Spring Boot (np. via Spring Initializr)
- API key z platformy OpenAI
- Netbeans 24
- Insomnia
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:
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” 👇