Boom Field Lab

QC ผลงานของ AI ก่อนขึ้น production: 4 ชั้นที่ใช้ตรวจงานตอนสร้าง Terminal

AI agent ทำงานเร็ว แต่ความเร็วไม่มีความหมายถ้าไม่มีใครตรวจ นี่คือด่าน QC 4 ชั้นที่ใช้จริงตอนสร้าง Boom Leverage Terminal — จากสคริปต์จับความคิดรั่ว ไปจนถึงด่านก่อนเผยแพร่ที่ห้ามตัวเลขไม่มีที่มา — พร้อมเคสที่ด่านเองก็พลาด และสถิติว่า 96% ของแผนถูกตีกลับให้แก้

โดย วรัญชัย ยิ่งคำนึง (Boom) · เผยแพร่ครั้งแรก · ตรวจทานล่าสุด

แว่นขยายวางบนกองกระดาษใต้แสงโคมไฟยามดึก พร้อมข้อความ QC ก่อนขึ้น production

ตอนให้ AI agent ช่วยสร้าง Boom Leverage Terminal สิ่งที่ผมกลัวที่สุดไม่ใช่งานที่ออกมาพังให้เห็น แต่คืองานที่ ดูเรียบร้อย แต่ผิดเงียบๆ — ตัวเลขที่ดูสมเหตุสมผลแต่ไม่มีที่มา สรุปที่อ่านลื่นแต่ข้ามประเด็นสำคัญ

ในงาน model validation ของธนาคาร เราไม่เชื่อ output ของโมเดลเพราะมันดูดี เราตรวจมันเป็นชั้นๆ ก่อนให้ใครใช้ตัดสินใจ ผมเอาวิธีคิดเดียวกันมาทำเป็นด่าน QC ใน harness ของ agent (พื้นฐานเรื่อง harness อยู่ใน Harness คืออะไร)

ทำไม "รัน AI แล้วดูผล" ถึงไม่พอ?

เพราะคนที่ดูผลเหนื่อยเป็น และความผิดพลาดของ language model มีลักษณะเฉพาะ: มันถูกฝึกให้เขียนข้อความที่ ดูน่าเชื่อในบริบท ไม่ใช่ข้อความที่ ถูกต้องตามข้อเท็จจริง ตัวเลขที่แต่งขึ้นจึงแนบเนียนกว่าที่ตาคนจับได้ในการอ่านรอบเดียว

เมื่อ agent รันงานหลายสิบชิ้นต่อวัน การตรวจด้วยตาอย่างเดียวจะหลุดแน่นอน ต้องมีเครื่องช่วยกรองก่อน แล้วค่อยให้คน (หรือโมเดลที่เก่งกว่า) ตรวจเฉพาะส่วนที่ต้องใช้วิจารณญาณ

QC 4 ชั้นหน้าตาเป็นยังไง?

แผนภาพ 4 ชั้นของ QC: ชั้น 1 จับความคิดรั่ว 10 pattern ชั้น 2 ดึงตัวเลขทุกตัวพร้อมบริบท ชั้น 3 Claude ตรวจความหมายและ askback ไม่เกิน 4 รอบ ชั้น 4 ด่านก่อนเผยแพร่ของ product
ด่าน QC ที่ผลงานของโมเดลลูกน้องต้องผ่าน · อ่านจากล่างขึ้นบน · ชั้นล่างถูกและเร็ว ชั้นบนแพงแต่ใช้วิจารณญาณ
ชั้นตรวจอะไรใครทำถ้าไม่ผ่าน
1 · ความคิดรั่วร่องรอยการคิดของโมเดลที่หลุดมาในคำตอบ เช่น (Wait, (Note: หรือแท็ก <think> — 10 patternสคริปต์ qc_output.pyตีกลับทันที
2 · ตัวเลขดึงตัวเลขทุกตัวออกมาพร้อมบริบทรอบข้าง ให้ตรวจว่ามีที่มาสคริปต์ตัวเดียวกันส่งให้ชั้น 3 ตรวจรายตัว
3 · ความหมายตอบโจทย์ไหม ข้ามอะไรไหม ตรงกับข้อมูลต้นทางไหมClaude + askback ไม่เกิน 4 รอบสั่งแก้เฉพาะจุด หรือส่งคนตรวจ
4 · ก่อนเผยแพร่เลขหน้าที่อ้างมีจริง ตัวเลขมีพิกัดในเอกสาร disclaimer ครบด่านของ productไม่ปล่อยขึ้นหน้าเว็บ

ชั้น 1–2 ถูกมากเพราะเป็นสคริปต์ ชั้น 3 แพงกว่าเพราะใช้โมเดลตัวใหญ่ การเรียงแบบนี้ทำให้งานที่พังชัดๆ ถูกคัดออกก่อนเสียเงินกับชั้นแพง

ทำไมความคิดรั่วถึงเป็นสัญญาณอันตราย?

ไม่ใช่แค่เพราะมันทำให้ข้อความอ่านยาก แต่มันบอกว่าโมเดลอาจยัง ไม่ได้สรุปความไม่แน่ใจของตัวเอง ก่อนตอบ เนื้อหาที่ตามมาจึงไว้ใจได้น้อยลง โดยเฉพาะงานที่ต้องแม่นยำ

และนี่คือเคสที่ด่านเองพลาด เมื่อเพิ่มโมเดลใหม่เข้าระบบ มันรั่วความคิดในรูปแบบแท็ก ไม่ใช่วงเล็บแบบที่สคริปต์รู้จัก ผลคือหลุดผ่านไปเป็น PASS ในโค้ดของสคริปต์ยังมีคอมเมนต์บันทึกเหตุการณ์นี้ไว้:

การ์ดข้อความจริงจากคอมเมนต์ในโค้ด qc_output.py: โมเดลใหม่รั่วความคิดเป็นแท็ก think และหลุดผ่านด่านเป็น PASS เมื่อ 10 สิงหาคม 2026
คอมเมนต์จริงในไฟล์ tools/qc_output.py · ภาษาต้นฉบับ

MiniMax M3 emits <think>…</think> instead and sailed through this check as a clean PASS on 2026-08-10.

การแก้มี 2 ชั้นเสมอ: แก้ที่ต้นทาง (ระบบส่งงานตัดแท็กพวกนี้ทิ้งตั้งแต่รับผล) และ เก็บด่านไว้เป็นตัวสำรอง (เพิ่ม pattern แท็กเข้าสคริปต์) สำหรับกรณีที่หลุดมาทางอื่น เช่น มีคนวางผลเอง หรือเพิ่ม backend ใหม่ในอนาคต ข้อสรุปคือ ด่านที่ไม่เคยถูกทดสอบกับของใหม่ ไม่ใช่ด่าน มันคือความเชื่อ

ถ้างานไม่ผ่าน ต้องรันใหม่ทั้งหมดไหม?

ไม่ มี 3 ทางเลือกเมื่องานตก QC:

  1. รันใหม่ทั้งหมด — แพง และมักได้ผลเดิมถ้าไม่เปลี่ยนอะไร
  2. ปล่อยผ่าน — ผิด ความผิดพลาดจะสะสม
  3. askback — ชี้จุดที่ผิดแล้วให้โมเดลแก้เฉพาะจุดนั้น

ระบบใช้ทางที่ 3: อ่านหัวผลงานก่อน (ประหยัดบริบท) → รันสคริปต์ QC → ส่งคำสั่งแก้แบบเจาะจง ไม่เกิน 2–4 รอบ → ถ้ายังไม่ผ่านให้คนตรวจ คู่กับกฎ "patch and proceed": ถ้าผลถูกเกิน 80% (โครงสร้างผ่าน ข้อมูลครบ) Claude แก้ส่วนที่เหลือเองแล้วไปต่อ ไม่สั่งรันใหม่

อีกกฎที่ห้ามข้าม: ห้ามทำงานซ้ำเองเงียบๆ (shadow-execute) — ถ้าผลลูกน้องไม่ดี ให้ตีกลับพร้อมเหตุผล ไม่ใช่ทำเองใหม่แล้วทิ้งผลเดิม เพราะไม่อย่างนั้นเราจะไม่มีวันรู้ว่าลูกน้องพลาดตรงไหน และจะไม่มีวันแก้ guard ให้ดีขึ้น

แผนงานต้องผ่าน QC ด้วยไหม?

ต้อง และนี่คือชั้นที่ให้ผลเยอะที่สุด ก่อนเปลี่ยนโครงสร้างระบบหรือสรุปผลการทดลอง แผนต้องผ่าน ด่านตรวจแบบ adversarial: ส่งให้โมเดลอีก 2 ตัวโจมตีแผนคนละมุม (สมมติฐานที่ไม่ได้ตั้งคำถาม และกรณีขอบที่ทำให้พัง) แล้ว Claude อ่านทั้งสองฝั่งก่อนแก้แผน

กราฟแท่งผลด่านตรวจแผน: ถูกตีกลับให้แก้ 191 ครั้ง ผ่านเลย 7 ครั้ง จาก 198 ครั้งที่มีคำตัดสินเดียว
ผลจาก lab/adversarial_gate_log.jsonl · 26 พ.ค. – 27 ก.ย. 2026 · นับเฉพาะรายการที่มีคำตัดสินรวมเดียว (198 จาก 293)
ผลของด่านตรวจแผนจำนวนสัดส่วน
ตีกลับให้แก้ (REVISE)191≈96%
ผ่านเลย (PASS)7≈4%
รวม (มีคำตัดสินเดียว)198—

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

ด่านสุดท้ายก่อนถึงมือผู้ใช้คืออะไร?

ด่านของ product เอง ตัวอย่างจากรอบนำร่องชุดข้อมูล 56-1 (12 ก.ค. 2026) ที่ต้องผ่านครบ 4 ข้อก่อนเผยแพร่:

แผนภาพด่านก่อนเผยแพร่ 4 ข้อ: เลขหน้าที่อ้างมีจริง ตัวเลขมีพิกัดในเอกสาร disclaimer ปรากฏครั้งเดียว และไม่มีหัวข้อนอกคำศัพท์ที่กำหนด
ด่านก่อนเผยแพร่ในรายงาน lab/56_1_prepublish_report.json · รอบ 12 ก.ค. 2026 ผ่านครบ 4 ข้อ
ด่านความหมาย
cited-pages-existทุกเลขหน้าที่อ้างถึงต้องมีอยู่จริงในเอกสาร
numeric-facts-bboxทุกตัวเลขต้องมีพิกัดชี้กลับไปตำแหน่งในหน้าต้นฉบับ
ic-disclaimer-onceข้อความ "ไม่ใช่คำแนะนำการลงทุน" ต้องมี และมีครั้งเดียว
zero-off-vocab-themesห้ามมีหัวข้อที่อยู่นอกชุดคำศัพท์ที่กำหนด

กฎที่อยู่เบื้องหลังทั้งหมดคือกฎเดียวกับที่ Terminal ใช้กับทุกผลค้นหา: บรรทัดที่ชี้กลับไปหน้าต้นฉบับไม่ได้ จะไม่ถูกแสดง ตัวอย่างการอ่านเอกสารแบบอ้างหน้าได้ดูใน อ่านงบการเงิน 3 มุม

สรุป

QC ของงาน AI ไม่ใช่ขั้นตอนเดียวตอนท้าย แต่เป็นชั้นที่เรียงจากถูกไปแพง: สคริปต์จับของพังชัดๆ, ตัวเลขทุกตัวถูกดึงออกมาตรวจ, Claude ตรวจความหมายและสั่งแก้เฉพาะจุด และ product มีด่านสุดท้ายที่ไม่ยอมให้ตัวเลขไม่มีที่มาผ่าน ที่สำคัญคือต้องทดสอบด่านกับของใหม่เสมอ เพราะวันที่ด่านพลาดคือวันที่มันเจอสิ่งที่ไม่เคยเห็น (ภาพรวมของระบบอยู่ใน ทำไมผมสร้าง Terminal ด้วย Claude Code)

BOOM FIELD LAB

อยากเห็นว่าเครื่องมือพวกนี้ประกอบร่างเป็น Terminal จริงได้ยังไง?

Workshop 60 นาที — ดูการทำงานจริงบนหน้าจอ พร้อม workbook ให้ลงมือตาม ไม่ใช่สไลด์ทฤษฎี