บทที่ 04 · ประกอบ Harness · Tools
Tools — มือของโมเดล
ในบทที่แล้วเราพบว่าผู้ช่วย เดา ว่าห้องว่าง บทนี้คือการให้ “มือ” กับมัน — เครื่องมือที่ไป
ดึงการจองจริง แทนการเดา และจุดที่วิศวกรหลายคนพลาด: ชื่อและคำอธิบายของเครื่องมือ
ไม่ใช่เอกสารสำหรับมนุษย์ แต่เป็น “คำสั่ง” ที่โมเดลอ่านเพื่อตัดสินใจ ส่วนข้อความ error คือ
โอกาสเดียวที่มันจะแก้ตัวในรอบถัดไป
พูดแบบเข้าใจง่าย
Tool คือความสามารถหนึ่งอย่างที่เรายื่นให้โมเดล — เหมือนปุ่มที่มีป้ายกำกับหนึ่งปุ่ม
โมเดลไม่เคยเห็นโค้ดข้างในเลย มันเห็นแค่ สามสตริง: ชื่อ (name),
คำอธิบาย (description), และ ผลลัพธ์/ข้อผิดพลาด (error) หลังเรียก — และสามสตริงนี้
คือ prompt
- คำอธิบาย คือสิ่งที่โมเดลใช้ “เลือก” ว่าจะเรียกเครื่องมือไหน จึงต้องบอกทั้ง ทำอะไร และ เมื่อไรควร/ไม่ควรใช้
- ข้อความ error คือโอกาสเดียวให้มันแก้เองรอบหน้า — “ใส่ confirmed=true แล้วเรียกใหม่” ดีกว่าโยน exception ดิบ ๆ
- ทุกเครื่องมือที่เพิ่มยัง กินพื้นที่ context ด้วย คำถามจึงไม่ใช่ “เพิ่ม tool นี้ได้ไหม” แต่คือ “มันคมพอจะคุ้มพื้นที่ไหม”
เปรียบเทียบ: ถาดเครื่องมือผ่าตัด + พยาบาลส่งเครื่องมือ
ศัลยแพทย์ไม่คว้าถาดเอง — เขาบอก “ขอ 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
- โมเดลเห็นเครื่องมือเป็น สามสตริง: name · description · error — ทั้งหมดคือ prompt
- คำอธิบายขับการเลือก — ประโยคสั่งคมกว่าและเร็วกว่าการเปลี่ยนชื่อหรือแก้โค้ด
- error ที่ดีต้องบอกวิธีแก้ ไม่งั้นโมเดลวนซ้ำที่เดิม
- เครื่องมือ น้อยแต่คม ชนะเครื่องมือเยอะแต่กำกวม — ตัวซ้ำให้ “ปิด ไม่ใช่ลบ”
Harness Scorecard · มิติ: “เครื่องมือถูกคัดสรรและคมไหม?”
ผู้ช่วยจัดการแล็บ ✅ — เครื่องมือถูกคัดเปิดเฉพาะที่จำเป็น และใช้คำอธิบายเป็นตัวกำหนดพฤติกรรม
📋 build-your-harness checklist · บรรทัดที่ 4
“เครื่องมือที่คัดมาแล้ว: คำอธิบายบอกชัดว่าเมื่อไรควร/ไม่ควรใช้ + error ที่บอกวิธีแก้ตัว”