poniedziałek, 25 sierpnia 2025

AI Chatbot w Javie - RAG krok po kroku

Na bazie świetnego artykułu Baeldung o budowie chatbota w Javie z LangChain4j i MongoDB przygotowałem podobny, praktyczny przewodnik – ze wskazówkami, kodem i alternatywami. Oryginał znajdziesz tutaj: Building an AI Chatbot in Java With Langchain4j and MongoDB Atlas .



Dlaczego ten stack?

  • LangChain4j – wygodna warstwa do pracy z LLM w Javie (prompty, łańcuchy, pamięci, narzędzia).
  • MongoDB Atlas + Vector Search – trwałe przechowywanie embeddingów i szybkie zapytania semantyczne; idealne do RAG.

Efekt końcowy: prosty chatbot w stylu Q&A nad Twoimi dokumentami – z indeksem wektorowym w Atlasie, generacją embeddingów i łączeniem wyników z modelem językowym (RAG).

Wymagania wstępne

  • Java 17+
  • Konto w MongoDB Atlas i klaster (free tier wystarczy)
  • Klucz do dostawcy LLM/embeddingów (np. OpenAI) lub lokalny Ollama

Struktura projektu (Maven + Spring Boot)

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>5.1.0</version>
  </dependency>

  <dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j</artifactId>
    <version>0.35.0</version>
  </dependency>

  <dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-openai</artifactId>
    <version>0.35.0</version>
  </dependency>

  <dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-mongodb</artifactId>
    <version>0.35.0</version>
  </dependency>
</dependencies>

Konfiguracja środowiska

server:
  port: 8080

app:
  mongo:
    uri: ${MONGODB_URI}
    db: ragdb
    collection: chunks
  openai:
    apiKey: ${OPENAI_API_KEY}
  rag:
    indexName: rag_vector_index
    dimensions: 1536

Definicja indeksu wektorowego

{
  "fields": [
    { "type": "vector", "path": "embedding", "numDimensions": 1536, "similarity": "cosine" },
    { "type": "string", "path": "source" },
    { "type": "string", "path": "text" }
  ]
}

Chunkowanie i embeddingi

Przykładowy kod Java generujący embeddingi i zapisujący do MongoDB:

float[] vec = embeddings.embed(chunk);
col.insertOne(new Document()
  .append("source", sourceName)
  .append("text", chunk)
  .append("embedding", toList(vec))
);

Retriever i RAG

Zapytanie semantyczne do Atlas Vector Search:

List<Bson> pipeline = List.of(
  Aggregates.vectorSearch("embedding", toList(qVec), indexName, 5, 200),
  Aggregates.project(Projections.include("text", "source"))
);

Łańcuch RAG z kontekstem i modelem czatu:

var messages = List.of(
  SystemMessage.from("Jesteś asystentem RAG..."),
  UserMessage.from("Kontekst:\n" + contextBlock + "\n\nPytanie: " + userQuestion)
);
return chat.generate(messages).content().text();

REST API

@PostMapping("/ingest")
public void ingest(@RequestBody IngestRequest req) {
  ing.ingest(req.source(), req.text());
}

@PostMapping
public ChatResponse chat(@RequestBody ChatRequest req) {
  return new ChatResponse(rag.ask(req.question()));
}

Alternatywy

Typowe pułapki

  1. Niedopasowany numDimensions w indeksie vs. model embeddingów.
  2. Brak overlapu przy chunkowaniu – tracony kontekst.
  3. Za duży kontekst – tnij do top-k i stosuj re-ranking.
  4. Sekrety w repo – używaj zmiennych środowiskowych.

Podsumowanie

W kilkudziesięciu linijkach kodu stworzyliśmy RAG chatbota – z MongoDB Atlas, LangChain4j i prostym REST API. Teraz możesz dodać streaming, cache embeddingów, czy personalizację dostępu.

Źródło, na którym bazowałem: Baeldung – Building an AI Chatbot in Java With Langchain4j and MongoDB Atlas

Dalsza lektura

poniedziałek, 18 sierpnia 2025

Nowe modele OpenAI gpt-oss – otwarte wagi i praktyczne wdrożenia AI

OpenAI wprowadza gpt-oss — serię modeli z otwartymi wagami, które możesz pobrać, uruchamiać lokalnie i dostosować do własnych potrzeb. To kolejny krok w kierunku większej kontroli nad sztuczną inteligencją, bez kompromisów w jakości rozumowania i elastyczności wdrożeń. Sprawdź, co oferują wersje 20b i 120b oraz jak szybko zacząć z nimi pracę.




1. O co chodzi z gpt‑oss?

gpt‑oss to rodzina modeli OpenAI z otwartymi wagami (open‑weight), które można pobierać, uruchamiać lokalnie i dostrajać pod własne przypadki użycia. Seria obejmuje dwa warianty: gpt‑oss‑120b (wyższa wydajność) oraz gpt‑oss‑20b (lżejszy, „edge/on‑device”).

  • Wydajność: 120b osiąga wyniki bliskie o4‑mini na kluczowych benchmarkach; 20b jest porównywalny do o3‑mini.
  • Wymagania sprzętowe: 120b działa na pojedynczej karcie 80 GB; 20b może działać przy ~16 GB pamięci.
  • Licencja: Apache 2.0 + zasady użycia gpt‑oss.
  • Przeznaczenie: rozumowanie, zadania agentyczne, elastyczne scenariusze developerskie.

2. Co dostajesz „w pudełku”

3. Jak to uruchomić w praktyce

Poniżej minimalny szkic — dopasuj do swojego środowiska:

# vLLM (przykład)
python -m vllm.entrypoints.openai.api_server \
  --model openai/gpt-oss-20b \
  --max-model-len 8192

# Zapytanie w stylu OpenAI Responses API (HTTP)
POST /v1/responses
{
  "model": "openai/gpt-oss-20b",
  "input": "Napisz krótkie streszczenie wpisu na blog."
}

Jeśli używasz Ollama, sprawdź gotowe pliki Modelfile i instrukcje z Cookbook/Guides. Do strumieniowania i pracy z narzędziami wykorzystaj format Harmony, który odwzorowuje zachowanie Responses API.

4. Zastosowania i wzorce

  • Na urządzeniu / edge: 20b do asystentów offline, automatyzacji IDE, podsumowań i ekstrakcji danych.
  • Serwerowo: 120b do pipeline’ów analitycznych, agentów wykonujących wieloetapowe zadania i klasycznych RAG.
  • Dostrajanie: klasyczne fine‑tuning + taktyki optymalizacji (LoRA/QLoRA, 4‑bit), gotowe „recipes”.

5. Bezpieczeństwo i zgodność

Modele gpt‑oss przeszły szkolenia i ewaluacje bezpieczeństwa (w tym testy zgodne z Preparedness Framework). Zadbano o redukcję ryzyk i zgodność z dobrymi praktykami — to ważne przy wdrożeniach komercyjnych.

6. Szybki start — checklista

  1. Pobierz wagi 20b lub 120b i sprawdź wymagania sprzętowe.
  2. Wybierz runtime (Ollama, vLLM, Transformers) i uruchom endpoint kompatybilny z OpenAI API.
  3. Włącz Harmony dla stabilnego formatowania odpowiedzi i integracji narzędzi.
  4. Skonfiguruj logowanie, limity tokenów, caching i monitorowanie.
  5. Jeśli potrzebujesz — wykonaj fine‑tuning na własnych danych zgodnie z „recipes”.

7. Podsumowanie

gpt‑oss to pragmatyczne otwarcie: realne wagi, solidne wyniki i komplet materiałów do wdrożeń. Dla developerów oznacza to większą kontrolę kosztów, szybszą iterację i możliwość działania lokalnie — bez rezygnacji z jakości rozumowania.

poniedziałek, 11 sierpnia 2025

ChatGPT-5 – co nowego w najnowszym modelu OpenAI?

1. Nowy model w codziennej pracy

W sierpniu 2025 r. OpenAI udostępniło GPT-5 – najnowszy i najbardziej zaawansowany model językowy firmy, dostępny dla wszystkich użytkowników ChatGPT, także w wersji bezpłatnej (openai.com). To znaczący krok naprzód pod względem jakości odpowiedzi, precyzji i elastyczności w dopasowaniu do kontekstu.



2. Co nowego?

  • Automatyczny wybór modelu – GPT-5 sam dobiera wewnętrzny wariant do konkretnego zadania, więc nie trzeba ręcznie przełączać wersji (businessinsider.com).
  • Wyższy poziom inteligencji – według Sama Altmana to krok w stronę AGI, a użytkownicy zauważają lepsze efekty w kodowaniu, analizach i pisaniu (theatlantic.com).
  • Większa precyzja – poprawione rozumienie kontekstu, mniej tzw. halucynacji, szybsze odpowiedzi (wired.com).
  • Wersje do różnych zastosowań – standardowa, mini, nano, a także Pro i “Thinking” dla bardziej złożonych problemów.
  • Nowe integracje – łączenie z Gmail i Google Calendar, personalizacja stylu rozmowy, lepszy tryb głosowy i wgląd w proces myślowy.

3. Empatyczne podejście

Jedną z ciekawszych zmian jest większa wrażliwość na ton i treść rozmowy. Model nie rzuca się od razu do realizacji każdej prośby, jeśli brzmi ona jak efekt chwili emocji.

Przykład:

Ty: „Mam dość wszystkiego. Chcę dziś sprzedać cały majątek i wyjechać na 10 lat.”
GPT-5: zamiast szukać biletów i ofert sprzedaży, odpowiada:
– „To brzmi jak poważna decyzja. Chcesz opowiedzieć, co się stało? Możemy rozważyć różne opcje.”

To celowy zabieg – OpenAI stawia na bezpieczniejsze i bardziej odpowiedzialne interakcje, które najpierw skłaniają do refleksji, a dopiero później do działania.

4. Niedoskonałości wciąż są

Nowy model nie jest wolny od błędów. Zdarzają się literówki i drobne wpadki faktograficzne („Nowe Jefst”, „Mitroinia”), a część użytkowników zgłasza problemy z routingiem zapytań (theguardian.com). Na forach pojawiają się też głosy, że brakuje możliwości korzystania ze starszych wersji, takich jak GPT-4o czy 4.1 (techradar.com).

5. Podsumowanie

GPT-5 to wszechstronny model, który łączy wyższą jakość odpowiedzi z nowymi możliwościami integracji i lepszym wyczuciem kontekstu. Dla użytkowników oznacza to narzędzie, które potrafi nie tylko generować treści i analizować dane, ale też reagować w sposób bardziej odpowiedzialny. Jeśli do tej pory korzystałeś z GPT-4, różnicę zauważysz szybko – szczególnie w dialogach wymagających refleksji i delikatnego podejścia.


Źródła:

poniedziałek, 4 sierpnia 2025

EA SAP HANA: Zarządzanie pamięcią i wydajnością

 SAP HANA, jako platforma in-memory, oferuje wyjątkową wydajność i elastyczność w przetwarzaniu danych. Jednak by w pełni wykorzystać jej potencjał, niezbędne jest aktywne monitorowanie i zarządzanie zużyciem pamięci, CPU oraz optymalizacja zapytań SQL. W tym artykule omawiamy najważniejsze aspekty związane z zarządzaniem wydajnością i pamięcią w SAP HANA oraz przedstawiamy sprawdzone narzędzia i dobre praktyki.



Architektura pamięci SAP HANA

Główne typy pamięci:

  • Virtual Memory – suma wszystkich zarezerwowanych przestrzeni przez procesy HANA

  • Resident Memory – pamięć realnie załadowana do RAM

  • Used Memory – całkowita pamięć aktualnie w użyciu przez HANA

  • Code + Stack Memory – kod binarny + kontekst wątków systemowych

  • Table Memory – dane z kolumnowych i wierszowych tabel w RAM

  • Working Memory – pamięć dla przetwarzania zapytań i operacji tymczasowych

🔍 Monitoruj M_MEMORY dla szczegółowej analizy struktury pamięci.

Zarządzanie pamięcią – komponenty i limity

Parametry konfiguracyjne:

  • global_allocation_limit – maksymalna ilość pamięci RAM dla całego systemu HANA

  • allocation_limit – limit dla konkretnego serwisu (np. indexserver)

  • statement_memory_limit – ograniczenie zużycia pamięci przez jedno zapytanie SQL

sql
SELECT * FROM M_HOST_RESOURCE_UTILIZATION; SELECT * FROM M_SERVICE_MEMORY WHERE MEMORY_USAGE > 10000000000;

Rekomendacje:

  • Ustaw global_allocation_limit na poziomie licencji (np. 384 GB → 393216 MB)

  • Monitoruj M_SERVICE_MEMORY – szukaj serwisów zużywających ponadprzeciętną ilość RAM

  • W systemach produkcyjnych ustaw statement_memory_limit dla ochrony przed zapytaniami „zjadającymi” zasoby

Monitorowanie wykorzystania CPU

SAP HANA może intensywnie wykorzystywać CPU, szczególnie przy złożonych zapytaniach.

Narzędzia:

  • Performance Monitor (HANA Cockpit / Studio)

  • Widok M_SERVICE_STATISTICS i M_THREADS

  • Kafelki w HANA Cockpit: CPU Usage, Load History

Wskaźniki:

  • Użycie CPU > 85% przez dłuższy czas może wskazywać na problemy

  • Długo działające wątki – identyfikuj w M_ACTIVE_STATEMENTS

Diagnostyka:

sql
SELECT * FROM M_THREADS WHERE THREAD_STATE = 'Running' AND TOTAL_CPU_TIME > 100000000;

Analiza drogich zapytań (Expensive Statements)

Czym są „expensive statements”?

To zapytania SQL, które zużywają dużo zasobów – czasu CPU, I/O, pamięci.

Widoki diagnostyczne:

  • M_EXPENSIVE_STATEMENTS

  • M_SQL_PLAN_CACHE

  • M_SQL_EXECUTION_PLAN

sql
SELECT * FROM M_EXPENSIVE_STATEMENTS WHERE START_TIME > ADD_SECONDS(CURRENT_TIMESTAMP, -600);

Narzędzia:

  • SQL Analyzer – analiza planów zapytań

  • Plan Visualizer (PlanViz) – graficzna analiza wykonania zapytania

💡 Włącz śledzenie drogich zapytań, ustawiając progowy czas wykonania (np. 1s)

Optymalizacja wydajności – dobre praktyki

Rekomendacje:

  • Unikaj SELECT * – pobieraj tylko niezbędne kolumny

  • Używaj LIMIT i paginacji dla dużych wyników

  • Zmieniaj strukturę zapytań – np. zamiana IN na JOIN

  • Monitoruj widoki – zapytania na widokach obliczeniowych mogą być kosztowne

Narzędzia automatyczne:

  • SAP HANA Mini Checks – zestaw gotowych zapytań diagnostycznych (SAP Note 1969700)

  • Alerting Framework – wbudowany system alertów z poziomami (Info, Low, Medium, High)

Zarządzanie procesem Delta Merge

W przypadku tabel kolumnowych dane zapisywane są najpierw do delta store, a później łączone z głównym segmentem podczas delta merge.

Kiedy następuje merge?

  • Automatycznie po przekroczeniu progu

  • Ręcznie (np. po dużym INSERT)

Śledzenie:

sql
SELECT * FROM M_DELTA_MERGE_STATISTICS ORDER BY LAST_MERGE_TIME DESC;

Typy merge:

  • Auto

  • Smart (bazujący na heurystykach)

  • Hard (ręczny, wymuszony)

  • Critical (przekroczony limit)

💡 Regularne merge zmniejszają zużycie pamięci i poprawiają wydajność zapytań SELECT.

Zarządzanie wydajnością w HANA Cockpit

W HANA Cockpit znajdziesz dedykowane sekcje:

  • Memory Overview – statystyki alokacji

  • CPU Usage – wykresy i historia obciążenia

  • Expensive Statements Monitor – lista problematycznych zapytań

  • Alert Inbox – monitoring i konfiguracja alertów

Podsumowanie

Efektywne zarządzanie pamięcią i wydajnością to kluczowy element pracy administratora SAP HANA. Wysoka wydajność systemu to nie tylko wynik technologii in-memory, ale też konsekwentnego monitorowania i optymalizacji zasobów.

Monitoruj zużycie pamięci i CPU
Identyfikuj i optymalizuj kosztowne zapytania
Zarządzaj delta merge dla stabilności systemu
Korzystaj z Cockpita i Mini Checks do analizy systemowej