Konsep dan pertimbangan utama untuk membangun solusi AI generatif
Model bahasa besar (LLM) luar biasa, tetapi memiliki batasan. Sebagai pengembang, Anda perlu memahami batasan tersebut, apa yang mampu dilakukan LLM "out of the box", dan cara memodifikasinya untuk mendapatkan hasil terbaik untuk solusi AI generatif yang Anda bangun. Artikel ini mengidentifikasi beberapa tantangan dan faktor pembatasan LLM. Ini menjelaskan cara umum untuk mengatasi tantangan dan mengendalikan proses pembuatan konten terlepas dari jenis fitur AI generatif yang Anda bangun ke dalam aplikasi Anda.
Tantangan teknik saat bekerja dengan LLM
Daftar berikut ini merangkum tantangan atau batasan paling signifikan yang perlu diperhatikan saat Anda bekerja dengan LLM:
pemotongan pengetahuan: Karena tingginya biaya pelatihan LLM, cakupan pengetahuan LLM terbatas pada apa yang dilatih hingga waktu tertentu. Tanpa plug-in atau akomodasi lain, LLM tidak memiliki akses ke informasi real time, dan tidak dapat mengakses data pribadi.
Halusinasi: LLM menggunakan probabilitas statistik dan sedikit keacakan untuk menghasilkan informasi. Mekanisme diberlakukan untuk menjaga respons yang dihasilkan tetap selaras dengan niat manusia pada pertanyaan yang diajukan serta informasi yang menjadi dasar pelatihan LLM, tetapi masih mungkin bagi LLM untuk memberikan jawaban yang tidak akurat.
Transparansi: Juga karena cara sebuah LLM dilatih, ia tidak lagi memperoleh akses ke pengetahuan dasar yang digunakannya. Bahkan jika itu terjadi, tidak ada jaminan bahwa informasi itu jujur dan didasarkan pada kenyataan sejak awal. Selain itu, tidak ada langkah verifikasi untuk memastikan bahwa respons yang dihasilkan akurat.
Tidak ada pengetahuan khusus domain: Mirip dengan batas pengetahuan, jika Anda memiliki informasi privat seperti dokumen yang hanya untuk internal perusahaan, LLM tidak dilatih pada informasi ini. Ini tidak memiliki pengetahuan tentang data 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 Anda dapat melengkapi dari mana LLM mendapatkan datanya.
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): Model ini digunakan oleh LLM tradisional. Model ini menghasilkan respons hanya berdasarkan pengetahuan yang dilatihnya, tanpa mengakses atau mengambil informasi eksternal apa pun selama proses pembuatan. Pengetahuan model bersifat statis dan terbatas pada apa yang disertakan dalam data pelatihannya hingga tanggal batas. Selain penulisan kreatif, ia dapat menjawab pertanyaan tentang informasi yang tersedia 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. Kemudian menggunakan informasi untuk membentuk responsnya. Pendekatan ini memungkinkan model untuk memberikan informasi yang lebih akurat dan up-to-tanggal daripada yang disediakan dengan menggunakan pengetahuan yang telah dilatih sebelumnya saja. Kasus penggunaan termasuk pemeriksaan fakta, menjawab pertanyaan berdasarkan data real-time, atau menjawab pertanyaan berdasarkan data privat dan khusus domain.
Retrieval-centric generation (RCG): Memberikan penekanan lebih pada konten yang diambil secara eksternal, sering kali menyusun respons berdasarkan 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 hibrida antara metode berbasis pencarian 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 ROG yang baik adalah ChatGPT. Sebaliknya, Copilot (melalui Bing) memperluas LLM dengan menggunakan sumber eksternal dari sumber berita (dan dengan menyediakan tautan ke sumber tersebut).
Sekilas, RAG dan RCG tampak 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. Dalam sistem RAG, aspek generatif dari model bahasa tetap menjadi pusat respons. Data yang diambil bertindak sebagai elemen pendukung untuk meningkatkan akurasi atau kedalaman.
Sistem RCG menempatkan penekanan yang lebih kuat pada informasi yang diambil itu sendiri. Dalam sistem RCG, data yang diambil sering kali menjadi pusat dari respons, dan peran model generatif terutama adalah untuk memperbaiki, memformat, atau sedikit meningkatkan teks yang diambil tersebut. 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 penyimpanan vektorisasi dokumen dibandingkan dengan penyempurnaan LLM, yang merupakan dua pendekatan yang lazim untuk melengkapi pengetahuan yang tersedia bagi LLM berdasarkan pelatihan awalnya.
Memahami perbedaan antara model pengambilan dapat membantu Anda memilih pendekatan yang tepat untuk aplikasi tertentu. Ini membantu Anda menyeimbangkan kebutuhan akan sintesis kreatif versus akurasi dan keakuratan terhadap materi sumber.
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 penting saat Anda membangun fitur AI generatif di aplikasi Anda sendiri.
Ketika pengguna mengobrol dengan ChatGPT, desain antarmuka pengguna memberi Anda 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 disebut penyelesaian ) dikirim dengan setiap permintaan baru. Seiring percakapan berkembang, Anda mengirim semakin banyak teks ke LLM untuk diproses. Dengan setiap perintah baru, Anda mengirim semua perintah dan penyelesaian sebelumnya. ChatGPT menggunakan seluruh konteks sesi obrolan, dan bukan hanya perintah saat ini, saat menyusun respons terhadap permintaan Anda saat ini. Seluruh sesi obrolan disebut jendela konteks .
Jendela konteks memiliki batas panjang yang bervariasi menurut versi ChatGPT yang anda kerjakan. Bagian mana pun dari percakapan obrolan Anda yang melebihi batas panjang jendela konteks diabaikan saat ChatGPT 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. Ukuran jendela konteks memengaruhi latensi respons dan berapa biaya bagi OpenAI untuk memproses permintaan.
Apa itu batas jendela konteks ChatGPT? Artinya, 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.
Halaman tokenizer
Seperti catatan di bagian bawah halaman OpenAI Tokenizer menyatakan, dalam teks khas Inggris, satu token setara dengan sekitar empat karakter. 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 dapat Anda gunakan untuk memperkirakan secara terprogram berapa banyak token yang diperlukan untuk mengirim perintah tertentu 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, atau GPT-4) 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 1 juta token."
Model harga ini memiliki efek signifikan pada cara Anda merancang interaksi pengguna dan jumlah praproses dan pasca-pemrosesan yang Anda tambahkan.
Permintaan sistem vs. permintaan pengguna
Hingga saat ini, diskusi hanya berfokus pada permintaan pengguna . Permintaan pengguna adalah jenis permintaan yang membentuk pertukaran antara pengguna dan ChatGPT.
OpenAI memperkenalkan perintah sistem
Meskipun "membalas dalam bentuk haiku" bukanlah contoh yang berguna, hal itu menggambarkan gagasan bahwa Anda dapat memengaruhi bagaimana LLM menyelesaikan 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 dapat dijawabnya.
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 hanya dapat meningkatkannya dengan memperbaiki prompt, dan ada banyak teknik rekayasa prompt 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:
- Ubah permintaan pengguna secara terprogram.
- Menerapkan alur inferensi.
- Retrieval-Augmented Generation (dibahas di artikel lain).
- Penyempurnaan (dibahas di artikel lain).
Memodifikasi permintaan pengguna secara terprogram
Untuk menambahkan permintaan sistem ke percakapan pengguna, Anda tidak menggunakan API khusus. Anda hanya menambahkan instruksi ke prompt sesuai kebutuhan.
Tetapi Anda dapat menggunakan beberapa teknik untuk meningkatkan permintaan pengguna:
- Priming konteks: Mengembangkan prompt sistem yang secara eksplisit mengatur konteks percakapan dalam domain. Pendekatan ini melibatkan pemberian deskripsi singkat atau serangkaian instruksi di awal setiap interaksi. Instruksi membimbing AI untuk tetap berada dalam domain masalah.
- Panduan berbasis contoh: Dalam perintah awal, sertakan contoh jenis pertanyaan dan jawaban yang relevan dengan domain Anda. Pendekatan ini membantu AI memahami respons seperti apa yang diharapkan.
Anda dapat menggunakan teknik rekayasa prompt apa pun. Jika Anda dapat menyelesaikannya secara programatik, Anda dapat meningkatkan prompt pengguna atas nama mereka.
Peringatan untuk pendekatan ini adalah semakin lama permintaan, semakin tinggi biaya untuk setiap panggilan ke LLM. Meskipun demikian, pendekatan ini kemungkinan merupakan pendekatan paling murah yang dijelaskan artikel ini.
Menerapkan alur inferensi
Langkah selanjutnya selain memodifikasi permintaan pengguna secara terprogram adalah membuat seluruh alur inferensi.
Alur inferensi adalah proses end-to-end yang "membersihkan" input mentah (seperti teks atau gambar) sebelum menggunakannya untuk melakukan perintah utama Anda (praproses) atau memeriksa penyelesaian untuk memastikan bahwa itu memenuhi kebutuhan pengguna sebelum menampilkannya (pascaproses).
Pra-pemrosesan mungkin melibatkan pemeriksaan kata kunci, penilaian relevansi, atau transformasi kueri agar lebih sesuai dengan bahasa domain yang diharapkan. Misalnya, Anda dapat menganalisis permintaan awal yang dikirimkan pengguna. Mulailah dengan bertanya kepada LLM apakah prompt masuk akal, jika berada dalam batas-batas apa yang ingin Anda terima, jika didasarkan pada premis yang salah, atau jika perlu ditulis ulang untuk menghindari bias tertentu. Jika LLM menganalisis perintah dan menemukan masalah, Anda mungkin melangkah lebih jauh. Anda dapat meminta LLM untuk menulis ulang perintah untuk berpotensi meningkatkan jawabannya.
Postprocessing mungkin 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 sebenarnya memenuhi persyaratan yang Anda minta untuk dipatuhi. Jika tidak, Anda dapat meminta LLM untuk memodifikasi penyelesaian. Ulangi langkah-langkah ini hingga Anda memiliki hasil yang memuaskan.
Ada satu peringatan untuk menambahkan langkah-langkah pra-pemrosesan: setiap kali Anda menambahkan panggilan ke LLM dalam alur inferensi, 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 memengaruhi anggaran, performa, dan efektivitas sistem perangkat lunak.
Untuk informasi tentang langkah-langkah spesifik yang harus diambil untuk membangun alur inferensi, lihat Mengembangkan sistem generasi berbasis pengambilan tingkat lanjut.
Faktor lain yang memengaruhi penyelesaian
Selain memodifikasi perintah secara terprogram, membuat alur inferensi, dan teknik lainnya, detail selengkapnya dibahas dalam Menambah model bahasa besar dengan pembuatan yang ditambah pengambilan dan penyempurnaan. Selain itu, Anda dapat memodifikasi parameter saat melakukan panggilan ke Azure OpenAI API.
Untuk meninjau parameter yang diperlukan dan opsional untuk diteruskan yang dapat memengaruhi berbagai aspek penyelesaian, lihat dokumentasi titik akhir obrolan . Jika Anda menggunakan SDK, lihat dokumentasi SDK untuk bahasa yang Anda gunakan. Anda dapat bereksperimen dengan parameter di Playground.
Temperature
: Mengontrol keacakan output yang dihasilkan 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.Max Tokens
: Mengontrol panjang maksimum respons. Mengatur batas yang lebih tinggi atau lebih rendah dapat memengaruhi detail dan cakupan konten yang dihasilkan.Top P
(pengambilan sampel nukleus): Digunakan denganTemperature
untuk mengontrol keacakan respons.Top P
membatasi AI untuk mempertimbangkan hanya persentase atas massa probabilitas (P
) ketika menghasilkan setiap token. Nilai yang lebih rendah mengarah ke teks yang lebih fokus dan dapat diprediksi. Nilai yang lebih tinggi memungkinkan lebih banyak keragaman.Frequency Penalty
: Mengurangi kemungkinan model mengulangi baris atau frasa yang sama. Meningkatkan nilai ini membantu menghindari redundansi dalam teks yang dihasilkan.Presence Penalty
: Mendorong model untuk memperkenalkan konsep dan istilah baru dalam penyelesaian.Presence Penalty
berguna untuk menghasilkan output yang lebih beragam dan kreatif.Stop Sequences
: Anda dapat menentukan satu atau beberapa urutan untuk menginstruksikan API untuk berhenti menghasilkan lebih banyak token.Store Sequences
berguna untuk mengontrol struktur output, seperti mengakhiri penyelesaian di akhir kalimat atau paragraf.Logit Bias
: Memungkinkan Anda untuk memodifikasi kemungkinan token tertentu yang muncul dalam penyelesaian.Logit Bias
dapat digunakan untuk memandu penyelesaian ke arah tertentu atau untuk menekan konten tertentu.
Perlindungan Microsoft OpenAI
Selain menjaga respons LLM terikat pada subjek atau domain tertentu, Anda juga mungkin khawatir tentang jenis pertanyaan yang diajukan pengguna Anda terhadap LLM. Penting untuk mempertimbangkan jenis jawaban yang dihasilkannya.
Pertama, panggilan API ke Microsoft OpenAI Services secara otomatis memfilter konten yang mungkin menyinggung menurut API dan melaporkannya kembali kepada Anda dalam banyak kategori pemfilteran.
Anda dapat langsung menggunakan OpenAI Moderation API untuk memeriksa konten apa pun yang berpotensi berbahaya.
Kemudian, 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 untuk desain aplikasi
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 poin penting lainnya dari artikel ini yang mungkin 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, kami sarankan Anda melihat Mulai menggunakan obrolan dengan menggunakan sampel data Anda sendiri untuk Python. Tutorial ini juga tersedia di .NET, Java, dan JavaScript.