ให้บริบทก่อนให้โจทย์
AI มองไม่เห็นโปรเจกต์ของคุณแบบที่คุณมองเห็น มันไม่รู้เวอร์ชันเฟรมเวิร์กที่คุณใช้ ไม่รู้โครงสร้างไฟล์ ไม่รู้ธรรมเนียม (convention) ที่คุณวางไว้แล้ว เมื่อคุณข้ามส่วนนี้ไป มันจะเดา — และเดาผิดด้วย ที่แย่กว่านั้นคือมันเดาอย่าง มั่นใจ จนผลลัพธ์ดูสมเหตุสมผลไปเรื่อย ๆ จนกว่าจะไปชนกับโค้ดจริงของคุณ
ลองเทียบพรอมต์สองแบบสำหรับคำขอเดียวกันนี้
Add a function to validate emails.
This is a TypeScript backend using Express and Zod for validation.
We already validate inputs with Zod schemas in src/schemas/.
Add an email validation schema in that style. Emails must be
lowercase, max 254 chars, and reject disposable domains from
the existing BLOCKED_DOMAINS list in src/config.ts.
พรอมต์แรกจะได้โค้ดทั่ว ๆ ไปที่อาจใช้ regex แบบที่คุณไม่ต้องการ และเขียนในสไตล์ที่ไม่ตรงกับโค้ดเบสของคุณ ส่วนพรอมต์ที่สองจะได้โค้ดที่วางลงไปใช้ได้เลย กฎคือ บอกสแตกเทคโนโลยี ธรรมเนียมที่ใช้ และชิ้นส่วนที่มีอยู่แล้วที่ AI ควรนำมาใช้ซ้ำ
พรอมต์ที่ดีจะเรียงชิ้นส่วนเหล่านี้เป็นลำดับ จากฐานขึ้นไป — บริบทอยู่ล่างสุด คำขอจริงอยู่บนสุด:
┌──────────────────────────────┐
│ EXAMPLES │ one input → output
├──────────────────────────────┤
│ CONSTRAINTS │ what NOT to do
├──────────────────────────────┤
│ EDGE CASES │ empty, invalid, errors
├──────────────────────────────┤
│ INPUTS / OUTPUTS │ types and shapes
├──────────────────────────────┤
│ GOAL │ one clear task
├──────────────────────────────┤
│ CONTEXT │ stack, files, patterns
└──────────────────────────────┘
foundation first ▲
รายการที่ควรเช็กก่อนกดส่ง: ภาษาและเฟรมเวิร์ก (พร้อมเวอร์ชันถ้ามีผล) ไฟล์หรือโมดูลที่เกี่ยวข้อง แพตเทิร์นที่มีอยู่แล้วในโปรเจกต์ และไลบรารีที่ AI ควรเลือกใช้หรือหลีกเลี่ยง คุณไม่จำเป็นต้องใส่ทั้งสี่อย่างทุกครั้ง — แต่ถ้าคำตอบจะเปลี่ยนไปตามข้อใดข้อหนึ่ง ให้ระบุมันออกมา เมื่อไม่แน่ใจ ให้วาง signature จริง type จริง หรือ config จริงที่โค้ดใหม่ต้องเข้ากันได้ โค้ดที่มีอยู่แล้วเพียงไม่กี่บรรทัดสอน AI เรื่องธรรมเนียมของคุณได้มากกว่าคำบรรยายทั้งย่อหน้าเสียอีก