Prompt engineering

ปรับให้เหมาะสม LLM ด้วย DSPy: คู่มือแบบขั้นตอนในการสร้าง ปรับให้เหมาะสม และประเมินระบบ AI

mm
เพิ่ม Unite.AI ลงในแหล่งข้อมูลที่คุณต้องการบน Google
DSPy is a framework for algorithmically optimizing LM prompts and weights

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

นี่คือจุดเริ่มต้นของ DSPy ซึ่งเป็นเฟรมเวิร์กที่ออกแบบมาเพื่อทำให้กระบวนการพัฒนาระบบ AI ง่ายขึ้น DSPy นำเสนอแนวทางที่เป็นระบบในการปรับให้เหมาะสมคำกระตุ้น LM และน้ำหนัก ทำให้นักพัฒนาสามารถสร้างแอปพลิเคชันที่ซับซ้อนได้ด้วยความพยายามน้อยที่สุด

ในคู่มือที่ครอบคลุมนี้ เราจะสำรวจหลักการสำคัญของ DSPy โครงสร้างแบบโมดูลาร์ และคุณลักษณะที่ทรงพลังที่มีให้ เรายังจะแสดงตัวอย่างเชิงปฏิบัติในการแสดงวิธีการที่ DSPy สามารถเปลี่ยนแปลงวิธีการพัฒนาระบบ AI ของคุณด้วย LLM

อะไรคือ DSPy และทำไมคุณต้องการมัน?

DSPy คือเฟรมเวิร์กที่แยกการไหลของโปรแกรม (โมดูล) จากพารามิเตอร์ (คำกระตุ้น LM และน้ำหนัก) ของแต่ละขั้นตอน การแยกนี้ทำให้สามารถปรับให้เหมาะสมคำกระตุ้น LM และน้ำหนักได้อย่างเป็นระบบ ทำให้คุณสามารถสร้างระบบ AI ที่ซับซ้อนได้ด้วยความน่าเชื่อถือและคาดการณ์ได้มากขึ้น และปฏิบัติตามข้อจำกัดเฉพาะโดเมน

ตามปกติ การพัฒนาระบบ AI ด้วย LLM เกี่ยวข้องกับการแบ่งปัญหาออกเป็นขั้นตอน การสร้างคำกระตุ้นที่ซับซ้อนสำหรับแต่ละขั้นตอน การสร้างตัวอย่างสังเคราะห์สำหรับการปรับให้เหมาะสม และการแนะนำด้วยมือเพื่อให้แน่ใจว่า LLM ปฏิบัติตามข้อจำกัดเฉพาะอย่าง การเข้าใกล้นี้ไม่เพียงแต่ใช้เวลานานเท่านั้น แต่ยังเสี่ยงต่อข้อผิดพลาด เนื่องจากการเปลี่ยนแปลงเล็กน้อยในพายพайป์ LM หรือข้อมูลอาจทำให้ต้องมีการปรับให้เหมาะสมคำกระตุ้นและขั้นตอนการปรับให้เหมาะสมใหม่

DSPy จัดการกับความท้าทายเหล่านี้โดยการแนะนำแนวคิดใหม่: ตัวปรับให้เหมาะสม ตัวปรับให้เหมาะสมเหล่านี้เป็นอัลกอริทึมที่ขับเคลื่อนด้วย LM ซึ่งสามารถปรับให้เหมาะสมคำกระตุ้นและน้ำหนักของการเรียก LM ได้ตามเมตริกที่คุณต้องการเพื่อเพิ่มประสิทธิภาพ ด้วยการทำให้กระบวนการปรับให้เหมาะสมเป็นอัตโนมัติ DSPy ทำให้นักพัฒนาสามารถสร้างระบบ AI ที่แข็งแกร่งได้ด้วยการแทรกแซงจากมนุษย์อย่างน้อย

โครงสร้างแบบโมดูลาร์ของ DSPy

ที่ใจกลางของ DSPy คือโครงสร้างแบบโมดูลาร์ที่อำนวยความสะดวกในการสร้างระบบ AI ที่ซับซ้อน เฟรมเวิร์กนี้ให้โมดูลที่สร้างไว้ล่วงหน้าซึ่งสรุปเทคนิคการกระตุ้นที่แตกต่างกัน เช่น dspy.ChainOfThought และ dspy.ReAct โมดูลเหล่านี้สามารถรวมและประกอบกันเป็นโปรแกรมที่ใหญ่ขึ้น ทำให้นักพัฒนาสามารถสร้างพายพายป์ที่ซับซ้อนตามความต้องการเฉพาะของตนเอง

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

การปรับให้เหมาะสมด้วย DSPy

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

ตัวปรับให้เหมาะสมบางตัวที่มีอยู่ใน DSPy ได้แก่

  1. BootstrapFewShot: ตัวปรับให้เหมาะสมนี้ขยายเซ็นชื่อโดยการสร้างและรวมตัวอย่างที่ได้รับการปรับให้เหมาะสมภายในคำกระตุ้นที่ส่งไปยังโมเดล โดยใช้การเรียนรู้ไม่กี่ช็อต
  2. BootstrapFewShotWithRandomSearch: ใช้ BootstrapFewShot หลายครั้งพร้อมการค้นหาทางสุ่มเหนือการแสดงตัวอย่างที่สร้างขึ้น โดยเลือกโปรแกรมที่ดีที่สุดในช่วงการปรับให้เหมาะสม
  3. MIPRO: สร้างคำแนะนำและตัวอย่างไม่กี่ช็อตในแต่ละขั้นตอน โดยมีการสร้างคำแนะนำที่ตระหนักถึงข้อมูลและตัวอย่างที่สร้างขึ้น ใช้การปรับให้เหมาะสมแบบเบย์ในการค้นหาพื้นที่ของคำแนะนำและการแสดงตัวอย่างที่ดีที่สุด
  4. BootstrapFinetune: แปลงโปรแกรม DSPy ที่ขึ้นอยู่กับคำกระตุ้นเป็นการอัปเดตน้ำหนักสำหรับโมเดลที่เล็กกว่า ทำให้คุณสามารถปรับให้เหมาะสมโมเดล LLM ที่ซ่อนอยู่ได้เพื่อเพิ่มประสิทธิภาพ

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

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

เพื่อแสดงถึงพลังของ DSPy มาทำงานตัวอย่างเชิงปฏิบัติในการสร้างระบบการสร้างข้อความที่เพิ่มการค้นหาข้อมูล (RAG) สำหรับการตอบคำถาม

ขั้นตอนที่ 1: การตั้งค่าโมเดลภาษาและโมเดลการค้นหาข้อมูล

ขั้นตอนแรกเกี่ยวข้องกับการกำหนดโมเดลภาษา (LM) และโมเดลการค้นหาข้อมูล (RM) ภายใน DSPy

ขั้นตอนที่ 2: การโหลดชุดข้อมูล

ต่อไป เราจะโหลดชุดข้อมูล HotPotQA ซึ่งประกอบด้วยคู่คำถามและคำตอบที่ซับซ้อนซึ่งมักจะตอบด้วยวิธีการหลายขั้นตอน

ขั้นตอนที่ 3: การสร้างลายเซ็น

DSPy ใช้ลายเซ็นเพื่อกำหนดพฤติกรรมของโมดูล ในตัวอย่างนี้ เราจะกำหนดลายเซ็นสำหรับการสร้างคำตอบ โดยระบุฟิลด์ข้อมูลเข้า (บริบทและคำถาม) และฟิลด์ข้อมูลออก (คำตอบ)

ขั้นตอนที่ 4: การสร้างพายพายป์

เราจะสร้างพายพายป์ RAG ของเราเป็นโมดูล DSPy ซึ่งประกอบด้วยวิธีการเริ่มต้น (__init__) เพื่อประกาศโมดูลย่อย (dspy.Retrieve และ dspy.ChainOfThought) และวิธีการไปข้างหน้า (forward) เพื่ออธิบายการไหลของการควบคุมในการตอบคำถามโดยใช้โมดูลเหล่านี้

ขั้นตอนที่ 5: การปรับให้เหมาะสมพายพายป์

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

ขั้นตอนที่ 6: การประเมินพายพายป์

หลังจากที่เราทำพายพายป์เสร็จแล้ว มันสำคัญที่จะต้องประเมินประสิทธิภาพของมันในชุดพัฒนาที่จะทำให้แน่ใจว่ามันตรงตามความแม่นยำและความน่าเชื่อถือที่ต้องการ

ขั้นตอนที่ 7: การตรวจสอบประวัติโมเดล

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

ขั้นตอนที่ 8: การทำนาย

ด้วยพายพายป์ที่ปรับให้เหมาะสมและประเมินแล้ว คุณสามารถใช้มันเพื่อทำการทำนายเกี่ยวกับคำถามใหม่ๆ ได้

ตัวอย่างการทำงานขั้นต่ำด้วย DSPy

ทีนี้ มาทำงานตัวอย่างการทำงานขั้นต่ำอีกตัวอย่างหนึ่งโดยใช้ชุดข้อมูล GSM8K และโมเดล GPT-3.5-turbo ของ OpenAI เพื่อจำลองการกระตุ้นภายในการทำงานของ DSPy

การตั้งค่า

ขั้นแรก ตรวจสอบให้แน่ใจว่าสภาพแวดล้อมของคุณถูกตั้งค่าแล้ว

การกำหนดโมดูล

ต่อไป กำหนดโปรแกรมที่กำหนดเองโดยใช้โมดูล ChainOfThought สำหรับการให้เหตุผลแบบขั้นตอน

การคอมไพล์และประเมินโมเดล

ตอนนี้ คอมไพล์มันด้วยตัวปรับให้เหมาะสม BootstrapFewShot

การจัดการข้อมูลใน DSPy

DSPy ทำงานกับชุดฝึกอบรม ชุดพัฒนาที่ใช้ในการตรวจสอบ และชุดทดสอบ สำหรับแต่ละตัวอย่างในชุดข้อมูลของคุณ คุณมักจะมีค่าที่แตกต่างกันสามประเภท: ค่าเข้า ค่าป้ายกำกับระหว่างขั้นตอน และค่าป้ายกำกับขั้นสุดท้าย

การสร้างวัตถุแบบตัวอย่าง

วัตถุแบบตัวอย่างใน DSPy มีลักษณะคล้ายกับพจนานุกรม Python แต่มาพร้อมกับยูทิลิตี้ที่มีประโยชน์

การระบุฟิลด์ข้อมูลเข้า

ใน DSPy วัตถุแบบตัวอย่างมีวิธีการ with_inputs() เพื่อระบุฟิลด์เฉพาะว่าเป็นข้อมูลเข้า

ตัวปรับให้เหมาะสมใน DSPy

ตัวปรับให้เหมาะสมของ DSPy ปรับพารามิเตอร์ของโปรแกรม DSPy (เช่น คำกระตุ้นและ/หรือน้ำหนัก LM) เพื่อเพิ่มเมตริกที่ระบุให้สูงสุด

ตัวปรับให้เหมาะสมที่มีอยู่

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

การเลือกตัวปรับให้เหมาะสม

หากคุณไม่แน่ใจว่าจะเริ่มต้นจากที่ไหน ใช้ BootstrapFewShotWithRandomSearch

การบันทึกและโหลดโปรแกรมที่ปรับให้เหมาะสม

หลังจากที่คุณรันโปรแกรมผ่านตัวปรับให้เหมาะสมแล้ว บันทึกมันเพื่อใช้ในอนาคต

คุณลักษณะขั้นสูง: การยืนยันของ DSPy

การยืนยันของ DSPy อัตโนมัติในการบังคับใช้ข้อจำกัดในการคำนวณบน LMs ซึ่งเพิ่มความน่าเชื่อถือ ความคาดการณ์ได้ และความถูกต้องของเอาต์พุตของ LM

การใช้การยืนยัน

กำหนดฟังก์ชันการตรวจสอบและประกาศการยืนยันหลังการสร้างแบบจำลอง

การแปลงโปรแกรมด้วยการยืนยัน

การปรับให้เหมาะสมที่ขับเคลื่อนด้วยการยืนยัน

การยืนยันของ DSPy ทำงานร่วมกับการปรับให้เหมาะสมของ DSPy โดยเฉพาะอย่างยิ่งด้วย BootstrapFewShotWithRandomSearch

สรุป

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

ฉันใช้เวลาที่ผ่านมา 5 ปีในการศึกษาสิ่งที่น่าสนใจเกี่ยวกับ Machine Learning และ Deep Learning ความเชี่ยวชาญและความหลงใหลของฉันทำให้ฉันเข้าร่วมในโครงการพัฒนาซอฟต์แวร์มากกว่า 50 โครงการที่มีความหลากหลาย โดยมุ่งเน้นไปที่ AI/ML ความอยากรู้อยากเห็นของฉันยังทำให้ฉันสนใจในด้าน Natural Language Processing ซึ่งเป็นสาขาที่ฉันต้องการสำรวจต่อไป