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

Maud Nalpas
Maud Nalpas

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

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

ซึ่งจะเป็นแบบนี้สําหรับโมเดลขนาดต่างๆ ด้วย

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

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

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

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

ในเอกสารนี้ "LLM ขนาดเล็ก" หมายถึงโมเดลที่มีพารามิเตอร์น้อยกว่า 30,000 ล้านรายการ ปัจจุบันโมเดลที่มีพารามิเตอร์ตั้งแต่ 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 พร้อมให้คุณใช้งานบนเซิร์ฟเวอร์ของคุณเอง (และปรับแต่งเพิ่มเติมได้)

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

อินเทอร์เฟซการแชทที่ขับเคลื่อนโดย 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:
Input (review) เอาต์พุต (การให้คะแนน)
  LLM ขนาดใหญ่ขึ้น (Gemini 1.5) LLM ขนาดเล็ก (Gemma 2B)
ชอบมากเลย กระจายน้ำหนักได้ดีและให้ความสะดวกสบายอย่างน่าประหลาดใจแม้ในการเดินป่าตลอดทั้งวัน แนะนำ 5 4 จาก 5 ดาว**
สายสะพายเปราะบางและเริ่มกดทับไหล่เมื่อใส่ของหนัก 1 2/5

แม้ว่า Gemini 1.5 จะให้เอาต์พุตที่ต้องการด้วยพรอมต์ง่ายๆ นี้ แต่เอาต์พุตของ Gemma กลับไม่น่าพอใจ

  • รูปแบบไม่ถูกต้อง เราขอคะแนนเป็นจำนวนเต็ม
  • การจัดประเภทดูเหมือนจะไม่ถูกต้อง รีวิวแรกมีความกระตือรือร้นมากพอที่จะระบุว่าเป็นรีวิว 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`
;
Input (review) เอาต์พุตที่มี 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

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

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

ขีดจํากัดของโทเค็น Mind

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

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

ใช้ฟังก์ชันจํานวนโทเค็นเพื่อหลีกเลี่ยงไม่ให้เกินขีดจํากัด

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

พิจารณาการออกแบบและการทดสอบที่รวดเร็วในการประเมินเวลาโดยประมาณของทีมวิศวกร

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

Prompt engineer กับการปรับแต่งแบบละเอียด

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

ใช้การปรับแต่งขั้นละเอียดในกรณีต่อไปนี้

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