3. Prompt Engineering
หน้าหลัก › โมดูล 3: Prompt Engineering
บทเรียน 3.2

ให้ Constraints ที่ชัดเจน

การบอก Claude ว่า 'ห้ามทำอะไร' สำคัญพอๆ กับบอกว่า 'ให้ทำอะไร' constraints ที่ชัดเจนช่วยให้ได้โค้ดที่เข้ากับโปรเจกต์

เมื่อเรียนจบบทนี้ คุณจะ…

  • อธิบายความสำคัญของข้อจำกัด (Constraints) ได้
  • จำแนกประเภทของข้อจำกัดได้
  • นำข้อจำกัดไปใช้สั่งงาน AI ได้อย่างมีประสิทธิภาพ
กำหนดขอบเขตชัด ๆ ช่วยให้ Claude ทำตรงเป้า
กำหนดขอบเขตชัด ๆ ช่วยให้ Claude ทำตรงเป้า

ทำไมต้องบอก Claude ว่า 'ห้ามทำอะไร'?

ลองจินตนาการว่าคุณกำลังขอให้เชฟฝีมือดีทำอาหารจานพิเศษให้ แต่คุณลืมบอกไปว่า 'ห้ามใส่มะเขือเทศนะ เพราะฉันแพ้' ผลลัพธ์ที่ได้อาจจะอร่อย แต่ก็กินไม่ได้อยู่ดีใช่ไหมครับ? เช่นเดียวกันกับ Claude ครับ ถึงแม้เขาจะเก่งและฉลาดมากในการเขียนโค้ด แต่ถ้าเราไม่บอก 'ข้อจำกัด' หรือ 'สิ่งที่ห้ามทำ' ให้ชัดเจน เขาอาจจะสร้างโค้ดที่ทำงานได้ดี แต่กลับไม่ตรงกับความต้องการเฉพาะเจาะจงของโปรเจกต์เราได้ครับ

การบอก 'ห้ามทำอะไร' (Constraints) จึงสำคัญพอๆ กับการบอก 'ให้ทำอะไร' เลยครับ มันช่วยให้ Claude เข้าใจขอบเขตการทำงานได้ชัดเจนขึ้น ทำให้ผลลัพธ์ที่ได้ตรงใจเราและเข้ากับโปรเจกต์ของเราได้แบบไร้รอยต่อ เหมือนเราได้อาหารที่ทั้งอร่อยและปลอดภัยสำหรับเรานั่นแหละครับ

การบอก 'ห้ามทำอะไร' คือการกำหนดขอบเขตให้ Claude ทำงานได้ตรงจุดและปลอดภัย

รู้จักประเภทของข้อจำกัด (Constraints) ที่เราใช้ได้

ข้อจำกัดที่เราสามารถบอก Claude ได้นั้นมีหลายประเภท เหมือนกับการกำหนดกฎเกณฑ์ในสถานการณ์ต่างๆ ในชีวิตประจำวัน ลองมาดูกันว่ามีอะไรบ้าง:

1. ข้อจำกัดทางเทคนิค (Technical Constraints): อันนี้คือการบอกว่าให้ใช้เทคโนโลยีหรือวิธีการเขียนโค้ดแบบไหน เช่น 'ใช้ TypeScript เท่านั้น ห้ามใช้ JavaScript ธรรมดา' หรือ 'ห้ามใช้ `any` ใน TypeScript เด็ดขาด' เหมือนกับการบอกช่างไม้ว่า 'ให้ใช้เลื่อยมือเท่านั้น ห้ามใช้เลื่อยไฟฟ้า'

2. ข้อจำกัดขอบเขตงาน (Scope Constraints): คือการกำหนดว่า Claude สามารถเข้าไปแก้ไขส่วนไหนได้บ้าง หรือห้ามแตะส่วนไหนเลย เช่น 'แก้เฉพาะไฟล์ index.ts เท่านั้น ห้ามแตะไฟล์อื่นในโปรเจกต์' หรือ 'ห้ามเพิ่มฟังก์ชันใหม่ แค่ปรับปรุงฟังก์ชันเดิม' เหมือนกับการบอกช่างว่า 'ซ่อมแค่ตรงนี้พอนะ อย่าไปยุ่งกับส่วนอื่นของบ้าน'

3. ข้อจำกัดด้านสไตล์และโครงสร้าง (Style & Structure Constraints): เป็นการบอกให้ Claude เขียนโค้ดตามรูปแบบที่เรามีอยู่แล้ว หรือห้ามเพิ่มอะไรที่ไม่จำเป็น เช่น 'เขียนโค้ดตามรูปแบบ (code style) ที่มีอยู่เดิม' หรือ 'ห้ามเพิ่มไลบรารี (library) หรือ dependency ใหม่' เหมือนกับการบอกให้แต่งตัวให้เข้ากับธีมงานปาร์ตี้

4. ข้อจำกัดด้านความปลอดภัย (Security Constraints): อันนี้สำคัญมากๆ ครับ เป็นการป้องกันไม่ให้ Claude สร้างโค้ดที่อาจก่อให้เกิดปัญหาด้านความปลอดภัย เช่น 'ห้าม hardcode รหัสผ่านหรือข้อมูลสำคัญลงในโค้ดโดยตรง' หรือ 'ห้ามลบข้อมูลสำคัญออกจากฐานข้อมูล' เหมือนกับการบอกว่า 'ห้ามเปิดเผยข้อมูลส่วนตัวของลูกค้าเด็ดขาด'

การแยกประเภทช่วยให้เราคิดข้อจำกัดได้ครบถ้วนและครอบคลุมทุกด้าน

ใส่ข้อจำกัดใน Prompt ของเรายังไง?

เมื่อเราเข้าใจแล้วว่าข้อจำกัดมีกี่ประเภท ทีนี้มาดูกันว่าเราจะบอก Claude ได้ยังไงใน Prompt ของเราครับ หลักการง่ายๆ คือ ให้ใส่ข้อจำกัดเหล่านี้ไว้ท้ายๆ ของ Prompt เสมอ โดยระบุให้ชัดเจนและเป็นข้อๆ ครับ

การทำแบบนี้จะช่วยให้ Claude ประมวลผลคำสั่งหลักของเราก่อน แล้วค่อยนำข้อจำกัดมาพิจารณาตอนสร้างโค้ด ทำให้ผลลัพธ์ที่ได้ทั้งตรงตามความต้องการและอยู่ในกรอบที่เรากำหนดไว้ครับ

  1. 1. เริ่มต้นด้วยคำสั่งหลักที่เราอยากให้ Claude ทำ เช่น 'ช่วยปรับปรุงฟังก์ชันนี้ให้ทำงานเร็วขึ้นหน่อย'
  2. 2. ตามด้วยประโยคที่บอกถึงข้อจำกัด เช่น 'โดยมีข้อจำกัดดังนี้:' หรือ 'แต่ต้องทำตามกฎเหล่านี้:'
  3. 3. ระบุข้อจำกัดแต่ละข้อให้ชัดเจนและเป็นข้อๆ เช่น 'ห้ามเปลี่ยนชื่อหรือจำนวนพารามิเตอร์ของฟังก์ชัน (function signature)', 'ห้ามติดตั้งหรือเพิ่มไลบรารี (library) ใหม่', 'โค้ดที่ได้ต้องยังคงผ่านการทดสอบ (test) เดิมทั้งหมด'
ยิ่งชัดเจน Claude ยิ่งทำงานได้ตรงใจเรามากขึ้นนะ!

ตัวอย่าง: ลองใช้ Constraints กับสถานการณ์จริง

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

ช่วยปรับปรุงฟังก์ชัน calculateTotalAmount(items: Item[]): number นี้ให้ทำงานเร็วขึ้น โดยมีข้อจำกัดดังนี้: - ห้ามเปลี่ยนชื่อฟังก์ชัน หรือจำนวนและชนิดของพารามิเตอร์ (function signature) เด็ดขาด - ห้ามเพิ่มไลบรารี (library) หรือ dependency ใหม่เข้ามาในโปรเจกต์ - โค้ดที่ปรับปรุงแล้วต้องยังคงผ่านการทดสอบ (test) เดิมทั้งหมด - ต้องใช้ TypeScript เท่านั้น และห้ามใช้ `any`

ในตัวอย่างนี้ เราได้บอกทั้ง 'สิ่งที่ต้องการ' (ปรับปรุงฟังก์ชันให้เร็วขึ้น) และ 'สิ่งที่ห้ามทำ' (ห้ามเปลี่ยน signature, ห้ามเพิ่ม library, ต้องผ่าน test, ใช้ TypeScript เท่านั้น) ทำให้ Claude มีข้อมูลที่ครบถ้วนและสามารถสร้างโค้ดที่เหมาะสมที่สุดให้เราได้ครับ

ลองปรับใช้กับโค้ดของคุณเองดูนะ จะเห็นผลลัพธ์ที่แตกต่าง!

เคล็ดลับ: ข้อจำกัดที่ใช้บ่อย เก็บไว้ที่ไหนดี?

บางครั้ง เราอาจจะมีข้อจำกัดบางอย่างที่ต้องใช้บ่อยๆ กับทุกๆ งาน หรือทุกๆ ไฟล์ในโปรเจกต์ เช่น 'ห้ามใช้ `any` ใน TypeScript' หรือ 'ห้ามเพิ่ม `console.log` ในโค้ดจริง' การพิมพ์ข้อจำกัดเหล่านี้ซ้ำๆ ทุกครั้งใน Prompt อาจจะเสียเวลาและทำให้เราลืมได้

Claude มีวิธีที่ฉลาดในการจัดการกับข้อจำกัดเหล่านี้ครับ นั่นคือการใช้ไฟล์ CLAUDE.md! คุณสามารถสร้างไฟล์นี้ไว้ในโปรเจกต์ของคุณ และใส่ข้อจำกัดที่ต้องการให้ Claude จำไว้เสมอในส่วนที่ชื่อว่า NEVER ครับ เหมือนกับการเขียนกฎประจำบ้านที่ทุกคนต้องจำและทำตามนั่นเอง

  1. 1. สร้างไฟล์ชื่อ CLAUDE.md ในโฟลเดอร์หลักของโปรเจกต์ของคุณ (ถ้ายังไม่มี)
  2. 2. ในไฟล์ CLAUDE.md ให้สร้างส่วนหัวข้อ NEVER โดยใช้ ## NEVER
  3. 3. ภายใต้หัวข้อ NEVER ให้ใส่ข้อจำกัดที่คุณอยากให้ Claude *ห้ามทำ* เสมอในโปรเจกต์นี้ เช่น ``` ## NEVER - ห้ามใช้ `any` ใน TypeScript เด็ดขาด - ห้ามเพิ่ม `console.log` ในโค้ดจริง - ห้ามแก้ไขไฟล์ package.json ```
  4. 4. เมื่อคุณเรียกใช้ Claude ในโปรเจกต์นี้ Claude จะอ่านไฟล์ CLAUDE.md โดยอัตโนมัติ และนำข้อจำกัดในส่วน NEVER ไปพิจารณาในการสร้างโค้ดทุกครั้ง โดยที่คุณไม่ต้องพิมพ์ซ้ำใน Prompt เลยครับ
การใช้ CLAUDE.md ช่วยประหยัดเวลาและทำให้โค้ดของเรามีมาตรฐานเดียวกันทั้งโปรเจกต์
ลองใช้ Prompt นี้กับ Claude
ช่วยแก้ฟังก์ชันนี้ให้เร็วขึ้น โดยมีข้อจำกัด: ห้ามเปลี่ยน signature ของฟังก์ชัน, ห้ามเพิ่ม library ใหม่, ต้องผ่าน test เดิมทั้งหมด
เคล็ดลับ: constraints ที่ใช้ทุกครั้ง เช่น 'ห้ามใช้ any' ให้ใส่ในส่วน NEVER ของ CLAUDE.md
สรุปบทนี้
  • บอก 'ห้ามทำอะไร' ด้วย
  • มี constraints แบบเทคนิค/ขอบเขต/สไตล์/security
  • constraints ประจำใส่ใน CLAUDE.md
แบบทดสอบท้ายบท
ลองตอบดู แล้วระบบจะเฉลยให้ทันที
ข้อ 1.ทำไมเราถึงต้องบอก AI ว่า 'ห้ามทำอะไร'?
เฉลย: การบอก 'ห้ามทำอะไร' ช่วยให้ AI ไม่ทำสิ่งที่เราไม่ต้องการ และทำงานได้ตรงเป้าหมายมากขึ้น
ข้อ 2.ข้อใดไม่ใช่ประเภทของข้อจำกัดที่พูดถึงในบทเรียนนี้?
เฉลย: ในบทเรียนพูดถึงข้อจำกัดด้านเทคนิค ขอบเขต สไตล์ และความปลอดภัย ไม่ได้พูดถึงด้านราคา