
Author(s): Pere Martra
Awalnya diterbitkan di Menuju AI.
Dalam artikel ini, kita akan melihat cara kerja OpenAI API dan cara menggunakan salah satu modelnya yang terkenal untuk membuat Chatbot kita sendiri.
Untuk membuat pengantar singkat ke dunia LLM ini, kita akan melihat cara membuat obrolan sederhana, menggunakan OpenAI API dan model gpt-3.5-turbo-nya.
Jadi, kami akan membuat ChatGPT kecil yang akan dilatih untuk bertindak sebagai chatbot untuk restoran cepat saji.
Pengenalan singkat tentang OpenAI API.
Sebelum mulai membuat chatbot, saya rasa menarik untuk menjelaskan beberapa poin:
Peran dalam percakapan dengan OpenAI. Bagaimana memori percakapan diawetkan?
Jika Anda memilih untuk mulai membuat chatbot, cukup pindah ke bagian: Membuat Chatbot dengan OpenAI dan GPT.
Peran dalam pesan OpenAI.
Salah satu fitur model bahasa yang kurang dikenal seperti GPT 3.5 adalah percakapan terjadi di antara beberapa peran. Kami dapat mengidentifikasi pengguna dan asisten, tetapi ada peran ketiga yang disebut sistem, yang memungkinkan kami untuk mengonfigurasi dengan lebih baik bagaimana seharusnya perilaku model.
Saat kami menggunakan alat seperti ChatGPT, kami selalu menganggap peran pengguna, tetapi API memungkinkan kami memilih Peran mana yang ingin kami kirim ke model, untuk setiap kalimat.
Untuk mengirim teks, yang berisi bagian dialog kita ke model, kita harus menggunakan fungsi ChatCompletion.create, yang menunjukkan, setidaknya, model yang akan digunakan dan daftar pesan.
Setiap pesan dalam daftar berisi peran dan teks yang ingin kami kirim ke model.
Berikut adalah contoh daftar pesan yang dapat dikirim menggunakan tiga peran yang tersedia.
pesan=[
{“role”: “system”, “content”: “You are an OrderBot in a fastfood restaurant.”},
{“role”: “user”, “content”: “I have only 10 dollars, what can I order?”},
{“role”: “assistant”, “content”: “We have the fast menu for 7 dollars.”},
{“role”: “user”, “content”: “Perfect! Give me one! “}
]
Mari kita lihat lebih dekat ketiga peran yang ada:
Sistem: Kita dapat memberi tahu model bagaimana kita menginginkannya berperilaku dan memberi tahu bagaimana kepribadian dan jenis responsnya seharusnya. Entah bagaimana, ini memungkinkan kita untuk mengonfigurasi operasi dasar model. OpenAI mengatakan bahwa peran ini akan menjadi lebih penting di model selanjutnya, meskipun sekarang peran ini relatif kecil di GPT 3.5. Pengguna: Ini adalah frasa yang berasal dari pengguna. Asisten: Ini adalah respons yang dikembalikan oleh model. Dengan API, kami dapat mengirimkan tanggapan yang mengatakan bahwa mereka berasal dari model, meskipun berasal dari tempat lain.
Memori dalam percakapan dengan OpenAI.
Jika kita terbiasa dengan ChatGPT, kita dapat melihat bahwa itu menyimpan memori percakapan. Artinya, ia mengingat konteksnya. Nah, ini karena memori dipertahankan oleh antarmuka, bukan modelnya. Dalam kasus kami, kami akan meneruskan daftar semua pesan yang dibuat, bersama dengan konteksnya, di setiap panggilan ke ChatCompletion.create.
Konteksnya adalah pesan pertama yang kami kirim ke model sebelum dapat berbicara dengan pengguna. Di dalamnya, kami akan menunjukkan bagaimana model harus berperilaku dan nada responsnya. Kami juga akan meneruskan data yang diperlukan untuk berhasil melakukan tugas yang telah kami tetapkan ke model.
Mari kita lihat sedikit konteks, dan bagaimana melakukan percakapan dengan OpenAI:
impor openai
#buat konteksnya
konteks =[
{‘role’:’system’, ‘content’:”””Actua como el camarero de un restaurante de comida rapida
pregunta al cliente que desea y ofrecele las cosas del menu.
En el menu hay:
Bocadillo fuet 6
Bocadillo jamon 7
Agua 2
“””}]
# Kami meneruskan konteks ke OpenAI dan mengumpulkan tanggapannya.
pesan = konteks
tanggapan = openai.ChatCompletion.create(
model=”gpt-3.5-turbo”,
pesan = pesan)
#tampilkan respons kepada pengguna dan minta masukan baru.
cetak(jawaban.pilihan[0].pesan[“content”])
#tambahkan respons ke kumpulan pesan
pesan.tambahkan(tanggapan)
#tambahkan baris pengguna kedua.
messages.append({‘role’:’user’, ‘content’:’a water please’})
#Kami memanggil model lagi dengan menambahkan dua baris.
tanggapan = openai.ChatCompletion.create(
model=”gpt-3.5-turbo”,
pesan = pesan)
Seperti yang Anda lihat, ini sederhana, ini tentang menambahkan baris percakapan ke konteks dan meneruskannya ke model setiap kali kita memanggilnya. Modelnya benar-benar tidak memiliki memori! Kita harus mengintegrasikan memori ke dalam kode kita.
Kode yang dapat dilihat di atas dibuat hanya sebagai contoh. Kita harus mengaturnya dengan lebih baik, jadi kita tidak perlu menulis kode setiap kali pengguna menambahkan frase baru.
Dengan penjelasan singkat ini, saya rasa kita sudah siap untuk mulai membuat chatbot pemesanan makanan cepat saji kita.
Membuat Chatbot dengan OpenAI dan GPT.
Hal pertama yang harus kami pertimbangkan adalah kami memerlukan akun pembayaran OpenAI untuk menggunakan layanan mereka dan kami harus melaporkan kartu kredit yang valid. Tapi jangan khawatir, saya telah banyak menggunakannya untuk pengembangan dan pengujian, dan saya dapat meyakinkan Anda bahwa biayanya dapat diabaikan.
Melakukan semua pengujian untuk artikel ini, menurut saya harganya €0,07. Kami hanya bisa terkejut jika kami mengunggah sesuatu ke produksi yang menjadi HIT. Meski begitu, kita bisa menetapkan batas konsumsi bulanan yang kita inginkan.
Hal pertama, seperti biasa, adalah mengetahui apakah kita telah menginstal pustaka yang diperlukan. Jika kami bekerja di Google Colab, saya rasa kami hanya perlu menginstal dua, OpenAI dan panel.
!pip install openai !pip install panel
Panel adalah pustaka dasar yang memungkinkan kita menampilkan bidang di notebook dan berinteraksi dengan pengguna. Jika kita ingin membuat aplikasi WEB, kita bisa menggunakan streamlit sebagai pengganti panel, kode untuk menggunakan OpenAI dan membuat chatbot akan sama.
Sekarang saatnya mengimpor pustaka yang diperlukan dan melaporkan nilai kunci yang baru saja kita peroleh dari OpenAI.
Tidak punya kunci? Anda bisa mendapatkannya di url ini: https://platform.openai.com/account/api-key
impor panel impor openai sebagai pn
#dapatkan kunci
dari mykeys mengimpor openai_api_key
openai.api_key=bukaai_api_key
Kunci saya disimpan dalam file tempat saya menyimpan kunci. Tetapi jika Anda suka, Anda dapat menginformasikannya langsung di notebook, atau menyimpan kunci dalam file, dengan ekstensi .py.
Bagaimanapun, pastikan tidak ada yang bisa mengetahui nilai Kunci; jika tidak, mereka dapat melakukan panggilan ke API OpenAI yang pada akhirnya akan Anda bayar.
Sekarang kita akan mendefinisikan dua fungsi, yang akan berisi logika untuk mempertahankan memori percakapan.
def continue_conversation(pesan, suhu=0): respons = openai.ChatCompletion.create( model=”gpt-3.5-turbo”, pesan=pesan, suhu=suhu, ) #print(str(respons.pilihan[0].pesan[“content”])) mengembalikan respons.pilihan[0].pesan[“content”]
Fungsi ini sangat sederhana, hanya membuat panggilan ke API OpeanAI yang memungkinkan Anda melakukan percakapan. Parameternya adalah: model yang ingin kita gunakan, dan bagian pesan dari percakapan. Ini mengembalikan kepada kita respons model.
Namun ada parameter ketiga yang belum pernah kita lihat sebelumnya: suhu. Ini adalah nilai numerik antara 0 dan 1, yang menunjukkan seberapa imajinatif model saat menghasilkan respons. Semakin kecil nilainya, respons model akan semakin tidak orisinal.
Seperti yang Anda ketahui, model pembangkitan bahasa tidak selalu memberikan jawaban yang sama untuk masukan yang sama. Semakin rendah nilai suhu, semakin mirip hasilnya untuk input yang sama, bahkan berulang dalam banyak kasus.
Saya pikir ada baiknya membuat tanda kurung untuk menjelaskan secara luas bagaimana parameter ini bekerja dalam model pembuatan bahasa. Model membangun kalimat dengan mencari tahu kata mana yang harus digunakan, memilihnya dari daftar kata yang memiliki persentase kemungkinan muncul.
Misalnya, untuk kalimat: My car is… model dapat mengembalikan daftar kata berikut:
Cepat — 45%
Merah — 32%
Tua — 20%
Kecil — 3%
Dengan nilai suhu 0, model akan selalu mengembalikan kata ‘Cepat’. Namun saat kita menaikkan nilai temperatur, kemungkinan untuk memilih kata lain dari daftar meningkat.
Kita harus berhati-hati, karena ini tidak hanya meningkatkan orisinalitas, tetapi juga sering meningkatkan “halusinasi” model.
def add_prompts_conversation(_): #Dapatkan nilai yang diperkenalkan oleh pengguna prompt = client_prompt.value_input client_prompt.value=””
#Tambahkan ke konteks permintaan Pengguna.
context.append({‘role’:’user’, ‘content’:f”{prompt}”})
#Dapatkan tanggapannya.
respon = lanjutkan_percakapan(konteks)
#Tambahkan respons ke konteks.
context.append({‘peran’:’asisten’, ‘konten’:f”{response}”})
#Undate panel untuk menampilkan percakapan.
panel.tambahkan(
pn.Row(‘User:’, pn.pane.Markdown(prompt, lebar=600)))
panel.tambahkan(
pn.Row(‘Asisten:’, pn.pane.Markdown(respons, lebar=600, gaya={‘warna latar belakang’: ‘#F6F6F6’})))
kembalikan pn.Kolom(*panel)
Fungsi ini bertanggung jawab untuk mengumpulkan masukan pengguna, memasukkannya ke dalam konteks atau percakapan, memanggil model, dan memasukkan tanggapannya ke dalam percakapan. Artinya, ia bertanggung jawab untuk mengelola memori! Ini sesederhana menambahkan frasa dengan format yang benar ke dalam daftar, di mana setiap kalimat dibentuk oleh peran dan frasa.
Sekarang saatnya untuk prompt!
Ini adalah model LLM. Kami tidak akan memprogram, kami akan mencoba membuatnya berperilaku seperti yang kami inginkan dengan memberikan beberapa instruksi. Pada saat yang sama, kita juga harus memberikan informasi yang cukup sehingga dia dapat melakukan tugasnya dengan baik.
konteks = [ {‘role’:’system’, ‘content’:”””
Act as an OrderBot, you work collecting orders in a delivery only fast food restaurant called
My Dear Frankfurt.
First welcome the customer, in a very friedly way, then collects the order.
You wait to collect the entire order, beverages included
then summarize it and check for a final
time if everithing is ok or the customer wants to add anything else.
Finally you collect the payment.
Make sure to clarify all options, extras and sizes to uniquely
identify the item from the menu.
You respond in a short, very friendly style.
The menu includes
burguer 12.95, 10.00, 7.00
frankfurt 10.95, 9.25, 6.50
sandwich 11.95, 9.75, 6.75
fries 4.50, 3.50
salad 7.25
Toppings:
extra cheese 2.00,
mushrooms 1.50
martra sausage 3.00
canadian bacon 3.50
romesco sauce 1.50
peppers 1.00
Drinks:
coke 3.00, 2.00, 1.00
sprite 3.00, 2.00, 1.00
vichy catalan 5.00
“””} ]
Prompt, atau konteks, dibagi menjadi dua bagian.
Yang pertama, kami menunjukkan bagaimana dia harus bersikap dan apa tujuannya. Instruksinya adalah dia harus bertindak seperti bot di restoran cepat saji, dan tujuannya adalah untuk mengetahui apa yang ingin dimakan pelanggan. Di prompt bagian kedua, kami memberikan komposisi menu restoran. Sebuah elemen dapat memiliki lebih dari satu harga, kami tidak menunjukkan apa yang sesuai dengan harga yang berbeda ini. Anda akan melihat dalam percakapan bahwa model, tanpa informasi lebih lanjut, mengetahui bahwa masing-masing sesuai dengan ukuran pelat yang berbeda.
Akhirnya, kami menggunakan panel untuk mendapatkan prompt input pengguna dan menjalankan model!
pn.ekstensi()
panel = []
client_prompt = pn.widgets.TextInput(value=”Hi”, placeholder=’Masukkan teks di sini…’)
button_conversation = pn.widgets.Button(nama=”bicara”)
interactive_conversation = pn.bind(add_prompts_conversation, button_conversation)
dasbor = pn.Kolom(
client_prompt,
pn.Row(button_conversation),
pn.panel(interactive_conversation, loading_indicator=Benar, tinggi=300),
)
dasbor
Dengan ini, kita sudah memiliki segalanya. Saya meninggalkan Anda hasil dari salah satu percakapan yang diadakan.
Sebagai rasa ingin tahu, saya ingin menunjukkan bahwa meskipun konteksnya ditulis dalam bahasa Inggris dan kalimat pertama yang dikatakan model kepada kita adalah dalam bahasa Inggris, jika kita menggunakan bahasa Spanyol, itu akan mengubah bahasa percakapan. Bahkan menerjemahkan hidangan di menu.
Apa berikutnya?
Pertama, Anda memiliki notebook yang tersedia di GitHub: https://github.com/peremartra/small_isolated_notebooks/blob/main/Vertical%20Chat.ipynb
Ini dapat disesuaikan dengan banyak bisnis. Ada seribu kemungkinan untuk ekspansi. Mungkin salah satu peningkatan terpenting adalah meminta model yang, di akhir percakapan, membuat JSON atau XML dengan data pesanan, sehingga kami dapat mengirimkannya ke sistem pesanan.
Chatbot telah dibuat, dipengaruhi 95% oleh kursus Prompt Engineering for Developers dari DeepLearning.ai. Karena saya adalah seorang mentor dalam spesialisasi Teknik Lanjutan TensorFlow, saya memiliki kesempatan untuk melihat bagaimana kursus dibuat dari awal, dan saya dapat meyakinkan Anda bahwa jika Anda mengikutinya, waktu akan diinvestasikan dengan baik.
Saya menulis tentang TensorFlow dan pembelajaran mesin secara teratur. Pertimbangkan untuk mengikuti saya di Medium untuk mendapatkan pembaruan tentang artikel baru. Dan, tentu saja, Anda dipersilakan untuk terhubung dengan saya di LinkedIn.
Seri saya tentang Tensorflow:
Pir Martra
TensorFlow melampaui dasar-dasarnya
Lihat daftar 3 cerita
Tutorial tentang AI Generatif menggunakan GANS:
Pir Martra
GAN Dari Nol Menjadi Pahlawan
Lihat daftar4 cerita
Diterbitkan melalui Menuju AI