วิศวกรรมพรอมต์ที่ใช้งานได้จริงสำหรับ 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 พร้อมให้คุณใช้งานบนเซิร์ฟเวอร์ของคุณเอง (และปรับแต่งเพิ่มเติมได้)

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

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

แม้ว่า 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`;
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 ขนาดเล็ก

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

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