วิศวกรรมพรอมต์ที่ใช้งานได้จริงสำหรับ LLM ขนาดเล็ก

Maud Nalpas
Maud Nalpas

ประสิทธิภาพของโมเดลภาษาขนาดใหญ่อาศัยวิธีการที่เรากำหนดเป็นหลัก ให้ วิศวกรรมพรอมต์คือ ขั้นตอนการสร้างคำถามให้ได้ผลลัพธ์ที่ดีที่สุดจาก LLM จึงเป็นขั้นตอนสำคัญในการใช้ฟีเจอร์ที่ใช้ LLM

วิศวกรรมพรอมต์เป็นกระบวนการที่ต้องทำซ้ำๆ หากคุณเคยทดลองใช้ LLM ต่างๆ คุณก็อาจสังเกตเห็นว่าคุณต้องปรับเปลี่ยนพรอมต์ให้ ให้ผลลัพธ์ที่ดีกว่า

สำหรับโมเดลขนาดต่างๆ ก็จะมีผลเช่นกัน

อินเทอร์เฟซ Chat ที่ขับเคลื่อนโดย LLM ขนาดใหญ่ เช่น Gemini หรือ ChatGPT มักจะให้ผลลัพธ์ที่น่าพึงพอใจโดยแทบไม่ต้องดำเนินการอะไรเลย อย่างไรก็ตาม เมื่อทำงานกับ LLM เริ่มต้นขนาดเล็กที่ไม่มีการปรับแต่ง ต้องปรับแนวทางของคุณ

LLM ขนาดเล็กจะมีประสิทธิภาพน้อยกว่าและมีกลุ่มข้อมูลขนาดเล็กให้ดึงข้อมูล

"LLM ขนาดเล็ก" หมายความว่าอย่างไร

การกำหนดขนาด LLM มีความซับซ้อนและไม่เสมอไป ที่ผู้สร้างเปิดเผย

ในเอกสารนี้ "LLM ขนาดเล็กลง" หมายถึงโมเดลใดๆ ที่มีพารามิเตอร์ต่ำกว่า 3 หมื่นล้าน เริ่มตั้งแต่วันนี้ โมเดลที่มีพารามิเตอร์ 2-3 ล้านหรือ 2-3 พันล้านรายการสามารถ ทำงานในเบราว์เซอร์ ในอุปกรณ์ระดับผู้บริโภคได้อย่างสมจริง

LLM ขนาดเล็กจะใช้ที่ใดบ้าง

  • Generative AI ในอุปกรณ์/ในเบราว์เซอร์ เช่น หากคุณใช้ Gemma 2B ด้วย LLM Inference API ของ MediaPipe (เหมาะสำหรับอุปกรณ์ที่ใช้ CPU เท่านั้น) หรือ DistilBert ในเบราว์เซอร์ด้วย Transformers.js ทำการดาวน์โหลดโมเดลและเรียกใช้การอนุมานในอุปกรณ์ของผู้ใช้ได้เท่านั้น ด้วย LLM ขนาดเล็กเหล่านี้ เพื่อให้การดาวน์โหลดเว็บมีความสมเหตุสมผลและเหมาะสม หน่วยความจำและข้อจำกัด GPU/CPU ของอุปกรณ์
  • Generative AI ฝั่งเซิร์ฟเวอร์ที่กำหนดเอง โมเดลน้ำหนักเปิดขนาดเล็ก เช่น Gemma 2B Gemma 7B หรือ Gemma 27B พร้อมให้คุณเรียกใช้บนเซิร์ฟเวอร์ของคุณเอง (และ ปรับแต่งหรือไม่ก็ได้)

เริ่มต้นใช้งาน

อินเทอร์เฟซ Chat ที่ขับเคลื่อนโดย LLM ขนาดใหญ่ เช่น Gemini หรือ ChatGPT มักให้ผลลัพธ์ที่น่าพึงพอใจโดยแทบไม่ต้องทำอะไรเลย อย่างไรก็ตาม เมื่อทำงานกับ LLM ที่มีขนาดเล็ก คุณต้องปรับแนวทางของคุณ LLM ขนาดเล็กจะมีประสิทธิภาพน้อยกว่าและมีกลุ่มข้อมูลขนาดเล็กให้ดึงข้อมูล

ให้คำแนะนำด้านบริบทและรูปแบบที่แน่นอน

เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดเมื่อใช้ LLM ขนาดเล็ก ให้สร้างพรอมต์ที่มีรายละเอียดและเฉพาะเจาะจงมากขึ้น

เช่น

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

Review: "${review}"
Rating:
อินพุต (ตรวจสอบ) เอาต์พุต (อัตรา)
  LLM ใหญ่ขึ้น (Gemini 1.5) LLM ขนาดเล็กลง (Gemma 2B)
ใส่ได้พอดี กระจายน้ำหนักได้ดีและสะดวกสบายจนคาดไม่ถึง แม้จะเป็นเส้นทางปีนเขาทั้งวัน เราอยากแนะนำ 5 4 จาก 5 ดาว**
สายรัดนั้นบอบบาง และเริ่มถล่มลงมาที่ไหล่ของฉันเมื่อมีน้ำหนักมาก 1 5/2

แม้ว่า Gemini 1.5 จะให้เอาต์พุตที่ต้องการ ด้วยพรอมต์ง่ายๆ นี้ แต่ ไม่เป็นที่น่าพอใจ:

  • รูปแบบไม่ถูกต้อง เราขอจำนวนเต็มสำหรับการจัดประเภท
  • ดูเหมือนว่าการจัดประเภทจะไม่ถูกต้องนัก รีวิวแรกมีความกระตือรือร้นมากพอที่จะทำให้ได้รีวิว 5 ดาว

ในการแก้ปัญหานี้ เราต้องใช้เทคนิคด้านวิศวกรรมพรอมต์ พรอมต์แบบหนึ่ง หลายช็อต และแบบหลายช็อต และการสร้างพรอมต์แบบเชนความคิด นอกจากนี้ เรายังต้องระบุคำแนะนำเกี่ยวกับรูปแบบที่ชัดเจนและยืนยันว่าโมเดลควร ใช้การให้คะแนนทั้งหมด

เช่น

`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`;
อินพุต (ตรวจสอบ) เอาต์พุตที่มี LLM ขนาดเล็กกว่า (Gemma 2B)

ใส่ได้พอดี กระจายน้ำหนักได้ดีจนน่าประหลาดใจ สะดวกสบายแม้ในการเดินทางตลอดวัน เราอยากแนะนำ

การวิเคราะห์: รีวิวนี้เป็นไปในเชิงบวกและเน้นผลิตภัณฑ์ พอดีและสวมใส่สบาย ซึ่งแสดงถึงความพึงพอใจอย่างมากต่อผลิตภัณฑ์ ช่วงเวลานี้ ให้คะแนนสูง

คะแนน (จำนวนเต็ม): 5

สายรัดตัวอย่างนั้นบอบบาง และเริ่มถล่มลงมาที่ไหล่ของฉัน ภายใต้ภาระงานหนัก

**การวิเคราะห์** รีวิวดังกล่าวไฮไลต์ปัญหาความสบายใจที่สำคัญเกี่ยวกับ สายรัด นอกจากนี้ ยังบอกเป็นนัยว่าผลิตภัณฑ์อาจไม่เหมาะสำหรับหนัก หรือการออกไปภายนอกเป็นเวลานาน

**คะแนน** 1 (แย่ที่สุด)

พรอมต์ที่ซับซ้อนมากขึ้นของเราบวกกับการใช้พรอมต์แบบช็อตน้อยๆ และเทคนิคการชี้นำจากความคิด ทำให้การให้คะแนนแม่นยำมากขึ้น

คาดว่าจะแยกวิเคราะห์เอาต์พุตด้วยตนเอง

แม้ว่าคุณควรล้างข้อมูลด้วยตนเองและตีความเอาต์พุตของ LLM เสมอ แต่นี่จะเป็น โดยเฉพาะสำหรับ LLM ขนาดเล็ก ซึ่งอาจสร้างผลลัพธ์ที่ไม่ดูดีนักและ อาจต้องใช้พรอมต์แบบเชนความคิด

ในตัวอย่างแรก เราใช้พรอมต์แบบเชนความคิด ดังนั้นเอาต์พุตจึงรวม ทั้งการวิเคราะห์และการให้คะแนน และเราต้องแยกวิเคราะห์ด้วยตนเองสำหรับการให้คะแนน และ โปรดสังเกตการจัดรูปแบบที่ไม่สอดคล้องกันในเอาต์พุตในส่วนก่อนหน้า: บางครั้งโมเดลจะแสดงมาร์กดาวน์ แต่ไม่ใช่ทุกครั้ง

// 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);
}

ความแตกต่างของ Mind API

Cloud API ของ LLM เช่น Gemini API หรือ OpenAI ซึ่งโดยทั่วไปจะเป็นรายการ ชี้ไปที่ LLM ที่มีขนาดใหญ่กว่า และมอบฟีเจอร์พรอมต์ที่สะดวก เช่น Gemini 1.5 Pro เสนอคำแนะนำของระบบ และ โหมด JSON

ในขณะนี้ คุณลักษณะเหล่านี้ยังไม่พร้อมสำหรับการใช้งานรูปแบบที่กำหนดเอง หรือ สำหรับ LLM ขนาดเล็กที่เข้าถึงโดยใช้ AI API ในเบราว์เซอร์ เช่น MediaPipe LLM Inference API หรือ Transformers.js แม้ว่านี่จะไม่ใช่ข้อจำกัดทางเทคนิค แต่ AI API ในเบราว์เซอร์มักจะ ค่อยๆ ผ่อนปรน

ขีดจำกัดของโทเค็นจิตใจ

เนื่องจากพรอมต์สำหรับ LLM ขนาดเล็กของคุณต้องมีตัวอย่างหรือมีรายละเอียดมากกว่านี้ คำสั่งอาจใช้เวลานานขึ้นและใช้โทเค็นอินพุตมากกว่า ถ้ามีขีดจำกัด

นอกจากนี้ โมเดลขนาดเล็กมีแนวโน้มที่จะมีจํานวนโทเค็นอินพุตที่น้อยกว่าด้วย สำหรับ เช่น Gemini 1.5 Pro มีขีดจำกัดโทเค็นอินพุตที่ 1 ล้าน ขณะที่โมเดล Gemma มีหน้าต่างบริบทขนาด 8K

ใช้ฟังก์ชันนับโทเค็น เพื่อหลีกเลี่ยงการถึงขีดจำกัด

ปรับค่าประมาณเวลาของคุณ

คำนึงถึงการออกแบบและทดสอบพรอมต์ในเวลาวิศวกรรมโดยประมาณ

เนื่องจากความแตกต่างของ API และขีดจำกัดของโทเค็น คุณจึงอาจต้องใช้เวลาและความพยายามมากขึ้น เพื่อสร้างพรอมต์สำหรับ LLM ขนาดเล็กกว่า LLM ที่มีขนาดใหญ่กว่า การทดสอบและการตรวจสอบ เอาต์พุตของ LLM อาจต้องใช้ความพยายามมากขึ้น

วิศวกรเพื่อพรอมต์กับการปรับแต่งอย่างละเอียด

สำหรับนักพัฒนาเว็บ วิศวกรรมพรอมต์เป็นวิธีที่เราแนะนำให้ใช้ Generative AI ผ่านการฝึกอบรมที่กำหนดเองและปรับแต่ง แต่แม้แต่วิศวกรรมพรอมต์ขั้นสูงอาจไม่เพียงพอในบางกรณี โดยเฉพาะหากใช้ LLM ขนาดเล็ก

ใช้การปรับแต่งในกรณีต่อไปนี้

  • คุณต้องการความแม่นยำและประสิทธิภาพขั้นสูงสำหรับงานที่เฉพาะเจาะจง ไม่เป็นไร การปรับแต่งจะปรับพารามิเตอร์ภายในของโมเดลโดยตรงเพื่อผลลัพธ์ที่ดีที่สุด
  • คุณมีข้อมูลที่ได้รับการดูแลจัดการอย่างดี ซึ่งเกี่ยวข้องกับงานของคุณ และติดป้ายกำกับว่า เอาต์พุตที่ต้องการ คุณต้องใช้ข้อมูลนี้เพื่อการปรับแต่งอย่างมีประสิทธิภาพ
  • คุณใช้โมเดลเพื่อวัตถุประสงค์เดียวกันซ้ำๆ สามารถปรับแต่งได้ เพียงครั้งเดียว และนำกลับมาใช้ซ้ำสำหรับงานที่เฉพาะเจาะจง