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

Maud Nalpas
Maud Nalpas

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

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

เช่นเดียวกับรูปแบบที่มีขนาดแตกต่างกัน

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

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

"LLM ขนาดเล็ก" หมายถึงอะไร

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

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

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

  • Generative AI ในอุปกรณ์/ในเบราว์เซอร์ เช่น หากคุณใช้ Gemma 2B กับ LLM Inference API ของ MediaPipe (แม้จะเหมาะสำหรับอุปกรณ์ที่ใช้ CPU เท่านั้น) หรือ DistillBert ในเบราว์เซอร์ด้วย 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 จะแสดงเอาต์พุตที่ต้องการจากพรอมต์ง่ายๆ นี้ แต่เอาต์พุตของ Gemma ไม่เป็นที่น่าพอใจ

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

ในการแก้ไขปัญหานี้ เราต้องใช้เทคนิควิศวกรรมพรอมต์ ข้อความแจ้งแบบ 1, 2-3 และแบบหลายช็อต และข้อความแจ้งแบบเชนแนวคิด นอกจากนี้ เรายังต้องมีวิธีการของรูปแบบที่ชัดเจนและยืนยันว่าโมเดลควรใช้การจัดประเภทแบบเต็ม

เช่น

`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 (แย่ที่สุด)

พรอมต์ที่ละเอียดกว่าของเราบวกกับการแสดงข้อความแจ้งแบบ "2-3 ช็อต" และเทคนิคการแสดงแบบต่อเนื่อง (ห่วงโซ่) ช่วยให้ได้คะแนนที่แม่นยํายิ่งขึ้น

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

แม้ว่าคุณควรทำความสะอาดและตีความเอาต์พุตของ 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

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

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

ขีดจำกัดโทเค็น Mind

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

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

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

ปรับเวลาโดยประมาณ

คำนึงถึงการออกแบบและทดสอบที่รวดเร็วในการประมาณเวลางานวิศวกรรมของคุณ

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

ให้วิศวกรทันทีเทียบกับการปรับแต่งอย่างละเอียด

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

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

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