DEV Community

Nokka
Nokka

Posted on

ทำไม AI agent ชอบ 'ทำเกิน' และ 'ทำไม่เสร็จ' พร้อมกัน, และ feature list ช่วยแก้ยังไง

ทำไม AI agent ชอบ "ทำเกิน" และ "ทำไม่เสร็จ" พร้อมกัน, และ feature list ช่วยแก้ยังไง

โดย Nokka (นก-กา) | 23 สิงหาคม 2026

บทความนี้เขียนโดย AI (deepseek-v4-pro via ollama-cloud) ผ่าน Hermes Agent ภายใต้การควบคุมและตรวจสอบคุณภาพโดยมนุษย์, Nokka (นก-กา)

Agent ทำเกินและทำไม่เสร็จ

ก่อนอื่น, ทำความเข้าใจศัพท์

ก่อนเข้าเรื่อง ขอปูศัพท์ 3 คำที่คนอ่านบทความนี้ต้องรู้ก่อน:

  • Overreach (ทำเกิน): agent เปิดงานหลายอย่างพร้อมกันเกินกว่าที่จะทำเสร็จ
  • Under-finish (ทำไม่เสร็จ): สัดส่วนงานที่ผ่านการตรวจสอบจริง ต่ำกว่าเกณฑ์
  • WIP Limit (จำกัดงานระหว่างทำ): หลักจาก Kanban, จำกัดจำนวนงานที่ "กำลังทำ" พร้อมกัน

ถ้าให้อุปมา: agent คือ "คนที่เห็นงานที่เกี่ยวข้องแล้วอดใจไม่ไหว", เห็นอะไรก็อยากทำไปหมด แต่ทำหลายอย่างพร้อมกัน = ไม่มีอะไรเสร็จสักอย่าง

ปัญหา: agent เกิดมาพร้อมแรงกระตุ้น "ทำเพิ่มอีกนิด"

คุณสั่ง Claude Code "เพิ่ม user authentication" มันเริ่มแก้ database schema, เขียน routes, เปลี่ยน frontend, และ "ระหว่างทาง" ก็ refactor error-handling middleware ไปด้วย

2 ชั่วโมงผ่านไป คุณเช็ค: 12 ไฟล์ถูกแก้, โค้ดใหม่ 800 บรรทัด, และไม่มี feature ไหนทำงาน end-to-end ได้เลยสักตัว

Anthropic ระบุชัด: พอ prompt กว้างเกินไป agent มัก "เริ่มหลายอย่างพร้อมกัน" แทนที่จะ "ทำอย่างหนึ่งให้เสร็จก่อน" [1] OpenAI เจอเหมือนกัน: งานที่ไม่มี scope control อัตราเสร็จดิ่งลง [2]

นี่ไม่ใช่ปัญหาโมเดล, มันคือปัญหา harness

ความสนใจของ agent เป็นทรัพยากรจำกัด, นี่ไม่ใช่คำเปรียบเทียบ แต่มันคือคณิตศาสตร์

สมมติ context capacity = C และ agent เปิดงาน k อย่างพร้อมกัน แต่ละงานได้ทรัพยากรคิดเฉลี่ย C/k เมื่อ C/k ต่ำกว่าเกณฑ์ขั้นต่ำที่ต้องใช้ทำงานหนึ่งชิ้นให้เสร็จ ก็ไม่มีงานไหนเสร็จเลย

ข้อมูลจริงของ Anthropic: agent ที่ใช้กลยุทธ์ "small next step" (เทียบเท่า WIP=1) มีอัตราเสร็จงานสูงกว่า 37% เทียบกับ agent ที่ใช้ prompt กว้างๆ [1]

และที่น่าสนใจกว่า: จำนวนบรรทัดโค้ดที่ agent สร้าง มีความสัมพันธ์เชิงลบกับอัตราเสร็จ feature จริง, เขียนโค้ดเยอะขึ้น, feature เสร็จน้อยลง [1]

วงจรอุบาทว์: ทำเกิน กับ ทำไม่เสร็จ เป็นเหรียญเดียวกัน

2 ปัญหานี้ไม่แยกจากกัน, มันขยายกันเอง:

วงจรของความล้มเหลว

ทำเกิน → เจือจางความสนใจ → เจือจางแล้วทำไม่เสร็จ → โค้ดครึ่งๆ กลางๆ เพิ่มความซับซ้อน → ความซับซ้อนยิ่งผลักให้ทำเกินในงานถัดไป

ในภาษา Kanban: Little's Law บอกว่า L = λ × W ถ้า work-in-progress (L) สูงเกินไป lead time (W) ของแต่ละงานก็เพิ่มขึ้นอย่างเลี่ยงไม่ได้

วิธีแก้ 1: บังคับ WIP=1

วิธีตรงและได้ผลที่สุด: บอก agent ชัดๆ ว่า "มีงาน active ได้แค่ 1 อย่างเท่านั้น"

## Work Rules
- Work on one feature at a time
- Only start the next feature after the current one passes end-to-end verification
- Don't "also refactor" feature B while implementing feature A
Enter fullscreen mode Exit fullscreen mode

วิธีแก้ 2: กำหนด "หลักฐานความเสร็จ" ที่ตรวจสอบได้

"เสร็จ" ไม่ใช่ "โค้ดเขียนแล้ว" แต่มันคือ "พฤติกรรมผ่านการตรวจสอบ"

F01: User Registration
  Verification: curl -X POST /api/register -d '{"email":"test@example.com","password":"123456"}' | jq .status == 201
  State: passing
Enter fullscreen mode Exit fullscreen mode

แล้ว feature list คืออะไร

หลายคนมอง feature list เป็นแค่ "โน้ตช่วยจำ", เขียนไว้กันลืม แล้วก็โยนทิ้ง [3]

แต่ในโลก harness, feature list ไม่ใช่โน้ตสำหรับมนุษย์ มันคือ โครงสร้างพื้นฐานที่ harness ทั้งหมดตั้งอยู่บนนั้น:

3 องค์ประกอบที่อาศัย feature list

องค์ประกอบ อาศัย feature list ทำอะไร
Scheduler เลือกงานถัดไปจาก state
Verifier ตัดสินว่างานเสร็จไหม
Handoff reporter สร้างสรุปส่งต่อ session

ถ้าไม่มี feature list, องค์ประกอบเหล่านี้ไม่มี "ฉันทามติร่วม" ให้ยึด

โครงสร้าง 3 ส่วนของ feature item

ทุก feature item ต้องมี 3 อย่างครบ (ขาดอย่างใดอย่างหนึ่ง = item ไม่สมบูรณ์) [3]:

3 ส่วนบังคับของ feature item

  1. Behavior, บอก agent ว่าต้องทำอะไร
  2. Verification command, บอกว่าอะไรนับว่า "เสร็จ"
  3. State, บอกว่าตอนนี้อยู่ตรงไหน (not_started / active / blocked / passing)
{
  "id": "F03",
  "behavior": "POST /cart/items with {product_id, quantity} returns 201",
  "verification": "curl -X POST http://localhost:3000/api/cart/items -d '{\"product_id\":1,\"quantity\":2}' | jq .status == 201",
  "state": "passing",
  "evidence": "commit abc123, test output log"
}
Enter fullscreen mode Exit fullscreen mode

ทำไม feature list ต้องเป็น "primitive" ไม่ใช่ "เอกสาร"

เอกสารมีไว้ให้มนุษย์อ่าน, primitive มีไว้ให้ระบบ execute, เอกสารมองข้ามได้, primitive ข้ามไม่ได้

คิดแบบ database trigger constraint เทียบกับ application-layer check: ตัวแรกถูกบังคับโดย database engine ไม่มี SQL ไหนข้ามได้, ตัวหลังขึ้นกับความถูกต้องของโค้ดแอป ข้ามได้โดยบังเอิญ

feature list ในฐานะ harness primitive เล่นบทเดียวกับ database constraint, agent ข้ามมันไม่ได้

เรื่องจริง: 87.5% vs 37.5%

โปรเจกต์ REST API 8 features, เทียบ 2 กลยุทธ์:

Unconstrained: agent เปิด 5 features พร้อมกันใน session 1, สร้าง ~800 บรรทัด 12 ไฟล์, E2E test ผ่านแค่ 20% (เฉพาะ user registration), พอจบ session 3 เสร็จแค่ 3 จาก 8

WIP=1: agent ทำ user registration อย่างเดียวใน session 1, สร้าง ~200 บรรทัด 4 ไฟล์, E2E test ผ่าน 100%, พอจบ session 4 เสร็จ 7 จาก 8 (ตัวที่ 8 ติด external dependency)

ผลลัพธ์: โค้ดน้อยกว่า (800 vs 1200 บรรทัด) แต่โค้ดมีประสิทธิภาพกว่า, อัตราเสร็จ 87.5% vs 37.5%

สรุปมุมมองของผม

ผมมองว่านี่คือบทเรียนที่ "ขัดกับสัญชาตญาณ" ที่สุดของ harness engineering: "ทำน้อยแต่เสร็จ" ชนะ "ทำมากแต่ค้างครึ่ง" เสมอ

เพราะข้อมูลชัดเจน: จำนวนโค้ดที่ agent เขียน กับ อัตราเสร็จ feature จริง มีความสัมพันธ์เชิงลบ, คุณภาพชนะปริมาณเสมอ

ถ้าคุณทำได้แค่ 2 อย่างนี้, บังคับ WIP=1 + สร้าง feature list ที่มี 3 ส่วนครบ, agent ของคุณจะเลิก "ทำเกิน" และ "ทำไม่เสร็จ" พร้อมกัน

คุณเคยเจอ agent "แถมงาน" เพิ่มมานอกเหนือจากที่สั่งไหมครับ? แล้วตอนนี้คุณมี feature list ใน repo หรือยัง? คอมเมนต์เล่าให้ฟังได้ครับ

แหล่งอ้างอิง

[1] Anthropic. "Effective harnesses for long-running agents". 2026. https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents

[2] OpenAI. "Harness Engineering: leveraging Codex in an agent-first world". 2026. https://openai.com/index/harness-engineering/

[3] Learn Harness Engineering, Lecture 07-08. 2026. https://github.com/walkinglabs/learn-harness-engineering


บทความนี้วิเคราะห์จาก Anthropic, OpenAI และ walkinglabs/learn-harness-engineering ข้อมูล ณ 23 สิงหาคม 2026 Nokka

Top comments (0)