Engineering prompt yang praktis untuk LLM yang lebih kecil

Maud Nalpas
Maud Nalpas

Efektivitas model bahasa besar sangat bergantung pada petunjuk yang kami berikan. Prompt Engineering adalah proses penyusunan pertanyaan sedemikian rupa sehingga mendapatkan output terbaik dari LLM. Ini adalah langkah penting dalam menerapkan fitur berbasis LLM.

Prompt Engineering adalah proses iteratif. Jika telah bereksperimen dengan berbagai LLM, Anda mungkin memperhatikan bahwa 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 memberikan hasil yang memuaskan tanpa memerlukan banyak prompting. Namun, saat menggunakan LLM default yang lebih kecil dan tidak disesuaikan, Anda perlu menyesuaikan pendekatan Anda.

LLM yang lebih kecil tidak terlalu canggih dan memiliki kumpulan informasi yang lebih kecil untuk digunakan.

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

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

Dalam dokumen ini, "LLM yang lebih kecil" berarti semua model dengan parameter 30 miliar. Mulai saat ini, model dengan beberapa juta hingga beberapa miliar parameter dapat dijalankan secara realistis di browser, di perangkat tingkat 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, untuk menjaga download web tetap wajar dan sesuai dengan batasan memori dan GPU/CPU perangkat.
  • AI generatif kustom sisi server. Model kecil yang terbuka seperti Gemma 2B, Gemma 7B, atau Gemma 27B tersedia untuk dijalankan di server Anda sendiri (dan menyesuaikan secara opsional).

Mulai

Antarmuka Chat yang didukung oleh LLM besar, seperti Gemini atau ChatGPT, sering kali dapat memberikan hasil yang memuaskan tanpa memerlukan banyak perintah. Namun, saat bekerja dengan LLM yang lebih kecil, Anda perlu menyesuaikan pendekatan Anda. LLM yang lebih kecil tidak terlalu canggih dan memiliki kumpulan informasi yang lebih kecil untuk digunakan.

Berikan konteks dan petunjuk format yang tepat

Untuk mencapai hasil 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 (ulasan) Output (rating)
  LLM yang lebih besar (Gemini 1.5) LLM yang lebih kecil (Gemma 2B)
Kami sangat menyukainya! Mendistribusikan berat dengan baik dan sangat nyaman bahkan pada trek sepanjang hari. Akan merekomendasikan. 5 4 dari 5 bintang**
Talinya rapuh, dan mulai menembus bahu saya di bawah beban yang berat. 1 5/2

Meskipun Gemini 1.5 menyediakan output yang diinginkan dengan prompt sederhana ini, output Gemma tidak memuaskan:

  • Formatnya salah. Kami meminta bilangan bulat untuk rating.
  • Ratingnya sepertinya tidak cukup akurat. Ulasan pertama cukup antusias untuk mendapatkan ulasan bintang 5.

Untuk memperbaikinya, kita perlu menggunakan teknik prompt engineering, One-shot prompting, serta chain-of-thought prompting. Kita juga harus memberikan petunjuk format yang jelas dan bersikeras bahwa 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 (ulasan) Output dengan LLM yang lebih kecil (Gemma 2B)

Kami sangat menyukainya! Mendistribusikan berat dengan baik dan sangat nyaman, bahkan untuk trek sepanjang hari. Akan merekomendasikan.

Analisis: Ulasan ini sangat positif dan menekankan kesesuaian dan kenyamanan produk, yang menunjukkan kepuasan tinggi dengan produk tersebut. Hal ini menunjukkan rating yang tinggi.

Rating (bilangan bulat): 5

Talinya tipis, dan mulai mengganggu bahu saya dengan beban yang berat.

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

**Peringkat:** 1 (terburuk)

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

Akan terjadi penguraian output manual

Meskipun Anda harus selalu membersihkan dan menafsirkan output LLM secara manual, hal ini sangat berlaku untuk LLM yang lebih kecil yang mungkin memberikan hasil yang kurang rapi dan mungkin memerlukan prompting dari rantai pikiran.

Pada contoh pertama, kita menggunakan prompting berantai, sehingga output menyertakan analisis dan rating serta kita perlu mengurai rating secara manual. Perhatikan juga pemformatan yang tidak konsisten dalam outputnya 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 masuk 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 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.

Batas token pikiran

Karena perintah untuk LLM yang lebih kecil perlu menyertakan contoh atau petunjuk yang lebih mendetail, permintaan tersebut mungkin akan lebih lama 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.

Sesuaikan estimasi waktu Anda

Perhitungkan desain dan pengujian prompt dalam perkiraan waktu engineering.

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

Engineer perintah versus fine tuning?

Bagi developer web, prompt engineering adalah cara yang kami sukai untuk memanfaatkan AI generatif dibandingkan pelatihan dan penyesuaian kustom. Namun, rekayasa perintah tingkat lanjut mungkin tidak memadai 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. Fine tuning secara langsung menyesuaikan parameter internal model untuk mendapatkan hasil yang optimal.
  • Anda memiliki data yang diseleksi dengan baik dan relevan dengan tugas Anda, yang sudah diberi label dengan output pilihan. Anda memerlukan data ini untuk penyempurnaan yang efektif.
  • Anda menggunakan model untuk tujuan yang sama berulang kali. Fine tuning dapat dilakukan sekali, dan digunakan kembali untuk tugas tertentu.