Engineering prompt yang praktis untuk LLM yang lebih kecil

Maud Nalpas
Maud Nalpas

Efektivitas model bahasa besar sangat bergantung pada petunjuk yang kita berikan. Rekayasa perintah adalah proses menyusun pertanyaan dengan cara yang mendapatkan output terbaik dari LLM. Ini adalah langkah penting dalam menerapkan fitur berbasis LLM.

Rekayasa perintah adalah proses iteratif. Jika telah bereksperimen dengan LLM yang berbeda, Anda mungkin telah memperhatikan bahwa Anda perlu menyesuaikan perintah untuk mencapai hasil yang lebih baik.

Hal ini juga berlaku untuk model dengan berbagai ukuran.

Antarmuka chat yang didukung oleh LLM besar, seperti Gemini atau ChatGPT, sering kali dapat menghasilkan hasil yang memuaskan dengan sedikit upaya perintah. Namun, saat menggunakan LLM default yang lebih kecil dan tidak disesuaikan, Anda perlu menyesuaikan pendekatan Anda.

LLM yang lebih kecil kurang canggih dan memiliki kumpulan informasi yang lebih kecil untuk diambil.

Apa yang dimaksud dengan "LLM yang lebih kecil"?

Menentukan ukuran LLM itu rumit, dan ukuran tersebut tidak selalu diungkapkan oleh pembuatnya.

Dalam dokumen ini, "LLM yang lebih kecil" berarti model apa pun dengan parameter di bawah 30 miliar. Mulai hari ini, model dengan beberapa juta hingga beberapa miliar parameter dapat dijalankan secara realistis di browser, pada perangkat kelas konsumen.

Di mana LLM yang lebih kecil digunakan?

  • AI generatif di perangkat/di browser, misalnya jika Anda menggunakan Gemma 2B dengan LLM Inference API MediaPipe (bahkan cocok untuk perangkat khusus CPU) atau DistilBert di browser dengan Transformers.js. Mendownload model dan menjalankan inferensi di perangkat pengguna hanya dapat dilakukan dengan LLM yang lebih kecil ini, agar download web tetap wajar dan sesuai dengan batasan memori dan GPU/CPU perangkat.
  • AI generatif sisi server kustom. Model open-weight kecil seperti Gemma 2B, Gemma 7B, atau Gemma 27B tersedia untuk Anda jalankan di server Anda sendiri (dan dapat disesuaikan secara opsional).

Mulai

Antarmuka chat yang didukung oleh LLM besar, seperti Gemini atau ChatGPT, sering kali dapat menghasilkan hasil yang memuaskan dengan sedikit upaya perintah. Namun, saat menggunakan LLM yang lebih kecil, Anda perlu menyesuaikan pendekatan. LLM yang lebih kecil kurang canggih dan memiliki kumpulan informasi yang lebih kecil untuk diambil.

Memberikan konteks dan petunjuk format yang tepat

Untuk mencapai hasil yang optimal dengan LLM kecil, buat perintah yang lebih mendetail dan spesifik.

Contoh:

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
Input (peninjauan) Output (rating)
  LLM yang lebih besar (Gemini 1.5) LLM yang lebih kecil (Gemma 2B)
Sangat menyukai kesesuaiannya. Mendistribusikan berat dengan baik dan sangat nyaman bahkan saat melakukan perjalanan sehari penuh. Akan merekomendasikan. 5 4 dari 5 bintang**
Talinya tipis, dan mulai menusuk bahu saya saat membawa beban berat. 1 2/5

Meskipun Gemini 1.5 memberikan output yang diinginkan dengan perintah sederhana ini, output Gemma tidak memuaskan:

  • Formatnya salah. Kami meminta bilangan bulat untuk rating.
  • Rating tersebut sepertinya tidak terlalu akurat. Ulasan pertama cukup antusias untuk menunjukkan ulasan 5 bintang.

Untuk memperbaikinya, kita perlu menggunakan teknik rekayasa perintah, Perintah satu, beberapa, dan multi-shot serta perintah rantai pemikiran. Kita juga harus memberikan petunjuk format yang jelas dan menuntut agar model harus menggunakan rentang rating lengkap.

Contoh:

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`
;
Input (peninjauan) Output dengan LLM yang lebih kecil (Gemma 2B)

Sangat menyukai kesesuaiannya. Mendistribusikan berat dengan baik dan ternyata nyaman bahkan saat melakukan perjalanan sehari penuh. Akan merekomendasikan.

Analisis: Ulasan ini sangat positif dan menekankan kecocokan dan kenyamanan produk, yang menunjukkan kepuasan besar terhadap produk. Hal ini membenarkan rating yang tinggi.

Rating (bilangan bulat): 5

Talinya tipis, dan mulai menusuk bahu saya saat membawa beban berat.

**Analisis:** Ulasan menyoroti masalah kenyamanan yang signifikan pada tali. Hal ini juga menunjukkan bahwa produk mungkin tidak cocok untuk beban berat atau perjalanan yang lama.

**Rating:** 1 (terburuk)

Perintah kami yang lebih mendetail, yang dikombinasikan dengan teknik perintah dengan sedikit contoh dan teknik perintah rantai pemikiran, memberikan rating yang lebih akurat.

Mengharapkan penguraian output manual

Meskipun Anda harus selalu membersihkan dan menafsirkan output LLM secara manual, hal ini terutama berlaku untuk LLM yang lebih kecil yang mungkin menghasilkan hasil yang kurang rapi dan mungkin memerlukan perintah rantai pemikiran.

Pada contoh pertama, kita menggunakan perintah rantai pemikiran, sehingga outputnya mencakup analisis dan rating, dan kita perlu mengurai rating secara manual. Perhatikan juga format yang tidak konsisten dalam output di bagian sebelumnya: model terkadang menghasilkan markdown, tetapi tidak setiap saat.

// Use try/catch to catch (parsing) errors
try {
 
// Parse the output for a rating
 
const int = /[1-5]/;
 
const ratingAsString = llmOutput.match(int)[0];
 
// Parse as int
 
const ratingAsInt = parseInt(ratingAsString);
 
// `checkRating` checks the rating is a number between 1 and 5, since the
 
// regEx may catch a number like "100"
 
const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console
.error('Error', e);
}

Perbedaan Mind API

API cloud LLM seperti Gemini API atau OpenAI, yang biasanya merupakan titik entri ke LLM yang lebih besar, menawarkan fitur perintah yang praktis. Misalnya, Gemini 1.5 Pro menawarkan petunjuk sistem dan mode JSON.

Saat ini, fitur ini tidak selalu tersedia untuk penggunaan model kustom, atau untuk LLM yang lebih kecil yang diakses menggunakan API AI dalam browser, seperti MediaPipe LLM Inference API atau Transformers.js. Meskipun ini bukan batasan teknis, API AI dalam browser cenderung lebih ramping.

Perhatikan batas token

Karena perintah Anda untuk LLM yang lebih kecil harus menyertakan contoh atau petunjuk yang lebih mendetail, perintah tersebut kemungkinan akan lebih panjang dan menghabiskan lebih banyak batas token input, jika ada.

Selain itu, model yang lebih kecil cenderung memiliki batas token input yang lebih kecil. Misalnya, Gemini 1.5 Pro memiliki batas token input 1 juta, sedangkan model Gemma memiliki jendela konteks 8K.

Gunakan fungsi jumlah token agar tidak mencapai batas.

Menyesuaikan perkiraan waktu

Perhitungkan desain dan pengujian prompt dalam estimasi waktu engineering Anda.

Karena perbedaan API dan batas token, Anda mungkin memerlukan lebih banyak waktu dan upaya untuk membuat perintah untuk LLM yang lebih kecil daripada yang lebih besar. Pengujian dan validasi output LLM mungkin juga memerlukan upaya yang lebih tinggi.

Engineer perintah versus penyesuaian?

Untuk developer web, rekayasa perintah adalah cara yang kami pilih untuk memanfaatkan AI generatif dibandingkan pelatihan kustom dan penyesuaian. Namun, bahkan rekayasa perintah lanjutan mungkin tidak memadai dalam beberapa kasus penggunaan, terutama jika Anda menggunakan LLM yang lebih kecil.

Gunakan penyesuaian saat:

  • Anda memerlukan akurasi dan performa terbaik untuk tugas tertentu. Penyesuaian halus secara langsung menyesuaikan parameter internal model untuk hasil yang optimal.
  • Anda memiliki data yang diseleksi dengan baik, relevan dengan tugas Anda, dan sudah diberi label dengan output yang diinginkan. Anda memerlukan data ini untuk melakukan penyesuaian yang efektif.
  • Anda menggunakan model untuk tujuan yang sama berulang kali. Penyesuaian dapat dilakukan sekali, dan digunakan kembali untuk tugas tertentu.