CCA · Foundations

ตัวอย่าง input/output ชนะคำอธิบายเป็นร้อยแก้ว

แนวคิด

เมื่อเราอยากสื่อว่าต้องการ transformation แบบไหน การอธิบายเป็นร้อยแก้วมักถูกตีความไม่สม่ำเสมอ เพราะภาษาธรรมชาติกำกวม คำว่า "จัดรูปแบบให้เรียบร้อย" หรือ "แปลงข้อมูลให้ถูก" เปิดช่องให้เดาได้หลายทาง วิธีที่ได้ผลกว่าคือให้ตัวอย่าง input กับ output ที่เป็นรูปธรรมสองถึงสามคู่ ตัวอย่างบอกสิ่งที่คำบรรยายบอกไม่ได้ คือขอบเขตและ edge case ที่แท้จริง

หลักนี้ต่อยอดมาจากการให้ verification criteria ที่ชัด แทนที่จะสั่งลอย ๆ ว่า "เขียนฟังก์ชัน validate อีเมล" ให้ระบุ example test case ไปด้วย เช่น user@example.com ต้องได้ true, invalid ต้องได้ false, user@.com ต้องได้ false ตัวอย่างเหล่านี้ตรึงพฤติกรรมที่คาดหวังให้ Claude เห็นชัดตั้งแต่ต้น แล้วสั่งให้รันเทสต์หลัง implement เพื่อให้มันวนแก้เองจนผ่าน

ทำไมสำคัญ

เหตุผลที่ตัวอย่างทรงพลังคือมันปิดช่องว่างระหว่าง "สิ่งที่เราคิด" กับ "สิ่งที่เราเขียน" คำบรรยายเป็นร้อยแก้วเก็บ intent ได้ไม่ครบ พอ Claude ตีความต่าง ผลลัพธ์ก็เพี้ยน การให้ตัวอย่างที่ครอบกรณีปกติและกรณีมุมทำให้ Claude generalize ไปยัง input ใหม่ ๆ ที่หน้าตาคล้ายกันได้ ไม่ใช่แค่แมตช์กรณีที่เราระบุตรง ๆ

จุดที่ได้ผลชัดคือการแก้ edge case ที่พลาดบ่อย เช่นค่า null ใน migration script แทนที่จะบอกว่า "จัดการ null ให้ดีขึ้น" ให้ยกตัวอย่างเจาะจงว่า input ที่มีฟิลด์เป็น null ควรออกมาเป็นอะไร Claude จะเข้าใจกฎที่เราต้องการทันที ตัวอย่างจึงเป็นเครื่องมือ iterative refinement ที่ประหยัดรอบการแก้ เพราะแทนที่จะอธิบายซ้ำหลายรอบว่าทำไมผลยังไม่ตรง เราชี้ด้วยคู่ input/output ที่ต้องการแล้วปล่อยให้มันปรับเข้าหาเป้า

ตัวอย่าง

❌ กำกวม
"เขียนฟังก์ชันแปลงหน่วยวัดที่ไม่เป็นทางการให้เป็นตัวเลข"

✅ มีตัวอย่าง input/output เป็นรูปธรรม
"เขียนฟังก์ชัน parseAmount แปลงข้อความหน่วยวัดเป็นกรัม ตัวอย่าง:
  '2 ช้อนโต๊ะ'   → 30
  'หยิบมือ'      → 2
  '250g'         → 250
  ''             → 0     (input ว่างคืน 0 ไม่ throw)
เขียนเทสต์ครอบทั้งสี่กรณีนี้ แล้วรันให้ผ่านก่อนบอกว่าเสร็จ"

เช็คความเข้าใจ

ทำไมตัวอย่าง input/output จึงสื่อความต้องการได้ดีกว่าคำอธิบายเป็นร้อยแก้ว

เวลาจะแก้ edge case ที่พลาด เช่นค่า null ควรสื่อกับ Claude อย่างไร

อ่านต่อ