Rekrutujemy! Zaindeksujemy nowego SEO Speca w naszej ekipie! Zobacz szczegóły i aplikuj czym prędzej .
Jesteś tutaj: Baza wiedzy / Blog i aktualności / Jak stworzyłem chatbota AI z niestandardową wiedzą krok po kroku

01-11-2023

Jak stworzyłem chatbota AI z niestandardową wiedzą krok po kroku

Chcesz porozmawiać ze swoimi dokumentami, albo zrobić sobie bota, który przeczyta za Ciebie książkę? Jesteś w dobrym miejscu!

Jak stworzyłem chatbota AI z niestandardową wiedzą krok po kroku - SEO blog

Jak stworzyć GPT-4 z dodatkową wiedzą? Za pomocą frameworku LangChain. A jak zrobić to bez programowania? Właśnie to Ci pokażę. Oto jak krok po kroku połączyć chatbota AI z własnymi danymi!

Spis treści:

  1. Dwa słowa o chatbocie Ignasiu
  2. Co tak właściwie robimy
  3. 1. Wybór dodatkowej wiedzy
  4. 2. Instalacja i przygotowanie Flowise
  5. 3. Przygotowanie kont OpenAI i Pinecone
  6. 4. Przygotowanie bazy wiedzy
  7. 5. Wgranie danych do indeksu
  8. 6. Prompt chatbota
  9. Ograniczenia i możliwości
  10. Podsumowanie w punktach

Zobacz też:

Jak stworzyłem chatbota SEO Samodzielnych – Ignasia

Dwa słowa o chatbocie Ignasiu

Ignaś to Inteligentny Asystent SEO Top Online, czyli nasz robot, który pomaga nam realizować pozycjonowanie stron. Chatbot to jego część, dzięki której już niedługo każdy będzie mógł z nim porozmawiać – i uzyskać tym samym pomoc w samodzielnym SEO.

Tutaj nie będzie jednak o Ignasiu. O tym, po co konkretnie, jak i dlaczego powstał ten chatbot (i jak działa!) pisałem już w artykule podlinkowanym wyżej, pod spisem treści. W tym tekście pokażę Ci za to jak zrobić takiego bota krok po kroku.

Co tak właściwie robimy

To, co tutaj pokażę, to będzie w pewnym sensie taki „własny ChatGPT”, a dokładnie GPT-4 (lub GPT-3.5-turbo, na którym bazuje darmowy ChatGPT) z dodatkową wiedzą.

Nie będziemy jednak go szkolić/dostrajać, czyli stosować fine-tuning. Zastosujemy Retrieval Augmented Generation (RAG) – czyli automatyczne dodawanie informacji/wiedzy do promptów z wybranych przez nas zewnętrznych źródeł (na przykład z książek).

Mówiąc inaczej: połączymy model OpenAI z zewnętrznym systemem. Ten, po zadaniu pytania przez użytkownika, znajdzie najpierw w dodanych przez nas materiałach odpowiednie informacje, a potem uzupełni nimi otrzymane polecenie i dopiero wtedy wyśle je do GPT.

Efekt będzie podobny do tego, który dostałbym wysyłając do ChatGPT pytanie razem z wszystkimi informacjami potrzebnymi do udzielenia na nie rzetelnej odpowiedzi. Stworzymy własnego chatbota, który ma dodatkową, sprawdzoną wiedzę na dany temat.

Nie będziemy jednak niczego kodzić. Skorzystamy z gotowych rozwiązań, a konkretnie z otwartej aplikacji Flowise.

1. Wybór dodatkowej wiedzy

Zanim zacznę, muszę najpierw zdecydować, po co mi ten chatbot, do czego ma służyć i skąd mam wziąć dla niego dodatkową wiedzę, która na to coś pozwoli.

Skuteczność bota będzie zależeć od tego, czy nasz system będzie w stanie znaleźć i dodać do promptów właściwe fragmenty tekstu. To z kolei zależy od tego, jak przygotujemy bazę danych, ale i od tego, z czego będzie się ona składać.

Nasza dodatkowa wiedza musi dać się podzielić na kawałki o odpowiedniej długości. Tak, by nie były one zbyt długie, ale też, żeby jednocześnie zawierały możliwie pełne informacje.

Oczywiście nie będziemy robić tego ręcznie, ale struktura treści nie może być zbyt chaotyczna. W praktyce wystarczy, że będzie to w miarę poprawny, „normalny” tekst.

Mogą to być choćby teksty blogowe, poradniki, instrukcje, dokumentacje, książki, a nawet własne notatki.

Warto wiedzieć

Jako baza wiedzy najlepiej sprawdzą się treści o powtarzalnej strukturze, jak np. artykuły z jednego konkretnego bloga.

U mnie bazą dodatkowej wiedzy będzie kurs GA4 Grześka Słoki, w którego powstawaniu mam swój udział redagując teksty.

Chatbot będzie z kolei asystentem nowego użytkownika Analytics 4 – który pomaga odnaleźć się w narzędziu.

2. Instalacja i przygotowanie Flowise

Do zainstalowania i uruchomienia aplikacji, w której zbudujemy naszego bota, potrzebować będziemy najnowszej wersji Node.js (pobierzesz ją tutaj).

Po zainstalowaniu Node instalujemy Flowise. Otwieram w tym celu terminal/wiersz poleceń i wpisuję:

npm install -g flowise

Po zakończeniu instalacji uruchamiam aplikację, wpisując tym razem:

npx flowise start
uruchomienie flowise
Taki komunikat oznacza, że Flowise zostało uruchomione i działa poprawnie

Jeśli wszystko gra, to Flowise powinno być już dostępne pod adresem http://localhost:3000/ w przeglądarce.

flowise strona glowna

W taki sposób za każdym razem będziesz uruchamiać swoją aplikację. Jeśli interesuje Cię hostowanie jej zewnętrzne (tak, by zawsze była ona dostępna pod jakąś domeną), to o tym, jak to zrobić, przeczytasz w dokumentacji.

3. Przygotowanie kont OpenAI i Pinecone

Mamy aplikację, która pozwoli nam zbudować naszego bota. Potrzebujemy więc jeszcze dostępu do usług, z których będziemy korzystać. Czyli do platform OpenAI i Pinecone.

Myślę, że nie ma sensu, żebym tworzył tutaj kolejny poradnik rejestrowania się na platformie OpenAI. Pokaże więc tylko, gdzie (już na stworzonym koncie z podpiętą kart) znajdziesz klucze API.

Loguję się na konto. W prawym górnym rogu wchodzę w nazwę organizacji (lub „Personal” na koncie osobistym), a kolejno w „View API Keys”.

menu platformy openai

Tutaj generuję klucz API (+ Create new secret key):

klucz api open ai

Kopiuję go i dodaję do zakładki „Credentials” we Flowise.

dodawanie danych openai
dodawanie danych openai 2

W tym samym miejscu dodam następnie klucz API Pinecone. Żeby go uzyskać, będę musiał jednak stworzyć najpierw konto i indeks, czyli naszą bazę danych.

Wchodzę więc na stronę rejestracji Pinecone i zakładam konto. Po zalogowaniu do platformy w menu po lewej stronie tworzę nowy projekt, a następnie przechodzę do indeksów i tworzę nowy indeks.

Nazwa może być dowolna, kluczowym ustawieniem są tylko wymiary (dimensions), których musi być dokładnie 1536.

tworzenie indeksu pinecone

Gdy indeks jest już stworzony, przechodzę do „API Keys” i stąd kopiuję klucz oraz środowisko (environment).

klucz api pinecone

Dane te dodaję do Flowise, analogicznie do danych OpenAI (potrzebny będzie klucz API, nazwa środowiska i nazwa indeksu).

dodawanie danych pinecone
dodawanie danych pinecone 2

Warto wiedzieć

Pamiętaj, że Flowise pozwala na wykorzystanie wielu innych modeli AI, różnych baz danych i różnych usług (polecam testować!) – ja pokazuję tylko jedno z rozwiązań.

Na koniec otrzymuję taki obrazek:

credentials

Klucze obu API mamy dodane, można iść dalej :)

4. Przygotowanie bazy wiedzy

Flowise bazuje na bibliotece Langchain, stworzonej po to, by ułatwić tworzenie aplikacji bazujących na dużych modelach językowych. Tak jak Langchain, pozwala więc pracować na różnych plikach i zapewnia gotowe narzędzia do ich przetwarzania (dzielenia na wspomniane kawałki).

Od TXT, PDF i DOC, przez JSON, CSV, HTML, aż po bazę danych Notion, całe repozytoria GitHuba czy pliki Figmy. My skupimy się na podstawowym „dodaniu wiedzy” do chatbota – stąd naszą bazą danych będzie tekst.

Ja na potrzeby przykładu wybrałem PDF – w takim formacie będę więc przygotowywał pliki z dodatkową wiedzą dla chatbota.

Zastosuję też podstawową metodę podziału treści, czyli recursive text splitter. Dzieli on tekst odmierzając fragmenty według podanej długości chunków (w tym wypadku mierzonych po prostu liczbą znaków) i rozdziela je na nowych liniach lub spacjach.

W praktyce znaczy to tyle, że będę potrzebować poprawnego tekstu bez zbędnych znaków typograficznych. Nie jest to niezbędne, ale usunę z niego też wszelkie zdjęcia, formatowanie, nagłówki i ozdobniki, żeby nic nie zaburzyło przetwarzania.

Na początek zebrałem materiały, czyli wszystkie opublikowane dotychczas części naszego kursu.

lista plików

Kolejno z każdego z nich usunąłem formatowanie, elementy takie jak leady, spisy treści, grafiki i linki. Tak, żeby w mojej bazie wiedzy były tylko czyste informacje tekstowe. Przejrzałem też całość pod kątem nadmiarowych odstępów i fragmentów, które mogłyby zaszkodzić dzieleniu tekstu.

wyczyszczony artykuł
Wyczyszczony tekst artykułu

A na koniec zapisałem wszystkie teksty jako jeden plik PDF:

gotowa baza wiedzy

Warto wiedzieć

Ten etap jest czasochłonny, ale warto poświęcić mu czas. Od jakości bazy wiedzy zależy bezpośrednio jakość późniejszych odpowiedzi chatbota.

Jeśli chcesz tylko poeksperymentować, śmiało możesz „wrzucić” też kompletnie niezmieniony plik PDF. Oszczędzisz na czasie, a zobaczysz jak to działa – miej tylko z tyłu głowy, że takie nieprzygotowane w żaden sposób dane często dają przeciętne efekty.

Ja powyższy proces czyszczenia tekstu wypracowałem sobie testując różne konfiguracje. Na tekstach z naszego bloga, ale i m.in. na swojej pracy licencjackiej, na dostępnych w domenie publicznej książkach jak np. „Przygody Tomka Sawyera” czy… na instrukcji obsługi odkurzacza. :)

5. Wgranie danych do indeksu

Mamy apkę, mamy dostęp do usług i mamy bazę wiedzy. Czas więc poskładać z tego wszystkiego naszego chatbota.

We Flowise aplikacje buduje się za pomocą diagramów, tzw. Chatflows. Łączy się w nich gotowe bloki odpowiadające elementom aplikacji wg. logiki ich działania.

Przechodzę więc do zakładki Chatflows i klikam „Add new”. Następnie wybierając plusik rozwijam listę dostępnych elementów.

Potrzebował będę następujących:

  • Conversational Retrieval QA Chain (z zakładki Chains) – ten element wykonuje sekwencję czatu, zarządzając zapytaniami, wyszukiwaniem danych i komunikacją z API usług,
  • ChatOpenAI (z zakładki Chat models) – przez ten element łączymy aplikację z modelem czatu, GPT-4 lub GPT-3.5-turbo,
  • Pinecone Upsert Document (z zakładki Vector Stores) – ten element wykona operację indeksowania naszych danych w bazie Pinecone.
  • OpenAIEmbeddings (z zakładki Embeddings) – dostęp do API OpenAI Embeddings, dzięki któremu będziemy w stanie wykonać indeksacje i późniejsze wyszukiwania w bazie danych,
  • PDF file (z zakładki Document Loaders) – pozwoli nam załadować i przetworzyć plik PDF
  • Recursive Character Text Splitter (z zakładki Text Splitters) – pozwoli podzielić zawartość tego pliku na fragmenty do indeksowania

Wszystkie te elementy dodaje do mojego flow, a następnie łączę je ze sobą i uzupełniam ich konfigurację o dodane wcześniej klucze API.

Gotowy chatflow wygląda tak:

chatflow

Jak widzisz, w module Pinecone dodałem nazwę indeksu, który utworzyłem wcześniej. W module Recursive Character Text Splitter ustawiłem z kolei parametry Chunk size: 1000 i Chunk overlap: 200.

Chunk size to tutaj liczba znaków w pojedynczym fragmencie, który będzie indeksowany w bazie danych. Chunk overlap to z kolei liczba znaków, które będą „zachodzić na siebie”, powtarzać się we fragmentach.

Fragment nr. 2 będzie miał na początku do 200 znaków z końca fragmentu 1, nr. 3 będzie powielał kawałek końca nr. 2 i tak dalej. Chodzi o to, żeby zachować możliwe pełne znaczeniowo akapity.

Jeśli wiesz, że do Twojej bazy wiedzy lepiej sprawdziłby się podział na krótsze kawałki, to możesz zmienić tę wartość.

Przy użyciu kilku plików każdy z nich może zostać też podzielony inaczej. Przykładowo, nasz chatbot Ignaś, ma w swojej „głowie” fragmenty indeksowane w 4 różnych konfiguracjach.

W każdym razie wszystko mamy już gotowe, pozostaje więc tylko załadować plik PDF do modułu PDF file.

moduł pfd file

Następnie zapisuje chatflow, klikam ikonkę chatu po prawej stronie i wysyłam dowolną wiadomość.

przetwarzanie danych

W ten sposób uruchomiłem swoją aplikację, system przetwarza więc dane i tworzy indeks.

Uwaga: to może trochę potrwać – im większa Twoja baza wiedzy, tym dłużej. Jeśli coś pójdzie nie tak, chat zwróci Ci błąd.

odpowiedź chatu

Chat odpowiedział… więc mam już swojego chatbota!

Dla pewności sprawdzam jeszcze indeks Pinecone - jeśli liczba wektorów wzrosła, a chat poprawnie odpowiedział na pytanie, to operacja udała się w 100%.

wektory w indeksie pinecone

Na tym etapie w zasadzie możemy już korzystać z chatu, ale ja polecam jeszcze zmodyfikować jeden element: zamienić moduł Upsert document, na Load Existing Index i usunąć moduły do ładowania plików i podziału tekstu.

Tak, żeby przy kolejnych rozmowach z czatem już na 100% tylko wczytywać stworzoną bazę danych.

chatflow konwersacji
Chatflow do konwersacji

Jeśli chcesz dodawać kolejne pliki do swojego indeksu, to możesz też zrobić kopię swojego chatflow i wtedy go zmodyfikować. Stworzysz w ten sposób osobny, gotowy chatflow do dodawania kolejnych danych i osobny chatflow do konwersacji.

Warto wiedzieć

Kolejne pliki z wiedzą do swojego chatbota możesz dodawać powtarzając procedurę z tego punktu: po prostu dodaj nowy plik i wyślij jakieś polecenie do chatu.

6. Prompt chatbota

Mamy chat oparty o GPT3.5-turbo/GPT4, który odpowiada na pytania dotyczące naszej niestandardowej wiedzy. Teraz możemy jeszcze nadać mu indywidualny charakter lub określone zachowanie dodając prompt systemowy.

Taką dodatkową instrukcję możesz dodać w module Conversational Retrieval QA Chain, klikając w „Additional Parameters”.

Tutaj baaaardzo prosty przykładowy prompt dla bota kursu Google Analytics 4:

```
Prowadzisz korepetycje z używania Google Analytics 4. Znasz się tylko na tym narzędziu. Odpowiadaj zwięźle, prosto i zgodnie z prawdą, wyłącznie na podstawie otrzymanego kontekstu.
```

Samo tworzenie wewnętrznego polecenia dla chatbota (i zabezpieczanie się przed zmanipulowaniem go) to jednak temat na tyle rozległy, że poświęcę mu jeszcze pewnie osobny tekst.

Trochę porad o tym jak napisać dobry prompt znajdziesz w moim tekście: Gdy GPT nie rozumie, czyli podstawy dobrych promptów.

Jeśli jednak chcesz zdobyć podstawową, uporządkowana wiedzę o promptach, to polecam Ci kurs Prompt Engineering Podstawy dostępny na Eduweb.pl.

Efekt i jak korzystać z takiego chatbota

Żeby jeszcze pokazać efekty (i różnicę!), zadałem to samo pytanie w chacie, który tu wspólnie właśnie zrobiliśmy i w ChatGPT:

odpowiedź asystenta GA4
Nasz „Asystent GA4” - krótko, konkretnie i zgodnie z prawdą.
odpowiedź chatgpt
ChatGPT – wyczerpująca, ale kompletnie błędna odpowiedź (dotyczy GA UA, a nie GA4)

No dobra, a tak od strony praktycznej, jak z tego korzystać na co dzień?

Z takiego niestandardowego chatu mogę korzystać bezpośrednio w apce, wchodząc w okienko chatu naszego chatflow (tak, jak zadałem pytanie wyżej).

Mogę jednak także choćby osadzić sobie takie okienko czatu na dowolnej stronie internetowej, korzystać z czatu jako z API, albo i wygenerować osobną stronę czatu.

opcje osadzenia chatu

Wszystkie te opcje znajdziesz w prawym górnym rogu swojego chatflow, pod ikonką kodu.

Warto wiedzieć

Twój chat będzie działał tylko wtedy, gdy uruchomisz Flowise! Osadzenie go na stronie jest możliwe tylko wtedy, gdy aplikacja jest hostowana na serwerze.

Na koniec ponownie: polecam poczytać dokumentację Flowise.

Ograniczenia i możliwości

To, co tutaj pokazałem, to podstawy podstaw. Stworzysz w ten sposób bota, który pozwoli Ci porozmawiać z dodatkową wiedzą – co może być mega użyteczne. Nie polecałbym jednak publikowania takiego bota np. na swojej stronie dla użytkowników.

Choćby ze względu na to, że używanie API OpenAI jest płatne, a Flowise nie ma żadnego wbudowanego sposobu, który zabroniłby komuś np. używania prostego skryptu do nabicia nam ogromnych kosztów. Zresztą, to tylko wierzchołek góry lodowej.

Inne minusy tego rozwiązania to m.in. to, że nie możemy modyfikować wewnętrznych promptów, które są w języku angielskim (więcej pisałem o nich w tekście podlinkowanym pod spisem treści). Domyślnie mamy też mocno ograniczony dostęp do historii konwersacji.

Żeby nie było jednak tak negatywnie, pokazując podstawy, myślę, że nie pokazałem też ani 10% tego, co Flowise potrafi.

Przede wszystkim, jak na no code przystało, pozwala tworzyć aplikacje naprawdę ekspresowo. Oferuje też połączenia modeli językowych z różnymi narzędziami i masą zewnętrznych usług.

Możemy tu zrobić np. bota, który będzie odwiedzał wskazane przez nas strony, szukał informacji w Google czy wykonywał różne akcje. Opcji jest mnóstwo i polecam Ci się nimi po prostu pobawić.

Od razu podpowiadam również, że aplikacja ma swoją aktywną społeczność skupioną na Discordzie. No i Marketplace Flowise, wbudowany w aplikację. Znajdziesz w nim gotowe schematy (Chatflows), które można od razu przetestować w praktyce.

Podsumowanie w punktach

  1. Połączenie GPT-4 z dodatkową wiedzą najłatwiej jest zrealizować techniką RAG – czyli automatycznym dodawaniem fragmentów tekstu do promptów.
  2. Baza wiedzy chatbota powinna składać się z w miarę poprawnego, „normalnego” tekstu (np. artykuły blogowe, książki, własne notatki).
  3. Flowise, w którym stworzymy bota, instalujemy z terminala/wiersza poleceń – do czego potrzebny jest Node.js.
  4. Potrzebne będą też klucze API: OpenAI i Pinecone, które możemy uzyskać na platformach firm (w Pinecone tworząc indeks).
  5. Kolejny etap to przygotowanie bazy wiedzy: zebranie tekstów, usunięcie z nich zbędnych elementów i wyczyszczenie formatowania.
  6. Mając gotowe pliki przechodzę do stworzenia pierwszego Chatflow, uzupełniam konfigurację i wgrywam pliki.
  7. Rozpoczynam chat z botem i uruchamiam tym samym przetwarzanie danych.
  8. Następnie modyfikuję Chatflow, już do bezpośredniej konwersacji.
  9. No i na koniec przygotowuję polecenie wewnętrzne (system prompt) dla GPT-4, który nada mu indywidualny charakter.

Artykuł się spodobał? Pamiętaj, żeby:

Obserwować nasz profil na FB

SEO, marketing, ecommerce, przedsiębiorczość. Bądź na bieżąco śledząc nas na FB.

Zobacz profil
Dopisać się do newslettera

Tylko najważniejsze informacje. Zero spamu. Samo "mięso".

Dołącz
Dołączyć do naszej grupy na FB

Zadawaj pytania, dyskutuj, ucz się.

Zobacz grupę

Przeczytaj również: