Konsep dan pertimbangan penting untuk pengembang yang membangun solusi AI generatif
Model Bahasa Besar (LLM) luar biasa, tetapi bahkan mereka memiliki batasan. Pengembang perlu memahami batasan tersebut, apa yang mampu dilakukan LLM "out of the box", dan cara mengubahnya untuk mendapatkan hasil terbaik untuk solusi AI generatif yang mereka bangun. Artikel ini mengidentifikasi beberapa tantangan dan faktor pembatasan, dan menjelaskan cara umum untuk mengatasi tantangan tersebut dan mengontrol proses pembuatan konten terlepas dari jenis fitur AI generatif apa yang Anda bangun ke dalam aplikasi Anda.
Tantangan teknik saat bekerja dengan LLM
Tantangan atau batasan paling signifikan yang harus diperhatikan saat bekerja dengan LLM:
Pemotongan pengetahuan - Karena tingginya biaya pelatihan LLM, tubuh pengetahuan mereka terbatas pada apa yang mereka latih pada titik waktu tertentu. Tanpa plug-in atau akomodasi lain, mereka tidak memiliki akses ke informasi real-time, mereka juga tidak memiliki akses ke data pribadi.
Halusinasi - LLM menggunakan probabilitas statistik dan sedikit keacakan untuk menghasilkan informasi. Ada mekanisme untuk menjaga respons yang dihasilkan selaras dengan niat manusia dalam pertanyaan yang diajukan dan informasi yang mereka latih, tetapi ada kemungkinan bahwa mereka membuat balasan yang tidak akurat.
Transparansi - Sekali lagi, karena cara model dilatih, model tidak lagi memiliki akses ke pengetahuan dasar tempat model dilatih. Dan bahkan jika mereka melakukannya, tidak ada jaminan bahwa informasi itu jujur dan membumi di tempat pertama. Selain itu, tidak ada langkah verifikasi untuk memastikan bahwa respons yang dihasilkan akurat.
Tidak ada pengetahuan khusus domain - Mirip dengan "pemutusan pengetahuan, jika Anda memiliki informasi privat seperti dokumen perusahaan internal saja, LLM tidak dilatih pada informasi ini dan oleh karena itu tidak memiliki pengetahuan khusus domain.
Apa yang dapat Anda lakukan untuk mengurangi kemungkinan tantangan atau masalah dengan LLM dan mendapatkan hasil terbaik untuk membantu pengguna dan organisasi Anda? Mulailah dengan memahami cara-cara di mana Anda dapat melengkapi dari mana LLM mendapatkan datanya.
Memahami di mana LLM mendapatkan informasi mereka
Titik awal yang baik untuk mendapatkan hasil terbaik dari LLM adalah memahami di mana atau bagaimana LLM mendapatkan informasi mereka. Kategori berikut mewakili pendekatan yang berbeda tentang bagaimana LLM berinteraksi dengan berbagai sumber informasi untuk menghasilkan respons.
Retrieval-Off Generation (ROG) - Ini adalah cara tradisional LLM beroperasi, di mana model menghasilkan respons hanya berdasarkan pengetahuan yang dilatih, tanpa mengakses atau mengambil informasi eksternal apa pun selama proses pembuatan. Pengetahuan model bersifat statis, terbatas pada apa yang disertakan dalam data pelatihannya hingga tanggal cutoff. Selain penulisan kreatif, dapat menjawab pertanyaan tentang informasi yang tersedia secara luas di internet.
Retrieval-Augmented Generation (RAG) - Menggabungkan kemampuan generatif LLM dengan kemampuan untuk mengambil informasi dari database atau dokumen eksternal secara real time. Model meminta sumber eksternal untuk menemukan informasi yang relevan, yang kemudian digunakan untuk menginformasikan responsnya. Pendekatan ini memungkinkan model untuk memberikan informasi yang lebih akurat dan terbaru daripada yang dapat dilakukan dari pengetahuan yang telah dilatih sebelumnya saja. Kasus penggunaan termasuk pemeriksaan fakta, menjawab pertanyaan berdasarkan data real-time atau data privat, khusus domain.
Retrieval-Centric Generation (RCG) - Menempatkan lebih banyak penekanan pada konten yang diambil secara eksternal, sering kali menyusun respons sekeliling informasi yang diambil dari sumber eksternal. Model mungkin secara langsung menggabungkan segmen besar teks yang diambil ke dalam outputnya, mengedit, atau menganotasinya agar sesuai dengan kueri pengguna. Pendekatan ini dapat dilihat sebagai hibrid antara metode berbasis pengambilan dan generatif, di mana keseimbangan mungkin sangat mendukung informasi yang diambil atas kemampuan generatif model sendiri. Kasus penggunaan mencakup ringkasan dokumen yang lebih panjang, bantuan penelitian untuk memberikan perbandingan dan eksplorasi tematik di beberapa dokumen serupa, dan kompilasi atau kolase sumber bahan yang berbeda menjadi output gabungan.
Contoh yang baik dari Retrieval-Off Generation (ROG) adalah ChatGPT. Sebaliknya, jika perlu, Copilot (melalui Bing) memperluas LLM dengan menggunakan sumber eksternal dari sumber berita (dan menyediakan tautan ke sumber tersebut).
Sekilas, Retrieval-Augmented Generation (RAG) dan Retrieval-Centric Generation (RCG) terdengar mirip karena keduanya melibatkan integrasi informasi eksternal ke dalam proses pembuatan bahasa. Namun, mereka berbeda dalam bagaimana mereka memprioritaskan dan menggunakan informasi yang diambil dalam proses pembuatan.
Dalam sistem RAG, pengambilan data eksternal digunakan untuk menambah kemampuan generatif dari model bahasa yang telah dilatih sebelumnya. Informasi yang diambil menyediakan lebih banyak konteks atau data tertentu yang digunakan model untuk menginformasikan responsnya. Di sini, aspek generatif dari model bahasa tetap menjadi pusat respons, sementara data yang diambil bertindak sebagai elemen pendukung untuk meningkatkan akurasi atau kedalaman.
Sistem RCG, di sisi lain, menempatkan penekanan yang lebih kuat pada informasi yang diambil itu sendiri. Dalam sistem ini, data yang diambil sering menjadi pusat respons, dengan peran model generatif terutama untuk menyempurnakan, memformat, atau sedikit meningkatkan teks yang diambil. Pendekatan ini digunakan terutama ketika akurasi dan relevansi langsung informasi sangat penting, dan sintesis atau ekstrapolasi yang kurang kreatif diperlukan.
Mekanisme untuk pengambilan data eksternal yang mendukung RAG dan RCG dibahas dalam artikel tentang menyimpan penyematan vektorisasi dokumen versus menyempurnakan LLM, dua pendekatan yang lazim untuk melengkapi pengetahuan yang tersedia untuk LLM berdasarkan pelatihan awalnya.
Memahami perbedaan antara model pengambilan dapat membantu dalam memilih pendekatan yang tepat untuk aplikasi tertentu, menyeimbangkan kebutuhan akan sintesis kreatif versus kebutuhan akan akurasi dan keakuratan terhadap materi sumber.
Memahami faktor-faktor yang memengaruhi cara kerja inferensi
Karena Anda mungkin terbiasa dengan antarmuka pengguna berbasis web ChatGPT, memahami cara kerjanya untuk menjawab pertanyaan dapat membantu Anda memahami konsep yang akan sangat penting saat membangun fitur AI generatif di aplikasi Anda sendiri.
Ketika pengguna mengobrol dengan ChatGPT, desain antarmuka pengguna memberikan ilusi sesi obrolan jangka panjang yang mempertahankan status selama beberapa pertukaran bolak-balik antara Anda dan LLM. Pada kenyataannya, untuk sesi obrolan tertentu, semua perintah dan semua respons LLM (juga dikenal sebagai penyelesaian) dikirim dengan setiap prompt baru. Jadi, seiring bertambahnya percakapan, Anda mengirim lebih banyak teks ke LLM untuk diproses – semua perintah dan penyelesaian sebelumnya. ChatGPT menggunakan seluruh konteks sesi obrolan – bukan hanya perintah saat ini – saat menyusun respons terhadap perintah Anda saat ini. Seluruh sesi obrolan disebut jendela konteks.
Ada batas panjang jendela konteks tergantung pada versi ChatGPT yang anda gunakan. Bagian mana pun dari percakapan obrolan Anda yang melebihi batas panjang jendela konteks akan diabaikan saat menyusun respons terhadap permintaan terbaru Anda.
Percakapan panjang mungkin tampak seperti ide yang baik pada awalnya, tetapi jendela konteks panjang dapat memengaruhi jumlah komputasi yang diperlukan untuk memproses permintaan dan menyusun penyelesaian. Ini memengaruhi latensi respons dan berapa biaya bagi OpenAI untuk memproses permintaan.
Apa itu batas jendela konteks ChatGPT? Atau lebih tepatnya, berapa banyak kata yang dapat digunakan ChatGPT? Batas jendela konteks tergantung pada model, versi, dan edisi LLM yang sedang Anda kerjakan. Selain itu, panjang konteks diukur dalam token, bukan dengan kata-kata. Token adalah unit teks terkecil yang dapat dipahami dan dihasilkan model. Unit-unit ini dapat berupa kata-kata, bagian kata (seperti suku kata atau batang), atau bahkan karakter individu. Token adalah inti dari pemrosesan bahasa alami (NLP).
Penggunaan token berdampak pada dua pertimbangan penting bagi pengembang:
- Batas jendela konteks maksimum
- Harga per permintaan dan penyelesaian
Apa itu tokenisasi?
"Tokenisasi" adalah proses konversi teks menjadi token. Ini adalah langkah penting dalam menyiapkan data untuk pelatihan atau inferensi (proses penyusunan penyelesaian berdasarkan perintah) dengan LLM. Proses ini melibatkan beberapa langkah, termasuk memecah teks kompleks menjadi potongan yang dapat dikelola (token), yang kemudian dapat diproses model. Proses ini bisa sederhana, seperti memisahkan teks menurut spasi dan tanda baca, atau yang lebih kompleks, melibatkan algoritma canggih untuk menangani berbagai bahasa, morfologi (struktur kata), dan sintaksis (susunan kata). Peneliti dan pengembang LLM memutuskan metode tokenisasi berdasarkan apa yang mereka coba capai. OpenAI memiliki halaman bermanfaat yang menjelaskan lebih lanjut tentang tokenisasi, dan bahkan memiliki kalkulator yang menggambarkan bagaimana kalimat atau paragraf diuraikan menjadi token.
Seperti catatan di bagian bawah halaman OpenAI Tokenizer menyatakan bahwa, dalam teks khas Inggris, satu token setara dengan sekitar empat karakter. Ini berarti bahwa rata-rata, 100 token kira-kira sama dengan 75 kata, atau tiga perempat kata per token.
Halaman OpenAI Tokenizer juga berbicara tentang tiktoken, paket untuk Python dan JavaScript yang memungkinkan Anda untuk secara terprogram memperkirakan berapa banyak token yang akan Anda gunakan untuk prompt tertentu yang dikirim ke OPENAI API.
Penggunaan token memengaruhi penagihan
Setiap Azure OpenAI API memiliki metodologi penagihan yang berbeda. Untuk memproses dan menghasilkan teks dengan API Penyelesaian Obrolan, Anda ditagih berdasarkan jumlah token yang Anda kirimkan sebagai perintah dan jumlah token yang dihasilkan sebagai hasil (penyelesaian).
Setiap model LLM (misalnya gpt-3.5, gpt-3.5-turbo, gpt-4, dll.) biasanya memiliki harga yang berbeda, yang mencerminkan jumlah komputasi yang diperlukan untuk memproses dan menghasilkan token. Sering kali, harga disajikan sebagai "harga per 1.000 token" atau "harga per satu juta token."
Model harga ini memiliki dampak signifikan pada cara Anda merancang interaksi pengguna, dan jumlah pra-dan pasca-pemrosesan yang Anda tambahkan.
Permintaan sistem versus pengguna
Hingga saat ini, diskusi hanya berfokus pada "permintaan pengguna" - perintah yang membentuk pertukaran antara pengguna dan ChatGPT.
OpenAI memperkenalkan "permintaan sistem" (juga dikenal sebagai "instruksi kustom"), yang merupakan serangkaian instruksi yang terlalu melengkung yang Anda tentukan dan ditambahkan ke semua percakapan obrolan Anda. Anggap saja sebagai serangkaian instruksi meta yang Anda inginkan agar LLM selalu mengamati setiap kali Anda memulai sesi obrolan baru. Misalnya, Anda dapat mengatur prompt sistem ke "selalu merespons dalam bentuk puitis haiku." Sejak saat itu, setiap permintaan baru ke ChatGPT menghasilkan haiku yang berisi jawabannya.
Meskipun "balas dalam bentuk haiku" bukan contoh yang berguna, itu menggambarkan gagasan bahwa Anda dapat memengaruhi penyelesaian LLM ke permintaan Anda dengan memodifikasi prompt itu sendiri.
Mengapa Anda ingin mengubah perintah pengguna? Jika Anda membangun fitur atau aplikasi AI generatif untuk audiens profesional, yang mungkin mencakup karyawan perusahaan, pelanggan, dan mitra, Anda pasti ingin menambahkan perlindungan untuk membatasi cakupan topik atau domain yang diizinkan untuk dijawab.
Tetapi memodifikasi permintaan pengguna hanyalah satu metode untuk meningkatkan pengalaman pembuatan teks bagi pengguna.
Metode untuk meningkatkan pengalaman pembuatan teks bagi pengguna Di ChatGPT
Untuk meningkatkan hasil pembuatan teks, pengembang terbatas pada sekadar meningkatkan prompt, dan ada banyak teknik rekayasa yang dapat membantu. Namun, jika Anda membangun aplikasi AI generatif Anda sendiri, ada beberapa cara untuk meningkatkan pengalaman pembuatan teks bagi pengguna, dan Anda mungkin ingin bereksperimen dengan menerapkan semuanya:
- Mengubah permintaan pengguna secara terprogram
- Menerapkan alur inferensi
- Retrieval-Augmented Generation (dibahas dalam artikel lain)
- Penyempurnaan (dibahas di artikel lain)
Memodifikasi permintaan pengguna secara terprogram
Dari perspektif terprogram, tidak ada API khusus untuk menambahkan permintaan sistem ke percakapan pengguna Anda. Anda hanya menambahkan instruksi ke prompt sesuai kebutuhan. Namun, ada beberapa teknik untuk meningkatkan permintaan pengguna:
- Priming Kontekstual: Permintaan sistem kerajinan yang secara eksplisit mengatur konteks percakapan dalam domain yang Anda inginkan. Ini melibatkan memberikan deskripsi singkat atau serangkaian instruksi di awal setiap interaksi, memandu AI untuk tetap berada dalam domain masalah.
- Panduan Berbasis Contoh: Sertakan contoh jenis pertanyaan dan jawaban yang relevan dengan domain Anda dalam perintah awal. Ini membantu AI memahami jenis respons yang diharapkan.
Selain itu, semua teknik prompt-engineering dapat diterapkan. Jika Anda dapat menyelesaikan ini secara terprogram dalam beberapa cara, maka Anda dapat meningkatkan permintaan pengguna atas nama mereka.
Peringatan untuk pendekatan ini adalah semakin lama prompt, semakin mahal setiap panggilan ke LLM. Meskipun demikian, ini kemungkinan yang paling murah dari pendekatan yang akan dibahas.
Menerapkan alur inferensi
Langkah selanjutnya selain memodifikasi permintaan pengguna secara terprogram adalah membuat seluruh alur inferensi.
Alur inferensi adalah proses end-to-end yang mengambil input mentah (seperti teks atau gambar) dan "membersihkannya" sebelum menggunakannya untuk melakukan perintah utama Anda (praproses) atau untuk memeriksa penyelesaian untuk memastikannya memenuhi kebutuhan pengguna sebelum menampilkannya kepada pengguna (pasca-pemrosesan).
Pra-pemrosesan dapat melibatkan pemeriksaan kata kunci, penilaian relevansi, atau mengubah kueri agar lebih sesuai dengan bahasa domain yang diharapkan. Misalnya, Anda dapat menganalisis permintaan awal yang dikirimkan oleh pengguna dan mulai dengan bertanya kepada LLM apakah permintaan masuk akal, jika berada dalam batas-batas apa yang ingin Anda terima, jika didasarkan pada lokal yang rusak, atau perlu ditulis ulang untuk menghindari bias tertentu. Jika LLM menganalisis perintah dan menemukan masalah, Anda mungkin melangkah lebih jauh: minta LLM untuk mengucapkan kembali perintah untuk berpotensi meningkatkan jawaban.
Pasca-pemrosesan dapat melibatkan validasi relevansi dan kepatutan jawaban ke domain. Ini mungkin termasuk menghapus atau menandai jawaban yang tidak sesuai dengan persyaratan domain. Misalnya, Anda mungkin ingin memeriksa penyelesaian yang disediakan oleh LLM untuk memastikan bahwa itu memenuhi persyaratan kualitas dan keamanan Anda. Anda dapat meminta LLM untuk mengevaluasi jawaban untuk melihat apakah itu, memang, memenuhi persyaratan yang Anda minta untuk dipatuhi. Jika tidak, Anda dapat meminta LLM untuk memodifikasi penyelesaian, dan mengulangi ini sampai Anda memiliki hasil yang memuaskan.
Ada satu peringatan untuk menambahkan langkah-langkah pra-pemrosesan: setiap kali Anda menambahkan panggilan ke LLM di alur inferensi Anda, Anda meningkatkan latensi keseluruhan (waktu untuk merespons) dan biaya setiap interaksi dengan pengguna. Sebagai pengembang perangkat lunak berpengalaman, Anda kemungkinan sudah mengetahui jenis trade-off ini yang harus dibuat oleh kepemimpinan yang memengaruhi anggaran, performa, dan efektivitas sistem perangkat lunak.
Artikel Membangun sistem Retrieval-Augmented Generation tingkat lanjut mendalami langkah-langkah spesifik dalam membangun alur inferensi.
Faktor lain yang berpengaruh pada penyelesaian
Selain memodifikasi perintah secara terprogram, membuat alur inferensi, dan teknik lainnya, detail lebih lanjut dibahas dalam Menambah Model Bahasa Besar dengan Pengambilan-Augmented Generation dan Fine-tuning. Selain itu, ada parameter yang dapat dimodifikasi saat melakukan panggilan ke Azure OpenAI API.
Dokumentasi Titik akhir obrolan mencantumkan parameter yang diperlukan dan opsional untuk diteruskan yang dapat memengaruhi berbagai aspek penyelesaian. Jika Anda menggunakan SDK sebagai gantinya, lihat dokumentasi SDK untuk bahasa pilihan Anda. Jika Anda ingin bereksperimen dengan parameter, Anda dapat melakukannya di Playground.
Suhu: Mengontrol keacakan output yang dihasilkan oleh model. Pada nol, model menjadi deterministik, secara konsisten memilih token berikutnya yang paling mungkin dari data pelatihannya. Pada suhu 1, model menyeimbangkan antara memilih token probabilitas tinggi dan memperkenalkan keacakan ke dalam output.
Token Maks: Mengontrol panjang maksimum respons. Mengatur batas yang lebih tinggi atau lebih rendah dapat memengaruhi detail dan cakupan konten yang dihasilkan.
P Teratas (Nucleus Sampling): Digunakan dengan suhu untuk mengontrol keacakan respons. P Teratas membatasi AI untuk mempertimbangkan hanya persentase P atas massa probabilitas saat menghasilkan setiap token. Nilai yang lebih rendah menyebabkan teks yang lebih terfokus dan dapat diprediksi, sementara nilai yang lebih tinggi memungkinkan lebih banyak keragaman.
Penalti Frekuensi: Mengurangi kemungkinan model mengulangi baris atau frasa yang sama. Meningkatkan nilai ini membantu menghindari redundansi dalam teks yang dihasilkan.
Penalti Kehadiran: Mendorong model untuk memperkenalkan konsep dan istilah baru dalam penyelesaian. Penalti Kehadiran berguna untuk menghasilkan output yang lebih beragam dan kreatif.
Hentikan Urutan: Anda dapat menentukan satu atau beberapa urutan untuk menginstruksikan API untuk berhenti menghasilkan token lebih lanjut. Urutan Penyimpanan berguna untuk mengontrol struktur output, seperti mengakhiri penyelesaian di akhir kalimat atau paragraf.
Bias Logit: Memungkinkan Anda untuk memodifikasi kemungkinan token tertentu yang muncul dalam penyelesaian. Bias Logit dapat digunakan untuk memandu penyelesaian ke arah tertentu atau untuk menekan konten yang tidak diinginkan.
Memahami Perlindungan Microsoft OpenAI
Selain menjaga respons LLM terikat pada subjek atau domain tertentu, Anda juga mungkin akan khawatir tentang jenis pertanyaan yang diajukan pengguna Anda tentang LLM. Penting untuk mempertimbangkan jenis jawaban yang dihasilkannya.
Pertama, panggilan API ke Microsoft OpenAI Services secara otomatis memfilter konten yang menurutnya berpotensi menyinggung dan melaporkannya kembali kepada Anda di banyak kategori pemfilteran.
Anda dapat menggunakan API Moderasi OpenAI secara langsung untuk memeriksa konten apa pun secara eksplisit untuk konten yang berpotensi berbahaya.
Kedua, Anda dapat menggunakan Azure AI Content Safety untuk membantu moderasi teks, moderasi gambar, deteksi risiko jailbreak, dan deteksi material yang dilindungi. Ini menggabungkan pengalaman penyiapan, konfigurasi, dan pelaporan portal dengan kode yang dapat Anda tambahkan ke aplikasi Anda untuk mengidentifikasi konten berbahaya.
Pertimbangan akhir yang mungkin memengaruhi keputusan desain aplikasi Anda
Memahami tokenisasi, harga, jendela konteks, dan menerapkan peningkatan terprogram untuk meningkatkan pengalaman pembuatan teks pengguna memengaruhi cara Anda merancang sistem AI generatif Anda. Berikut adalah daftar singkat hal-hal yang perlu dipertimbangkan dan pengamanan lainnya dari artikel ini yang memengaruhi keputusan desain aplikasi Anda:
- Mengevaluasi kebutuhan penggunaan model AI terbaru terhadap pertimbangan biaya. Model yang lebih murah mungkin cukup untuk kebutuhan aplikasi Anda, menyeimbangkan performa dengan batasan anggaran.
- Pertimbangkan untuk mengoptimalkan panjang jendela konteks untuk mengelola biaya tanpa memengaruhi pengalaman pengguna secara signifikan. Pemangkasan bagian percakapan yang tidak perlu dapat mengurangi biaya pemrosesan sambil mempertahankan interaksi berkualitas.
- Menilai bagaimana tokenisasi dan granularitas input dan output Anda memengaruhi performa. Memahami bagaimana LLM yang Anda pilih menangani tokenisasi dapat membantu Anda mengoptimalkan efisiensi panggilan API Anda, berpotensi mengurangi biaya dan meningkatkan waktu respons.
Jika Anda ingin mulai bereksperimen dengan segera membangun solusi AI generatif, sebaiknya lihat Memulai obrolan menggunakan sampel data Anda sendiri untuk Python. Ada versi tutorial yang juga tersedia di .NET, Java, dan JavaScript.