Jak stworzyć AI chatbot? Architektura, pułapki i dobre praktyki.

Inteligentne chatboty oparte na generatywnej sztucznej inteligencji to jeden z najpopularniejszych sposobów wykorzystania LLM. Można je zastosować w różnych branżach, np.: jako pomoc (np.: na stronie e-commerce zamiast sekcji z często zadawanymi pytaniami), wewnętrznie jako baza wiedzy lub jako zastępstwo dla obsługi klienta. Taka komunikacja w czasie rzeczywistym poprawia interakcje z klientami i lepiej angażuje (nie trzeba czekać wieczności na odpowiedź od obsługi klienta), co ma wpływ na sprzedaż. Jednak poprawna implementacja chata AI jest trudniejsza, niż się wydaje.
Budowa AI Chatbota wydaje się prosta…
Często spotykam się z myśleniem, że chat AI jest prosty do zbudowania. W końcu bierzemy pytanie od użytkownika, wrzucamy do LLM, zasilamy danymi i dostajemy odpowiedź. Co więcej, podczas PoC może też tak wyjść (o tym, jak prawidłowo przeprowadzać PoC, przeczytasz w moim artykule). Nie ma w tym żadnej magii, prawda? W końcu ChatGPT też nie wygląda na skomplikowany.
…ale tak nie jest
Im głębiej wchodzi się w temat, tym robi się coraz bardziej skomplikowane. Bardzo dobrze było to widać, gdy pojawiły się pierwsze modele. Gdy zaczął się bum na chaty AI, to bardzo często działały one słabo - odpowiadały na inne pytania niż powinny, podawały zmyślone informacje czy też robiły to, co nie powinny. Równie ważną rzeczą jest odpowiednia kontrola kosztów, ponieważ chaty (a szczególnie publiczne) mogą generować dużo kosztów z powodu wykorzystania LLM. Zanim zaczniesz budować Chatbota AI, warto wiedzieć parę rzeczy.
Na co zwracać uwagę?
Dzięki AI możemy często ograniczyć interfejs do pojedynczego pola typu input i potem na bazie zapytania wykonać jakąś akcję. Ta elastyczność jest zarówno czymś pozytywnym, jak i zagrożeniem dla całego procesu. Szczególnie musimy uważać na:
- dane, które trafiają do systemu
- koszty
- obserwowalność
- prywatność
Kontroluj, co użytkownik wprowadza do AI
W przypadku takiej architektury musimy szczególną uwagę poświęcić kontroli tego, co wprowadza użytkownik do systemu, ponieważ narażamy się na szerokie spektrum ataków przy pomocy promptów. Oprócz tego, jeśli nie zabezpieczymy odpowiednio systemu, to użytkownik może go użyć niezgodnie z przeznaczeniem. Było to widać szczególnie w zeszłym roku, gdy wychodziły różnego rodzaju chaty, które umożliwiały inne akcje niż planowane np.: tworzenie wierszyków. Dodatkowo, jeśli pozwolimy użytkownikowi wprowadzać zakazane informacje (np.: związane z przemocą), to mogą nam zablokować konto.
Kontroluj koszty AI
Chatboty potrafią być bardzo kosztowne, jeśli nie zadbamy o odpowiednią kontrolę. Pierwsza rzecz to zastanowić się, zanim zrobisz publicznego chatbota. Taki interfejs może być wykorzystany przez osoby do nabicia dużego rachunku. Warto wtedy dodać jakiś mechanizm limitowania ilości zapytań. W przypadku publicznego chata lepiej posiadać własną instancję modelu, zamiast płacić za tokeny. Dla chatów dostępnych tylko dla zalogowanych użytkowników warto zaimplementować limity dla użytkowników. Jest to bardzo popularne rozwiązanie, które możesz spotkać w różnych aplikacjach. Wtedy łatwiej kontrolować koszty i wyliczyć całkowite wydatki. Nie musisz też zawsze implementować najdroższego modelu - testuj i sprawdzaj różne modele. Na końcu wybierz ten z najlepszym stosunkiem cena/jakość.
Obserwowalność
W kontekście aplikacji AI obserwowalność jest KRYTYCZNA.
Ostatnia rzecz, która jest często pomijana, a jest konieczna, to obserwowalność. W standardowych systemach też jest przydatna, ale w kontekście aplikacji AI obserwowalność jest KRYTYCZNA. LLM jest dla nas czarną skrzynką - wiemy, co wchodzi i wychodzi, ale nie mamy pojęcia, jak model utworzył dane na wyjściu. I wszystko, co wrzucamy do LLM, ma wpływ na wyjście: pytanie użytkownika, prompt, dane, historia konwersacji itd. Wyobraź sobie, że pewnego dnia użytkownik pisze maila, że dostał dziwną odpowiedź. I bez odpowiednio skonfigurowanej obserwowalności nie zgadniesz, dlaczego dostał taką, a nie inną odpowiedź. Poprawnie skonfigurowana obserwowalność pomaga też przy aktualizacji modeli (co może zdarzać się często). Po aktualizacji modelu (idealnie tylko dla części użytkowników) możemy zobaczyć, czy jakość naszych odpowiedzi jest lepsza, gorsza czy bez zmian. Mając też zbiór danych w postaci zapytań, można przeprowadzić testy modeli poza głównym systemem (ale tutaj trzeba być ostrożnym z danymi od użytkowników).
Prywatność
Na sam koniec warto jeszcze zwrócić uwagę na kwestie prywatności. I to z kilku perspektyw. Jedna to wybór odpowiedniego dostawcy, który nie będzie używał danych użytkownika do dalszej nauki, lub postawienie własnej infrastruktury. Istotne jest też, by nie dopuszczać użytkownika do niektórych danych w architekturze RAG i zaprojektować cały mechanizm tak, by wysyłać minimalną ilość informacji do modelu, np.: model raczej nie potrzebuje numeru karty kredytowej użytkownika.
Architektura AI Chatbot Assistant

Na diagramie możesz zobaczyć przykładową architekturę dla chatbota AI. Oczywiście to nie jest jedyne słuszne rozwiązanie, a wstęp do szczegółowych rozmów z biznesem. Poniżej znajdziesz opis poszczególnych kroków, które możesz dostosować w zależności od konkretnych wymagań.
Kontrola dostępu/Rate limitu
Podstawa każdego chatbota to kontrola dostępu. Chyba że chcesz wpaść w duże koszty. Zanim wyślesz zapytanie do LLM, musisz sprawdzić, czy użytkownik może to zrobić. Gdy chat jest dostępny tylko dla zautoryzowanych użytkowników, to sprawa jest prosta - sprawdzamy, czy użytkownik jest zalogowany, czy ma dostęp do chata i czy ma odpowiednią ilość kredytów/limitów. Jest to bardzo popularna praktyka w większości SaaS-ów - dostęp do AI jest kredytowany i jeśli przekroczymy, to musimy poczekać albo dokupić większy pakiet. Jeśli masz chat dostępny publicznie (tzw.: lepsze FAQ), to warto dodać globalne limity.
Moderation API
Kolejny krok to sprawdzenie, czy możemy w ogóle wysłać zapytanie do dostawcy LLM. Każdy dostawca ma swój regulamin, w którym określone jest, czego nie wolno wysyłać do modelu. Jeśli użytkownik naszego chata wyśle zakazaną wiadomość do LLM, to nasze konto może zostać zawieszone. Jeden użytkownik może zablokować dostęp dla wszystkich. Aby do tego nie dopuścić, należy skorzystać z Moderation API. Jest to darmowe API od OpenAI, które pozwala sprawdzić, czy wiadomość nie łamie jakiejś reguły. Aktualnie sprawdzane reguły to:
- "sexual"
- "sexual/minors"
- "harassment"
- "harassment/threatening"
- "hate"
- "hate/threatening"
- "illicit"
- "illicit/violent"
- "self-harm"
- "self-harm/intent"
- "self-harm/instructions"
- "violence"
- "violence/graphic"
Context check
Ostatnie sprawdzenie, jakie warto zrobić, to upewnić się, że powinniśmy w ogóle odpowiadać na pytanie od użytkownika. Użytkownicy często są bardzo kreatywni. A nie chcemy pozwolić użytkownikom na wszystko. Na początku boomu na chaty mało którykolwiek robił i dochodziło do zabawnych (nie dla firmy) sytuacji, jak generowanie obraźliwych wierszyków. Do sprawdzania kontekstu można użyć odpowiednio skonstruowanego promptu, którego celem jest sprawdzenie, czy pytanie ma sens. Warto wprowadzić odpowiedni kontekst i pozwolić LLM zdecydować, czy pytanie ma sens. By zrobić to poprawnie, potrzeba kilku iteracji i monitoringu.
LLM
Serce całego systemu - LLM, który będzie odpowiadać na pytania użytkowników. W zależności od systemu możemy zaimplementować mniej lub bardziej zaawansowaną wersję systemu. Jakie mamy opcje:
- Korzystanie z samego LLM-a - najmniej użyteczne, ale najszybsze i najłatwiejsze do implementacji. Ten sposób jest najbardziej podatny na halucynacje. Może być użyte do generacji treści.
- Architektura RAG (Retrieval Augmented Generation) - dociąganie dodatkowych danych jest najczęściej wykorzystywaną architekturą w przypadku chatów. Pozwala dołożyć dane do pytania od użytkownika, by poprawić jakość odpowiedzi i minimalizować halucynacje.
- Function calls. Połączenie chatbota z function calls daje nam prywatnego asystenta, który może wykonywać różne akcje. Bardzo użyteczne, ale trzeba uważać, co jest możliwe do zrobienia i odpowiednio kontrolować dostępy.
- Architektura multiagentowa. Najbardziej skomplikowana wersja chatbota, która jest rozwinięciem function calls - tutaj system sam potrafi odpowiednio wybierać narzędzia i planować akcje wymagające wielu wywołań.
Hallucination check/jakość odpowiedzi
Na sam koniec warto jeszcze sprawdzić, czy odpowiedź nie jest halucynacją. Nie będziemy tutaj mieć 100% pewności, ale możemy minimalizować ryzyko. Jest kilka sposobów, ale jednym z najpopularniejszych jest sprawdzenie przy pomocy LLM. Proces jest prosty:
- Wprowadzamy do LLM informacje na temat: pytanie od użytkownika, dane, historia
- Pytamy LLM, czy odpowiedź na pytanie jest związana z pytaniem i czy wynika bezpośrednio z danych
- Na bazie odpowiedzi albo zwracamy odpowiedź, albo wprowadzamy plan B (w zależności od biznesu to mogą być różne akcje) W tym kroku możemy też sprawdzić, czy odpowiedź nie narusza jakichś standardów dla naszej firmy (możemy wykorzystać Moderation API) oraz czy odpowiedź jest odpowiedniej jakości.
Budowa AI Chatbota - podsumowanie
- Budowanie AI Chatbota nie jest takie proste, jak się wydaje.
- Nie skupiaj się wyłącznie na części z LLM, ale również na wszystkim wokół.
- Pamiętaj o zabezpieczeniach:
- limit zapytań dla użytkownika
- używaj Moderation API - OpenAI Platform
- sprawdzaj kontekst
- Dobierz odpowiedni poziom zaawansowania części LLM.
- Sprawdzaj odpowiedź przed zwróceniem do użytkownika.
- Kontroluj koszty.
- Koniecznie wdróż elementy obserwowalności w aplikacji.


