Wielojęzyczny chatbot AI działający w całości na serwerze klienta. Zewnętrzne API AI nie są używane, a dane nie opuszczają infrastruktury.
Cel projektu
Instytucja finansowa w EU potrzebowała asystenta konwersacyjnego na swoją platformę webową. Asystent miał odpowiadać na pytania użytkowników w wielu językach na podstawie dwóch źródeł danych: codziennego feedu ustrukturyzowanych rekordów z zewnętrznego API oraz biblioteki dokumentów polityk i procedur.
Głównym ograniczeniem była prywatność danych – przetwarzanie musiało odbywać się on-site, a system musiał funkcjonować w ramach ograniczonych zasobów sprzętowych. Rozwiązanie zostało zbudowane w architekturze RAG (Retrieval-Augmented Generation).
Klient: Organizacja sektora publicznego w EU
Czas realizacji: 8 tygodni
Zespół: 2 deweloperów, QA i PM
Status: W produkcji
Wyzwania i ograniczenia
Cztery ograniczenia ukształtowały nasze decyzje techniczne:
- Prywatność danych.
Profile użytkowników, historia konwersacji i dokumenty źródłowe nie mogły opuszczać serwerów klienta. To wykluczyło hostowane API AI. - Budżet sprzętowy.
System musiał działać na ograniczonych zasobach GPU, co ograniczało rozmiar wykorzystywanych modeli. - Wielojęzyczność.
Asystent musiał obsługiwać wiele języków – przełączając się naturalnie w zależności od danych wejściowych użytkownika. - Dane na żywo.
Asystent musiał pracować z codziennie aktualizowanymi rekordami, a nie ze statycznymi informacjami.
Architektura: cztery warstwy
| Warstwa | Funkcja |
|---|---|
| Warstwa aplikacji | Obsługuje routing, uwierzytelnianie i zarządzanie sesjami |
| Platforma AI | Uruchamia modele językowe lokalnie, bez zewnętrznych wywołań sieciowych |
| Baza wektorowa | Przechowuje reprezentacje dokumentów i wyszukuje podobieństwa w celu pobrania kontekstu |
| Transport czasu rzeczywistego | Strumieniuje odpowiedzi AI na frontend, zapewniając responsywność interfejsu |
Przepływ RAG

- 1. Użytkownik wysyła wiadomość.
- 2. Warstwa guardrail waliduje dane wejściowe pod kątem bezpieczeństwa.
- 3. Model określa potrzeby wyszukiwania – używa narzędzi, aby zdecydować, które źródło danych odpytać.
- 4. Zastosowanie narzędzia wyszukiwania:
- Zapytanie jest konwertowane na wektor (embedding).
- System wykonuje wyszukiwanie wektorowe, aby znaleźć odpowiednie dokumenty lub rekordy.
- 5. Składanie promptu – pobrany kontekst, profil użytkownika i historia czatu łączone są w jeden prompt.
- 6. Generowanie odpowiedzi – model generuje odpowiedź na podstawie połączonych danych.
- 7. Strumieniowanie w czasie rzeczywistym – odpowiedź jest wysyłana na frontend natychmiast w miarę generowania.
Wyzwania techniczne i ich rozwiązania
Produkcyjne AI na ograniczonych zasobach
Większość zaawansowanych modeli wymaga znacznych zasobów sprzętowych. Wybraliśmy kompaktowy model z silnym wsparciem wielojęzycznym i wydajnym działaniem na ograniczonym sprzęcie. Architektura RAG kompensuje mniejszy rozmiar modelu, wstrzykując konkretny kontekst w momencie zapytania.
Obrona przed prompt injection
Mniejsze modele mogą być bardziej podatne na manipulację ze strony użytkowników. Wdrożyliśmy wielowarstwową obronę, w tym guardrails oparte na wektorach, które sprawdzają zapytania na podstawie list dozwolonych/zabronionych zanim trafią do modelu, oraz specjalistyczne techniki zabezpieczania promptów.
Zarządzanie oknem kontekstu
Aby zmieścić się w limitach danych, każdy komponent został skompresowany. Obejmowało to ograniczenie historii konwersacji, wstępne streszczanie dokumentów na etapie indeksowania oraz usuwanie zbędnych pól z wyników narzędzi.
Jakość embeddingów i przetwarzanie danych
Rekordy źródłowe różniły się jakością i długością. Wdrożyliśmy automatyczne parsowanie i filtrowanie w celu oczyszczania danych, zastosowaliśmy ustrukturyzowane streszczanie przed wektoryzacją oraz ręczną segmentację dużych dokumentów według tematów, aby zapewnić lepszą trafność wyszukiwania.
Co zbudowaliśmy
- Zarządzanie sesjami.
Systemy do obsługi profili użytkowników i historii czatu w ramach ścisłych ograniczeń. - Indeksowanie dokumentów.
Zautomatyzowane narzędzia do ładowania i wektoryzacji plików polityk. - Pipeline synchronizacji rekordów.
Codzienny import i czyszczenie danych z zewnętrznego API. - Narzędzia wyszukiwania.
Specjalistyczne funkcje wyszukiwania dostępne dla agenta AI.
Stack technologiczny
| Komponent | Technologia |
|---|---|
| Framework backendowy | Nowoczesny framework enterprise Symfony 8 |
| Platforma AI | Ollama – lokalne środowisko hostingu modeli (alternatywnie Bedrock) |
| Modele | Wielojęzyczne modele językowe i embeddingowe |
| Baza danych | PostgreSQL z pgvector – rozwiązanie bazodanowe z obsługą wektorów |
| Komunikacja | Server-Sent Events – strumieniowanie w czasie rzeczywistym i asynchroniczna obsługa wiadomości |
Efekt
Wydajne czasy odpowiedzi i codzienna synchronizacja 20-30k rekordów (1-6k aktualizowacji dziennie).
Pełne wsparcie wielojęzyczne. Wspólna przestrzeń wektorowa dla języków umożliwia rozmowę w dowolnym języku niezależnie od języka źródła danych (niepotrzebna warstwa translacji).
Pełna suwerenność danych. Nic nie opuszcza infrastruktury klienta.
Przewidywalne i ustalone koszty. Brak opłat za tokeny zewnętrznych API – klient ponosi jedynie koszt serwera.
Ten projekt pokazuje, że produkcyjnej jakości asystent RAG może działać na ograniczonym, prywatnym sprzęcie. Sukces zależy od inżynierii w ramach ograniczeń: inteligentnego zarządzania kontekstem, solidnych warstw bezpieczeństwa i wydajnych pipeline’ów danych.








