Skip to main content

🟢 Membangun ChatGPT dari GPT-3

Pendahuluan​

ChatGPT telah meledak dalam sebulan terakhir, mendapatkan sejuta pengguna hanya dalam seminggu. Hal yang mengejutkan bahwa model dasarnya, GPT-3 memiliki debut pada tahun 2020 dan dirilis untuk akses publik lebih dari setahun yang lalu!

Bagi mereka yang belum tahu, ChatGPT adalah model bahasa baru dari OpenAI yang telah ditingkatkan dari GPT-3 menjadi dioptimalkan untuk percakapan1. Ini memiliki antarmuka obrolan yang mudah digunakan, di mana Anda dapat memberikan input dan mendapatkan respons dari asisten AI. Cek di chat.openai.com.

Sementara versi awal GPT-3 tidak seadvanced seri GPT-3.5 saat ini, mereka tetap mengesankan. Model-model ini telah tersedia melalui API dan antarmuka web UI playground yang memungkinkan Anda menyetel beberapa hyperparameter konfigurasi dan menguji prompt. GPT-3 mendapatkan daya tarik yang besar, tetapi tidak se-viral ChatGPT.

Apa yang membuat ChatGPT begitu sukses, dibandingkan dengan GPT-3, adalah aksesibilitasnya sebagai asisten AI yang sederhana bagi orang biasa, tanpa memperdulikan pengetahuan mereka tentang ilmu data, model bahasa, atau AI.

Dalam artikel ini, saya memberikan gambaran tentang bagaimana chatbot seperti ChatGPT dapat diimplementasikan menggunakan model bahasa besar seperti GPT-3.

Motivasi​

Artikel ini ditulis sebagian karena sebuah tweet oleh Riley Goodside, mencatat bagaimana ChatGPT bisa diimplementasikan.

Seperti model-model lain dalam seri GPT-3.5, ChatGPT dilatih menggunakan RLHF, tetapi sebagian besar efektivitasnya berasal dari menggunakan sebuah petunjuk yang baik.

Prompt​

Tampilan bot obrolan Skippy dari header artikel

Prompting adalah proses menginstruksikan AI untuk melakukan sesuatu. Seperti yang mungkin telah Anda lihat dalam contoh ChatGPT online, Anda dapat mempromosikannya untuk melakukan hampir segala hal. Kasus penggunaan umum adalah merangkum teks, menulis konten berdasarkan deskripsi, atau menciptakan hal-hal seperti puisi, resep, dan banyak lagi.

ChatGPT adalah model bahasa dan antarmuka pengguna. Masukan prompt yang dimasukkan oleh pengguna ke antarmuka sebenarnya dimasukkan ke dalam prompt yang lebih besar yang berisi seluruh percakapan antara pengguna dan ChatGPT. Hal ini memungkinkan model bahasa yang mendasarinya untuk memahami konteks percakapan dan merespons dengan tepat.

Contoh penambahan prompt pengguna sebelum dikirim ke model

Model bahasa melengkapi prompt dengan mencari kata-kata apa yang datang berikutnya berdasarkan kemungkinan yang dipelajari selama pra-pelatihan2.

GPT-3 mampu 'belajar' dari instruksi sederhana atau beberapa contoh dalam prompt. Yang terakhir disebut few-shot, atau pembelajaran di dalam konteks3. Dalam permintaan chatbot di atas, saya membuat chatbot fiktif bernama Skippy, dan memberinya instruksi untuk memberikan respons kepada pengguna. GPT-3 mengikuti format bolak-balik, PENGGUNA: {user input} dan SKIPPY: {skippy response}. GPT-3 mengerti bahwa Skippy adalah chatbot dan pertukaran sebelumnya adalah percakapan, sehingga ketika kita memberikan input pengguna berikutnya, "Skippy" akan menjawab.

Memorisasi​

Pertukaran sebelumnya antara Skippy dan pengguna ditambahkan ke prompt berikutnya. Setiap kali kami memberikan lebih banyak input pengguna dan mendapatkan lebih banyak output chatbot, prompt akan memperluas untuk mencakup pertukaran baru ini. Inilah bagaimana chatbot seperti Skippy dan ChatGPT dapat mengingat input terdahulu. Namun, ada batas untuk seberapa banyak chatbot GPT-3 dapat mengingat.

Pesan dapat menjadi besar setelah beberapa pertukaran, terutama jika kita menggunakan chatbot untuk menghasilkan tanggapan panjang seperti kiriman blog. Prompt yang dikirim ke GPT-3 dikonversi menjadi token, yang merupakan kata-kata individu atau bagian dari mereka. Batas maksimal untuk 4097 token (sekitar 3000 kata) untuk gabungan permintaan dan respon yang dihasilkan untuk model GPT-3, termasuk ChatGPT.

Beberapa Contoh​

Ada banyak kasus penggunaan yang berbeda dari prompt chatbot yang menyimpan percakapan sebelumnya. ChatGPT dimaksudkan untuk menjadi asisten umum serba guna dan menurut pengalaman saya, jarang sekali meminta informasi tambahan.

Chatbot sebagai "terapis" yang menanyakan tentang hari Anda​

Bisa sangat membantu memiliki chatbot yang aktif bertanya dan mendapatkan umpan balik dari pengguna. Berikut adalah contoh pernyataan yang akan ditanyakan oleh chatbot terapi untuk membantu pengguna memikirkan hari mereka.

Pertanyaan chatbot terapi

Bicaralah dengan dirimu yang lebih muda menggunakan catatan jurnal lama​

Michelle Huang menggunakan GPT-3 untuk berbicara dengan dirinya yang lebih muda. Perintah menggunakan beberapa konteks, dalam hal ini catatan jurnal lama, dipasangkan dengan format interaksi seperti chatbot. GPT-3 mampu meniru kepribadian berdasarkan entri-entri ini.

Prompt dari Tweet:

Percakapan berikut adalah dengan Michelle saat ini (usia [redacted]) dan Michelle saat masih muda (usia 14 tahun).

Michelle muda telah menulis catatan jurnal berikut:
[entri diary di sini]

Michelle Saat Ini: [ketik pertanyaan Anda di sini]

Penulis mencatat bahwa entri diary dapat mencapai batas token. Dalam hal ini, Anda dapat memilih beberapa entri tertentu atau mencoba untuk merangkum beberapa entri.

Implementasi​

Saya akan melangkah melalui pemrograman bot obrolan sederhana yang didukung oleh GPT-3 dalam Python. Termasuk GPT-3 dalam aplikasi yang Anda bangun sangat mudah dengan menggunakan API OpenAI. Anda harus membuat akun di OpenAI dan mendapatkan API key. Cek dokumentasinya di sini.

Ringkasan tentang apa yang perlu kita lakukan:

  1. Mengubah masukan pengguna menjadi permintaan chatbot untuk GPT-3
  2. Dapatkan respons chatbot sebagai hasil lengkap dari GPT-3
  3. Perbarui prompt dengan masukan pengguna dan respon chatbot
  4. Loop/Iterasi/Perulangan

Ini adalah prompt yang akan saya gunakan. Kita dapat menggunakan python untuk menggantikan <conversation history> dan <user input> dengan nilai sebenarnya.

chatbot_prompt = """
Sebagai chatbot canggih, tujuan utama Anda adalah untuk membantu pengguna sebaik mungkin. Ini mungkin melibatkan menjawab pertanyaan, memberikan informasi yang berguna, atau menyelesaikan tugas berdasarkan masukan pengguna. Untuk dapat membantu pengguna dengan efektif, penting untuk memberikan tanggapan yang detail dan menyeluruh. Gunakan contoh dan bukti untuk mendukung poin Anda dan membenarkan rekomendasi atau solusi Anda.

<conversation history>

User: <user input>
Chatbot:"""

Saya mencatat baik masukan pengguna selanjutnya maupun percakapan sebelumnya. Masukan/keluaran baru antara chatbot dan pengguna ditambahkan setiap perulangan.

impot openai

openai.api_key = "YOUR API KEY HERE"
model_engine = "text-davinci-003"
chatbot_prompt = """
Sebagai chatbot canggih, tujuan utama Anda adalah membantu pengguna sebaik mungkin. Ini mungkin melibatkan menjawab pertanyaan, memberikan informasi yang berguna, atau menyelesaikan tugas berdasarkan masukan pengguna. Untuk dapat membantu pengguna dengan efektif, penting untuk menjelaskan dengan detail dan menyeluruh dalam tanggapan Anda. Gunakan contoh dan bukti untuk mendukung poin-poin Anda dan membenarkan rekomendasi atau solusi Anda.

<conversation history>

User: <user input>
Chatbot:"""


def get_response(conversation_history, user_input):
prompt = chatbot_prompt.replace(
"<conversation history>", conversation_history).replace("<user input>", user_input)

# Get the response from GPT-3
response = openai.Completion.create(
engine=model_engine, prompt=prompt, max_tokens=2048, n=1, stop=None, temperature=0.5)

# Extract the response from the response object
response_text = response["choices"][0]["text"]

chatbot_response = response_text.strip()

return chatbot_response


def main():
conversation_history = ""

while True:
user_input = input("> ")
if user_input == "exit":
break
chatbot_response = get_response(conversation_history, user_input)
print(f"Chatbot: {chatbot_response}")
conversation_history += f"User: {user_input}\nChatbot: {chatbot_response}\n"

main()
Berikut ini adalah tautan untuk kode program lengkap untuk chatbot yang sederhana.

Sekarang yang tersisa adalah membuat antarmuka yang bagus agar pengguna dapat berinteraksi!

Written by jayo78.


  1. OpenAI. (2022). ChatGPT: Optimizing Language Models for Dialogue. https://openai.com/blog/chatgpt/. https://openai.com/blog/chatgpt/ ↩
  2. Jurafsky, D., & Martin, J. H. (2009). Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics and Speech Recognition. Prentice Hall. ↩
  3. Brown, T. B., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., Neelakantan, A., Shyam, P., Sastry, G., Askell, A., Agarwal, S., Herbert-Voss, A., Krueger, G., Henighan, T., Child, R., Ramesh, A., Ziegler, D. M., Wu, J., Winter, C., … Amodei, D. (2020). Language Models are Few-Shot Learners. ↩