Agent Dev Thai Academyprinciples · patterns · architecture

เคยสั่งให้ AI agent วิ่งทำงานเองแบบ goal mode แล้วเดินไปทำอย่างอื่น พอกลับมามันขึ้น "เสร็จ

loop ที่วิ่งเองหยุดตอนรู้สึกว่าเสร็จ ให้เขียนเงื่อนไขจบที่เช็คได้เป็นข้อๆ ก่อนปล่อยวิ่ง แล้ว gate การปิดงานด้วยมัน เขียนทีหลังไม่ใช่ contract แต่เป็นคำบรรยาย

เคยสั่งให้ AI agent วิ่งทำงานเองแบบ goal mode แล้วเดินไปทำอย่างอื่น พอกลับมามันขึ้น "เสร็จแล้ว" แต่พอเปิดดูจริงๆ มันไม่เสร็จ หรือบางทีมันวิ่งจนชน timeout แล้วก็นับว่าจบซะงั้น

ปัญหาไม่ใช่ AI มันขี้เกียจ ปัญหาคือ loop ที่วิ่งเองมันไม่มีเส้นชัยจริงๆ มันหยุดตอนที่มัน "รู้สึก" ว่าเสร็จ ซึ่งไม่เหมือนกับเสร็จจริง พอไม่มีใครบอกไว้ก่อนว่าเสร็จแปลว่าอะไร มันก็เดาเอาเอง

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


วิธีแก้คือประกาศเส้นชัยก่อนปล่อยให้มันวิ่ง

ใน kanly มี skill ชื่อ contract กติกาข้อเดียวคือ ห้ามปล่อย loop วิ่งเองถ้ายังไม่มีเงื่อนไขจบที่เช็คได้จริง

ก่อนสั่งงาน คุณเขียนไว้เลยว่า "เสร็จ" ของงานนี้แปลว่าอะไร แตกออกมาเป็นข้อๆ ที่เช็คได้ทีละอัน CONTRACT-1, CONTRACT-2 แต่ละข้อต้องบอกด้วยว่าจะเช็คยังไง รัน command ไหน grep คำว่าอะไร หรือดูจากพฤติกรรมตรงไหน

contract แต่ละข้อต้องมีสามอย่าง มีชื่อ, เช็คได้จริง, และผลออกมาเป็นผ่านหรือไม่ผ่าน ไม่ใช่ "ดูดีแล้ว" หรือ "น่าจะครบแล้ว"

แล้วปล่อย loop วิ่งได้ พอมันบอกว่าเสร็จ ก็รัน contract check ไล่ทีละข้อ ข้อไหน FAIL แปลว่างานยังไม่จบ loop วิ่งต่อ ผ่านครบทุกข้อเท่านั้นถึงปิดงานได้


จุดที่สำคัญที่สุดคือต้องประกาศก่อน ไม่ใช่หลัง

ถ้าเขียนเงื่อนไขจบหลังจาก loop ทำเสร็จแล้ว มันไม่ใช่ contract แล้ว มันคือเขียนคำอธิบายย้อนหลัง เพราะคุณเขียนให้มันตรงกับสิ่งที่ออกมาพอดี มันเลยผ่านทุกครั้ง ไม่ได้พิสูจน์อะไรเลย

contract จริงๆ มันต้องกล้า FAIL งานของตัวเองได้ นั่นแหละคือประโยชน์ทั้งหมดของมัน มันคือสิ่งเดียวที่จับได้ตอน loop วิ่งจนจบอย่างมั่นใจ แต่ทำผิดเรื่อง เขียนเงื่อนไขก่อนสร้าง = contract เขียนทีหลัง = คำบรรยาย

รอบนึงเคยใช้ mission mode ประกาศไว้ 15 ข้อก่อนเขียนโค้ดสักบรรทัด แล้วให้อีก pass นึงมาไล่เช็คทั้ง 15 ข้อ loop ไม่ได้ตัดสินเองว่าเสร็จ contract เป็นตัวตัดสิน


ต่างจาก spec ยังไง

สั้นๆ spec คือกฎของทั้งโปรเจกต์ อยู่ยาวข้ามงาน contract คือกฎของงานเดียว ว่า "เสร็จ" ของ run นี้แปลว่าอะไร พองานปิด contract ก็ตายไป คนละหน้าที่กัน

พอเอา contract commit ลง repo ทีมทั้งทีมก็อ่าน definition of done อันเดียวกันสำหรับงานนั้น ไม่มีใครรับ "ความรู้สึกว่าเสร็จ" ของคนอื่นมาเริ่มงานต่อ


เอาไปใช้ได้เลย

repo link อยู่ comment แรก แต่ถ้าจะลองจริงๆ เริ่มจาก contract ตัวเดียวก่อนก็พอ ครั้งหน้าที่จะปล่อย agent วิ่งเอง เขียนเงื่อนไขจบไว้ก่อนสักสามสี่ข้อ แล้ว gate การปิดงานด้วยมัน

agent ที่วิ่งเองไม่พังเพราะมันฉลาดขึ้น มันไม่พังเพราะมีเส้นชัยที่เช็คได้ ไม่ใช่เส้นชัยที่มันรู้สึกเอาเอง