Integrasi API OpenAI untuk Membangun Chatbot Interaktif dalam Proyek PHP

How can we help?
< All Topics
Print

Integrasi API OpenAI untuk Membangun Chatbot Interaktif dalam Proyek PHP

Tutorial ini membahas implementasi Chats Models dari OpenAI menggunakan PHP sebagai kelanjutan dari artikel sebelumnya yang membahas Completions Models. Kali ini, fokus kita akan beralih ke pembangunan chatbot interaktif dengan menggunakan API OpenAI.

Sebelum melanjutkan, pastikan Anda telah membaca artikel sebelumnya yang membahas langkah-langkah seperti mendaftarkan akun pada OpenAI, menghasilkan API key, dan verifikasi saldo. Karena hal tersebut merupakan pemahaman dasar yang diperlukan sebelum melanjutkan dengan pembahasan ini.

Pengenalan tentang Chats Models

Sebelum masuk ke detail implementasi, mari kita melakukan recap singkat tentang apa itu jenis tugas Chats. Chats adalah tugas yang memungkinkan kita untuk berinteraksi secara langsung dengan model. Dengan memberikan daftar pesan berupa pertanyaan atau pernyataan, model akan merespons setiap pesan secara berurutan, seolah-olah kita sedang berkomunikasi dengan orang lain. Metode ini berguna jika kita ingin menjalani percakapan yang lebih alami dan dinamis dengan model.

Pemilihan Model dan Perbedaan Utama dengan Completions API

Sesuai dengan dokumentasi OpenAI, untuk Chats Models, digunakan Endpoint https://api.openai.com/v1/chat/completions dengan model standar yang direkomendasikan saat ini, yaitu gpt-3.5-turbo

Sedangkan dalam artikel Completions sebelumnya, digunakan Endpoint https://api.openai.com/v1/completions dengan model standar yang direkomendasikan saat ini, yaitu text-davinci-003

Perbedaan utama antara model Completions dan Chat adalah bahwa model Chat memiliki kemampuan untuk memahami konteks sebelumnya dalam percakapan dan menghasilkan tanggapan yang lebih alami.

Struktur API Request untuk Chats

Berikut ini adalah contoh struktur permintaan API dari Chats Models dengan menggunakan cURL.

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": "system", "content": "Anda adalah asisten yang membantu dalam pertanyaan seputar destinasi wisata dengan penuh keramahan."},
      {"role": "user", "content": "Hello!"}
    ],
    "temperature": 0.2,
    "max_tokens": 512,
    "top_p": 0.2,
    "frequency_penalty": 0.0,
    "presence_penalty": 0.6
  }'

Untuk memastikan kesesuaian dengan materi tutorial kita kali ini, mari kita lakukan konversi ke versi PHP terlebih dahulu.

<?php

$openaiApiKey = "YOUR_API_KEY";

$data = array(
  "model" => "gpt-3.5-turbo",
  "messages" => array(
    array("role" => "system", "content" => "Anda adalah asisten yang membantu dalam pertanyaan seputar destinasi wisata dengan penuh keramahan."),
    array("role" => "user", "content" => "Hai!")
  ),
  "temperature" => 0.2,
  "max_tokens" => 512,
  "top_p" => 0.2,
  "frequency_penalty" => 0.0,
  "presence_penalty" => 0.6
);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.openai.com/v1/chat/completions",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode($data),
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer " . $openaiApiKey,
    "Content-Type: application/json"
  ),
));

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

curl_close($curl);

$result = json_decode($response, true);
$content = $result['choices'][0]['message']['content'];
echo $content;

?>

Tampilan hasil dari sintaks API request tersebut di browser akan terlihat seperti berikut.

Hai! Selamat datang di layanan bantuan destinasi wisata. Ada yang bisa saya bantu?

Beberapa parameter esensial dan opsional tetap tidak berubah, dan Anda dapat mengonfigurasikannya dalam panggilan API Chats ini. Meliputi Model, Temperature, Max Tokens, Top Probability, dan lain-lain, yang juga dapat Anda temukan dalam artikel sebelumnya.

Perbedaannya, pada API Chats, digunakan parameter “messages” sebagai pengganti “prompt” yang digunakan dalam Completions. Dalam API Chats, parameter “messages” juga dapat diatur dalam bentuk array.

Messages sendiri merupakan daftar pesan yang dikirimkan dalam percakapan, di mana setiap pesan memiliki dua field yang dibutuhkan.

  • role: peran pengirim pesan (system, user, atau assistant)
  • content: isi pesan (misalnya, Tulislah puisi indah untuk saya)

Hal ini yang menjadikan kita bisa melakukan percakapan secara lebih dinamis.

Messages juga dapat mengandung field opsional, yaitu name, yang memberikan nama kepada pengirim pesan. Misalnya, example-user, Alice, BlackbeardBot. Nama tidak boleh mengandung spasi.

Secara umum, cara kerjanya adalah dengan memulai percakapan dengan menyatakan secara jelas pada sistem bagaimana model harus berperilaku (konsep ini hampir sama dengan prompt seperti di Completions sebelumnya), diikuti oleh pesan dari pengguna (user) dan pesan dari asisten (model) yang saling bergantian.

Namun, perlu diingat bahwa gpt-3.5-turbo secara umum tidak memberikan perhatian yang terlalu besar pada pesan sistem seperti yang dilakukan oleh gpt-4. Oleh karena itu, untuk gpt-3.5-turbo disarankan agar instruksi penting ditempatkan dalam pesan dari pengguna.

Chats dalam Praktiknya

Mari kita lihat beberapa contoh lain dari panggilan API Chats untuk melihat bagaimana format Chats berfungsi dalam praktiknya.

  • Dalam beberapa kasus, lebih mudah untuk menunjukkan kepada model apa yang kita inginkan daripada memberi tahu model apa yang kita inginkan.
    Salah satu cara untuk menunjukkan kepada model apa yang kita inginkan adalah dengan contoh skenario pesan palsu:
<?php

$openaiApiKey = "YOUR_API_KEY";

$data = array(
  "model" => "gpt-3.5-turbo",
  "messages" => array(
array("role" => "system", "content" => "Kamu adalah asisten yang membantu dan mengikuti pola."),
    array("role" => "user", "content" => "Bantu aku menerjemahkan contoh kiasan berikut"),
    array("role" => "assistant", "content" => "Tentu, dengan senang hati!"),
    array("role" => "user", "content" => "Hatinya lembut seperti?"),
    array("role" => "assistant", "content" => "Kapas"),   
    array("role" => "user", "content" => "Pemikirannya keras seperti?"),
    array("role" => "assistant", "content" => "Batu"),     
    array("role" => "user", "content" => "Tindakannya kasar seperti?")
  ),
  "temperature" => 0.2,
  "max_tokens" => 512,
  "top_p" => 0.2,
  "frequency_penalty" => 0.0,
  "presence_penalty" => 0.6
);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.openai.com/v1/chat/completions",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode($data),
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer " . $openaiApiKey,
    "Content-Type: application/json"
  ),
));

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

curl_close($curl);

$result = json_decode($response, true);
$content = $result['choices'][0]['message']['content'];
echo $content;

?>

Tampilan hasil dari sintaks API request tersebut di browser akan terlihat seperti berikut.

Kerikil

  • Untuk menjelaskan bahwa pesan-pesan contoh yang diberikan bukanlah bagian dari percakapan nyata, dan tidak boleh digunakan kembali oleh model, kita dapat mencoba mengatur nama pada pesan system menjadi user_contoh dan assistant_contoh.
<?php

$openaiApiKey = "YOUR_API_KEY";

$data = array(
  "model" => "gpt-3.5-turbo",
  "messages" => array(
    array("role" => "system", "content" => "Kamu adalah asisten yang membantu dan mengikuti pola."),
    array("role" => "system", "name" => "user_contoh", "content" => "Bantu aku menerjemahkan contoh kiasan berikut"),
    array("role" => "system", "name" => "assistant_contoh", "content" => "Tentu, dengan senang hati!"),
    array("role" => "system", "name" => "user_contoh", "content" => "Hatinya lembut seperti?"),
    array("role" => "system", "name" => "assistant_contoh", "content" => "Kapas"),   
    array("role" => "system", "name" => "user_contoh", "content" => "Pemikirannya keras seperti?"),
    array("role" => "system", "name" => "assistant_contoh", "content" => "Batu"),     
    array("role" => "user", "content" => "Tindakannya kasar seperti?")     
  ),
  "temperature" => 0.2,
  "max_tokens" => 512,
  "top_p" => 0.2,
  "frequency_penalty" => 0.0,
  "presence_penalty" => 0.6
);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.openai.com/v1/chat/completions",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => json_encode($data),
  CURLOPT_HTTPHEADER => array(
    "Authorization: Bearer " . $openaiApiKey,
    "Content-Type: application/json"
  ),
));

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

curl_close($curl);

$result = json_decode($response, true);
$content = $result['choices'][0]['message']['content'];
echo $content;

?>

Tampilan hasil dari sintaks API request tersebut di browser akan terlihat seperti berikut.

Kerikil

Improvisasi lebih lanjut

Dalam contoh-contoh skrip statik tersebut, kita bisa melakukan pengembangan yang lebih lanjut dengan menambahkan field input. Field input ini akan digunakan untuk menerima pesan dari pengguna. Setelah itu, model akan menghasilkan jawaban yang akan ditampilkan sebagai output.

Lebih lanjut lagi, kita dapat mengembangkan model agar dapat menyimpan pertanyaan-pertanyaan yang telah diajukan oleh pengguna selama sesi berlangsung. Dengan demikian, kita bisa melanjutkan pembicaraan dan menanyakan hal-hal yang masih terkait dengan pertanyaan sebelumnya.

Di sini, saya telah membuat sebuah aplikasi PHP sederhana di dalam VM Cloud Raya. Aplikasi akan berfungsi sebagai Trip Advisor, yang memungkinkan pengguna untuk saling berinteraksi dalam meminta rekomendasi destinasi menarik di suatu lokasi, dan tolak pertanyaan apabila tidak berkaitan dengan destinasi wisata.

Kesimpulan

Melalui tutorial ini kami berharap Anda mendapatkan pemahaman yang baik tentang integrasi API OpenAI dengan jenis tugas Chats pada proyek website dengan bahasa pemrograman PHP di dalam VM Cloud Raya.

Dengan metode ini, kita dapat membangun chatbot interaktif dengan menggunakan API OpenAI.

Kunjungi halaman Knowledge Base Cloud Raya untuk tutorial menarik lainnya seputar aktifitas di dalam cloud computing. Atau, jika Anda lebih suka menyimak melalui video, silakan mengunjungi channel Youtube kami.

Table of Contents

Leave a Reply

Your email address will not be published. Required fields are marked *

Post comment

Ready, Set, Cloud

Ready, Set, Cloud