เลิกโหลดทุกคำสั่งลงในทุกเซสชัน
คนส่วนใหญ่มุ่งเน้นไปที่การเขียน prompt ให้ดีขึ้น แต่พวกเขามักมองข้ามสิ่งที่เกิดขึ้นก่อนที่ prompt จะเริ่มทำงาน พวกเขาโหลดคำสั่งมากเกินไปเข้าไปใน context ของ assistant
สิ่งนี้ทำให้เกิดปัญหา 3 อย่าง:
- ต้นทุน token สูง
- ความหน่วง (latency) สูง
- อัตราส่วนสัญญาณต่อสัญญาณรบกวน (signal-to-noise ratio) ต่ำ
เมื่อคุณโหลดไฟล์คำสั่งขนาดใหญ่สำหรับทุกคำถามเล็กๆ มันเหมือนกับการต้องอ่านคู่มือพนักงานทั้งเล่มก่อนจะถามคำถามง่ายๆ เพียงข้อเดียว ข้อมูลส่วนใหญ่ในนั้นไม่มีประโยชน์สำหรับงานที่กำลังทำอยู่เลย
ยิ่งคุณเพิ่มกฎมากเท่าไหร่ คุณก็ยิ่งทำให้ส่วนที่เกี่ยวข้องเจือจางลงเท่านั้น การมี context มากขึ้นไม่ได้หมายความว่าความสามารถจะมากขึ้นเสมอไป
ผมแก้ปัญหานี้โดยการเปลี่ยนจากไฟล์เดียวมาเป็นระบบโมดูล (modular system) ผมแบ่งคำสั่งออกเป็นโมดูลเฉพาะทาง:
• instructions.md: จุดเริ่มต้นขนาดเล็กที่ต้องโหลดเสมอ
• persona.md: บุคลิกภาพและโทนเสียง
• structure.md: โครงสร้างระบบสำหรับงานด้านการนำทาง (navigation tasks)
• workflows.md: กฎเฉพาะสำหรับการจบเซสชัน
ตอนนี้ ไฟล์หลักจะทำหน้าที่เป็น router มันจะเรียกโมดูลอื่นๆ เฉพาะเมื่อจำเป็นต้องใช้ในงานนั้นๆ เท่านั้น
ตัวอย่างเช่น:
- หากคุณต้องการนำทางในโปรเจกต์ ให้โหลด
structure.md - หากคุณต้องการจบเซสชัน ให้โหลด
workflows.md - หากคุณมีคำถามสั้นๆ ก็ไม่ต้องโหลดอะไรเพิ่มเลย
ผลลัพธ์ที่ได้นั้นชัดเจนมาก ปริมาณ token พื้นฐาน (baseline token load) ของผมลดลงจาก 4,800 tokens เหลือเพียง 1,450 tokens ซึ่งเป็นการลดลงถึง 70%
เป้าหมายไม่ใช่การทำให้คำสั่งเล็กลง แต่เป้าหมายคือการแยก baseline load ออกจาก on-demand load
Baseline load คือสิ่งที่คุณต้องจ่ายทุกครั้ง คุณต้องรักษาให้มันมีขนาดเล็กที่สุด On-demand load คือสิ่งที่คุณจะโหลดเฉพาะเมื่อจำเป็นเท่านั้น ซึ่งส่วนนี้สามารถมีขนาดใหญ่และมีรายละเอียดมากได้
วิธีนี้มีข้อแลกเปลี่ยน (trade-offs) คุณจะได้ประสิทธิภาพเพิ่มขึ้น แต่ต้องแลกมาด้วยความซับซ้อนในการจัดการเส้นทาง (route) ของคำสั่ง คุณต้องมั่นใจว่า assistant สามารถเข้าถึงโมดูลต่างๆ ได้อย่างแม่นยำ
หากคำสั่งของคุณมีขนาดเล็ก อย่าทำแบบนี้ เพราะมันเป็นการเสียเวลาเปล่า แต่ถ้าชุดคำสั่งของคุณมีขนาดใหญ่และกำลังขยายตัวขึ้นเรื่อยๆ ให้เริ่มทำแบบนี้ทันที
เลิกบังคับให้ assistant ต้องแบกน้ำหนักที่ไม่จำเป็น และกำจัดคำสั่งที่ไม่เกี่ยวข้องออกไปเพื่อให้พื้นที่ทำงานสะอาดขึ้น
Optional learning community: https://t.me/GyaanSetuAi