บทเรียน 88 · Frontend · Agentic Workflow

prompt ที่ดี (1) — ชัดเจน · ให้ตัวอย่าง · ให้คิดทีละขั้น

~25 นาที · ควรผ่าน บท 87 (Agentic Workflow 5 ขั้น) มาก่อน

ตอนเขียน Go คุณสั่งงาน compiler — พิมพ์ผิดนิดเดียวมันฟ้องทันที
ตอนสั่ง Claude Code คุณสั่งงานด้วยภาษาคน — พิมพ์กำกวมแค่ไหนมันก็ไม่ฟ้อง มันแค่เดาช่องว่างให้เอง แล้วลงมือทำตามที่เดา
สไลด์หน้า 20 สรุปวิธีเขียน prompt ที่ดีไว้ 6 ข้อ · บทนี้ทำ 3 ข้อแรก: ชัดเจน · ให้ตัวอย่าง · ให้คิดทีละขั้น (อีก 3 ข้ออยู่ในบท 89)
ทุกคู่ Bad/Good ในสไลด์ถอดมาตรงตัวอักษร แล้วปิดท้ายด้วยการเอาไปใช้กับงานจริง: สั่ง Claude Code แก้ RecipeCard ในแอป Wongnok

🧰 ของที่ใช้ตรวจในบทนี้

Next.js     16.3.5   # npx next build (บรรทัดแรกของ output)
react       19.2.8
typescript  5.9.3
eslint      9.39.5
node        v24.14.0

prompt ทุกก้อนที่ติดป้าย “สไลด์หน้า N” ถอดจากภาพสไลด์ตรงตัวอักษร รวมเครื่องหมายวรรคตอน (บางก้อนในสไลด์ไม่มีจุดท้ายประโยค ผมก็ไม่ได้เติมให้)
บทนี้ไม่มี “คำตอบของ AI” สักก้อน — คำตอบของ AI ไม่เหมือนกันทุกครั้งที่ถาม ถ้าผมก็อปมาหนึ่งครั้งแล้วโชว์ว่า “AI ตอบแบบนี้” ก็เท่ากับหลอกคุณ
ของที่รันจริงมีสามอย่าง: การคำนวณเลขในสไลด์ (รันด้วย node) · ผลของ tsc / eslint / next build / git diff ในส่วน “เอามาใช้จริง” (รันในโปรเจกต์ Next.js + shadcn ที่ตั้งค่าเหมือนแอปบท 79–85) · และลิงก์อ้างอิงทุกลิงก์ที่เปิดยืนยันแล้วว่าใช้ได้
ส่วนโค้ดที่ “แก้แล้ว” ในส่วนนั้น ผมแก้เองด้วยมือ เพื่อให้เห็นว่าคำสั่งตรวจที่เราใส่ไว้ใน prompt คืนผลอะไรออกมาจริง ๆ ไม่ใช่โค้ดที่ AI เขียน

6 หลักของ prompt ที่ดี — แผนที่ของสองบท

สไลด์หน้า 20 ชื่อ Become a good prompt วางไว้ 6 ภาพ:

#หลัก (ชื่อตามสไลด์)พูดง่าย ๆอยู่บทไหน
1Be Clear and Specificบอกให้ครบว่าจะเอาอะไร ไม่ให้ต้องเดา88 (บทนี้)
2Give Exampleโชว์ตัวอย่างว่า “แบบนี้แหละที่ต้องการ”88 (บทนี้)
3Step-by-step Reasoningให้คิดเป็นขั้น ๆ ก่อนตอบ หรือบอกขั้นให้เลย88 (บทนี้)
4Roles and Sectionsบอกบทบาท แล้วแบ่ง prompt เป็นหมวด89
5Specify Output Formatบอกหน้าตาของผลลัพธ์ที่ต้องการ89
6Iterate and Refineผลแรกคือร่าง แก้ต่อเป็นรอบ ๆ89

สามข้อแรกมีจุดร่วมกันข้อเดียว: ลดจำนวนสิ่งที่ AI ต้องเดา
ข้อ 1 ลดด้วยคำอธิบาย · ข้อ 2 ลดด้วยตัวอย่าง · ข้อ 3 ลดด้วยการบังคับลำดับความคิด

หลักที่ 1 · Be Clear and Specific

สไลด์หน้า 22 (Why clear?) มีสองประโยค — ถอดตามจริง:

• Unclear prompts get unclear answers • Agent wants to know task, scope, constraints, and any details that matter as you want.

ภาพข้างขวาของหน้าเดียวกันเทียบกระดาษสองแผ่น
แผ่นซ้าย UNCLEAR REQUEST เขียนแค่ “Need something about our project update” แล้วรอบ ๆ เต็มไปด้วยคำถามที่คนรับงานต้องเดาเอง: For stakeholders? · Who is the audience? · What tone? · What to include?? (not sure) · How long? · Format?? · What’s the goal?
แผ่นขวา CLEAR & SPECIFIC REQUEST ตอบคำถามพวกนั้นครบเป็นหกช่อง: GOAL · AUDIENCE · TONE · KEY POINTS · CONSTRAINTS (Max 200 words · Use plain language · No technical jargon) · EXPECTED OUTCOME

พูดภาษาคน: ทุกคำถามที่คุณไม่ได้ตอบใน prompt ไม่ได้หายไปไหน — AI ตอบแทนคุณ
และมันจะตอบด้วย “ค่าที่พบบ่อยที่สุด” ซึ่งแทบไม่เคยตรงกับงานของคุณพอดี
นี่คือเรื่องเดียวกับบท 78 ที่โจทย์ Customer Search บรรทัดครึ่งซ่อนคำถามไว้ 5 ข้อ — แค่คราวนี้คนที่ต้องตัดสินใจแทนคุณคือ AI ไม่ใช่ตัวคุณเอง

คู่ Bad/Good ของสไลด์หน้า 23

❌ Bad Prompt

Write something about our new feature.

👍 Good Prompt

Write a 150-word announcement for our new dark-mode
feature, aimed at existing users, highlighting that
it reduces eye strain and syncs across devices.
Tone: friendly and concise.

(ในสไลด์ Good Prompt เป็นบรรทัดเดียว (เลขบรรทัด 1) ที่ตัดขึ้นบรรทัดใหม่ตามความกว้างกล่อง · ผมตัดบรรทัดตรงจุดเดียวกับสไลด์)

แยก Good Prompt ออกเป็นห้าชิ้น — สามชิ้นแรก (task · scope · constraints) คือคำในบรรทัดของสไลด์หน้า 22 ตรง ๆ · อีกสองชิ้น (audience · tone) มาจากช่อง AUDIENCE กับ TONE ในภาพฝั่งขวาของหน้าเดียวกัน ซึ่งเป็น “details that matter” ของงานเขียน — แล้วดูว่า Bad Prompt มีชิ้นไหนบ้าง:

ชิ้นส่วนBad มีไหมGood เติมอะไรถ้าไม่เติม AI ต้องเดาอะไร
task (ทำอะไร) ครึ่งเดียว — Write something announcement — ชนิดของงานชัด บทความ? โพสต์โซเชียล? release note? อีเมล?
scope (เรื่องไหน แค่ไหน) ไม่มี — our new feature ไม่รู้ว่าฟีเจอร์อะไร dark-mode feature · highlighting that it reduces eye strain and syncs across devices ฟีเจอร์คืออะไร และจะเน้นจุดไหน — AI ไม่มีทางรู้เลย จึงต้องแต่งขึ้นมาเอง
constraints (ข้อจำกัด) ไม่มี 150-word ยาวสามบรรทัดหรือสามหน้า
audience (ใครอ่าน) ไม่มี aimed at existing users คนที่ยังไม่เคยใช้ (ต้องขาย) หรือคนที่ใช้อยู่แล้ว (ต้องบอกว่ามีอะไรใหม่)
format / tone (หน้าตา · น้ำเสียง) ไม่มี Tone: friendly and concise. ทางการ? ตลก? ขายของ?

สังเกตว่า Good Prompt ยาวขึ้นจาก 6 คำเป็น 27 คำ (นับด้วย wc -w) ไม่ได้ยาวเป็นหน้า · มันไม่ได้ “สุภาพขึ้น” หรือ “ใช้คำสวยขึ้น” เลย — มันแค่ตอบคำถามที่ต้องตอบอยู่ดีไว้ล่วงหน้า

🎂 เทียบกับของจริง

สั่งเค้กวันเกิดทางไลน์ว่า “ขอเค้กหนึ่งก้อน” — ร้านทำได้แน่ แต่ต้องเดาเองว่า กี่ปอนด์ · รสอะไร · เขียนชื่อใคร · มารับกี่โมง
พอส่งว่า “ช็อกโกแลต 1 ปอนด์ เขียนว่า HBD แม่ ไม่ใส่ถั่วเพราะแพ้ มารับเสาร์บ่ายสอง” ร้านไม่ต้องเดาอะไรเลย · ห้าท่อนนี้คือ task · scope · constraints · audience · format ของงานเค้กพอดี

ที่ไม่เหมือนกัน: ร้านเค้กที่ไม่แน่ใจจะทักกลับมาถาม · ส่วน AI ส่วนใหญ่ไม่ถามกลับ ลงมือทำเลย เว้นแต่คุณสั่งให้ถาม — ช่องว่างใน prompt จึงกลายเป็นงานที่ผิดทาง แทนที่จะกลายเป็นคำถาม
และต่างอีกข้อ: Claude Code เปิดไฟล์ในโปรเจกต์อ่านเองได้ ส่วนที่หาได้จากโค้ด (เช่นโปรเจกต์ใช้ Tailwind) ไม่ต้องบอกก็ได้ · ที่ต้องบอกคือส่วนที่อยู่ในหัวคุณคนเดียว — อยากได้แบบไหน · ห้ามแตะอะไร · เสร็จแล้วตรวจยังไง

Add a loading state to the recipes page.

prompt นี้สั่ง Claude Code ในแอป Wongnok · ลองนับดูว่าขาดชิ้นไหนในห้าชิ้น (task · scope · constraints · audience · format) และ Claude ต้องเดาอะไรเอง?

task มีแค่ชิ้นเดียว (Add a loading state) ที่เหลือขาดเกือบหมด:

  • scope — “recipes page” คือไฟล์ไหน? app/recipes/page.tsx หรือ container ที่ map การ์ด? แก้ที่หน้า หรือแก้ที่ตัวการ์ด?
  • format — loading หน้าตาแบบไหน? ข้อความ “กำลังโหลด…” · spinner · หรือ Skeleton ของ shadcn ที่มีอยู่แล้วในโปรเจกต์? กี่กล่อง?
  • constraints — ติดตั้ง library ใหม่ได้ไหม · แก้ไฟล์ใน components/ui/ ได้ไหม
  • วิธีตรวจ — แบบไหนถึงเรียกว่าเสร็จ? build ผ่านพอ หรือต้องเห็นบนจอ?

(audience ในงานแก้โค้ดหมายถึง “ใครจะใช้หน้านี้” ซึ่งสำคัญน้อยกว่างานเขียน · ในงานโค้ด ชิ้นที่ห้าที่สำคัญกว่าคือวิธีตรวจ — ส่วน “เอามาใช้จริง” ท้ายบทจะอธิบายว่าทำไม)
ไม่มีคำตอบเดียวที่ถูก — แต่ถ้าคุณมีคำตอบในใจอยู่แล้วแล้วไม่เขียนลงไป โอกาสที่ Claude จะเดาตรงกับในใจคุณทุกข้อต่ำมาก

🗣 ศัพท์ของหลักที่ 1
task · scope · constraints
task = ต้องทำอะไร · scope = ขอบเขต (ไฟล์ไหน เรื่องไหน แค่ไหน) · constraints = ข้อห้ามและข้อจำกัด (ความยาว · ห้ามเพิ่ม dependency · ห้ามแตะไฟล์นี้) · สามคำนี้คือคำเดียวกับที่สไลด์หน้า 22 ใช้ · ถาม senior ได้ว่า “งานนี้ scope แค่ไฟล์นี้ใช่ไหมครับ มี constraint อะไรที่ผมควรรู้ไหม”
audience · tone
ใครเป็นคนอ่านผลงาน และน้ำเสียงแบบไหน · สำคัญมากกับงานเขียน (ประกาศ · อีเมล · README) · พิมพ์บอก AI ได้ว่า “Audience: new developers joining the team. Tone: friendly, no jargon.”
ambiguity (ความกำกวม)
ประโยคที่ตีความได้มากกว่าหนึ่งแบบ · ใน prompt ทุกจุดที่กำกวมคือจุดที่ AI จะเลือกแทนคุณ · ถ้าไม่แน่ใจว่าตัวเองเขียนกำกวมไหม พิมพ์บอก AI ได้ว่า “Before you start, list anything in my request that is ambiguous and ask me.”

หลักที่ 2 · Give Examples (Few-shot prompting)

สไลด์หน้า 25 (How Write Example) — ถอดตามจริง:

• Show the model what good looks like that "input → output" • It have quality far better than only describing • Positive examples — "do it like this" • Negative examples — "avoid this"

ภาพข้างขวาของหน้านี้แบ่งเป็นสามคอลัมน์: NO EXAMPLES PROVIDED (ผลลัพธ์ที่ได้ปนกันมั่ว — สั้นไป · ยาวไป · น้ำเสียงไม่คงที่ · I’m not sure what you want?) → EXAMPLE PIPELINE (ตัวอย่าง 1–3 ค่อย ๆ เติม structure · tone · format · style) → PATTERN LEARNED (โมเดลจับแพตเทิร์นร่วมได้ แล้วผลลัพธ์สุดท้ายออกมาเป็นแนวเดียวกัน)
แถบล่างสุดสรุปว่า Without examples ผลไม่คงที่ · With examples โมเดลเรียนรู้แพตเทิร์น · With learned patterns ผลคงที่และตรงเป้า

พูดภาษาคน: บางอย่างอธิบายด้วยคำยากกว่าโชว์ให้ดู
ลองอธิบายว่า “ticket แบบไหนเรียกว่าด่วน” เป็นคำพูด — คุณจะเขียนได้เป็นย่อหน้าแล้วก็ยังไม่ครบ
แต่โชว์สองตัวอย่างว่า “อันนี้ด่วน อันนี้ไม่ด่วน” AI เห็นเกณฑ์ที่คุณใช้ทันที

คู่ Bad/Good ของสไลด์หน้า 26

❌ Bad Prompt

Classify these support tickets by urgency

👍 Good Prompt

Classify these tickets by urgency.

**Examples:**
- "App won't open, demo in 10 min" -> High.
- "Typo on the About page" -> Low.

Now classify: [tickets]
ส่วนของ Good Promptทำหน้าที่อะไร
Classify these tickets by urgency. task — เหมือนฝั่ง Bad เกือบทุกคำ · แปลว่าความต่างทั้งหมดอยู่ที่ตัวอย่าง ไม่ได้อยู่ที่คำสั่ง
**Examples:** หัวข้อ Markdown แยกให้เห็นว่า “ตรงนี้คือตัวอย่าง ไม่ใช่งานที่ต้องทำ” (เรื่องการแบ่งหมวดอยู่ในบท 89)
"App won't open, demo in 10 min" -> High. ตัวอย่างขั้วบน — สอนเกณฑ์สองอย่างพร้อมกัน: ใช้งานไม่ได้เลย + มีเส้นตายใกล้มาก
"Typo on the About page" -> Low. ตัวอย่างขั้วล่าง — ผิดจริงแต่ไม่กระทบการใช้งาน
-> High. / -> Low. format — ไม่ได้เขียนสักคำว่า “ให้ตอบเป็นคำเดียว” แต่ตัวอย่างโชว์รูปแบบ ข้อความ -> ระดับ ให้เห็นแล้ว
Now classify: [tickets] จุดที่ของจริงเริ่ม · [tickets] คือช่องให้วาง ticket จริงลงไป (ไม่ใช่ให้พิมพ์คำว่า [tickets])
⚠️ ตัวอย่างสอนมากกว่าที่คุณตั้งใจเสมอ

ตัวอย่างในสไลด์มีแค่ High กับ Low ไม่มี Medium เลย
prompt นี้จึงไม่ได้บอกว่า มีระดับ Medium อยู่ไหม — ticket อย่าง “ปุ่ม export ช้า 5 วินาที” จะถูกบีบให้เป็น High หรือ Low หรือได้ Medium ขึ้นมาเอง prompt ไม่ได้กำหนดไว้ (ผมไม่ได้รันให้ดู เพราะคำตอบของ AI ไม่คงที่ — ข้อนี้เป็นเรื่องที่ prompt ไม่ได้บอก ไม่ใช่ผลรัน)
เอกสารทางการของ Anthropic แนะนำให้ตัวอย่าง ตรงกับงานจริง (Relevant) · หลากหลาย ครอบคลุม edge case (Diverse) · และแนะนำ 3–5 ตัวอย่าง — ถ้าเอาไปใช้จริง ให้เติมตัวอย่าง Medium อย่างน้อยหนึ่งอัน หรือเขียนบอกตรง ๆ ว่า “ระดับมีแค่ High / Medium / Low”

💇 เทียบกับของจริง

ไปร้านตัดผมแล้วพูดว่า “ตัดสั้นแบบดูสะอาด ๆ ด้านข้างไม่ต้องเกรียนมาก” — ช่างสิบคนตัดออกมาสิบทรง
แต่ยื่นรูปในมือถือให้ดูหนึ่งรูป “แบบนี้” — ช่างสิบคนตัดออกมาใกล้กันมาก
และถ้ายื่นอีกรูปว่า “แบบนี้ไม่เอา” ก็คือ negative example ในสไลด์หน้า 25

ที่ไม่เหมือนกัน: ช่างตัดผมรู้ว่าอะไรในรูปคือ “ทรงผม” และอะไรคือ “ฉากหลัง” — ส่วน AI ไม่รู้ว่าส่วนไหนของตัวอย่างสำคัญ มันอาจลอกทุกอย่าง รวมถึงของที่คุณไม่ได้ตั้งใจ เช่น ความยาว · คำขึ้นต้น · หรือการมีแค่สองระดับ
เพราะงั้นตัวอย่างที่ดีต้องต่างกันในจุดที่ไม่สำคัญ และเหมือนกันในจุดที่สำคัญ AI ถึงจะแยกออกว่าอะไรคือแพตเทิร์นจริง

🗣 ศัพท์ของหลักที่ 2
zero-shot · one-shot · few-shot (multishot)
สั่งโดยไม่มีตัวอย่าง · มีหนึ่งตัวอย่าง · มีหลายตัวอย่าง · Bad Prompt หน้า 26 คือ zero-shot · Good Prompt คือ few-shot (สองตัวอย่าง) · เอกสารของ Anthropic เรียกอีกชื่อว่า multishot prompting · พิมพ์บอก AI ได้ว่า “Here are 3 examples of the commit message style I want:”
positive / negative example
ตัวอย่าง “ทำแบบนี้” กับ “อย่าทำแบบนี้” (สไลด์หน้า 25) · negative example ได้ผลดีที่สุดเมื่อวางคู่กับ positive ของเรื่องเดียวกัน ให้เห็นความต่างชัด ๆ · ในงานโค้ดใช้ได้เลย: “Follow the pattern in RecipeCard.tsx. Do NOT copy the inline styles in OldCard.tsx.”
edge case (ในตัวอย่าง)
กรณีที่อยู่ตรงขอบของเกณฑ์ (เช่น ticket ที่กึ่ง ๆ ระหว่าง High กับ Low) · ตัวอย่างที่มีแต่ขั้วบนกับขั้วล่างสอนเกณฑ์ตรงกลางไม่ได้ · ถาม senior ได้ว่า “มีเคสไหนที่คนในทีมเคยจัดระดับไม่ตรงกันบ้างครับ ผมจะเอาไปใส่เป็นตัวอย่าง”

หลักที่ 3 · Step-by-step Reasoning

สไลด์หน้า 28 (Involved Logic) — ถอดตามจริง:

• For logic, math, or multi-part analysis should tell it think step-by-step • To make AI think through before giving the answers • Reasoning first, conclusion second, produces more accurate results

ภาพข้างขวาเทียบสองทาง: ฝั่ง DIRECT GUESS เจอโจทย์ซับซ้อนแล้วคิดว่า “This looks complicated… I’ll just guess.” → SKIP ANALYSIS → ได้คำตอบสามรอบไม่ตรงกันเลย · ฝั่ง STEP-BY-STEP REASONING ไล่ 7 ขั้น: Understand the Problem → Gather Information → Identify Key Requirements → Break into Smaller Steps → Analyze and Reason → Verify Logic → Form Final Conclusion

พูดภาษาคน: ถ้าสั่งให้ “ตอบเลย” AI จะกระโดดจากโจทย์ไปคำตอบในก้าวเดียว — เร็ว แต่ถ้าก้าวนั้นพลาดก็ไม่มีจุดให้คุณจับได้
ถ้าสั่งให้ “แสดงวิธีคิดก่อน แล้วค่อยสรุป” ทุกขั้นกลางทางถูกเขียนออกมาให้เห็น ทั้ง AI และคุณจึงตรวจได้ทีละขั้น

⚠️ ภาพในสไลด์หน้า 28 เองก็คิดเลขผิด

กล่อง FINAL ANSWER (MAXIMUM PROFIT) ในภาพเขียนว่า P1 = 6 units · P2 = 4 units · P3 = 8 units → Maximum Profit = $1,520 พร้อมข้อความ “All constraints satisfied. Solution verified.”
แต่กำไรต่อชิ้นที่โจทย์ในภาพเดียวกันให้มาคือ $40 · $60 · $80 — ลองคูณดู:

$ node -e 'console.log("6*40 + 4*60 + 8*80 =", 6*40 + 4*60 + 8*80)'
6*40 + 4*60 + 8*80 = 1120

ได้ $1,120 ไม่ใช่ $1,520 · และโจทย์ในภาพบอกแค่ว่า “Each unit requires different hours and cost” โดยไม่ให้ตัวเลขชั่วโมงกับต้นทุนต่อชิ้นเลย — แปลว่าคำว่า “All constraints satisfied” ตรวจไม่ได้ตั้งแต่แรก
ภาพนี้น่าจะสร้างด้วย AI สร้างภาพ ซึ่งมักเขียนตัวเลขไม่ถูก · ไม่กระทบใจความของสไลด์ แต่เป็นตัวอย่างที่ดีมากของประเด็นในหัวข้อนี้เอง: ข้อความ “verified” ไม่ใช่การ verify — ถ้าไม่เห็นวิธีคิดทีละขั้น ก็ไม่มีทางรู้ว่าตัวเลขสุดท้ายมาจากไหน

สไลด์แยกการใช้หลักนี้เป็นสองกรณี ซึ่งเขียน prompt ต่างกันคนละแบบ:

กรณีที่ 1 — ไม่รู้ขั้นตอน (สไลด์หน้า 29 · When doesn’t know working steps)

❌ Bad Prompt

A shirt costs $40 after a 20% discount. What was
the original price?

👍 Good Prompt

A shirt costs $40 after a 20% discount. Work
through it step by step, then give the original
price.
A shirt costs $40 after a 20% discount. What was
the original price?

ลองตอบเองให้เร็วที่สุด ภายใน 3 วินาที อย่าหยิบเครื่องคิดเลข — ราคาเดิมคือเท่าไหร่?

ผลรันจริง:

$ node -e '
console.log("40 / (1 - 0.20) =", 40 / (1 - 0.20));
console.log("40 * (1 + 0.20) =", 40 * (1 + 0.20));
console.log("50 * 0.80       =", 50 * 0.80);
console.log("48 * 0.80       =", 48 * 0.80);'
40 / (1 - 0.20) = 50
40 * (1 + 0.20) = 48
50 * 0.80       = 40
48 * 0.80       = 38.400000000000006

คำตอบที่ถูกคือ $50 · ถ้าคุณตอบ $48 คุณตกหลุมเดียวกับที่โจทย์นี้ตั้งใจวางไว้: “ลด 20% แล้วเหลือ 40 → บวก 20% กลับก็ได้ของเดิม”
สองบรรทัดล่างพิสูจน์ว่าทางไหนถูก: $50 ลด 20% ได้ $40 พอดี · ส่วน $48 ลด 20% ได้ $38.40 (38.400000000000006 คือเศษของเลขทศนิยมในคอมพิวเตอร์ ไม่ใช่ประเด็นตรงนี้)

ทางลัด “บวกกลับ 20%” ผิดเพราะ 20% ของราคาเดิม (50) ไม่เท่ากับ 20% ของราคาใหม่ (40) — ก้าวเดียวที่ข้ามไปคือก้าวที่ผิด
นี่คือเหตุผลที่ Good Prompt เติม Work through it step by step, then give the original price. — มันบังคับให้เขียนขั้น “40 คือ 80% ของราคาเดิม” ออกมาก่อนสรุป ซึ่งเป็นขั้นที่ทำให้หลุมนี้หายไป · และถ้าขั้นไหนผิด คุณเห็นทันทีว่าผิดตรงไหน

สังเกตโครงของ Good Prompt หน้า 29: ไม่ได้บอกว่าขั้นตอนคืออะไร บอกแค่ว่า ให้มีขั้นตอน และลำดับ — “step by step” ก่อน “then give the original price” · ใช้เมื่อคุณเองก็ไม่รู้ว่าต้องคิดกี่ขั้น ปล่อยให้ AI แตกขั้นเอง (ตรงกับบรรทัด Reasoning first, conclusion second ของหน้า 28)

กรณีที่ 2 — รู้ขั้นตอนอยู่แล้ว (สไลด์หน้า 30 · When know working steps)

❌ Bad Prompt

Review this code, please.

👍 Good Prompt

Review this code and check each item. Mark ✅ or ❌
with a short note:

- [ ] No hardcoded secrets
- [ ] All functions have error handling
- [ ] Variable names are descriptive
- [ ] Tests cover edge cases

คราวนี้คุณรู้ขั้นอยู่แล้ว — ทีมมีเกณฑ์รีวิวสี่ข้อ · ไม่ต้องให้ AI คิดขั้นเอง ให้ขั้นไปเลย
Bad Prompt Review this code, please. ปล่อยให้ AI เลือกเองว่าจะรีวิวเรื่องอะไร — อาจได้ความเห็นเรื่องการตั้งชื่อยาวสิบข้อ แต่ไม่พูดถึง secret ที่ hardcode ไว้เลยสักคำ
Good Prompt ทำสามอย่าง:

ไม่รู้ขั้นตอน (หน้า 29)รู้ขั้นตอน (หน้า 30)
ใครเป็นคนแตกขั้นAIคุณ
คำที่ใส่ใน promptWork through it step by step, then …รายการ checklist ที่เขียนเอง
ได้อะไรเห็นวิธีคิดทุกขั้น ตรวจได้ว่าผิดตรงไหนได้ผลตรวจครบทุกเกณฑ์ ไม่มีข้อไหนหลุด
ใช้กับงานแบบไหนคำนวณ · ไล่หาสาเหตุบั๊กที่ยังไม่รู้ต้นตอ · วิเคราะห์หลายชั้นcode review · เช็คก่อน commit · ตรวจตาม acceptance criteria
📝 เทียบกับของจริง

หน้า 29 คือครูคณิตที่สั่งว่า “แสดงวิธีทำ” — ครูไม่ได้บอกว่าต้องใช้สูตรไหน แต่พอเขียนออกมาทีละบรรทัด ครูชี้ได้ทันทีว่าบรรทัดที่สามผิด
หน้า 30 คือนักบินที่ไล่ checklist ก่อนขึ้นบิน — ไม่มีใครให้นักบิน “คิดเองว่าควรเช็คอะไร” เพราะรายการถูกเขียนไว้แล้ว และทุกข้อต้องติ๊ก

ที่ไม่เหมือนกัน: นักเรียนที่แสดงวิธีทำ คิดจริง ตามที่เขียน · ส่วนข้อความ “วิธีคิด” ที่ AI เขียนออกมาไม่ได้รับประกันว่าถูก — มันเขียนขั้นที่ดูสมเหตุสมผลแต่ผิดได้ (ดูกล่อง $1,520 ข้างบน) ประโยชน์ของมันคือทำให้คุณตรวจได้ ไม่ใช่ทำให้คุณไม่ต้องตรวจ
และอีกข้อ: เอกสารของ Anthropic บอกว่าโมเดล Claude รุ่นใหม่ ๆ มี thinking ในตัว (คิดก่อนตอบเองโดยปรับตามความยากของงาน) · คำว่า “step by step” จึงไม่ใช่สวิตช์วิเศษ — ส่วนที่ยังได้ผลเสมอคือขั้นที่คุณเขียนให้เองแบบหน้า 30 เพราะมันคือเกณฑ์ของทีมคุณ ที่ไม่มีโมเดลไหนรู้ได้เอง

🗣 ศัพท์ของหลักที่ 3
chain-of-thought (CoT)
เทคนิคให้โมเดลเขียนวิธีคิดทีละขั้นก่อนสรุปคำตอบ — คือสิ่งที่สไลด์หน้า 28–29 เรียกว่า step-by-step reasoning · พิมพ์บอก AI ได้ว่า “Think through the root cause step by step first. Don't change any code until you've explained it.”
thinking / extended thinking
ความสามารถในตัวโมเดลที่คิดก่อนตอบได้เองโดยไม่ต้องสั่ง · Claude รุ่นใหม่ใช้แบบ adaptive คือคิดมากหรือน้อยตามความยากของงาน · ถาม senior ได้ว่า “งานแบบไหนในทีมที่ควรสั่งให้ Claude อธิบายแผนและเหตุผลก่อนแก้โค้ดครับ”
checklist prompt
prompt ที่แนบรายการเกณฑ์ให้ตรวจทีละข้อ (สไลด์หน้า 30) · ใช้ได้ดีกับทุกงานที่ทีมมีมาตรฐานเขียนไว้แล้ว · พิมพ์บอก AI ได้ว่า “Check this diff against each item below. Mark ✅ or ❌ with a one-line reason.”

เอามาใช้จริง — สั่ง Claude Code แก้ RecipeCard ในแอป Wongnok

ตัวอย่างในสไลด์เป็นงานเขียนประกาศ · จัดระดับ ticket · คิดเลข · แต่งานที่คุณจะใช้ Claude Code จริง ๆ คือแก้โค้ด — ลองเอาสามหลักมาใช้กับแอปที่เพิ่งสร้างในบท 79–85

สถานการณ์: การ์ดสูตรอาหารตอนนี้แสดงระดับความยากเป็นคำดิบ ๆ จาก type "EASY" | "MEDIUM" | "HARD" อยากให้เป็นป้าย Badge ภาษาไทยแทน
(ชื่อไฟล์ในตัวอย่างนี้คือ components/recipe/RecipeCard.tsx — ถ้าโปรเจกต์ของคุณวางไฟล์ไว้ที่อื่น ให้เปลี่ยนเป็น path จริงของคุณ)

❌ prompt ที่มักพิมพ์กันจริง

ทำให้ level บนการ์ดสูตรอาหารดูดีขึ้นหน่อย

“ดูดีขึ้น” คือแบบไหน? การ์ดไหน (หน้า list หรือหน้ารายละเอียด)? แก้ Badge กลางของ shadcn ได้ไหม? เสร็จแล้วรู้ได้ยังไงว่าเสร็จ? — Claude ต้องเดาทั้งหมด

👍 prompt ที่ระบุครบ

งาน: ใน components/recipe/RecipeCard.tsx
ตอนนี้ level แสดงเป็นคำดิบ เช่น "EASY"
ให้เปลี่ยนเป็น <Badge variant="secondary">
จาก @/components/ui/badge ที่มีอยู่แล้ว

ข้อความบนป้าย (ตัวอย่างครบทุกค่า):
- "EASY"   -> ง่าย
- "MEDIUM" -> ปานกลาง
- "HARD"   -> ยาก

ข้อห้าม:
- ห้ามแก้ไฟล์ใน components/ui/
- ห้ามติดตั้ง package ใหม่
- ห้ามเปลี่ยน type RecipeLevel

ตรวจก่อนบอกว่าเสร็จ ทำทีละข้อ:
1. npx tsc --noEmit ต้องไม่มี error
2. npx eslint . ต้องไม่มี error
3. npx next build ต้องผ่าน
4. git diff --stat ต้องมีแค่ RecipeCard.tsx
แปะ output จริงของทั้ง 4 ข้อมาให้ดู

ชำแหละ prompt ฝั่งขวาทีละส่วน — แต่ละส่วนมาจากหลักไหน:

ส่วนในตัวอย่างมาจากหลักถ้าไม่ใส่
ไฟล์ (scope) components/recipe/RecipeCard.tsx · @/components/ui/badge 1 · Clear Claude ต้องค้นหาเองว่า “การ์ดสูตรอาหาร” คือไฟล์ไหน และอาจเขียนป้ายใหม่เองแทนที่จะใช้ของเดิม
พฤติกรรมที่ต้องการ (task + format) เปลี่ยนคำดิบเป็น Badge variant="secondary" 1 · Clear “ดูดีขึ้น” อาจกลายเป็นเปลี่ยนสี · เพิ่มไอคอน · หรือจัด layout ทั้งการ์ดใหม่
ตัวอย่างครบทุกค่า "EASY" -> ง่าย ฯลฯ 2 · Examples ต้องเดาคำแปล (ง่าย? เริ่มต้น? มือใหม่?) · และให้ครบทุกค่า ไม่ใช่แค่สองขั้วแบบหน้า 26
ข้อห้าม (constraints) ห้ามแตะ components/ui/ · ห้ามลง package · ห้ามเปลี่ยน type 1 · Clear ทางลัดที่ “ได้ผลเหมือนกัน” เช่นแก้ Badge กลาง ซึ่งจะเปลี่ยนป้ายทุกที่ในแอปไปด้วย
วิธีตรวจ (checklist) 4 ข้อ ทำทีละข้อ แปะ output จริง 3 · Step-by-step (แบบรู้ขั้นตอน หน้า 30) Claude หยุดเมื่องาน “ดูเสร็จ” · คุณต้องรันตรวจเองทุกครั้ง · และไม่มีหลักฐานว่ามันรันจริง

ข้อ “วิธีตรวจ” คือส่วนที่คนมักลืมที่สุด และเป็นส่วนที่เอกสาร Claude Code ยกเป็นหัวข้อแรกของ best practices (Give Claude a way to verify its work) · เอกสารบอกว่าถ้าไม่มีสิ่งที่รันแล้วได้ผ่าน/ไม่ผ่าน คุณจะกลายเป็นคนตรวจเองทุกรอบ และแนะนำให้ขอหลักฐาน (output ของคำสั่ง) แทนคำยืนยันว่า “เสร็จแล้ว”
ตรงกับขั้น Evaluate ในบท 87 พอดี — prompt ที่ดีคือ prompt ที่ใส่ขั้น Evaluate ไว้ในตัว

เช็คลิสต์ 4 ข้อนั้นคืนผลอะไรจริง ๆ

เพื่อให้เห็นว่าคำสั่งตรวจในเช็คลิสต์ไม่ใช่พิธีกรรม ผมแก้โค้ดตามโจทย์นี้เองด้วยมือ ในโปรเจกต์ Next.js + shadcn แล้วรันทั้งสี่ข้อ
รอบแรกผมจงใจลืม HARD ไว้หนึ่งค่า — เป็นความผิดพลาดแบบที่ทั้งคนและ AI ทำได้:

const LEVEL_LABEL: Record<RecipeLevel, string> = {
  EASY: "ง่าย",
  MEDIUM: "ปานกลาง",
};
$ npx tsc --noEmit; echo "rc=$?"
components/recipe/RecipeCard.tsx(11,7): error TS2741: Property 'HARD' is missing in type '{ EASY: string; MEDIUM: string; }' but required in type 'Record<RecipeLevel, string>'.
rc=2

$ npx eslint .; echo "rc=$?"
rc=0

ข้อ 1 จับได้ · ข้อ 2 ปล่อยผ่าน — eslint ไม่ได้ตรวจ type · นี่คือเหตุผลที่เช็คลิสต์ต้องมีหลายข้อ
และ tsc จับได้เพราะใช้ Record<RecipeLevel, string> ซึ่งบังคับให้มีครบทุกค่าของ union · ถ้าเขียนเป็น object ธรรมดาไม่ใส่ type จะไม่มีอะไรฟ้องเลย (ประโยชน์ของการใช้ union แทน string อิสระ)

เติม HARD: "ยาก", แล้วรันทั้งสี่ข้ออีกรอบ:

$ npx tsc --noEmit; echo "rc=$?"
rc=0

$ npx eslint .; echo "rc=$?"
rc=0

$ npx next build
▲ Next.js 16.3.5 (Turbopack)
…
✓ Compiled successfully in 3.5s
  Running TypeScript ...
  Finished TypeScript in 641ms ...
…
Route (app)
┌ ○ /
├ ○ /_not-found
└ ○ /recipes

$ git diff --stat
 components/recipe/RecipeCard.tsx | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

(ตัวเลขใน git diff --stat ขึ้นกับหน้าตาไฟล์ก่อนแก้ — ของผมก่อนแก้เป็น <CardContent>{level}</CardContent> บรรทัดเดียว ของคุณจะได้เลขไม่ตรงกันก็ไม่แปลก ที่ต้องดูคือรายชื่อไฟล์)
ข้อ 4 คือตัวที่ตรวจข้อห้าม — ถ้ามีไฟล์ใน components/ui/ โผล่ในรายการ แปลว่ามีการแตะของที่สั่งห้ามไว้ ไม่ต้องไปไล่อ่าน diff ทีละบรรทัดก็รู้
(tsc กับ eslint ที่ผ่านจะไม่พิมพ์อะไรเลย จึงต้องต่อ echo "rc=$?" ให้เห็น exit code — 0 คือผ่าน)

⚠️ tsc ในโปรเจกต์ที่เพิ่ง clone มา อาจพังด้วยเรื่องที่ไม่เกี่ยวกับงานของคุณ

ตอนผมรัน npx tsc --noEmit ครั้งแรกในโปรเจกต์ที่ยังไม่เคย build หรือเปิด dev server เลย ได้ error เกินมาหนึ่งบรรทัด:

app/layout.tsx(20,50): error TS2304: Cannot find name 'LayoutProps'.

LayoutProps เป็น type ที่ Next.js สร้างให้ตอน build/dev (อยู่ในโฟลเดอร์ .next) — โปรเจกต์ใหม่ยังไม่มี · แก้ด้วย npx next typegen (ขึ้นว่า ✓ Types generated successfully) แล้ว error บรรทัดนี้หายไป
ที่ต้องรู้เพราะ: ถ้าเจอแบบนี้แล้ว Claude พยายาม “แก้” layout.tsx ให้ tsc ผ่าน แปลว่ามันแก้ผิดที่ · ใส่ข้อห้าม “แก้เฉพาะไฟล์ที่ระบุ” ไว้ใน prompt ช่วยกันเรื่องนี้ได้ด้วย

🎯 ภารกิจ — เขียน prompt ให้ Claude Code เพิ่ม Empty state

หน้า /recipes ตอนนี้ถ้าไม่มีสูตรอาหารสักอัน จะเป็นพื้นที่ว่างเปล่า (เหมือนโจทย์ค้นไม่เจอในบท 78)
เขียน prompt หนึ่งก้อน สั่ง Claude Code ให้เพิ่มหน้าจอ Empty state โดยต้องมีครบ:

  1. ไฟล์ — ระบุ path ที่จะแก้ (ใช้ path จริงในโปรเจกต์ของคุณ)
  2. พฤติกรรมที่ต้องการ — เงื่อนไขที่แสดง · ข้อความที่แสดง · มีปุ่มหรือไม่
  3. ตัวอย่าง อย่างน้อยหนึ่งคู่แบบ input → output (หลักที่ 2)
  4. ข้อห้าม อย่างน้อยสองข้อ
  5. เช็คลิสต์ตรวจ ที่รันได้จริงและได้ผ่าน/ไม่ผ่าน (หลักที่ 3 แบบรู้ขั้นตอน) รวมถึงข้อที่พิสูจน์ว่า มีรายการแล้วยังแสดงการ์ดเหมือนเดิม

เขียนเสร็จแล้วตรวจ prompt ของตัวเองด้วยคำถามเดียว: “ถ้ายื่นให้เพื่อนร่วมคอร์สที่ไม่เคยเห็นโค้ดของผม เขาจะต้องถามกลับไหม — ถามอะไร?” (นี่คือ golden rule ในเอกสารของ Anthropic)

ตัวอย่างหนึ่งแบบ (ไม่ใช่คำตอบเดียวที่ถูก — ใช้เทียบว่าคุณมีครบห้าส่วนไหม):

งาน: เพิ่ม Empty state ในหน้า /recipes
ไฟล์: components/recipe/RecipeList.tsx
(ตัวที่ map รายการสูตรอาหารเป็น RecipeCard)

พฤติกรรมที่ต้องการ:
- ถ้า array สูตรอาหารว่าง ให้แสดงกล่องตรงกลางแทนตาราง
- ข้อความ "ยังไม่มีสูตรอาหาร" และข้อความรอง
  "เริ่มแชร์สูตรแรกของคุณได้เลย"
- ปุ่ม <Button> จาก @/components/ui/button ข้อความ "เพิ่มสูตรอาหาร"
  (ยังไม่ต้องทำให้กดแล้วไปไหน)

ตัวอย่าง:
- recipes = []          -> เห็นกล่อง Empty state, ไม่มี RecipeCard
- recipes มี 3 รายการ   -> เห็น RecipeCard 3 ใบ, ไม่มีกล่อง Empty state

ข้อห้าม:
- แก้เฉพาะ RecipeList.tsx (ถ้าจำเป็นต้องแก้ไฟล์อื่น ให้ถามก่อน)
- ห้ามแก้ไฟล์ใน components/ui/
- ห้ามติดตั้ง package ใหม่

ตรวจก่อนบอกว่าเสร็จ ทำทีละข้อ แล้วแปะ output จริง:
1. npx tsc --noEmit ไม่มี error
2. npx eslint . ไม่มี error
3. npx next build ผ่าน
4. git diff --stat มีแค่ RecipeList.tsx
5. บอกวิธีที่คุณใช้ตรวจว่าทั้งสองกรณีในหัวข้อ "ตัวอย่าง" แสดงผลถูกจริง

เทียบกับของคุณ:

  • ตัวอย่างมีทั้งสองทาง — กรณีว่างและกรณีมีข้อมูล · ถ้ามีแค่กรณีว่าง Claude อาจทำ Empty state ถูก แต่เผลอทำการ์ดปกติพังโดยไม่มีข้อไหนในเช็คลิสต์จับได้
  • ข้อห้าม “ถ้าจำเป็นต้องแก้ไฟล์อื่น ให้ถามก่อน” — ดีกว่าห้ามเด็ดขาด เพราะบางครั้งต้องแก้จริง (เช่นต้องส่ง prop ใหม่จาก page.tsx) · แบบนี้ Claude จะหยุดถามแทนที่จะทำเงียบ ๆ
  • ข้อ 5 ของเช็คลิสต์ — สามข้อแรกพิสูจน์แค่ว่าโค้ดไม่พัง ไม่ได้พิสูจน์ว่าทำงานตามที่ต้องการ · build ผ่านได้ทั้งที่ Empty state ไม่เคยโผล่ (บทเรียนเดียวกับบท 78: “build ผ่าน” ไม่ได้แปลว่า “ถูก”)
  • ถ้าคุณไม่ได้ใส่ข้อความที่จะแสดง ลองถามตัวเองว่ายอมให้ Claude เลือกคำให้ได้ไหม — ถ้ายอมได้ ก็ไม่ผิด · ถ้าไม่ยอม ต้องเขียน

ขั้นสุดท้ายที่พิสูจน์ว่า prompt คุณใช้ได้จริง: เอาไปสั่ง Claude Code ในโปรเจกต์ของคุณ แล้วรันเช็คลิสต์ทั้ง 5 ข้อด้วยตัวเองซ้ำอีกรอบ · ถ้าข้อไหนไม่ผ่าน ให้ย้อนดูว่า prompt ขาดอะไร — นั่นคือหลักที่ 6 (Iterate and Refine) ในบท 89

ลองตอบดู

prompt Write something about our new feature. (สไลด์หน้า 23) ขาดชิ้นไหนมากที่สุด จนต่อให้ AI เก่งแค่ไหนก็เขียนออกมาถูกไม่ได้?

ตัวเลือกที่ 2 ถูก · tone · ความยาว · audience ถ้า AI เดาผิด ผลที่ได้ยัง “ใช้ได้แต่ไม่ตรงใจ” และแก้ต่อได้
แต่ “ฟีเจอร์ใหม่คืออะไร” เป็นข้อมูลที่มีอยู่ในหัวคุณคนเดียว — AI ไม่มีทางรู้ว่าเป็น dark mode และไม่มีทางรู้ว่าจุดขายคือลดอาการล้าตากับ sync ข้ามอุปกรณ์ จึงต้องแต่งขึ้นเอง ผลคือประกาศที่พูดถึงฟีเจอร์ที่ไม่มีอยู่จริง
ตัวเลือกที่ 1, 3, 4 ขาดจริงทั้งหมด (Good Prompt เติมให้ครบ) แต่เป็นชิ้นที่เดาผิดแล้วเสียหายน้อยกว่า
จุดที่ต้องจำ: ข้อมูลที่ AI หาเองไม่ได้ (อยู่ในหัวคุณ ไม่อยู่ในโค้ด ไม่อยู่บนเน็ต) คือสิ่งแรกที่ต้องเขียนลงไป

Good Prompt ของสไลด์หน้า 26 มีตัวอย่างแค่ -> High. กับ -> Low. — ถ้าจะเอาไปใช้จริงควรปรับอะไรเป็นอย่างแรก?

ตัวเลือกที่ 4 ถูก · ตัวอย่างสอนขอบเขตของคำตอบไปด้วย · มีแค่สองขั้วคือไม่ได้บอกว่ามี Medium ไหม และ ticket ส่วนใหญ่ในชีวิตจริงอยู่ตรงกลาง · เอกสารของ Anthropic แนะนำให้ตัวอย่าง Diverse ครอบคลุม edge case
ตัวเลือกที่ 1 ย้อนกลับไปทางที่สไลด์หน้า 25 บอกว่าแย่กว่า (quality far better than only describing) · ตัวเลือกที่ 2 ทำให้ตัวอย่างเอียงไปทาง High มากขึ้นอีก ไม่ได้แก้ช่องว่างตรงกลาง · ตัวเลือกที่ 3 เปลี่ยนแค่หน้าตา -> สื่อความหมายชัดอยู่แล้ว
จุดที่ต้องจำ: ตัวอย่างที่ดีต้องครอบคลุมทุกคำตอบที่เป็นไปได้ โดยเฉพาะกรณีก้ำกึ่ง ไม่ใช่แค่ขั้วที่เห็นชัด

คุณจะให้ Claude Code รีวิว pull request ตามกฎ 5 ข้อที่ทีมเขียนไว้ใน wiki — ควรใช้ prompt แบบไหน?

ตัวเลือกที่ 1 ถูก · นี่คือกรณี รู้ขั้นตอนอยู่แล้ว ตามสไลด์หน้า 30 — ทีมมีกฎเขียนไว้ชัด ก็ให้กฎไปเลย และการบังคับให้ตอบทุกข้อทำให้แยก “ผ่าน” ออกจาก “ลืมตรวจ” ได้
ตัวเลือกที่ 2 คือเทคนิคของหน้า 29 ซึ่งใช้ตอนไม่รู้ขั้นตอน — AI จะแตกขั้นเองตามหลักทั่วไป ไม่ใช่ตามกฎของทีมคุณ · ตัวเลือกที่ 3 คือ Bad Prompt ของหน้า 30 ตรง ๆ — AI ไม่รู้กฎใน wiki ของทีม · ตัวเลือกที่ 4 ใช้ few-shot ผิดงาน — PR สองอันไม่ได้บอกว่ากฎคืออะไร AI ต้องเดาเกณฑ์จากตัวอย่างอีกที
จุดที่ต้องจำ: ไม่รู้ขั้น → สั่งให้คิดทีละขั้น · รู้ขั้นอยู่แล้ว → เขียนขั้นให้เองเป็น checklist

prompt แก้ RecipeCard มีเช็คลิสต์ tsc · eslint · next build · git diff --stat — ข้อไหนจับได้ว่ามีการแอบแก้ไฟล์ใน components/ui/?

ตัวเลือกที่ 3 ถูก · ในผลรันจริง git diff --stat แสดง components/recipe/RecipeCard.tsx | 11 ++++++++++- และ 1 file changed — ถ้ามีไฟล์ใน components/ui/ เปลี่ยน มันจะโผล่ในรายการนี้ทันที
ผมลองจริงแล้ว: แก้สีของ variant secondary ใน components/ui/badge.tsx หนึ่งบรรทัด ผลคือ tsc rc=0 · eslint rc=0 · next build ผ่าน (rc=0) · มีแค่ git diff --stat ที่ขึ้น components/ui/badge.tsx | 2 +- และ 2 files changed
ตัวเลือกที่ 1 และ 2 ผิดเพราะสองตัวนี้ตรวจว่า “โค้ดพังไหม” ไม่ได้ตรวจว่า “แตะไฟล์ที่ห้ามไหม” · ตัวเลือกที่ 4 ผิดเพราะ eslint ของ create-next-app ไม่มีกฎแบบนั้น — ในผลรันจริงมันคืน rc=0 ทั้งตอนแก้ badge และตอนที่ลืมใส่ HARD ซึ่ง tsc จับได้
จุดที่ต้องจำ: เช็คลิสต์แต่ละข้อจับความผิดคนละแบบ — ข้อห้ามใน prompt ต้องมีคำสั่งตรวจที่จับข้อห้ามนั้นได้จริงคู่กันเสมอ

ถามกลับได้เลย

ถ้าคุณมี prompt ที่เคยใช้กับ Claude Code แล้วได้ผลไม่ตรงใจ เอามาวางได้เลย — เราจะไล่ดูด้วยกันว่าขาดชิ้นไหนในตาราง ไฟล์ · พฤติกรรม · ตัวอย่าง · ข้อห้าม · วิธีตรวจ
หรือถ้าไม่แน่ใจว่างานของคุณเป็นแบบ “ไม่รู้ขั้นตอน” (หน้า 29) หรือ “รู้ขั้นตอน” (หน้า 30) เล่างานมาได้ ส่วนใหญ่เป็นแบบผสม — ขั้นหาสาเหตุไม่รู้ขั้น แต่ขั้นตรวจก่อน commit รู้ขั้นเสมอ

อ้างอิง