Tvoříme GPT chatbota v PHP (díl 1 - základy)

Kategorie: Blog Zveřejněno: čtvrtek 1. srpen 2024 Napsal Kamil Kopecký Vytisknout E-mail

V dnešním textu se podíváme na to, jak si jazykový model GPT od OpenAI integrovat do svých vlastních webových stránek - tím pádem i nejrůznějších online projektů - a použijeme k tomu webovou boomerskou klasiku - PHP a HTML. Postupně se naučíme nastavit našemu inteligentnímu chatbotovi osobnost, ale také nějakou základní znalostní bázi (třeba pomocí souborů, které do chatbota dostaneme). Nebojte, sestavit tento kód a naprogramovat si jednoduchého robota zvládnou i začátečníci. Dnes se tedy naučíme vytvořit si funkčního AI chatbota.

1. Registrace a získání přístupu k API od OpenAI

Abychom mohli používat jazykové modely od OpenAI ve svých projektech, musíme si nejdříve zřídit účet a nechat si vygenerovat unikátní klíč (tzv. API key), který nám bude umožňovat přistupovat k technologii OpenAI. Abychom klíč získali, je nutná registrace (sign up).

Za používání technologie se platí - a pokud systém používáte přiměřeně, nejde o obrovské sumy, platí se totiž za tokeny - tj. počty “znaků”, které pro vás systém zpracuje, vygeneruje či které do něj zadáte (např. do něj nahrajete soubor, knížku apod.). O problematice tokenů se rozepisovat v tomto místě nebudu, je to na další celý článek.

Podle aktuálního ceníku při používání modelu gpt-4o-mini platíte  $0.150 za 1 milion tokenů na vstupu a $0.600 za 1 milion tokenů na výstupu. Takže při běžném zatěžování modelu při chatování se bavíme o nákladech skutečně jednotky či desítky dolarů. Samozřejmě pokud chcete pomocí AI touto cestou zpracovávat velké objemy dat (knihy apod.), pak náklady rostou - zde je lepší předplatit si měsíční platby za přístup k webovému prostředí a klasickému ChatGPT. V dnešním článku ale řešíme výrobu vlastního chatbota, takže se nebudu zatěžovat nějakou rozsáhlou analýzou. 

Nastavení plateb naleznete pod odkazem: https://platform.openai.com/settings/organization/billing/overview. Platby fungují tak, že si o OpenAI kupujete kredit, který je postupně čerpán podle používání umělé inteligence prostřednictvím vašeho API. V systému si rovněž můžete nastavit, co se stane, když bude kredit vyčerpán - zda váš webový projekt přestane fungovat, nebo zda se automaticky nabije z vaší karty nový kredit apod. V rámci testování doporučuji možnost automatického doplňování kreditu vypnout a nejdříve si otestovat, kolik vás to bude stát. 

2. Tvorba API klíče

Nyní se vrátíme k vytvoření našeho vlastního klíče - tuto možnost najdete v sekci Dashboard - API keys. V pravém horním rohu naleznete záložku Create new secret key (Vytvořit nový tajný klíč). 

Zde je důležité upozornit, že aktuálně se API klíče přiřazují ke konkrétním projektům, tj. nejdříve si musíme vytvořit nový projekt, ke kterému poté přiřadíme klíč. Nový projekt si vytvoříme v levé horní části obrazovky - zde klikneme vpravo od nápisu Personal - a rozbalí se nám možnost vytvářet projekty (Create project). Projekt si pojmenujeme třeba Testovací chatbot, klikneme na Create a hotovo. Vytvořený projekt si ve stejném místě označíme.

 vytvorit_projekt1.png
'Nejprve zvolíme možnost Create project

vytvorit_projekt2.png
Vytvoříme nový projekt

vybrany_projekt.png
Vybereme nový projekt

Teď už stačí k našemu projektu vytvořit API klíč. Klikneme na záložku Dashboard - v levé horní části vybereme náš projekt (Testovací chatbot) a označíme jej (objeví se vedle něj označovací “fajfka”). Poté klikneme do záložky Dashboard - API keys a zvolíme Create new secret key. Otevře se nám okno pro tvorbu klíče. Pokud jsme si v horní části obrazovky projekt správně označili, měl by být nyní vidět jako zvolený projekt pro daný klíč. Pro daný klíč je možné nastavovat (povolovat/zakazovat) různé druhy přístupových práv, pro potřeby našeho testování ponecháme nastavení All, tj. vše bude povoleno. Klikneme na Create - a máme klíč. Pozor, klíč si okamžitě zkopírujte a někam uložte, přes webové stránky OpenAI už byste se k němu nedostali.

 vytvoreni_klice.png
Vytvoření klíče

API klíč je sada znaků, která vypadá nějak takto:
sk-proj-qB7604AzF3F49uFCyNsG3BlbkFJBSb9ytUnnokfINlxLVkdk (tento je nefunkční, takže jej ani nezkoušejte). Váš vygenerovaný klíč si někam uschovejte, budeme ho ještě potřebovat.

Programujeme jednoduchého chatbota v PHP

Nyní si naprogramujeme našeho chatbota. Bude fungovat docela jednoduše - vytvoříme si jednoduchý webový formulář, do kterého budeme zadávat naše dotazy pro AI. Ty se odešlou do vybraného jazykového modelu umělé inteligence (třeba gpt-4) na servery OpenAI a umělá inteligence nám vrátí odpoveď, kterou vypíšeme na obrazovku. Je to jednoduché a snadné řešení. Tak pojďme na to.

Nejprve si vytvoříme nový soubor, který se bude jmenovat třeba chat.php (koncovka PHP je nutná, protože budeme využívat funkce skriptovacího jazyka php). Soubor bude obsahovat jednak samotný formulář v HTML a samozřejmě také php skript, který odešle, přijme, dekóduje a zobrazí odpoveď z OpenAI.

Poznámka pro ajťáky - laici mohou ignorovat: V ideálním světě by měla být veškerá komunikace mezi naším skriptem a server OpenAI šifrovaná, bohužel svět není ideální a mnoho hostingů automaticky nepřiděluje uživatelům SSL, proto je náš skript upraven tak, aby fungoval i na serverech, které nemají SSL - tj. i na běžném hostingu. Takže ano, vypnutí ověření je v kódu záměrně.

Nejdříve si tedy uděláme formulář v HTML.


<form method="post">
    <label for="question">Zadejte otázku:</label><br>
    <input type="text" id="question" name="question" required><br>
    <input type="submit" value="Odeslat">
</form>

Naše zadání je vloženo do proměnné question. Po kliknutí na tlačítko odeslat naši proměnnou pošleme do našeho skriptu v PHP, který začne komunikovat se servery OpenAI. Script funguje takto:
a) nejprve si načte naši proměnnou question se zadáním,
b) poté si přečte náš API klíč (do proměnné $api_key vložíte klíč, který jsme si vygenerovali),
c) pak si přečte, jaký model chceme použít (např. gpt-4-turbo, gpt-4o apod.),
d) poté si připraví data k odeslání na servery api.openai.com (pracujeme s v1),
e) nastaví základní proměnné pro chatbota - např. základní osobnost, maximální počet tokenů (tj. délka odpovědi), temperature (jak moc má být robot kreativní),
f) poté si připraví data ve formátu cURL (client URL) a pošle je na server,
g) vypneme ověřování SSL a názvů serveru (proto nebude komunikace zabezpečena, aby nám to fungovalo všude). 

Skript si poté načte z webu OpenAI data ve formátu JSON (Javascrip Oject Notation), výsledná data vloží do proměnné $response a vypíše je na obrazovku. Jednoduché, účinné, funkční. A zde již máme script v akci.


<div id="response">
    <?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $question = $_POST['question'];

        // Nastavení API klíče a modelu
        $api_key = 'sem vložte svůj klíč';
        $model_id = 'gpt-4'; // Specifikujte konkrétní model, např. gpt-4

        // Konfigurace HTTP požadavku
        $url = 'https://api.openai.com/v1/chat/completions';
        $data = [
            'model' => $model_id,
            'messages' => [
                ['role' => 'system', 'content' => 'Jsi kamarádský robot.'],
                ['role' => 'user', 'content' => $question]
            ],
            'max_tokens' => 500, // Maximální počet tokenů v odpovědi
            'temperature' => 0.7 // Kreativita odpovědi
        ];

        // Iniciace cURL
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Authorization: Bearer ' . $api_key
        ]);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Vypnutí ověřování SSL certifikátu
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Vypnutí ověřování názvu serveru

        // Získání výsledku
        $result = curl_exec($ch);
        if (curl_errno($ch)) {
            echo 'Nastala chyba při komunikaci s API: ' . curl_error($ch);
        } else {
            $response_data = json_decode($result, true);
            $response = $response_data['choices'][0]['message']['content'];
            echo '<p>' . $response . '</p>';
        }

        // Zavření cURL
        curl_close($ch);
    }
    ?>
</div>

A zde je poté celkový výsledek, který stačí zkopírovat, doplnit svou vlastní API key a hotovo. Funkční výsledek je zde, zdrojový kód si můžete stáhnout zde.


<!DOCTYPE html>
<html lang="cs">
<head>
    <meta charset="UTF-8">
    <title>GPT Asistent</title>
</head>
<body>
    <h1>GPT Asistent</h1>
    <form method="post">
        <label for="question">Zadejte otázku:</label><br>
        <input type="text" id="question" name="question" required><br>
        <input type="submit" value="Odeslat">
    </form>
    <div id="response">
        <?php
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $question = $_POST['question'];

            // Nastavení API klíče a modelu
            $api_key = 'sem zadej svůj klíč';
            $model_id = 'gpt-4'; // Specifikujte konkrétní model, např. gpt-4

            // Konfigurace HTTP požadavku
            $url = 'https://api.openai.com/v1/chat/completions';
            $data = [
                'model' => $model_id,
                'messages' => [
                    ['role' => 'system', 'content' => 'Jsi kamarádský robot.'],
                    ['role' => 'user', 'content' => $question]
                ],
                'max_tokens' => 500, // Maximální počet tokenů v odpovědi
                'temperature' => 0.7 // Kreativita odpovědi
            ];

            // Iniciace cURL
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($ch, CURLOPT_HTTPHEADER, [
                'Content-Type: application/json',
                'Authorization: Bearer ' . $api_key
            ]);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Vypnutí ověřování SSL certifikátu
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Vypnutí ověřování názvu serveru

            // Získání výsledku
            $result = curl_exec($ch);
            if (curl_errno($ch)) {
                echo 'Nastala chyba při komunikaci s API: ' . curl_error($ch);
            } else {
                $response_data = json_decode($result, true);
                $response = $response_data['choices'][0]['message']['content'];
                echo '<p>' . $response . '</p>';
            }

            // Zavření cURL
            curl_close($ch);
        }
        ?>
    </div>
</body>
</html>

Toto řešení je velmi jednoduché, jde skutečně o základ, v dalších textech se podíváme na to, jak udělat, aby byl náš chatbot víc realistický, jak ho naučit psát výsledek po písmenech, zobrazovat, že přemýšlí, postupně se ho také naučíme natrénovat s pomocí našich dat a pracovat s kontextem.

Líbil se vám tento text? Tak mě podpořte - stačí koupit virtuální kafe. Díky!

Zobrazení: 569
Hodnocení článku:
Hodnocení: 5 z 5. Celkem 1 hlasů