บทที่ 04 · ประกอบ Harness · Tools

Tools — มือของโมเดล

ในบทที่แล้วเราพบว่าผู้ช่วย เดา ว่าห้องว่าง บทนี้คือการให้ “มือ” กับมัน — เครื่องมือที่ไป ดึงการจองจริง แทนการเดา และจุดที่วิศวกรหลายคนพลาด: ชื่อและคำอธิบายของเครื่องมือ ไม่ใช่เอกสารสำหรับมนุษย์ แต่เป็น “คำสั่ง” ที่โมเดลอ่านเพื่อตัดสินใจ ส่วนข้อความ error คือ โอกาสเดียวที่มันจะแก้ตัวในรอบถัดไป

พูดแบบเข้าใจง่าย

Tool คือความสามารถหนึ่งอย่างที่เรายื่นให้โมเดล — เหมือนปุ่มที่มีป้ายกำกับหนึ่งปุ่ม โมเดลไม่เคยเห็นโค้ดข้างในเลย มันเห็นแค่ สามสตริง: ชื่อ (name), คำอธิบาย (description), และ ผลลัพธ์/ข้อผิดพลาด (error) หลังเรียก — และสามสตริงนี้ คือ prompt

เปรียบเทียบ: ถาดเครื่องมือผ่าตัด + พยาบาลส่งเครื่องมือ ศัลยแพทย์ไม่คว้าถาดเอง — เขาบอก “ขอ clamp” แล้วพยาบาลยื่นเครื่องมือ ที่ถูกต้องชิ้นเดียว ป้ายชื่อ + ความรู้ว่า “ชิ้นไหนใช้ตอนไหน” = name + description ที่ขับการเลือก ไม่ใช่ตัวโลหะ (โค้ดที่โมเดลไม่เห็น) clamp สองอันที่ป้ายกำกวมคล้ายกัน ทำให้หยิบผิด — จึงต้อง เอาออกจากถาด ไม่ใช่หลอมทิ้ง และถาดที่อัดเครื่องมือ 96 ชิ้นทำให้ทุกการหยิบช้าลง จึงวางเฉพาะที่ใช้จริง

ในระบบของเรา — คำอธิบายคือสิ่งที่ขับการเลือกเครื่องมือ

เมื่อมีคนถามว่า “ห้องว่างไหม” ผู้ช่วยไม่ได้สุ่มเครื่องมือ — มัน อ่านคำอธิบายของแต่ละตัวแล้วเลือก:

คำถาม“Lab 3 ว่างไหม?”
อ่านคำอธิบายเทียบ tool ที่มี: ตัวไหนบอกว่า “ใช้ตอนถามห้องว่าง”
เลือก + เรียกเครื่องมือเช็คห้องว่าง → ดึงการจอง จริง
ตอบคำตอบผูกกับข้อมูลจริง

ในระบบจริงของเรามีเครื่องมือหลายตัวที่โค้ดข้างในแทบเหมือนกัน — สิ่งที่แยกแยะมันคือ ภาษาในคำอธิบาย เช่นใส่ประโยคสั่งว่า “เป็นค่าเริ่มต้นเมื่อผู้ใช้พูดแค่คำว่า ‘อาคาร’ โดยไม่ระบุชื่อ” หรือ “ใช้เฉพาะเมื่อถาม EN6 ตรง ๆ” และเรายังทำ เครื่องมือแบบรวบยอด (สรุปข้อมูลนักศึกษาใน “หนึ่งครั้ง” แทนที่จะเรียกย่อย 3 รอบ) — ความคุ้มถูกโฆษณาไว้ในคำอธิบายเอง โมเดลจึงเลือกมันก่อน

สิ่งที่โมเดลเห็นมันคือ prompt ที่ทำหน้าที่อะไร
nameป้ายสั้น ๆ ระบุเครื่องมือ (สำคัญน้อยกว่าคำอธิบาย)
descriptionขับ “การเลือก” — บอกว่าทำอะไร + เมื่อไรควร/ไม่ควรใช้ (ประโยคสั่งเช่น “ค่าเริ่มต้นเมื่อ…”, “ใช้เฉพาะเมื่อ…”)
errorขับ “การแก้ตัว” รอบหน้า — ต้อง actionable เช่น “เรียกใหม่พร้อม confirmed=true”
56 จาก 96 ในระบบของเราเปิดใช้งานเครื่องมือเพียงส่วนหนึ่งจากที่ลงทะเบียนไว้ทั้งหมด (รายละเอียดของตัวเลขนี้อยู่ในบทที่ 12) — เพราะ “เครื่องมือน้อยแต่คม” ชนะ “เครื่องมือเยอะแต่กำกวม” เสมอ

ทำพลาด vs ทำถูก

⚠️ แย่ · เครื่องมือกำกวมที่ซ้ำซ้อน
สองตัวที่ “ทำคล้ายกัน”
เครื่องมือคิวงานทั่วไปที่อธิบายแค่ “เพิ่มงานเข้าคิว” วางอยู่ข้าง ๆ เครื่องมือเฉพาะทาง — ผลคือโมเดล หยิบผิดตัวซ้ำ ๆ สองตัวที่อธิบายคลุมเครือคล้ายกันไม่ได้เพิ่มความสามารถ แต่ แบ่งความสนใจของโมเดล ทางแก้คือ ปิด (ไม่ลบ) ตัวซ้ำ + เขียนคำอธิบายให้คม ไม่ใช่เพิ่มโค้ด
⚠️ แย่ · error ที่แก้ตัวต่อไม่ได้
โยน exception ดิบ
เครื่องมือที่ต้องยืนยันก่อนทำ แต่พอขาดการยืนยันกลับคืนคำว่า “confirmed” เปล่า ๆ โมเดลไม่รู้ว่าต้องทำอะไรต่อ → วนเรียกซ้ำที่เดิมจนเปลืองรอบ error คือ prompt — ถ้ามันไม่บอกวิธีแก้ โมเดลก็แก้ไม่ได้
✅ ดี · ประโยคสั่งในคำอธิบาย + เครื่องมือรวบยอด
คำอธิบายทำงานแทนการแก้โค้ด
ใส่ “ค่าเริ่มต้นเมื่อ…”, “ใช้เฉพาะเมื่อ…” ลงในคำอธิบาย โมเดลก็เลือกถูกโดยไม่ต้องเปลี่ยนโค้ดหรือชื่อ และเครื่องมือ รวบยอด ที่ตรงกับเจตนาผู้ใช้ (“สรุปสถานการณ์ห้องนี้”) ช่วยลดรอบและ context เพราะมันโฆษณาความคุ้มไว้ในคำอธิบายเอง

ลองเอง — แก้คำอธิบาย แล้วดูโมเดลเปลี่ยนใจ

กิจกรรม · พิมพ์แล้วดูแถบเลื่อนสด ๆ
Rewrite the Description
คำขอถูกตรึงไว้ด้านบน ด้านล่างมีเครื่องมือ 3 ตัวที่คำอธิบาย กำกวมและคล้ายกัน จนคะแนนเสมอ ลองพิมพ์ ประโยคสั่ง ลงในใบเดียว (เช่น “ค่าเริ่มต้นเมื่อผู้ใช้ถามว่าห้องว่างไหม”) แล้วดูแถบความมั่นใจขยับและ “ตัวที่โมเดลเลือก” เปลี่ยนทันที — โดยไม่แตะโค้ดเลย
แก้คำอธิบายในกล่องข้อความได้เลย
มองไปข้างหน้า — มีมือแล้ว แต่ยังต้องรู้ “กติกา” ตอนนี้ผู้ช่วยดึงข้อมูลจริงได้แล้ว แต่มันยังไม่รู้คาบเรียน วันหยุด หรือช่วงซ่อมบำรุง — ข้อมูลดิบอย่างเดียวไม่พอ บทที่ 05 เราจะป้อน บริบทและกติกาที่ถูกต้อง (ไม่ใช่ทุกอย่าง) เข้าไป

สรุปบทที่ 04

Harness Scorecard · มิติ: “เครื่องมือถูกคัดสรรและคมไหม?” ผู้ช่วยจัดการแล็บ ✅ — เครื่องมือถูกคัดเปิดเฉพาะที่จำเป็น และใช้คำอธิบายเป็นตัวกำหนดพฤติกรรม

📋 build-your-harness checklist · บรรทัดที่ 4 “เครื่องมือที่คัดมาแล้ว: คำอธิบายบอกชัดว่าเมื่อไรควร/ไม่ควรใช้ + error ที่บอกวิธีแก้ตัว”