LlamaTalks
Streszczenie
LlamaTalks to otwartoźródłowy chatbot w Spring Boot, który utrzymuje model językowy lokalnie przez Ollamę i dodaje odpowiedzi oparte na dokumentach dzięki Retrieval-Augmented Generation. Użytkownik może wczytać dokumenty, pozwolić Apache Tika wydobyć i podzielić ich tekst, wygenerować embeddingi oraz zapisać je do wyszukiwania semantycznego, a potem zadawać pytania w rozmowie z trwałą historią. LangChain4j łączy pobrany kontekst i pamięć konwersacji z Ollamą. Reactor/Flux oraz Server-Sent Events strumieniują odpowiedź do klienta zamiast czekać na jeden ukończony rezultat. Projekt udostępnia REST API, zarządzanie rozmowami, listę dokumentów oraz wybór modeli czatu i embeddingów. Repozytorium ma 21 publicznych commitów. README opisuje architekturę i konfigurację, ale zaznacza, że nie każdy wymieniony format dokumentu był testowany, a zmiana wymiaru embeddingów wymaga wyczyszczenia magazynu i ponownej ingestii.
Zweryfikowane fakty
- Publiczne repozytorium ma zapisane 21 commitów.
- README wymienia Spring Boot, LangChain4j, Ollamę, SSE, trwałą historię i ingestję dokumentów RAG.
- Apache Tika parsuje dokumenty przed dzieleniem, tworzeniem embeddingów i wyszukiwaniem semantycznym.
Architektura techniczna
Ścieżka żądania składa się z dwóch połączonych przepływów:
- Core Backend: Zbudowany z Spring Boot 3, wykorzystując JPA/Hibernate dla trwałości danych strukturalnych (rozmowy, wiadomości).
- Orkiestracja AI: LangChain4j zarządza interakcją z LLM, zarządzaniem pamięcią i potokiem RAG.
- Pozyskiwanie danych: Apache Tika jest używany do parsowania i wyodrębniania tekstu z różnych formatów dokumentów dla magazynu wektorów.
- Magazyn wektorów: Osadzenia są generowane lokalnie i przechowywane w bazie danych wektorów, aby umożliwić możliwości wyszukiwania semantycznego.
- 01 Dokument Tika → fragmenty
- 02 Vector store embeddingi + retrieval
- 03 Ollama kontekst + historia
- 04 SSE Reactor/Flux
orkiestracja LangChain4j · historia w PostgreSQL
Granica modeli
Wymiary embeddingów są częścią kontraktu przechowywania danych. Zmiana modelu embeddingowego może zmienić ten wymiar, dlatego przed ponownym wyszukiwaniem semantycznym trzeba wyczyścić bazę i ponownie wczytać wszystkie dokumenty.
Kluczowe funkcje
- RAG świadomy kontekstu: Dynamicznie pobiera istotne informacje z przesłanych dokumentów, aby dokładnie odpowiedzieć na zapytania użytkownika.
- Streaming API: Wykorzystanie zasad Spring WebFlux do nieblokującego przesyłania tokenów w czasie rzeczywistym.
- Elastyczna obsługa modeli: Łatwo przełączaj się między różnymi modelami open-source (Llama 3, Mistral, Gemma) hostowanymi za pośrednictwem Ollama.
- Utrwalona historia czatu: Pełna historia rozmowy jest przechowywana w PostgreSQL, umożliwiając zachowanie kontekstu między sesjami.
Jak to zweryfikowano: Zobacz publiczne repozytorium ↗