OpenAi ile GPT-3 Sohbet Uygulaması - Yusuf Bülbül

OpenAi ile GPT-3 Sohbet Uygulaması

Yapay zeka çalışmalarının çok sınırlı olduğu ve dünyanın yazılım büyüsüne yeni yeni kapıldığı, benim de yazılımı yeni öğrenmeye başladığım o günlerde kendimle konuşabilecek bir yazılım yapma hayalim vardı. Sanırım çoğu yazılımcının da hayallerinden biri bu olmuştur. Aslında yakın zamanda beta sürümü çıkarılan GPT-3 modeli, artık kendizle konuşabileceğiniz bir uygulama yapma olanağını tanıyor. Kullanmaya başlayınca gerçekten inanılmaz olduğunu görüyorsunuz. İyi eğittiğinizde normal bir insandan farkını neredeyse anlamıyorsunuz. Aslında böyle bir uygulamayı yaptıktan sonra bilinç mevzusunu derinlemesine tekrar ve tekrar düşündüm. Bu konu hakkında da yazabileceğim tonla şey var şüphesiz. Fakat şimdilik bunları farklı bir makale konusu olarak bırakıp gpt-3 ü kullanarak nasıl bir konuşma uyulaması yapıyoruz hemen ondan bahsedeyim.

İlk olarak, GPT-3 (“Generative Pre-trained Transformer 3”) , makina öğrenmesi algoritmaları kullanılarak geliştirilen bir yapay zeka dil modelidir. Aynı zamanda bir kod tabanı olduğu için buna bir kütüphane de diyebiliriz. Metin oluşturabilen bu yapay zeka, OpenAI tarafından modelin piyasaya sürülmüş 3. versiyonudur. Ve işin güzel tarafı openAI bu kütüphaneyi şimdilik ücretsiz olarak herkese sunuyor. Yani GPT-3 kullanarak bir uygulama yapmak için yapay zeka bilmenize gerek yok. Zaten yazılmış kod tabanını çekip istediğiniz şekilde yapay zekanızı eğiterek bunu kullanabiliyorsunuz.

Bu işlem için önce openai sayfasına girerek bir hesap oluşturuyoruz. Bu hesap ile artık openai API sine erişim sağlayabiliyorsunuz. OpenAi, kullanıcı sayfanızda bir API key oluşturuyor. Bu API key, tabi ki kütüphaneyi kullanmak için kodunuza koymanız gereken bir anahtar. Temelinde GPT-3’ün çekirdek motoru bir sunucuda duruyor. Bu yüzden yapay zekayı kullanmak için opeai sunucularına erişmeniz gerekiyor. Yani kütüphanenin çekirdeği hiç bir zaman makinanızda olmuyor ve açık kaynak değil. Ancak, API key edinen herkesin kullanımına şimdilik açık. Yani olay kaba taslak şu şekilde dönüyor; yerel makinanızdan sunucuya POST ve GET istekleri ile erişip, promt(istek) ve completion(cevap-tamamlama) şeklinde ilerliyorsunuz. Bu şekilde kullanılabilecek GPT-3 25-30 civarında uygulama var. Bu uygulamalara buradan göz atabilirsiniz. Bu uygulamalardan biri de sohbet (chat) uygulaması. Openai sitesinin içinde oyun alanı diye bir bölüm var. Orada tüm uygulamaları deniyip kullanabiliyorsunuz. Veya OpenAi ın sağladığı 3th party kütüphane ile python ve nodejs gibi dillerle de yerel makinanızda bir uygulama haline getirebiliyorsunuz. Direk http istekler ile json objeler kullanarak herhangi bir dilde de bu uygulamaları kullanabilirsiniz. API,sorgu başına ücrete tabi tutuluyor. Fakat kullanımı için ücretsiz deneme süresi mevcut. Ücretsiz deneme için site hesabınıza 18 USD lik bir bakiye veriyor. Her 1K token için kullandığınız yapayzeka modeline göre bakiyenizden para düşüyor. Örneğin Ada modeline 1K token için 0.0004 USD kesiyor. 1K token yapay zekanın cevap verdiği kelime sayısıyla ilişkili. Örneğin 1K token yaklaşık 750 kelimeye denk gelmekte. Dört tane falan yapay zeka modeli mevcut. Bunlardan en hızlı ve bir o kadar tırt olanı ada. En iyi olanı da Davinci modeli. Fakat ücreti de buna göre değişiyor.

Bu yazıda kısaca python ile küçük bir uygulama örneği vereceğim. Bir kaç satırdan oluşan kodumuz şu şekilde;

import openai as ai

def chat(question,chat_log = None) -> str:
    if(chat_log == None):
        chat_log = start_chat_log
    prompt = f"{chat_log}Human: {question}\nAI:"
    response = completion.create(prompt = prompt, engine =  "davinci", temperature = 0.85,top_p=1, frequency_penalty=0, 
    presence_penalty=0.7, best_of=2,max_tokens=100,stop = "\nHuman: ")
    return response.choices[0].text

def modify_start_message(chat_log,question,answer) -> str:
    if chat_log == None:
        chat_log = start_chat_log
    chat_log += f"Human: {question}\nAI: {answer}\n"
    return chat_log

if __name__ == "__main__":
    ai.api_key = "Put your API key here"

    completion = ai.Completion()

    start_chat_log = """Human: Hello, I am Human.
    AI: Hello, human I am openai gpt3.
    Human: How are you?
    AI: I am fine, thanks for asking. 
    """

    train = input("\nDo you want to train the openai chatbot (True/False): ")
    if(train == "True"):
        print("\n(To stop the training enter stop in the qestion)\n")
        while(True):
            question = input("Question: ")
            if question == "stop":
                break
            answer = input("Answer: ")
            start_chat_log = modify_start_message(start_chat_log,question,answer)
            print("\n")

    question = ""
    print("\nEnter the questions to openai (to quit type \"stop\")")
    while True:
        question = input("Question: ")
        if question == "stop":
            break
        print("AI: ",chat(question,start_chat_log))

Tabi ki bu kodu çalıştırabilmek için makinenize önce python3 ü daha sonra da python nın openai kütüpanesini kurmanız gerekiyor. Daha sonra openai sayfasına girip oradan edindiğiniz API key’i yukarıdaki kodda 18. satırdaki “ai.api_key” değişkenine kopyalayıp yapıştırın. İnternet erişimiz varsa ve gerekli paketleri de kurduysanız uygulamayı başlatabilirsiniz. Aslında direk örnek uygulamayı openai’ın github sayfasından da indirebiliyorsunuz.Gerekli python paketleri şu şekilde;

autopep8==1.6.0
certifi==2021.10.8
charset-normalizer==2.0.7
click==8.0.3
et-xmlfile==1.1.0
Flask==2.0.2
idna==3.3
itsdangerous==2.0.1
Jinja2==3.0.2
MarkupSafe==2.0.1
numpy==1.21.3
openai==0.19.0
openpyxl==3.0.9
pandas==1.3.4
pandas-stubs==1.2.0.35
pycodestyle==2.8.0
python-dateutil==2.8.2
python-dotenv==0.19.2
pytz==2021.3
requests==2.26.0
six==1.16.0
toml==0.10.2
tqdm==4.62.3
urllib3==1.26.7
Werkzeug==2.0.2

Yapay zeka motorunun ayarlarını yukarıda örnek verdiğim kodda “completion.create” fonksiyonu ile yapıyoruz. Bu ayarların ne manaya geldiğini openai sayfasından öğrenebilirsiniz. Aslında benim yaptığım uygulama için bu ayarlarla çok oynamama gerek kalmadı. Fakat siz kendi uygulamanız için bunları oynayarak deneyebilirsiniz.

Veya direk web sayfanıza koymak için aşağıdaki php sınıfını örnek alabilirsiniz;

<?php

$openai = New Openai();

$openai->request("ada", "Whats up?", 5);

class Openai{
    private function secret_key(){
        return $secret_key = 'Bearer ***Your API-Key***';
    }

    public function request($engine, $prompt, $max_tokens){ 

        $request_body = [
        "model" => "text-davinci-003",
        "prompt" => $prompt,
        "max_tokens" => 150,
        "temperature" => 0.7,
        "top_p" => 1,
        "presence_penalty" => 0.6,
        "frequency_penalty"=> 0.0,
        "stop" => [" Human:", " AI:"],
        ];

        $postfields = json_encode($request_body);
        $curl = curl_init();
        curl_setopt_array($curl, [
        CURLOPT_URL => "https://api.openai.com/v1/completions",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => $postfields,
        CURLOPT_HTTPHEADER => [
            'Content-Type: application/json',
            'Authorization: ' . $this->secret_key()
        ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            echo "Error #:" . $err;
        } else {
            echo $response;
        }

    }

    public function search($engine, $documents, $query){ 

        $request_body = [
        "max_tokens" => 10,
        "temperature" => 0.7,
        "top_p" => 1,
        "presence_penalty" => 0.75,
        "frequency_penalty"=> 0.75,
        "documents" => $documents,
        "query" => $query
        ];

        $postfields = json_encode($request_body);
        $curl = curl_init();
        curl_setopt_array($curl, [
        CURLOPT_URL => "https://api.openai.com/v1/engines/" . $engine . "/search",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => $postfields,
        CURLOPT_HTTPHEADER => [
            'Content-Type: application/json',
            'Authorization: ' . $this->secret_key()
        ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            echo "Error #:" . $err;
        } else {
            echo $response;
        }

    }

}

Uygulamayı başlattıktan sonra direk ingilizce olarak botla konuşmayı deneyebilirsiniz. Aynı zamanda openAi sayfasında dil seçenekleri de mevcut. Fakat aynı zamanda botunuzu kendiniz de eğitebilirsiniz. Ben bu botu, kişisel bir whatsup sohbeti ile eğitmiştim. Botunuzu ne kadar eğitirseniz, botunuz o kadar insana benzemeye başlıyor ve sizde o kadar gerçek biriyle sohbet ediyormuş hissi oluşturuyor.

Yaptığım örnek uygulamaya buradan erişebilirsiniz.

O vakit size yapay zekanız ile iyi eğlenceler…

Bilgi Paylaştıkça Çoğalır;
Yusuf

Yusuf

Bir Mühendis.

Önerilen makaleler

2 Yorum

  1. Avatar

    Merhaba Yusuf bey,

    Verdiginiz kodlari internet sayfada kullanmaya calistim ancak tam olarak nasil yapilacagini anlamadim.

    Acaba, WordPress temasinda nasil kurulacagini gösteren detayli bir yazi var mi?

    Saygilarimla!
    Hasan

    1. Yusuf

      Merhaba,

      Bunun için wordpress kod tabanını bilmek gerekiyor. Bu yüzden bir wordpress tema içinde özel php sayfalar , eklenti ve moduller nasıl oluşturulur bunu araştırıp öğrenmenizi tavsiye ederim ilk olarak. Bunun için spesifik bir kaynak bilmiyorum ama wordpress komitesinin kendi sayfasında bu konuda her türlü döküman ve örnek paylaşılıyor. Ben de oradan öğrendim.

      İyi çalışmalar dilerim 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir