Prompt engineering
ปรับให้เหมาะสม LLM ด้วย DSPy: คู่มือแบบขั้นตอนในการสร้าง ปรับให้เหมาะสม และประเมินระบบ AI
เมื่อความสามารถของโมเดลภาษาขนาดใหญ่ (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 ได้แก่
- BootstrapFewShot: ตัวปรับให้เหมาะสมนี้ขยายเซ็นชื่อโดยการสร้างและรวมตัวอย่างที่ได้รับการปรับให้เหมาะสมภายในคำกระตุ้นที่ส่งไปยังโมเดล โดยใช้การเรียนรู้ไม่กี่ช็อต
- BootstrapFewShotWithRandomSearch: ใช้
BootstrapFewShotหลายครั้งพร้อมการค้นหาทางสุ่มเหนือการแสดงตัวอย่างที่สร้างขึ้น โดยเลือกโปรแกรมที่ดีที่สุดในช่วงการปรับให้เหมาะสม - MIPRO: สร้างคำแนะนำและตัวอย่างไม่กี่ช็อตในแต่ละขั้นตอน โดยมีการสร้างคำแนะนำที่ตระหนักถึงข้อมูลและตัวอย่างที่สร้างขึ้น ใช้การปรับให้เหมาะสมแบบเบย์ในการค้นหาพื้นที่ของคำแนะนำและการแสดงตัวอย่างที่ดีที่สุด
- 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 ช่วยให้คุณสามารถรวมโมเดลภาษาต่างๆ ได้อย่างมีประสิทธิภาพและประสิทธิผล












