เพลย์บุ๊ก Prompt Engineering สำหรับโปรแกรมเมอร์
(addyo.substack.com)1. บทนำ: พรอมป์ต์เป็นตัวกำหนดประสิทธิภาพการพัฒนาซอฟต์แวร์
- ประสิทธิภาพของผู้ช่วยเขียนโค้ดด้วย AI ขึ้นอยู่กับคุณภาพของพรอมป์ต์ คำขอที่ชัดเจนจะให้โค้ดที่ละเอียดแม่นยำ ส่วนคำถามที่คลุมเครือจะให้ผลลัพธ์ที่ใช้งานไม่ได้
- วิธีเขียนพรอมป์ต์ได้กลายเป็นทักษะจำเป็นสำหรับนักพัฒนาแล้ว และมันก็เหมือนกับการฝึกคู่หูในการพัฒนาให้ทำงานร่วมกันได้ดี
- บทความนี้จะแสดงให้เห็นผ่านตัวอย่างใช้งานจริงและการเปรียบเทียบว่า “คำถามที่ดี” สร้าง “โค้ดที่ดี” ได้อย่างไร
2. 7 หลักการของพรอมป์ต์ที่มีประสิทธิภาพ
① ให้บริบท
- AI ไม่รู้ฉากหลังของโปรเจ็กต์ของผู้ใช้ จึงควรระบุภาษา เฟรมเวิร์ก ไลบรารี ข้อความ error และเป้าหมายให้ชัดเจน
- ตัวอย่าง: ใส่ฉากหลังทางเทคนิคเช่น “เกิด TypeError ระหว่าง fetch user ในสภาพแวดล้อม Node.js + Express + Mongoose”
② ทำเป้าหมายให้ชัดเจน
- “โค้ดใช้ไม่ได้” ไม่ได้ช่วยอะไร ควรถามให้แม่นยำ เช่น “ผลลัพธ์ที่คาดหวังคือ ○○ แต่ผลจริงเป็น △△ ทำไมถึงเป็นแบบนั้น?”
③ แยกงานซับซ้อนออกเป็นส่วนย่อย
- การขอเป็นขั้นตอนจะมีประสิทธิภาพมากกว่าการถามรวดเดียวทั้งฟีเจอร์ เช่น คอมโพเนนต์ > การจัดการสถานะ > การเชื่อมต่อ API
④ ใส่ตัวอย่างอินพุต/เอาต์พุต
- เมื่อแสดงตัวอย่างผลลัพธ์ที่ต้องการ AI จะเข้าใจเจตนาได้ดีขึ้น (e.g.
[3,1,4]→[1,3,4])
⑤ กำหนดบทบาท
- การกำหนดบทบาท เช่น “ช่วยรีวิวโค้ดเหมือนเป็นนักพัฒนา React ระดับซีเนียร์” จะช่วยเพิ่มความลึกและคุณภาพของคำตอบ
⑥ ปรับปรุงแบบโต้ตอบและทำซ้ำ
- คำตอบแรกไม่จำเป็นต้องสมบูรณ์แบบ หากให้ฟีดแบ็ก AI จะต่อยอดจากบริบทเดิมและค่อย ๆ ให้ผลลัพธ์ที่แม่นขึ้น
⑦ รักษาความสม่ำเสมอของโค้ด
- ถ้าตัวโค้ดมีความสม่ำเสมอทั้งชื่อฟังก์ชัน รูปแบบ และคอมเมนต์ AI ก็จะรักษาแนวทางนั้นไว้ ทำให้คุณภาพดีขึ้น
3. กลยุทธ์การเขียนพรอมป์ต์สำหรับการดีบัก
① ระบุ error และเปรียบเทียบกับพฤติกรรมที่คาดหวัง
- หากให้ทั้งข้อความ error อาการของปัญหา ผลลัพธ์ที่คาดหวัง และค่าป้อนเข้า AI จะวิเคราะห์ได้อย่างแม่นยำ
② ขอให้ไล่ตรวจทีละบรรทัด
- คำขออย่าง “ช่วยไล่ทีละขั้นว่าค่าตัวแปรนี้เริ่มผิดปกติจากตรงไหน” มีประสิทธิภาพกับบั๊กลอจิกที่ซับซ้อน
③ ให้โค้ดสำหรับการจำลองปัญหาแบบขั้นต่ำ
- หากให้เฉพาะโค้ดส่วนสำคัญที่ทำให้เกิดปัญหาแทนการส่งทั้งโปรเจ็กต์ AI จะวิเคราะห์สาเหตุได้แม่นยำกว่า
④ ถามต่ออย่างชัดเจน
- แทนที่จะถามว่า “ทำไมถึงได้ผลลัพธ์แบบนี้?” การถามตรง ๆ เช่น “เงื่อนไขส่วนไหนผิดในจุดนี้?” จะดีกว่า
⑤ ตัวอย่างเปรียบเทียบ: คำถามแย่ vs. คำถามดี
- หากพูดแค่ว่า “โค้ดใช้ไม่ได้” ก็จะได้เพียงคำตอบเชิงคาดเดา แต่ถ้าให้ทั้งข้อความ error และโค้ด ก็จะได้วิธีแก้ที่แม่นยำ
4. กลยุทธ์การเขียนพรอมป์ต์สำหรับการรีแฟกเตอร์และการเพิ่มประสิทธิภาพ
① ทำเป้าหมายของการรีแฟกเตอร์ให้ชัดเจน
- แทนที่จะพูดแค่ว่า “ช่วยรีแฟกเตอร์ให้หน่อย” ควรระบุเป้าหมายการปรับปรุงให้ชัด เช่น “เพิ่มความอ่านง่าย ปรับปรุงประสิทธิภาพ อัปเดต API ให้ทันสมัย”
- ถ้าเป้าหมายคลุมเครือ AI อาจพยายามปรับแบบสุ่มหรือเปลี่ยนไปในทิศทางที่ไม่ต้องการ
② ให้บริบทของภาษา/สภาพแวดล้อม
- หากบอกข้อจำกัดทางเทคนิคหรือสไตล์ของโปรเจ็กต์ เช่น “แปลง React class component → function component”, “สภาพแวดล้อม Node.js 14” ก็จะได้การแปลงที่เหมาะสม
③ ขอคำอธิบายประกอบด้วย
- หากขอทั้งโค้ดที่รีแฟกเตอร์แล้วและคำอธิบายว่า “ทำไมถึงเปลี่ยนแบบนี้” ก็จะได้ทั้งประโยชน์ด้านการตรวจคุณภาพโค้ดและการเรียนรู้
④ ยกระดับด้วยคำขอตามบทบาท
- คำขออย่าง “ช่วยรีแฟกเตอร์เหมือนเป็นนักพัฒนา TypeScript ระดับซีเนียร์” จะช่วยดึงข้อเสนอการปรับปรุงที่ลึกและทันสมัยยิ่งขึ้น
5. กลยุทธ์การเขียนพรอมป์ต์สำหรับการพัฒนาฟีเจอร์ใหม่
① แบ่งฟีเจอร์ออกเป็นขั้นตอนแล้วค่อยขอ
- แม้เป็นฟีเจอร์ซับซ้อน หากแบ่งเป็น “ออกแบบโครงสร้างฟีเจอร์ → สร้าง UI → เชื่อมลอจิก” ก็จะได้ผลลัพธ์ที่เสถียรกว่า
② ให้สไตล์โค้ดเดิมของโปรเจ็กต์
- หากยกตัวอย่างคอมโพเนนต์ที่คล้ายกันหรือ convention ภายใน ก็จะได้โค้ดที่สอดคล้องกับโปรเจ็กต์ เช่น “สร้าง ProductList โดยอ้างอิงจาก UserList”
③ สื่อเจตนาด้วยคอมเมนต์/TODO
- ใน IDE หากใส่คอมเมนต์ภาษาธรรมชาติเช่น
// TODO: 요청 유효성 검증 구현Copilot จะสร้างบล็อกโค้ดที่ตรงตามเจตนาให้อัตโนมัติ
④ ยกตัวอย่างอินพุต/เอาต์พุต
- เมื่อระบุค่าป้อนเข้าและผลลัพธ์ที่คาดหวัง AI จะพยายามทำให้ตรงตามนั้นและเพิ่มความแม่นยำได้
⑤ ปรับปรุงซ้ำด้วยฟีดแบ็ก
- แม้ผลลัพธ์แรกจะยังไม่ตรงความคาดหวัง หากให้ฟีดแบ็กเช่น “กรุณาใช้ map แทน filter” AI ก็จะปรับตามได้ทันทีและพัฒนาต่อไป
6. 7 รูปแบบของพรอมป์ต์ที่มักล้มเหลว (Anti-patterns)
① คำขอที่คลุมเครือ
- คำถามอย่าง “ทำไมโค้ดนี้ใช้ไม่ได้?” จะดึงได้เพียงคำตอบกว้าง ๆ ที่ไม่ค่อยมีความหมาย ควรใส่ข้อความ error โค้ด และผลลัพธ์ที่คาดหวังด้วย
② ขอมากเกินไปในครั้งเดียว
- คำขอผสมหลายอย่าง เช่น “สร้างทั้งแอป + เพิ่มระบบยืนยันตัวตน + ใส่สคริปต์ deploy” มักทำให้ตกหล่นหรือสับสน จึงควรแยกเป็นขั้นตอน
③ ไม่มีคำถาม
- ถ้าโยนโค้ดมาอย่างเดียวโดยไม่มีคำขอ AI มักสรุปเนื้อหาหรือให้ผลลัพธ์ที่ไม่เกี่ยวข้อง จึงควรระบุจุดประสงค์ของคำถามให้ชัด
④ เกณฑ์ความสำเร็จไม่ชัดเจน
- “ทำให้เร็วขึ้น”, “เปลี่ยนให้ดีขึ้น” เป็นเกณฑ์ที่คลุมเครือ เช่น ควรระบุให้วัดได้อย่าง “ปรับให้เป็นความซับซ้อนเวลา O(n)”
⑤ เมินคำถามของ AI
- หาก AI ถามว่า “นี่เป็นแบบ functional หรือ class?” ก็ควรตอบเพื่อให้ได้ผลลัพธ์ที่เหมาะสมที่สุด
⑥ ขาดความสม่ำเสมอ
- หากสไตล์ ไวยากรณ์ และคำศัพท์เปลี่ยนไปเรื่อย ๆ AI ก็จะสับสนเช่นกัน การรักษาสไตล์เดียวกันจะช่วยยกระดับคุณภาพคำตอบ
⑦ การอ้างอิงกำกวมอย่าง “โค้ดด้านบน”
- ยิ่งบทสนทนายาวขึ้น “โค้ดด้านบน” ก็ยิ่งไม่ชัดเจน ควรแสดงโค้ดอีกครั้งหรือระบุชื่อฟังก์ชันอย่างชัดเจนให้มากที่สุด
7. บทสรุป: การทำงานร่วมกับ AI คือบทสนทนาแบบวนซ้ำ
- Prompt engineering ได้กลายเป็นทักษะการสื่อสารหลักของนักพัฒนาไปแล้ว พื้นฐานสำคัญคือการให้บริบท การตั้งเป้าหมายให้ชัด และการปรับปรุงซ้ำ
- AI ไม่ใช่แค่ผู้ช่วยเขียนโค้ด แต่เป็นทั้งผู้ร่วมงานและคู่หูในการเรียนรู้ หากใช้อย่างถูกวิธีจะช่วยเพิ่มทั้งประสิทธิภาพและทักษะการพัฒนา
- หากใช้กลยุทธ์หลากหลาย เช่น การทดลอง การให้ฟีดแบ็ก และการกำหนดบทบาท ก็สามารถใช้งาน AI ได้เหมือนเป็นสมาชิกทีมจริง ๆ
- เป้าหมายสุดท้ายคือการสร้างโค้ดได้เร็วและแม่นยำขึ้น แต่ขณะเดียวกันก็ควรใช้เป็นเครื่องมือเรียนรู้เพื่อก้าวไปเป็นนักพัฒนาที่ดียิ่งขึ้นด้วย
ตารางเปรียบเทียบพรอมป์ต์ที่ดี vs แย่
| ประเภท | การดีบัก | การรีแฟกเตอร์ | การพัฒนาฟีเจอร์ |
|---|---|---|---|
| พรอมป์ต์ที่ดี | จุดที่เกิด TypeError อยู่ตรงนี้ ค่าที่คาดหวังคือ ○○ แต่กลับได้ NaN กรุณาช่วยหาสาเหตุ |
ช่วยลบความซ้ำซ้อนของฟังก์ชันนี้และเพิ่มประสิทธิภาพ แยกส่วน fetch ออกเป็น helper และคงข้อความ error เดิมไว้ |
ช่วยสร้างคอมโพเนนต์ ProductList ที่มีช่องค้นหา รับ JSON จาก /api/products มาฟิลเตอร์รายการ และรวมสถานะ error กับ loading ด้วย |
| พรอมป์ต์ที่แย่ | ทำไมฟังก์ชันของผมใช้ไม่ได้? |
ช่วยรีแฟกเตอร์ให้หน่อย |
ช่วยทำฟังก์ชันค้นหาให้หน่อย |
5 ความคิดเห็น
ก็ไม่ต่างจากวิธีรับมือกับโปรแกรมเมอร์ที่เป็นมนุษย์เลยนะครับ
คู่มือเพลย์บุ๊ก Prompt Engineering สำหรับโปรแกรมเมอร์
โปรดดูเวอร์ชันที่บอตสรุป GN+ สรุปไว้ประกอบด้วย คอมเมนต์สรุปของ Hacker News ก็น่าอ่านเช่นกัน
คุณโพสต์ก่อนแล้วนี่เอง..
ขอบคุณครับ
บอกแล้วบอกอีกว่าอย่าทำแบบนี้ แต่พวกนี้ก็ยังมีแบบหนึ่งในสิบที่ทำอยู่ดี -_-
มนุษย์จะไปรู้อะไร!