Možná už jste se setkali s chatbotem, který dokáže víc než jen vyhledat články v sekci často kladených otázek podle tagů. Jakákoliv webová stránka může využít API Gemini, OpenAi či některého open-source modelu (API - rozhraní pro programování aplikací). Nejprve bude muset vyřešit tyto problémy:
- ChatGPT, Bard ani jiné modely váš produkt neznají
- Model se ve výchozím nastavení bude zabývat jakýmkoliv příchozím textem
- Uživatelé často formulují své dotazy příliš nepřesně - i proto se jim možná odpověď nedaří najít standardním vyhledáváním
- (hypoteticky EU regulace v každém státě, ochrana osobních údajů)
Jak seznámit jazykové modely s vaším produktem
Velký jazykový model (dále už jen VJM) nemá přístup k vašemu webu. GPT-4-Turbo by si poradil klidně s celým manuálem, avšak posílat s každým požadavkem celý manuál by model zbytečně zatěžovalo, a tudíž by se zvýšila provozní cena.
Dokumentace, či části webu lze rozdělit podle odstavců, délky a HTML značení do malých sekcí o 500-2000 slovech. Tyto sekce se zapíšou do databáze společně s dalšímy daty a převážně vektorem spočítaným na základě sémantického významu slov. Ten vypadá nějak takhle, jen má délku >1500 čísel
[0.125, -0.75, 0.33, 0.24, -0.19, 0.58, -0.11, 0.07, -0.44, 0.29]
Totéž se udělá s otázkou, kterou VJM od váší aplikace obdrží. Různými způsoby lze vyhledávat nejvhodnější sekci(e), v které se pravděpodobně nachází odpověď.
Model se bude zabývat jakýmkoliv příchozím textem
Už jsem viděl na X ukázky chatu jednoho amerického řetězce. Lidi po něm požadovali funkce v Pythonu, poradit s výběrem Tesly, na kterou reagoval doporučením jiné značky, a tak podobně. Provozování chatu s VJM stojí peníze a podobná chyba bude inspirovat ke zneužívání další a další uživatele.
Zamezit jí lze vcelku lehko - součástí požadavku na VJM a sekce z databáze pošlete i instrukce cokoliv takového odmítnout. Nevím, kdo jim to programoval...
Izolace otázky z textu
Další spíše jednoduchý dílčí úkon. Otázky lze nejlépe izolovat z textu tak, že se na VJM pošle celý text s instrukcemi "return standalone question", tedy vrátit samostatnou otázku.
Krok není nutný, zvýší však přesnost vyhledávání sekcí v databázi na základě významu textu v těchto sekcích.
Vývojový diagram mého chatbota
- Načtení aplikace
- Zkontrolovat nastavené parametry
- Přihlásit se do Discordu
- Čekat na nové zprávy
- Objeví-li se v komunikačním kanále nová zpráva, bot ji bude nějaký čas sledovat
- Když někdo reaguje emoticonem "🤖", pokusí se na ni odpovědět (předpokládáme, že to je otázka)
- Zpracovat text zprávy
- Izolace otázky
- Převedení otázky na vektor vytvoření na základě sémantického významu
- Prohledání databáze, chceme najít dílčí data (sekce), která se vztahují k otázce
- Žádost VJM o zpracování otázky na základě dodaného kontextu z databáze
- Odpověď je poslaná na Discord
Postup výše samozřejmě předpokládá, že byla databáze už připravena. Já jsem si ji připravil pomocí skriptu, který prohledával sekci FAQ na webových stránkách. Mohl bych nastavit klidně aktivní vyhledávání odpovědi na webu, ale ideální je mít databázi.
Spuštění
Můj bot, ukázaný výše, zatím nikde neběží. Funguje, mohl by být po změně dat, persony a obrázku existovat na jakémkoliv serveru či být předělán na chat. S výkonějším modelem by zvládl i češtinu na slušné úrovni, takže kdyby se vám něco podobného hodilo, stačí dát vědět.
Pěkný!