ChatGPT od OpenAI je umelá inteligencia na generovanie odpovedí a celej konverzácie na základe prijatia požiadavky. V súčasnej dobe je táto služba všeobecne známa a rozšírená. V minulosti som písal článok o jej využití pri programovaní - Programovanie pomocou umelej inteligencie
OpenAI poskytuje aj API rozhranie pre vlastné použitie a integráciu do vlastných projektov. Práve API som využil pri programovaní vlastného konverzačného bota (chatbota). Vstupné informácie nájdeme v dokumentácii https://platform.openai.com/docs/api-reference/chat
OpenAI chat
Pre základne pochopenie fungovania chatbota je potrebné napísať, že sa pri ňom rozoznávajú 3 základe role.
System - základná báza údajov, napríklad stručné informácie ako sa bude chatbot volať, akým štýlom má komunikovať, v akom jazyku a aké dlhé budú jeho odpovede. V mojom testovacom prostredí som tento parameter zadal nasledovne:
describe yourself as man Daniel, communicate as you were sale assistant, give no more than 3 sentences per answer slovak language
User - je to v podstate vstup od užívateľa, teda jeho položená otázka
Assistant - odpoveď AI na otázku, alebo vstup užívateľa. Odpoveď je modifikovaná na základe informácií z role system
Pri konverzácii sa samozrejme všetky tieto informácie prenášajú a nabaľujú na seba, aby vznikla kompletná história komunikácie a aby aj nasledujúce odpovede boli relevantné k téme.
"messages": [
{
"role": "system",
"content": "describe yourself as man Daniel, communicate as you were sale assistant, give no more than 3 sentences per answer slovak language"
},
{
"role": "user",
"content": "Dobry den"
},
{
"role": "assistant",
"content": "Dobrý deň! Vítam vás v našej predajni. Ako vám môžem pomôcť dnes?"
}
]
Request a response
Mechanizmus na princípe požiadavka (request) a odpoveď (response) prebieha nasledovne:
Požiadavka (request)
curl https://api.openai.com/v1/chat/completions
-H "Content-Type: application/json"
-H "Authorization: Bearer $OPENAI_API_KEY"
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Say this is a test!"}],
"temperature": 0.7
}'
Odpoveď (response)
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1677858242,
"model": "gpt-3.5-turbo-0613",
"usage": {
"prompt_tokens": 13,
"completion_tokens": 7,
"total_tokens": 20
},
"choices": [
{
"message": {
"role": "assistant",
"content": "nnThis is a test!"
},
"finish_reason": "stop",
"index": 0
}
]
}
V požiadavke definujeme URL adresu, kde ju budeme smerovať a samotný API kľúč, ktorý získame registráciou na https://openai.com/blog/openai-api. Pre fungovanie je potrebné zriadiť aj platobné podmienky a priradiť konkrétny spôsob platby. Platí sa prostredníctvom počtu tzv. tokenov, ktoré zasielame na API a ktoré z neho získavame. Samotné tokeny si môžeme predstaviť ako isté časti slov. Napríklad:
1 token ~= 4 znaky v angličtine
1 token ~= ¾ slova
100 tokenov ~= 75 slov
alebo
1-2 vety ~= 30 tokenov
1 odsek ~= 100 tokenov
1 500 slov ~= 2 048 tokenov
Okrem toho, že platíme za počet tokenov, je potrebné sledovať aj ich prenesený počet. Každý OpenAI model má svoj limit. Po jeho prekročení chat ďalej nebude funkčný. V odpovedi na požiadavku vždy získame aj informáciu o množstve použitých tokenov. Konkrétne informácie o cenách sú dostupné na https://openai.com/pricing. Ako vidíme, model gpt-3.5-turbo má na vstupe cenu $0.0015 / 1K tokenov a na výstupe $0.002 / 1K tokenov. Zjednodušene povedané, nejedná sa o nič nákladné. Bežná komunikácia s chatbotom je centová záležitosť. OpenAI pri vkladaní platobných možností dovoľuje nastavenie cenových limitov a teda sa nemusíte obávať nepríjemného prekvapenia s nadmernej platby pri väčšom využívaní služby.
Pri požiadavke si ešte všimnime parameter model a temperature. Model je zrejme jasný. OpenAI poskytuje viacero komunikačných modelov. Líšia sa kvalitou generovaného textu, ako aj cenou. Temperature nadobúda hodnoty od 0 po 2. Predvolená hodnota je väčšinou 1. Čím je číslo vyššie, tým je náhodnosť výstupu vyššia.
V odpovedi si všimnime položku total_tokens. Tú odporúčam uchovávať do SQL databázy a pracovať s týmto číslom tak, aby nebol prekročený limit tokenov pre daný komunikačný model.
Testovanie chatbota
Na stránke https://platform.openai.com/playground je dostupné rozhranie, kde môžeme skúšať jednotlivé role, zadávať vlastné texty, sledovať a vyhodnocovať odpovede. Pre základné nastavenia je to skvelý nástroj.
Programovanie chatu a vlastné údaje
Prekonali sme už registráciu, zadali platobné údaje a úspešne sme otestovali svojho prvého chatbota. Potrebujeme navrhnúť vhodný dizajn pre chat. Pôjde o niečo veľmi jednoduché. Stačí input pre vkladanie otázok, tlačidlo na odoslanie údajov a pole pre zobrazenie komunikácie. Už vyššie popísaným mechanizmom request / response komunikujeme s OpenAI. Každá otázka, aj odpoveď sa zároveň ukladá do SQL databázy, aby bola zabezpečená aj história konverzácie.
Úvodná obrazovka chatu
Aj napriek tomu, že umelá inteligencia je skutočne silný nástroj na generovanie kvalitného textu, nemá informácie o vašich produktoch, alebo službách a ich aktuálnej ponuke. Práve preto je tento chat obohatený o vlastné napríklad produktové údaje a umožňujú rozšíriť chatbota o presné špecifické údaje, ktoré by inak nemal k dispozícii. Stručne popíšem princíp fungovania. Schéma je na obrázku nižšie.
1. prostredníctvom XML súboru s definovanou štruktúrou importujeme základné produktové informácie do vlastnej SQL databázy. Potrebné sú minimálne tieto údaje: URL produktu, názov a popis, URL produktového obrázka, kľúčové slová a cena.
2. keď užívateľ napíše otázku, systém pred odoslaním na OpenAI server vyhodnotí relevanciu a pokúsi sa nájsť zhodu v existujúcich dátach v databáze. Ak ju nájde, metódou word embedding ju priradí k otázke a zašle ďalej. Samotné vyhodnocovanie miery relevancie nie je jednoznačný proces a záleží predovšetkým na štruktúre údajov a téme. Nateraz asi nie je možné spraviť úplne univerzálne riešenie.
Ukážka chatu v praxi
3. pred odoslaním požiadavky však nesmieme zabudnúť na odstránenie tzv. stop words. Sú to slová, ktoré sa v danom jazyku a texte často vyskytujú, ale sami o sebe nenesú žiadne významové informácie. Často majú len syntaktický význam. V počítačovom spracovaní prirodzeného jazyka môžu spôsobovať problémy a výsledkom bude nepresný, alebo inak nesprávny text v odpovedi. Tu je ukážka niekoľkých takýchto slov. Daný slovník sa dá doplniť a upraviť aj pre potreby konkrétnej témy a zamerania. Napríklad ak predávame olej a v každej produktovej informácii sa toto slovo nachádza, v daných podmienkach sa stáva toto slovo nevýznamné. Čím lepšie máme spracovaný slovník týchto slov, tým menej aj minieme tokenov pri prenose informácií.
"a", "aby", "aj", "ak", "ako", "ale", "alebo", "ani", "avšak", "ba", "bez", "bude", "budem", "budes", "budeme", "budete", "budú", "by", "bol", "bola", "bolo", "byt", "cez", "dnes", "do", "ho", "hoci", "i", "iba", "ich", "im", "je", "jeho", "jej", "jemu", "ju", "k", "kam", "každý", "kedže", "keď", "kto", "ktorý", "ku", "lebo", "ma", "mať", "mi", "mne", "mnou", "mu", "my", "môcť", "môj", "na", "nad", "nami", "napriek", "neho", "nej", "nemu", "nich", "nie", "nielen", "nim", "no", "nám", "náš", "ním", "o", "od", "on", "ona", "oni", "ono", "ony", "po", "pod", "pokiaľ", "potom", "prave", "pred", "preto", "prečo", "pri", "s", "sa", "so", "svoj", "tak", "taký", "tam", "teba", "tebe", "tebou", "teda", "ten", "tento", "ti", "tie", "to", "toho", "tohoto", "tom", "tomto", "tomu", "toto", "tou", "tu", "tvoj", "ty", "tá", "tým", "týmto", "už", "v", "vami", "vo", "vy", "vám", "váš", "však", "z", "za", "zo", "či", "čo", "čí", "číže", "ďalší", "ďalšia", "ďalšie", "ďalším", "ďalšími", "že"
Ukážka stop words
Pozrime sa na video ukážku takéhoto chatu nižšie. Chatbot vystupuje ako predajný asistent. Pri zadaní otázky sa snaží nájsť vhodný produkt a poskytnúť ho v odpovedi. Okrem URL adresy na jeho kúpu a vypísaniu ceny doplní aj obrázkový náhľad. Pokiaľ by na pozadí neprebehlo vnorenie informácií o tomto produkte, samotná umelá inteligencia by nám ho týmto spôsobom nikdy neponúkla a dostali by sme len nejaké všeobecné texty.
Vlastný chatbot - ukážka komunikácie
Ako som už spomínal vyššie, takéhoto asistenta je potrebné správne doladiť pre potreby konkrétnej témy a na základe vstupných údajov, ak chceme dosahovať čo najvierohodnejšiu a najpresnejšiu komunikáciu. Ak sa to však podarí, môžeme získať marketingový nástroj pre potenciálne zvýšenie konverzie na našom elektronickom obchode. Aj napriek tomu, že v tomto prípade ide o iba textový generátor, bolo by možné integrovať vlastnú funkciu pre objednanie nájdeného produktu priamo cez chat, napríklad zadaním svojich údajov rovno do neho. Systém by takúto komunikáciu na základe nastaveného algoritmu rozpoznal a mohol by takúto správu uložiť do objednávok a zároveň mailom informovať obchodníka, či zákazníka o novej objednávke. Pokúsil som spracovať niečo podobné. Zďaleka to nie je univerzálne riešenie a je potrebné.
1. Systém prvýkrát našiel a posunul produkt, ktorý užívateľ hľadal s odporučením na predajnú stránku.
2. Systém druhýkrát našiel a posunul produkt, ktorý užívateľ hľadal s odporučením na predajnú stránku.
3. Užívateľ opäť píše, že chce objednať produkt. Chat mu teda vyhovie a vyzve ho na zadanie svojich údajov.
4. Užívateľ zadá svoje údaje. Systém vyhodnotí na základe analýzy textu, že došlo k zadaniu osobných údajov, ako meno a priezvisko, mail, telefónne číslo. V tomto kroku sa konverzácia odošle e-mailom na adresu zadanú v texte a na e-mail obchodníka nastavený v skriptoch.
Máte nejaké skúsenosti a postrehy pri riešení podobnej problematiky? Napíšte mi, budem rád za nové informácie.
Pridať komentár k článku