KM
บทที่ 5 · CODE & AGENT

Prompt งานโค้ด
& AI Agent

งานโค้ดคืองานที่ AI เก่งที่สุด — ถ้าเราให้ข้อมูลครบ

โค้ดมีไวยากรณ์ชัด มี test พิสูจน์ได้ — AI จึงเขียนโค้ดได้เก่งกว่างานไหน ๆ แต่ผลลัพธ์จะดีหรือพังขึ้นกับ ข้อมูลที่เราให้ ล้วน ๆ บทนี้สอน 4 เรื่อง: ขอโค้ด · ถาม bug · มอบงาน agent · และจุดที่ต้องระวัง

5

ส่วนผสมของ prompt ขอโค้ด

ภาษา+เวอร์ชัน · บริบท · ข้อจำกัด · ตัวอย่าง I/O · format

5

ส่วนของคำถาม bug ที่ดี

error เต็ม · โค้ด · คาดหวัง vs จริง · ลองแล้ว · environment

4

ข้อใน job brief ของ agent

เป้าหมาย · ขอบเขต · เกณฑ์สำเร็จ · ข้อจำกัด

01 · ขอโค้ดให้ได้ของจริง

สูตรขอโค้ด — 5 ส่วนผสมที่ AI ต้องรู้

"เขียนฟังก์ชันให้หน่อย" ได้โค้ดจากความน่าจะเป็น — แต่ถ้าให้ภาษา บริบท ข้อจำกัด ตัวอย่าง และ format ครบ จะได้โค้ดที่ใช้ในโปรเจกต์ได้จริง

01

ภาษา + เวอร์ชัน + framework

บอก "Python 3.12 + FastAPI" ไม่ใช่แค่ "Python" — คนละเวอร์ชัน syntax กับ lib ต่างกันมาก

02

บริบทโปรเจกต์

โค้ดรอบข้าง, convention ที่ทีมใช้, ฟังก์ชันนี้ถูกเรียกจากไหน ใครเป็นคนใช้

03

ข้อจำกัด

ห้ามใช้ lib ภายนอก / ต้อง type-safe / ต้องรองรับ edge case ไหนบ้าง — กันเซอร์ไพรส์

04

ตัวอย่าง input → output

1–2 คู่ก็พอ — ตัวอย่างเดียวอธิบาย spec ได้แม่นกว่าคำบรรยายสิบบรรทัด

05

Format ผลลัพธ์

"ฟังก์ชันเดียว + docstring" หรือ "เต็มไฟล์พร้อม imports" — บอกให้ชัดว่าอยากได้รูปแบบไหน

ลองดู — โจทย์เดียวกัน prompt ต่างกัน

prompt แย่ไม่มีส่วนผสมสักข้อ — AI ต้องเดาทั้งหมด

💬 Prompt ที่พิมพ์

เขียนฟังก์ชัน validate email หน่อย

🤖 ผลที่ได้ (mock output)

function validateEmail(email) {
  const re = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;
  return re.test(email);
}

ได้ JavaScript — ทั้งที่โปรเจกต์เราเป็น Python (AI ไม่รู้ เพราะเราไม่ได้บอก)

"สมชาย@บริษัท.ไทย" → false — regex รับเฉพาะ A–Z ปฏิเสธ user ไทยทั้งหมด

คืน bool หรือ throw? ไม่มีสัญญาชัดเจน — เอาไป integrate แล้วเสี่ยงพังเงียบ ๆ

"" → false — รอดมาข้อเดียวแบบฟลุก ๆ

หมายเหตุ: นี่คือ mock output — ของจริงแต่ละรอบอาจต่างไปอีก และนั่นแหละคือประเด็น: prompt ที่คลุมเครือ = ผลลัพธ์สุ่ม, prompt ที่ระบุครบ = ผลลัพธ์ตรวจรับได้

02 · ถาม bug ให้ AI ช่วยได้จริง

Anatomy ของคำถาม bug — 5 ส่วนที่ทำให้ AI เลิกเดา

"โค้ดพัง ช่วยหน่อย" บังคับให้ AI เดา — แต่ถ้าให้ error เต็ม โค้ด ความคาดหวัง สิ่งที่ลองแล้ว และ environment ครบ AI จะชี้บรรทัดที่พังได้เลย

ทดลอง — ติ๊กข้อมูลที่จะแนบ แล้วดูว่าคำตอบ AI เปลี่ยนยังไง

สถานการณ์: หน้า /orders ใน Next.js พังเป็นจอขาว — คุณจะแนบอะไรไปกับคำถามบ้าง?

💬 คำถามของคุณ

ช่วยดูหน่อย หน้า orders พังครับ

ความแม่นของคำตอบ

🎲 AI ต้องเดาล้วน ๆ · 0/5

🤖 คำตอบที่จะได้กลับมา

เป็นไปได้หลายสาเหตุครับ 🤔 ลองไล่ตรวจดู: (1) ตัวแปรที่เรียก .map อาจเป็น undefined — ใส่ console.log ดูค่า (2) ตรวจว่า import ครบไหม (3) ลองลบโฟลเดอร์ .next แล้ว restart dev server (4) ลองอัปเดต dependency เป็นเวอร์ชันล่าสุด (5) ถ้ายังไม่หาย ส่งโค้ดมาดูหน่อยครับ

ได้ checklist กว้าง ๆ ที่คุณก็คิดเองได้ — เสียเวลาไป-กลับหลายรอบ

หลักคิด

ยิ่งให้ context มาก AI ยิ่งไม่ต้องเดา

AI ไม่เห็นหน้าจอคุณ ไม่เห็น repo คุณ — ทุกอย่างที่ไม่ได้แนบไป คือช่องว่างที่มันต้องเติมด้วยการเดา ข้อมูล 5 ส่วนนี้คือการย้ายงาน "เดา" ออกจากคำตอบให้หมด

เคล็ดลับใช้ทุกวัน

วาง error ก่อน แล้วค่อยพิมพ์คำถาม

เปิดข้อความด้วย stack trace ทั้งดุ้น แล้วค่อยตามด้วยคำถามสั้น ๆ ก็พอ — บ่อยครั้ง error บอกคำตอบไปแล้วครึ่งหนึ่ง และ AI อ่านของยาว ๆ ได้เร็วกว่าคุณพิมพ์สรุปเองเยอะ

03 · มอบหมายงานให้ AI Agent

Prompt ของ agent คือ Job Brief ไม่ใช่คำถาม

agent อย่าง Claude Code ไม่ได้แค่ตอบ — มันแก้ไฟล์จริง รันคำสั่งจริง วนทำหลายขั้นเอง ดังนั้นสิ่งที่มันต้องการคือใบสั่งงานที่ชัด ไม่ใช่บทสนทนา

💬 ถาม-ตอบ (บท 1–4)

AI ตอบ → คุณลงมือ

ได้คำตอบ/โค้ดกลับมา 1 ก้อน คุณเป็นคน copy ไปวาง รันเอง ตรวจเอง — ความเสียหายจำกัดอยู่ที่คำตอบผิด

🤖 Agent (เช่น Claude Code)

AI ลงมือเองหลายขั้น

อ่าน repo → แก้หลายไฟล์ → รัน test → วนแก้จนผ่าน โดยไม่ถามคุณทุกก้าว — ทรงพลังมาก แต่ถ้า brief คลุมเครือ มันจะ "ขยัน" ไปผิดทางหลายก้าวเช่นกัน

🎯

01

เป้าหมายผลลัพธ์สุดท้าย

"ทุก test ผ่าน" ไม่ใช่ "ลองแก้ดู" — agent ทำงานจนกว่าจะถึงเป้า ถ้าเป้าคลุมเครือมันจะหยุดเอง

📦

02

ขอบเขต

แตะไฟล์/โฟลเดอร์ไหนได้ ห้ามแตะอะไร — agent ที่ไม่รู้ขอบเขตจะ 'ช่วยแก้' ของที่ไม่ควรแตะ

03

เกณฑ์สำเร็จที่ตรวจได้

build ผ่าน, lint ผ่าน, ผลลัพธ์หน้าตาเป็นยังไง — เกณฑ์ที่รันเช็คได้คือสิ่งที่ agent ใช้ verify ตัวเอง

🚧

04

ข้อจำกัด

อย่าเพิ่ม dependency, ตาม convention เดิมของโปรเจกต์ — กติกาที่ผิดไม่ได้แม้งานจะ 'เสร็จ'

งานเดียวกัน — brief ต่างกัน ชะตากรรมต่างกัน

✗ Brief แย่ — สั่งเหมือนคุยเล่น

ช่วยแก้ bug ตะกร้าสินค้าหน่อย มันคิดราคาผิด

สิ่งที่มักเกิด

agent เดาว่า bug อยู่ไหน → ไล่แก้สูตรราคาใน 4 ไฟล์ รวมถึง checkout/ ที่ไม่เกี่ยว → รายงานว่า "น่าจะหายแล้ว" ทั้งที่ไม่มี test พิสูจน์ — คุณต้องไล่รีวิวเองทุกไฟล์

✓ Brief ดี — ครบ 4 ส่วน

🎯 เป้าหมายผลลัพธ์สุดท้าย

แก้ bug: ตะกร้าคิดส่วนลดซ้ำ เมื่อ user ใส่คูปองแล้วเปลี่ยนจำนวนสินค้า — เป้าหมาย: ราคาใน cart ตรงสูตรใน docs/pricing.md ทุกกรณี

📦 ขอบเขต

แตะได้เฉพาะ src/cart/ และ tests ของมัน — ห้ามแก้ checkout/ และ pricing API

เกณฑ์สำเร็จที่ตรวจได้

เกณฑ์สำเร็จ: npm test ผ่านทั้งหมด · เพิ่ม test ใหม่ครอบเคส 'คูปอง + เปลี่ยนจำนวน' · npm run lint ไม่มี error

🚧 ข้อจำกัด

ห้ามเพิ่ม dependency ใหม่ · ตาม convention เดิม: เก็บเงินเป็นสตางค์ (integer) ห้ามใช้ float

สิ่งที่มักเกิด

agent เขียน test reproduce bug ก่อน → แก้จุดเดียวใน cart-discount.ts → รัน test + lint จนผ่าน → ส่งงานพร้อมหลักฐาน — ตรวจรับได้ใน 5 นาที

📄

กติกาที่ใช้ซ้ำทุกงาน — ย้ายไปไว้ใน CLAUDE.md / AGENTS.md

สังเกตว่า "เก็บเงินเป็นสตางค์ integer" หรือ "ใช้ next-themes ห้ามเพิ่ม lib" เป็นกติกาที่จริง ทุกงาน ของโปรเจกต์นี้ — แทนที่จะพิมพ์ซ้ำใน prompt ทุกครั้ง ให้เขียนไว้ในไฟล์ประจำโปรเจกต์อย่าง CLAUDE.md หรือ AGENTS.md ที่ agent อ่านเองอัตโนมัติทุก session — prompt ของคุณจะเหลือแค่ส่วนที่เฉพาะของงานนั้น

นี่คือก้าวแรกจาก prompt engineering สู่ context engineering — ต่อยอดได้ที่ GenAI Fundamentals บทที่ 4

04 · จุดที่ต้องระวัง

4 กับดักของโค้ดจาก AI

ใช้ AI เขียนโค้ดให้เร็วได้เต็มที่ — แต่ความรับผิดชอบต่อโค้ดยังเป็นของเรา นี่คือ 4 จุดที่คนพลาดบ่อยที่สุด

ท่าทีที่ถูกต้อง

AI คือ junior dev ที่เร็วที่สุดในโลก — ไม่ใช่ senior ที่เชื่อได้ทุกคำ

ความเร็วเอามาจากมันได้เลย แต่การตัดสินใจและการตรวจรับยังเป็นหน้าที่ของเรา

เคสคลาสสิก

df.summarize()        # ❌ pandas ไม่มี method นี้ — AI แต่งขึ้น
df.describe()         # ✅ ของจริงชื่อนี้

requests.get(url, retries=3)   # ❌ requests ไม่มี param retries
                               #    (ต้องใช้ HTTPAdapter + Retry)

🛡️ วิธีกัน

ตรวจ docs ของจริงก่อนเชื่อ · ลองรันก่อน merge เสมอ · ถ้าใช้ agent ให้มันรันโค้ด/test พิสูจน์เองก่อนส่งงาน

Recap · บทที่ 5

4 ข้อที่ต้องจำ

งานโค้ดคืองานที่ AI เก่งที่สุด — และทั้ง 4 ข้อนี้คือสิ่งที่เปลี่ยน 'ของที่ AI เดาให้' เป็น 'ของที่ใช้งานจริงได้'

01

ขอโค้ด = ให้ส่วนผสมครบ 5 อย่าง

ภาษา+เวอร์ชัน+framework · บริบทโปรเจกต์ · ข้อจำกัด · ตัวอย่าง input→output · format ที่อยากได้ — ขาดข้อไหน AI เดาข้อนั้นแทนคุณ

02

ถาม bug = วาง 5 ส่วนให้ AI เลิกเดา

error เต็มทั้ง stack trace · โค้ดที่เกี่ยว · คาดหวัง vs เกิดจริง · สิ่งที่ลองแล้ว · environment — ครบเมื่อไหร่ AI ชี้บรรทัดที่พังได้ในรอบเดียว

03

มอบงาน agent = เขียน job brief

เป้าหมายผลลัพธ์สุดท้าย · ขอบเขตไฟล์ · เกณฑ์สำเร็จที่ตรวจได้ · ข้อจำกัด — และกติกาที่ใช้ซ้ำทุกงานให้ย้ายไป CLAUDE.md / AGENTS.md

04

AI คือ junior ที่เร็วมาก ไม่ใช่ senior

ระวัง hallucinated API · รันได้ ≠ ถูก · ห้ามวาง secret ใน prompt · ห้ามให้ agent รันคำสั่งอันตรายอัตโนมัติ — รีวิวและตรวจรับเป็นหน้าที่เราเสมอ