Engineering prompt yang praktis untuk LLM yang lebih kecil

Maud Nalpas
Maud Nalpas

Efektivitas model bahasa besar sangat bergantung pada instruksi yang kita berikan. Prompt Engineering adalah proses pembuatan pertanyaan sedemikian rupa agar mendapatkan hasil terbaik dari LLM. Ini adalah langkah penting dalam menerapkan fitur berbasis LLM.

Prompt Engineering adalah proses iteratif. Jika Anda telah bereksperimen dengan LLM yang berbeda, Anda mungkin menyadari bahwa Anda perlu menyesuaikan prompt 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 memberikan hasil yang memuaskan dengan upaya prompt yang minimal. Namun, saat bekerja dengan LLM {i>default<i} yang lebih kecil yang tidak disesuaikan, Anda beradaptasi dengan pendekatan Anda.

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

Apa yang kami maksud dengan "LLM yang lebih kecil"?

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

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

Di mana LLM yang lebih kecil digunakan?

  • AI generatif di perangkat/dalam 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 pada perangkat pengguna hanya dapat dilakukan dengan LLM yang lebih kecil ini agar download web tetap wajar dan sesuai memori perangkat dan batasan GPU/CPU.
  • AI generatif sisi server kustom. Model kelas terbuka yang kecil seperti Gemma 2B, Gemma 7B atau Gemma 27B tersedia untuk Anda jalankan di server Anda sendiri (dan jika perlu, melakukan fine tune).

Mulai

Antarmuka chat yang didukung oleh LLM besar, seperti Gemini atau ChatGPT, sering kali dapat memberikan hasil yang memuaskan dengan upaya prompt yang minimal. Namun, saat bekerja dengan LLM yang lebih kecil, Anda perlu menyesuaikan pendekatan Anda. LLM yang lebih kecil kurang kuat dan memiliki kumpulan informasi yang lebih kecil untuk diambil.

Memberikan konteks dan petunjuk format yang tepat

Untuk mencapai hasil optimal dengan LLM kecil, buat perintah yang lebih detail 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 (tinjauan) Output (rating)
  LLM yang lebih besar (Gemini 1.5) LLM yang lebih kecil (Gemma 2B)
Kami sangat menyukainya! Mendistribusikan berat dengan baik dan secara mengejutkan nyaman bahkan pada trek sepanjang hari. Akan merekomendasikan. 5 4 dari 5 bintang**
Talinya rapuh, dan mulai membebani bahuku karena beban yang berat. 1 5/2

Sementara Gemini 1.5 memberikan {i>output<i} yang diinginkan dengan perintah sederhana ini, outputnya tidak memuaskan:

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

Untuk memperbaikinya, kita perlu menggunakan teknik rekayasa perintah, One-, few-, dan multi-shot prompting dan chain-of-Idet prompting. Kita juga harus memberikan instruksi format yang jelas dan bersikeras bahwa model harus menggunakan berbagai peringkat.

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 (tinjauan) Output dengan LLM yang lebih kecil (Gemma 2B)

Kami sangat menyukainya! Mendistribusikan bobot dengan baik dan secara mengejutkan nyaman bahkan saat melakukan perjalanan sepanjang hari. Akan merekomendasikan.

Analisis: Ulasan ini sangat positif dan menekankan kesesuaian dan kenyamanan, yang menunjukkan kepuasan yang luar biasa terhadap produk. Ini mendukung pemberian rating yang tinggi.

Rating (bilangan bulat): 5

Talinya rapuh, dan mulai mendalami bahu saya dengan beban berat.

**Analisis:** Ulasan menyoroti masalah kenyamanan yang signifikan dengan talinya. Ini juga mengindikasikan bahwa produk tersebut mungkin tidak cocok untuk produk yang berat dalam waktu lama atau dalam waktu lama.

**Rating:** 1 (terburuk)

Prompt kami yang lebih rumit, digabungkan dengan teknik few-shot prompting dan chain-of-thinkt prompting, memberikan rating yang lebih akurat.

Mengharapkan penguraian output manual

Meskipun Anda harus selalu membersihkan dan menafsirkan output LLM secara manual, ini terutama berlaku untuk LLM yang lebih kecil yang mungkin memberikan hasil yang kurang rapi dan mungkin memerlukan {i>chain-of-thinking prompting<i}.

Pada contoh pertama, kita menggunakan {i> chain-of-thinkt prompting<i}, sehingga {i>output-<i}nya termasuk analisis dan rating, dan kita perlu mengurai rating secara manual. Selain itu, perhatikan pemformatan 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 entri mengarah ke LLM yang lebih besar, menawarkan fitur prompt yang praktis. Misalnya, Gemini 1.5 Pro menawarkan petunjuk sistem dan Mode JSON.

Saat ini, fitur tersebut tidak selalu tersedia untuk penggunaan model kustom, atau untuk LLM 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 menjadi lebih ramping.

Batas token pikiran

Karena perintah Anda untuk LLM yang lebih kecil perlu disertai contoh atau detail petunjuk, proses itu mungkin akan lebih lama dan mengambil lebih banyak token input terbatas, jika ada.

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

Menggunakan fungsi jumlah token agar tidak mencapai batas.

Menyesuaikan estimasi waktu

Perhitungkan perancangan dan pengujian prompt dalam perkiraan waktu engineering Anda.

Karena perbedaan API dan batas token, Anda mungkin akan memerlukan lebih banyak waktu dan tenaga untuk membuat prompt untuk LLM yang lebih kecil daripada yang lebih besar. Menguji dan memvalidasi output LLM mungkin juga membutuhkan upaya yang lebih besar.

Prompt engineer versus fine tuning?

Untuk developer web, Prompt Engineering adalah cara yang kami sukai dalam memanfaatkan AI generatif melalui pelatihan dan penyesuaian kustom. Namun, bahkan Prompt Engineering yang canggih mungkin tidak cukup dalam beberapa kasus penggunaan, terutama jika Anda menggunakan LLM yang lebih kecil.

Gunakan fine-tuning saat:

  • Anda memerlukan akurasi dan performa terbaik untuk tugas tertentu. Halus tuning tersebut secara langsung akan menyesuaikan parameter internal model untuk mendapatkan hasil yang optimal.
  • Anda memiliki data yang dikurasi dengan baik, relevan dengan tugas Anda, sudah diberi label output yang diinginkan. Anda memerlukan data ini untuk fine-tuning yang efektif.
  • Anda menggunakan model untuk tujuan yang sama berulang kali. Fine tuning bisa dilakukan sekali, dan digunakan kembali untuk tugas tertentu.