คุณเขียนกฎบอก AI ไว้ชัดมาก ตรงตัว ไม่กำกวม แล้วมันก็ยังทำผิดข้อนั้นซ้ำอยู่ดี พอกลับไปอ่านกฎอีกรอบก็ยืนยันว่าเขียนถูกแล้ว
มันน่าหงุดหงิดเพราะดูเหมือน AI ดื้อ แต่พอวัดจริงจะเจอว่าปัญหาไม่ได้อยู่ที่กฎไม่ชัด มันอยู่ที่กฎบอกว่าห้ามทำอะไร โดยไม่เคยแสดงให้ดูว่าแล้วให้ทำแบบไหนแทน
ตัวอย่างของเราเอง เรามีสกิลตัวหนึ่งชื่อ kien-thai ที่คุมสำนวนไทยของงานเขียนทั้งบ้าน ในนั้นมีกฎข้อหนึ่งเขียนไว้ตรงตัวว่า ห้ามใช้เครื่องหมายขีดยาวเป็นบานพับขยายความกลางประโยค ให้เก็บไว้ใช้กับช่วงตัวเลขเท่านั้น
วันหนึ่งเราเอากฎข้อนี้ไปวัดจริง ยิงโจทย์เขียนไทยชิ้นเดียวกัน 3 รอบ โดยเปิดสกิลไว้ครบ ผลออกมาว่า ผ่าน 0 รอบจาก 3
ที่แสบกว่านั้นคือแขนควบคุม (การรันโจทย์เดียวกันแบบไม่มีสกิลเลย เอาไว้เทียบ) ผ่าน 1 รอบจาก 3 สกิลทำให้ผลแย่ลงกว่าไม่มีมัน
บทความนี้คือการไล่หาว่าทำไม และสิ่งที่เจอเปลี่ยนวิธีที่ Productize เขียน Claude skill ของตัวเองไปเลย ตัวเลขทุกตัวมาจากการรันจริงในวันเดียว
ช่วงที่ 1กฎที่โมเดลอ่านแล้วยังทำผิด
กฎที่เอามาทดสอบเขียนไว้ในไฟล์อ้างอิงของสกิลแบบนี้
เก็บขีดยาวไว้ให้ช่วงตัวเลขหรือบทสนทนาเท่านั้น ห้ามใช้เป็นบานพับสารพัดประโยชน์สำหรับแทรกความคิดกลางประโยค
เป็นกฎที่ค้นคำได้ตรงๆ ไม่ต้องตีความ ตัวตรวจจึงเขียนง่าย นับเครื่องหมายในคำตอบ แล้วยกเว้นให้เฉพาะตัวที่คั่นตัวเลข 2 ตัว ตามข้อยกเว้นที่กฎเขียนไว้เอง
เราไม่ได้เชื่อตัวตรวจตัวนี้ทันที เราลองทำให้มันแดงก่อน (แดง = ตัวตรวจบอกไม่ผ่าน · เขียว = บอกผ่าน) ป้อนไฟล์ไทยที่มีขีดยาวเข้าไปต้องได้ไม่ผ่าน ป้อนไฟล์ที่ไม่มีต้องได้ผ่าน ป้อนไฟล์ที่ไม่ใช่ภาษาไทยต้องได้ผลว่าประเมินไม่ได้ ไม่ใช่ผิดกฎ และป้อนไฟล์ที่มีแค่ช่วงปีต้องได้ผ่าน ครบทั้ง 4 ทาง
ตัวตรวจที่ไม่เคยเห็นแดง กับตัวตรวจที่ตายอยู่ ให้ผลหน้าตาเหมือนกันเป๊ะ ดังนั้นก่อนจะเชื่อผลเขียว ต้องเคยเห็นมันแดงมาก่อน
ช่วงที่ 2มันไม่ใช่ปัญหาว่าสกิลไม่ถูกเรียก
คำอธิบายแรกที่ทุกคนคิดถึงคือ สกิลคงไม่ถูกโหลด หรือโมเดลไม่ได้หยิบมันขึ้นมา เราเลยเปิดบันทึกการรันของรอบจริงมาดูทีละบรรทัด
| สิ่งที่เช็ค | ผลจากบันทึกการรันรอบนั้น |
|---|---|
| แขนที่เปิดสกิลมองเห็นสกิลกี่ตัว | 96 ตัว (แขนควบคุมเห็น 12) |
| ถามตรงๆ ว่าเห็นสกิลตัวนี้ไหม | เห็น และตอบชื่อเต็มถูก |
| เครื่องมือที่ถูกเรียกในรอบนั้น | เรียกสกิล 1 ครั้ง อ่านไฟล์ 2 ครั้ง |
| ไฟล์ที่ถูกเปิดอ่าน | ไฟล์ที่ตัวกฎอยู่จริง |
| ขีดยาวในคำตอบสุดท้าย | 2 จุด |
อ่าน 2 แถวสุดท้ายคู่กันจะเห็นภาพ โมเดลเรียกสกิล เปิดไฟล์ที่กฎอยู่ แล้วละเมิดกฎนั้นในรอบเดียวกัน
ตรงนี้สำคัญเพราะมันตัดคำอธิบายยอดนิยมทิ้งไปได้หมด ไม่ใช่ติดตั้งผิด ไม่ใช่ทริกเกอร์ไม่ทำงาน ไม่ใช่กฎถูกฝังในไฟล์ที่ไม่มีใครเปิด กฎถูกอ่านจริง แล้วยังแพ้อะไรบางอย่างในไฟล์เดียวกันนั้น
ช่วงที่ 3ต้นเหตุอยู่ในตัวสกิลเอง
เราเลยหันกลับไปนับในไฟล์ของสกิลเองว่ามีเครื่องหมายที่มันห้ามอยู่กี่จุด
| ไฟล์ | ขีดยาวที่พบ | ความยาวไฟล์ |
|---|---|---|
| ไฟล์หลักของสกิล | 54 จุด | 380 บรรทัด |
| ไฟล์อ้างอิงที่กฎอยู่ | 21 จุด | 376 บรรทัด |
| ไฟล์วลีต้องห้าม | 4 จุด | 29 บรรทัด |
แต่จำนวนดิบยังไม่ใช่คำตอบ เพราะบางจุดตั้งใจให้มีอยู่ ตัวอย่างที่ติดป้ายว่า ผิด ต้องใช้เครื่องหมายนั้นสิ ไม่งั้นกฎก็ไม่มีของให้เทียบ
จุดที่เป็นปัญหาจริงคือประโยคแบบนี้ อยู่ในไฟล์เดียวกับกฎ และติดป้ายไว้ว่า ดี
ตัวอย่างที่ดีของการเปิดเรื่อง: มีเงินใช้แค่เดือนชนเดือน ไม่เคยเหลือเก็บ [ขีดยาว] เคยรู้สึกแบบนี้ไหม
ในบรรทัดจริงตรงวงเล็บนั้นคือตัวเครื่องหมายเลย เราแทนด้วยชื่อของมันในบทความนี้ เพราะบล็อกนี้มีตัวกันของตัวเองที่ปฏิเสธเครื่องหมายนั้นทุกไฟล์ก่อนขึ้นเว็บ และเราไม่อยากปิดตาตัวกันเพื่อเล่าเรื่องตัวกัน
บรรทัดนี้เป็นตัวอย่างที่ดีของกฎ อีกข้อหนึ่ง เรื่องวิธีเปิดเรื่อง แต่ตัวมันเองใช้ขีดยาวเป็นบานพับ คือสิ่งที่กฎที่เรากำลังทดสอบห้ามตรงๆ
โมเดลอ่านทั้งไฟล์ก่อนลงมือเขียน มันจึงเห็นทั้งคำสั่งที่บอกว่าห้าม และตัวอย่างภาษาไทยที่ติดป้ายว่าดีซึ่งทำสิ่งที่ห้าม ตัวอย่างชนะคำสั่ง และมันชนะทุกรอบ
ถ้าคิดในมุมคนสอนงานก็ไม่แปลก การบอกว่า "อย่าทำแบบนี้" แล้วยกงานตัวอย่างที่ทำแบบนั้นให้ดูพร้อมกัน คนก็เลียนตัวอย่าง ไม่ได้จำคำสั่ง
ช่วงที่ 4แก้ 4 บรรทัด แล้วผลพลิก
สิ่งที่แก้ไม่ใช่การเขียนกฎให้แข็งขึ้น เราไม่ได้เติมคำว่าห้ามหรือใส่ตัวหนาเพิ่มเลย เราแก้ตัวอย่าง
- ตัวอย่างที่ติดป้ายว่าดี 4 บรรทัด เปลี่ยนจากขีดยาวเป็นช่องว่างธรรมดา
- ยกกฎขึ้นมาไว้ในไฟล์หลักของสกิลเป็นรายการสั้น ไม่ปล่อยให้อยู่แต่ในไฟล์อ้างอิง
- เขียนหมายเหตุกำกับไว้ว่าตัวอย่างจุดไหนตั้งใจสาธิตความผิด จะได้ไม่มีใครมาไล่ลบทีหลัง
แล้วยิงคำสั่งเดิมซ้ำ โจทย์เดิม จำนวนรอบเท่าเดิม ตัวตรวจตัวเดิม
| แขน | ก่อนแก้ | หลังแก้ |
|---|---|---|
| เปิดสกิล | ผ่าน 0 จาก 3 | ผ่าน 3 จาก 3 |
| ไม่มีสกิล | ผ่าน 1 จาก 3 | ผ่าน 1 จาก 3 |
แขนควบคุมไม่ขยับ เป็นสิ่งที่ควรเป็น เพราะเราไม่ได้แตะโจทย์หรือตัวตรวจ เราแตะแค่ของที่อยู่ในสกิล ตัวแปรเดียวที่เปลี่ยนคือตัวอย่าง 4 บรรทัด
เรารันซ้ำอีกครั้งในวันเดียวกันได้ผ่าน 3 จาก 3 เหมือนเดิม ส่วนแขนควบคุมรอบนั้นได้ 0 จาก 3 ซึ่งบอกว่าแขนเปล่าแกว่งอยู่ในช่วง 0 ถึง 1 ตามธรรมชาติของมัน ไม่ใช่เส้นตายที่ตรึงอยู่กับที่
ช่วงที่ 5เอาไปตรวจสกิลของคุณเอง
คำถามที่ควรถามกับสกิลทุกตัวที่มีกฎแบบค้นคำได้คือ ไฟล์นี้ทำสิ่งที่ตัวเองห้ามอยู่กี่จุด
มันตอบได้จากไฟล์เฉยๆ ไม่ต้องยิงโมเดลสักครั้ง เราเลยเขียนตัวตรวจสั้นๆ ที่ไล่ทั้งคลัง 141 ตัวในไม่กี่วินาที แล้วต่อเข้าสายที่รันอัตโนมัติทุกครั้งที่ซิงก์สกิล ราคาของมันคือศูนย์ และมันจับอาการชนิดนี้ได้ตั้งแต่ก่อนจ่ายค่ายิงโมเดล
ลำดับที่เราแนะนำ จากการเดินผิดมาก่อน
- แยกให้ออกก่อนว่าตัวอย่างไหนตั้งใจ ตัวอย่างที่ติดป้ายว่าผิดต้องละเมิดกฎ นั่นคืองานของมัน ที่ต้องแก้คือตัวอย่างที่ติดป้ายว่าดีแล้วละเมิด กับร้อยแก้วของสกิลเองที่เผลอทำ
- ทำให้ตัวตรวจแดงก่อนเชื่อผลเขียว ป้อนของที่ต้องถูกปฏิเสธเข้าไปแล้วดูว่ามันปฏิเสธจริงไหม
- เทียบกับแขนที่ไม่มีสกิลเสมอ ไม่งั้นคุณจะไม่รู้เลยว่าผลที่ได้มาจากสกิลหรือมาจากโมเดลที่ทำเองได้อยู่แล้ว
- แก้ทีละตัวแปร ถ้าแก้ทั้งกฎและตัวอย่างพร้อมกันแล้วผลดีขึ้น คุณจะไม่รู้ว่าอันไหนได้ผล
ข้อสรุปที่เอาไปใช้ได้ทันทีคือ เวลาจะเพิ่มกฎเข้าสกิล ให้ใช้เวลากับตัวอย่างมากกว่าถ้อยคำของกฎ เพราะสิ่งที่โมเดลเลียนคือของที่มันเห็น ไม่ใช่ของที่มันถูกบอก
เรื่องนี้เป็นชิ้นหนึ่งของการวัดคลังสกิลทั้งคลัง ถ้าอยากเห็นภาพรวมว่าวัดกันกี่ชั้นและแต่ละชั้นราคาเท่าไร อ่านต่อที่ สกิล 60 ตัวไม่เคยถูกเรียกเลย เราเกือบตัดทิ้ง แล้ววัดก่อน และถ้ายังไม่แน่ใจว่าสกิลต่างจากพรอมต์ยาวๆ ตรงไหน เริ่มที่ skill ไม่ใช่แค่ prompt ที่ยาวขึ้น ส่วนบทความอื่นอยู่ที่ หน้ารวมบทความ
ที่มาและอ้างอิง
ตัวเลขทุกตัวในบทความนี้มาจากการรันจริงบนสกิลของเราเองเมื่อ 13 สิงหาคม 2026 ไม่มีตัวเลขที่ยกมาจากที่อื่น
- ผลของ 2 แขน วัดด้วยตัวรันที่ยิงโจทย์เดียวกัน 2 ชุด ชุดหนึ่งเปิดสกิลครบ อีกชุดปิดแหล่งตั้งค่าทั้งหมด และตั้งที่ทำงานไว้ในโฟลเดอร์ว่างที่ไม่มีกฎของบ้านอยู่ตลอดสายขึ้นไป
- จำนวนขีดยาวในไฟล์สกิล นับจากไฟล์จริงในต้นทาง ไม่ใช่จากสำเนาที่แคชไว้
- บันทึกการรันแบบละเอียด อ่านจากผลดิบของรอบเดียวกับที่รายงานผล ไม่ใช่รอบที่รันใหม่ทีหลัง
- ตัวตรวจของเคสนี้ผ่านการทดสอบว่าแดงได้จริง 4 ทาง ก่อนถูกใช้ตัดสินผลใดๆ