วงรอบ: ความตั้งใจ → สร้าง → ตรวจสอบ → ปรับแก้
ทุกอย่างในหนังสือเล่มนี้วนกลับมาที่วงรอบเดียวนี้ จงจำมันให้ขึ้นใจ
วงรอบนี้จะหมุนไปเรื่อยๆ จนกว่าผลลัพธ์จะถึงมาตรฐานของคุณ — และการตรวจสอบคือประตูที่มันต้องผ่านทุกครั้ง:
┌──────────────────────────────────────────────┐
│ │
▼ │
┌────────┐ ┌──────────┐ ┌────────┐ ┌──────────┐
│ INTENT │ ─▶ │ GENERATE │ ─▶ │ REVIEW │ ─▶ │ REFINE │
│ (spec) │ │ (AI) │ │ (you) │ │ (you) │
└────────┘ └──────────┘ └───┬────┘ └──────────┘
│
pass? ▼
┌──────────┐
│ SHIP │
└──────────┘
- ความตั้งใจ (Intent) ระบุสิ่งที่คุณต้องการและข้อจำกัดที่สำคัญ — อินพุต เอาต์พุต เคสขอบ ( case) สแตกที่ใช้ สไตล์การเขียน ความตั้งใจที่คลุมเครือจะให้โค้ดที่คลุมเครือ
- สร้าง (Generate) ปล่อยให้โมเดลเขียนส่วนที่ทำงานจริง อย่าจับมือมันเขียนไวยากรณ์ทีละบรรทัด แต่อธิบายพฤติกรรมที่ต้องการ
- ตรวจสอบ (Review) อ่านสิ่งที่ได้กลับมา มันทำในสิ่งที่ควรทำจริงหรือไม่ มันจัดการกับลิสต์ว่าง ค่า null หรือการเรียกเครือข่ายที่ล้มเหลวหรือไม่ นี่คือเวอร์ชัน ที่ง่ายที่สุด ที่ใช้งานได้แล้วหรือยัง
- ปรับแก้ (Refine) ชี้จุดที่ผิด ให้การแก้ไขที่เป็นรูปธรรม แล้วสร้างใหม่ ทำซ้ำจนกว่าจะถึงมาตรฐานของคุณ
ผู้เริ่มต้นส่วนใหญ่ข้ามขั้นตอนที่ 3 ไป พวกเขาสร้าง มันรัน แล้วก็ไปต่อ จากนั้นมันก็พังในโปรดักชันด้วยเคสที่ไม่เคยถูกระบุไว้เลย ขั้นตอนการตรวจสอบคือจุดที่งานวิศวกรรมเกิดขึ้นจริง
นี่คือตัวอย่างพรอมป์แรกที่ดีในวงรอบนี้:
Write a TypeScript function `parseDuration(input: string): number`
that converts strings like "1h30m", "45s", "2d" into total seconds.
Requirements:
- Support units: d (days), h (hours), m (minutes), s (seconds).
- Multiple units can combine: "1h30m" = 5400.
- Reject invalid input (empty, unknown units, negative) by throwing
an Error with a clear message.
- No external libraries. Include 5 unit tests covering the edge cases.
Show the function and tests only.
สังเกตโครงสร้าง: ลายเซ็นฟังก์ชันที่แม่นยำ กฎที่ชัดเจน เคสขอบที่ถูกระบุออกมา ข้อจำกัดที่ระบุไว้ และคำขอให้มีเทสต์ด้วย คุณไม่ได้หวังว่าโมเดลจะเดาถูก — คุณกำลังกำจัดความคลุมเครือที่ทำให้เกิดการเดาผิด
ขั้นตอนการปรับแก้เป็นทักษะพอๆ กับพรอมป์แรกเลย ฟีดแบ็กที่คลุมเครือจะได้การแก้ไขที่คลุมเครือ ลองเปรียบเทียบการแก้ไขสองแบบนี้:
Bad: "this is wrong, fix it"
Good: "parseDuration('1h30m') returns 90 instead of 5400 — you're
summing the numbers but ignoring the unit multipliers. Multiply
each value by its unit's seconds (d=86400, h=3600, m=60, s=1)
before summing. Also add a test for the combined case '2d3h'."
เวอร์ชันที่ดีระบุอาการ สาเหตุ และวิธีแก้ คุณกำลังตรวจสอบเหมือนกับที่คุณจะตรวจ ของเพื่อนร่วมงาน — และยิ่งคุณชี้ได้แม่นยำเท่าไร คุณก็ใช้รอบน้อยลงเท่านั้น แต่ละวงรอบควร บรรจบ เข้าหาคำตอบ ถ้าคุณพบว่าตัวเองกำลังวนอยู่ในที่เดิม นั่นคือสัญญาณว่าความตั้งใจของคุณระบุไว้ไม่ครบ หยุดสร้างใหม่แล้วกลับไปเขียนสเปกใหม่แทน