𝗟𝗮𝘇𝘆 𝗟𝗼𝗮𝗱𝗶𝗻𝗴 𝗠𝗖𝗣 𝗧𝗼𝗼𝗹𝘀: 𝗪𝗵𝗼 𝗦𝘂𝗽𝗽𝗼𝗿𝘁𝘀 𝗜𝘁 𝗮𝗻𝗱 𝗛𝗼𝘄 -> การทำ Lazy Loading สำหรับ MCP Tools: ใครรองรับบ้างและทำอย่างไร
คนส่วนใหญ่มักคิดว่าต้นทุนของ MCP server อยู่ที่ตัวโค้ด แต่พวกเขาคิดผิด
หากคุณสร้าง MCP server คุณจะต้องเผชิญกับต้นทุน token สองประเภท:
- ต้นทุนคงที่ (Fixed cost): คำจำกัดความของเครื่องมือ (Tool definitions) ที่ถูกโหลดเข้าสู่ context ในทุกๆ รอบการทำงาน
- ต้นทุนผันแปร (Variable cost): ขนาดของคำตอบที่เครื่องมือส่งกลับมา
คุณสามารถควบคุมต้นทุนผันแปรได้ โดยการทำ pagination ผลลัพธ์ หรือจำกัดขนาดของ output
แต่คุณไม่สามารถควบคุมต้นทุนคงที่ได้ เพราะนั่นเป็นหน้าที่ของ host (หรือ client)
หากคุณมีสิบเซิร์ฟเวอร์ที่มีเครื่องมือจำนวนมาก คุณอาจต้องเสีย token ไปถึง 40,000 tokens ก่อนที่โมเดลจะได้อ่านข้อความแรกของคุณเสียอีก สิ่งนี้เกิดขึ้นเพราะ host จะโหลดคำจำกัดความของทุกเครื่องมือขึ้นมาล่วงหน้า
ทางออกคือการทำ lazy loading ซึ่งหมายความว่า host จะโหลดเพียงเครื่องมือค้นหา (search tool) ขนาดเล็ก และจะดึงคำจำกัดความอื่นๆ มาเมื่อจำเป็นเท่านั้น
ปัญหาคืออะไร? ปัญหาก็คือ client ส่วนใหญ่ยังไม่รองรับสิ่งนี้
สถานะปัจจุบันของการทำ lazy loading:
- Claude Code: รองรับ โดยเครื่องมือจะถูกโหลดตามความต้องการผ่าน search tool
- Cursor, Devin และอื่นๆ: ยังไม่รองรับ โดยจะโหลดทุกอย่างขึ้นมาพร้อมกันในคราวเดียว
หาก context ของคุณเริ่มบวม (bloating) บน client ที่ไม่มีระบบ lazy loading คุณมีสองทางเลือก:
ใช้ lazy proxy ชี้ host ของคุณไปยัง proxy server แทนที่จะเป็นเซิร์ฟเวอร์จริง โดย proxy จะเปิดใช้งานเพียงสองเครื่องมือเท่านั้นคือ
search_toolsและexecute_toolซึ่งจะโหลดคำจำกัดความจริงของคุณเมื่อมีการเรียกใช้เท่านั้น วิธีนี้จะช่วยลดขนาด context แต่จะทำให้สูญเสียการควบคุมสิทธิ์แบบละเอียด (fine-grained permission control) ไปใช้ router pattern หากเซิร์ฟเวอร์หนึ่งเริ่มมีขนาดใหญ่เกินไป อย่าเพิ่มเครื่องมือเข้าไปอีก แต่ให้สร้างเครื่องมือเดียวที่มีพารามิเตอร์การทำงาน (operation parameter) แทน ตัวอย่างเช่น ใช้เครื่องมือ "docs" เพียงตัวเดียวที่มีคำสั่งอย่าง "list", "get" หรือ "search" วิธีนี้จะช่วยลดจำนวน schema ที่ host ต้องโหลด
สรุปกลยุทธ์:
- 6 ถึง 15 เครื่องมือ: ไม่ต้องทำอะไร ต้นทุนต่ำเกินกว่าที่จะต้องกังวล
- มีเครื่องมือจำนวนมากในเซิร์ฟเวอร์เดียว: ใช้ router pattern
- มีเซิร์ฟเวอร์หลายตัวที่แตกต่างกัน: ใช้ lazy proxy
ตรวจสอบพฤติกรรมของ client ของคุณก่อนที่จะเสียเวลาหลายชั่วโมงในการปรับแต่งโค้ด เพราะวิธีแก้ไขอาจไม่ได้อยู่ที่ตัวเซิร์ฟเวอร์ของคุณเลยก็ได้
แหล่งที่มา: https://dev.to/ismaestro/lazy-loading-mcp-tools-which-clients-support-it-and-how-4414
ชุมชนแห่งการเรียนรู้เพิ่มเติม: https://t.me/GyaanSetuAi