โมเดลและแพลตฟอร์ม AI
ChatDev : ระบบพัฒนาซอฟต์แวร์โดยใช้ LLM

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

การวิเคราะห์เชิงเครื่องมือของ ChatDev แสดงให้เห็นว่าไม่เพียงแต่ ChatDev มีประสิทธิภาพสูงในการทำกระบวนการพัฒนาซอฟต์แวร์ แต่ยังเป็นมิตรกับงบประมาณอีกด้วย โดยสามารถทำกระบวนการพัฒนาซอฟต์แวร์ทั้งหมดได้ในราคาไม่ถึง 1 ดอลลาร์ นอกจากนี้ ChatDev ยังสามารถระบุและแก้ไขปัญหาที่อาจเกิดขึ้นได้ รวมถึงการแก้ไขข้อผิดพลาดและรักษาความมีประสิทธิภาพและคุ้มค่า
ChatDev : บทนำสู่การพัฒนาซอฟต์แวร์ด้วยโมเดลภาษาขนาดใหญ่
โดยทั่วไป อุตสาหกรรมพัฒนาซอฟต์แวร์เป็นโดเมนที่สร้างขึ้นบนพื้นฐานของแนวทางที่มีระเบียบและเป็นระบบ ไม่เพียงแต่ในการพัฒนาซอฟต์แวร์ แต่ยังรวมถึงการบำรุงรักษาและดำเนินการด้วย การพัฒนาซอฟต์แวร์เป็นกระบวนการที่ซับซ้อนและต้องใช้เวลาในการพัฒนา โดยมีหลายบทบาทที่เกี่ยวข้อง เช่น การประสานงานภายในองค์กร การจัดสรรงาน การเขียนโค้ด การทดสอบ และการสร้างเอกสาร
ในช่วงไม่กี่ปีที่ผ่านมา ด้วยความช่วยเหลือของ LLM หรือโมเดลภาษาขนาดใหญ่ ชุมชน AI ได้ทำความสำเร็จที่สำคัญในด้านการมองเห็นของคอมพิวเตอร์และการประมวลผลภาษาธรรมชาติ และหลังจากการฝึกอบรมบน “การคาดการณ์คำถัดไป” LLM ได้แสดงให้เห็นถึงความสามารถในการทำงานที่มีประสิทธิภาพในงานต่างๆ เช่น การแปลภาษา การตอบคำถาม และการสร้างโค้ด
แม้ว่า LLM จะสามารถเขียนโค้ดสำหรับซอฟต์แวร์ทั้งหมดได้ แต่ก็มีข้อเสียเปรียบหลักๆ คือ อาการหลอนในการสร้างโค้ด ซึ่งคล้ายกับการ hallucinations ที่พบในระบบประมวลผลภาษาธรรมชาติ การ hallucinations ของโค้ดอาจรวมถึงปัญหาเช่น บั๊กที่ไม่ได้ค้นพบ การขาดไลบรารีหรือแพ็กเกจที่โปรแกรมต้องพึ่งพา และการนำไปใช้ฟังก์ชันที่ไม่สมบูรณ์ มีสาเหตุหลักสองประการของการ hallucinations ของโค้ด
- การขาดการกำหนดงาน: เมื่อสร้างโค้ดซอฟต์แวร์ในขั้นตอนเดียว โดยไม่ได้กำหนดรายละเอียดของงาน จะทำให้ LLM สับสน เนื่องจากงานในกระบวนการพัฒนาซอฟต์แวร์ เช่น การวิเคราะห์ความต้องการของผู้ใช้ หรือการเลือกภาษาโปรแกรมมิ่งที่ต้องการ มักจะให้คำแนะนำในการคิด ซึ่งเป็นสิ่งที่ไม่มีในงานระดับสูงที่จัดการโดย LLM
- การขาดการตรวจสอบข้าม: : มีความเสี่ยงอย่างมากเมื่อไม่ได้ทำการตรวจสอบข้าม โดยเฉพาะอย่างยิ่งในการตัดสินใจ
ChatDev มีเป้าหมายที่จะแก้ไขปัญหาเหล่านี้และช่วยให้ LLM สามารถสร้างซอฟต์แวร์ที่มีประสิทธิภาพและเป็นเลิศได้ โดยการสร้างบริษัทเสมือนในการพัฒนาซอฟต์แวร์ และแบ่งกระบวนการพัฒนาซอฟต์แวร์ออกเป็น 4 ขั้นตอนหลัก
- การออกแบบ
- การเขียนโค้ด
- การทดสอบ
- การสร้างเอกสาร
แต่ละขั้นตอนนี้จะใช้ทีมของตัวแทนเสมือน เช่น โปรแกรมเมอร์หรือผู้ทดสอบที่ทำงานร่วมกันโดยใช้การสนทนาเพื่อให้เกิดกระบวนการทำงานที่ราบรื่น นอกจากนี้ ChatDev ใช้ห่วงโซ่การสนทนาแบ่งแต่ละขั้นตอนเป็นงานย่อย โดยมีสองบทบาทเสนอและตรวจสอบวิธีแก้ปัญหาผ่านการสื่อสารที่คำนึงถึงบริบท ห่วงโซ่ประกอบด้วยหลายโหนด แต่ละโหนดแทนงานย่อยเฉพาะหนึ่งงาน และตัวแทนทั้งสองบทบาทสนทนาหลายรอบเพื่อเสนอและยืนยันวิธีแก้ปัญหา
ในแนวทางนี้ ChatDev จะวิเคราะห์ความต้องการของลูกค้า สร้างความคิดสร้างสรรค์ ออกแบบและนำไปใช้ระบบต้นแบบ ระบุและแก้ไขปัญหา สร้างกราฟิกที่น่าดึงดูด อธิบายข้อมูลการแก้ปัญหา และสร้างคู่มือผู้ใช้ สุดท้าย ChatDev จะส่งซอฟต์แวร์ให้กับผู้ใช้พร้อมกับโค้ดต้นฉบับ คู่มือผู้ใช้ และข้อกำหนดสภาพแวดล้อม
ChatDev : สถาปัตยกรรมและการทำงาน
ตอนนี้ที่เรามีการแนะนำ ChatDev แล้ว มาทำความรู้จักกับสถาปัตยกรรมและการทำงานของ ChatDev กัน โดยเริ่มต้นด้วยห่วงโซ่การสนทนา
ห่วงโซ่การสนทนา
ตามที่เราได้กล่าวไว้ข้างต้น ChatDev ใช้แบบจำลองน้ำตกในการพัฒนาซอฟต์แวร์ โดยแบ่งกระบวนการพัฒนาซอฟต์แวร์ออกเป็น 4 ขั้นตอน รวมถึงการออกแบบ การเขียนโค้ด การทดสอบ และการสร้างเอกสาร แต่ละขั้นตอนมีบทบาทเฉพาะและจำเป็นต้องสื่อสารกันอย่างมีประสิทธิภาพ ความท้าทายคือการระบุว่าจะให้ใครเข้าร่วมและกำหนดลำดับการโต้ตอบอย่างไร
เพื่อแก้ไขปัญหานี้ ChatDev ใช้ห่วงโซ่การสนทนาที่เป็นสถาปัตยกรรมที่ทั่วไป ซึ่งแบ่งแต่ละขั้นตอนเป็นบทสนทนาย่อยที่มุ่งงานเฉพาะ โดยใช้การสวมสองบทบาททำงานร่วมกัน ผลลัพธ์ที่ต้องการจากการสนทนาเป็นส่วนสำคัญของซอฟต์แวร์ที่ต้องการ และเป็นผลมาจากการทำงานร่วมกันและการสื่อสารระหว่างตัวแทนเสมือนที่เข้าร่วมในกระบวนการพัฒนาซอฟต์แวร์

สำหรับการสนทนาแต่ละครั้ง ผู้สอนจะเริ่มต้นด้วยการส่งคำแนะนำและชี้นำการสนทนาไปสู่การทำงานให้เสร็จสิ้น ในขณะที่ผู้ช่วยจะปฏิบัติตามคำแนะนำที่กำหนดและให้คำตอบที่เหมาะสม และมีส่วนร่วมในการสนทนาเกี่ยวกับผลลัพธ์ที่เป็นไปได้ของคำตอบ ผู้สอนและผู้ช่วยจะสนทนากันหลายครั้งจนกว่าจะถึงข้อตกลงและถือว่าการทำงานเสร็จสิ้นห่วงโซ่การสนทนาให้ผู้ใช้มองเห็นกระบวนการพัฒนาซอฟต์แวร์ที่ชัดเจน และช่วยให้เข้าใจถึงกระบวนการตัดสินใจ และมีโอกาสในการแก้ไขข้อผิดพลาดที่เกิดขึ้น ซึ่งช่วยให้ผู้ใช้สามารถวิเคราะห์และวินิจฉัยข้อผิดพลาด ตรวจสอบผลลัพธ์ระหว่างทาง และเข้าแทรกแซงกระบวนการหากจำเป็นด้วยการรวมห่วงโซ่การสนทนา ChatDev สามารถมุ่งเน้นไปที่งานย่อยแต่ละงานในระดับที่ละเอียด และช่วยให้การทำงานร่วมกันระหว่างตัวแทนเสมือนเป็นไปอย่างมีประสิทธิภาพ ซึ่งนำไปสู่การทำงานให้เสร็จสิ้นได้อย่างรวดเร็ว
การออกแบบ
ในขั้นตอนการออกแบบ ChatDev ต้องการความคิดเริ่มต้นจากลูกค้า และมีบทบาทที่กำหนดไว้ 3 บทบาท คือ
- CEO หรือผู้บริหารสูงสุด
- CPO หรือผู้บริหารผลิตภัณฑ์
- CTO หรือผู้บริหารเทคโนโลยี
ห่วงโซ่การสนทนาจะแบ่งการออกแบบออกเป็นงานสนทนาที่มีเป้าหมาย ซึ่งรวมถึงการกำหนดภาษาโปรแกรมมิ่ง (CTO และ CEO) และรูปแบบของซอฟต์แวร์ (CPO และ CEO) การออกแบบมีกลไก 3 ประการ คือ การกำหนดบทบาท การจัดการความจำ และการสะท้อน
การกำหนดบทบาท
ตัวแทนเสมือนแต่ละตัวใน ChatDev จะได้รับการกำหนดบทบาทโดยใช้ข้อความพิเศษหรือคำสั่งพิเศษระหว่างกระบวนการทำงานร่วมกัน ซึ่งไม่เหมือนกับโมเดลภาษาที่สนทนาแบบอื่นๆ ChatDev จะเริ่มสถานการณ์สวมบทบาทระหว่างตัวแทนเท่านั้น โดยใช้พรอมต์เหล่านี้กำหนดบทบาทก่อนเริ่มบทสนทนา
ในตอนแรก ผู้สอนจะรับหน้าที่เป็น CEO และมีส่วนร่วมในการวางแผนแบบโต้ตอบ ในขณะที่ผู้ช่วยจะรับหน้าที่เป็นผู้ดำเนินการและให้คำตอบที่ต้องการ ChatDev ใช้ พรอมต์เริ่มต้นสำหรับกำหนดบทบาท เพื่อให้ตัวแทนทำหน้าที่ได้อย่างมีประสิทธิภาพ โดยผู้ช่วยรับบท CPO ที่ปฏิบัติงานและตอบกลับ พรอมต์ของผู้สอนและผู้ช่วยระบุบทบาท งาน เกณฑ์สิ้นสุด โพรโทคอลสื่อสาร และข้อจำกัดเพื่อป้องกันการวนซ้ำไม่สิ้นสุด คำตอบที่ไม่มีสาระ และคำสั่งซ้ำซ้อน
การจัดการความจำ
กระแสความจำเป็นกลไกที่ ChatDev ใช้เก็บบันทึกบทสนทนาก่อนหน้าของตัวแทนอย่างครบถ้วน เพื่อช่วยตัดสินใจโดยคำนึงถึงข้อความที่สนทนาไปแล้ว ChatDev ใช้พรอมต์กำหนดโพรโทคอลการสื่อสาร เช่น เมื่อทั้งสองฝ่ายเห็นพ้องกัน ข้อความปิดต้องตรงกับรูปแบบที่กำหนด อย่าง (<MODALITY>: Desktop Application) เฟรมเวิร์กตรวจสอบรูปแบบอย่างต่อเนื่องก่อนอนุญาตให้จบการสนทนา
การสะท้อน
ผู้พัฒนา ChatDev ได้สังเกตเห็นสถานการณ์ที่ทั้งสองฝ่ายได้มาถึงข้อตกลง แต่โพรโทคอลการสื่อสารที่กำหนดไว้ไม่ได้ถูกเรียกใช้ เพื่อแก้ไขปัญหานี้ ChatDev นำเสนอกลไกการสะท้อนตนเอง เพื่อเรียกคืนและดึงข้อมูลจากความจำ โดยเริ่มการสนทนาใหม่และแต่งตั้ง “ตัวตนจำลอง” (pseudo self) เป็นผู้ตั้งคำถาม ตัวตนจำลองวิเคราะห์บทสนทนาและประวัติก่อนหน้า แจ้งให้ผู้ช่วยปัจจุบันทราบ แล้วขอให้สรุปข้อมูลที่ได้ข้อยุติและนำไปปฏิบัติได้ ดังแสดงในรูปด้านล่าง

ด้วยการสะท้อนกลับ ผู้ช่วยของ ChatDev จะได้รับการสนับสนุนให้สะท้อนและวิเคราะห์คำตอบที่ได้เสนอ
การเขียนโค้ด
ในขั้นตอนการเขียนโค้ด มีบทบาทที่กำหนดไว้ 3 บทบาท คือ CTO โปรแกรมเมอร์ และผู้ออกแบบศิลปะ ห่วงโซ่การสนทนาจะแบ่งการเขียนโค้ดออกเป็นงานย่อย เช่น การเขียนโค้ด (โปรแกรมเมอร์และ CTO) หรือการออกแบบ GUI (โปรแกรมเมอร์และผู้ออกแบบศิลปะ) CTO สั่งให้โปรแกรมเมอร์ใช้รูปแบบ Markdown เพื่อสร้างระบบซอฟต์แวร์ จากนั้นผู้ออกแบบเสนอ GUI ที่ใช้งานง่ายและโต้ตอบได้ โดยใช้ไอคอนกราฟิกแทนคำสั่งข้อความแบบเดิม
การจัดการโค้ด
ChatDev ใช้ภาษาโปรแกรมมิ่งที่เป็นแบบวัตถุ เช่น Python Java และ C++ เพื่อจัดการซอฟต์แวร์ที่ซับซ้อน เพราะความเป็นโมดูลของภาษาเหล่านี้รองรับวัตถุที่ทำงานได้ในตัว ช่วยทั้งการแก้ปัญหาและการพัฒนาร่วมกัน อีกทั้งลดความซ้ำซ้อนด้วยการนำวัตถุกลับมาใช้ผ่านแนวคิดการสืบทอด
คำแนะนำความคิด
วิธีการตอบคำถามแบบดั้งเดิมมักจะนำไปสู่ข้อมูลที่ไม่เกี่ยวข้องหรือข้อผิดพลาด โดยเฉพาะอย่างยิ่งในการสร้างโค้ด การให้คำแนะนำที่ไม่ซับซ้อนอาจนำไปสู่การ hallucinations ของ LLM และอาจเป็นปัญหาใหญ่ ChatDev นำเสนอกลไก “คำแนะนำการคิด” ซึ่งได้รับแรงบันดาลใจจากพรอมต์แบบห่วงโซ่ความคิด กลไกนี้ระบุแนวคิดแก้ปัญหาแต่ละขั้นที่รวมอยู่ในคำสั่งอย่างชัดเจน คล้ายกับการแก้งานตามลำดับอย่างเป็นระบบ

การทดสอบ
การเขียนโค้ดที่ไม่มีข้อผิดพลาดในครั้งแรกเป็นเรื่องที่ท้าทายไม่เพียงแต่สำหรับ LLM แต่ยังรวมถึงนักพัฒนาซอฟต์แวร์ด้วย แทนที่จะทิ้งโค้ดที่ผิดทั้งหมด โปรแกรมเมอร์จะวิเคราะห์เพื่อหาข้อผิดพลาดและแก้ไข การทดสอบใน ChatDev แบ่งออกเป็น 3 บทบาท คือ โปรแกรมเมอร์ ผู้ทดสอบ และผู้ตรวจสอบ จากนั้นแบ่งเป็นงานย่อยสองอย่างตามลำดับ ได้แก่ การตรวจทานโดยเพื่อนร่วมงานหรือการดีบักแบบสถิต ระหว่างผู้ตรวจสอบกับโปรแกรมเมอร์ และการทดสอบระบบหรือการดีบักแบบไดนามิก ระหว่างโปรแกรมเมอร์กับผู้ทดสอบ การดีบักแบบสถิตวิเคราะห์ซอร์สโค้ดเพื่อหาข้อผิดพลาด ส่วนการดีบักแบบไดนามิกตรวจสอบการทำงานของโปรแกรมผ่านการทดสอบด้วยตัวแปลภาษา โดยเน้นการทดสอบแบบกล่องดำ
การสร้างเอกสาร
หลังจากที่ ChatDev เสร็จสิ้นขั้นตอนการออกแบบ การเขียนโค้ด และการทดสอบแล้ว จะใช้ตัวแทนเสมือน 4 ตัว คือ CEO CTO CPO และโปรแกรมเมอร์ เพื่อสร้างเอกสารสำหรับโครงการซอฟต์แวร์ ChatDev ใช้ LLM และพรอมต์ที่มีตัวอย่างจำนวนเล็กน้อยในบริบทเพื่อสร้างเอกสาร CTO สั่งให้โปรแกรมเมอร์จัดทำคำแนะนำการตั้งค่าสิ่งที่สภาพแวดล้อมต้องพึ่งพา และสร้างเอกสารอย่าง “dependency requirements.txt” ในเวลาเดียวกัน CEO ส่งข้อกำหนดและการออกแบบระบบให้ CPO เพื่อจัดทำคู่มือผู้ใช้
ผลลัพธ์
สถิติซอฟต์แวร์
เพื่อวิเคราะห์ประสิทธิภาพของ ChatDev ทีมพัฒนาจัดทำการวิเคราะห์ทางสถิติเกี่ยวกับซอฟต์แวร์ที่สร้างโดย ChatDev ตามเมตริกหลักๆ เช่น โทเค็นที่ใช้ จำนวนรอบสนทนาทั้งหมด สินทรัพย์ภาพ ไฟล์ซอฟต์แวร์ การอัปเดตเวอร์ชัน และอื่นๆ

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

กรณีศึกษา
รูปด้านล่างแสดงให้เห็นถึง ChatDev ที่กำลังพัฒนาซอฟต์แวร์ Five in a Row หรือ Gomoku

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

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












