Tool description คือกลไกหลักในการเลือก tool
แนวคิด
เมื่อเราให้ tool หลายตัวกับ Claude สิ่งที่โมเดลใช้ตัดสินใจว่าจะเรียกตัวไหนไม่ใช่โค้ดข้างในของ tool แต่เป็นสามอย่างที่เราส่งไปใน tools ได้แก่ name, description, และ input_schema ในสามอย่างนี้ description คือกลไกหลักที่โมเดลใช้เลือก tool เพราะมันเป็นข้อความภาษาธรรมชาติที่บอกว่า tool ทำอะไรและควรใช้เมื่อไร
เอกสารของ Anthropic ระบุชัดว่าการเขียน description ที่ละเอียดคือปัจจัยสำคัญที่สุดต่อประสิทธิภาพของ tool use คำอธิบายที่ดีควรครอบคลุมสี่เรื่อง คือ tool ทำอะไร, ควรใช้เมื่อไรและไม่ควรใช้เมื่อไร, แต่ละพารามิเตอร์หมายถึงอะไรและมีผลต่อพฤติกรรมอย่างไร, และข้อจำกัดสำคัญ เช่น ข้อมูลอะไรที่ tool นี้ไม่คืนกลับมา คำแนะนำคือเขียนอย่างน้อยสามถึงสี่ประโยคต่อหนึ่ง tool และมากกว่านั้นถ้า tool ซับซ้อน
สิ่งที่มักถูกลืมคือการอธิบายขอบเขต การบอกว่า tool นี้ไม่ทำอะไร มีค่าพอ ๆ กับการบอกว่ามันทำอะไร เพราะมันช่วยให้โมเดลตัดตัวเลือกที่ไม่เข้าเรื่องออกได้เร็วขึ้น นอกจากนี้ควรใส่รูปแบบของ input ที่รับได้ ตัวอย่างคำถามที่เข้าข่าย และ edge case ลงในคำอธิบายด้วย
ทำไมสำคัญ
เหตุผลที่ต้องลงแรงกับ description คือ description ที่สั้นเกินไปทำให้การเลือก tool ไม่น่าเชื่อถือ โดยเฉพาะเมื่อมี tool หลายตัวที่คล้ายกัน โมเดลจะขาดบริบทที่ใช้แยกแยะว่าตัวไหนเหมาะกับคำถามใด ผลคือมันเดา และการเดาก็พลาดได้
ลองเทียบสอง description ของ tool เดียวกัน ตัวที่ดีจะบอกว่า "Retrieves the current stock price for a given ticker symbol ... returns the latest trade price in USD ... should be used when the user asks about the current or most recent price of a specific stock. It will not provide any other information about the stock or company." ส่วนตัวที่แย่เขียนแค่ "Gets the stock price for a ticker." ตัวหลังทิ้งคำถามค้างไว้เต็มไปหมด ทั้งรูปแบบ ticker, หน่วยเงิน, และขอบเขตว่าคืนอะไรบ้าง
การแก้ที่ต้นเหตุนี้เป็นการลงทุนที่คุ้ม เพราะมันเป็นการปรับที่ทำครั้งเดียวแล้วส่งผลกับทุก request ต่างจากการไปเพิ่ม few-shot example ในระบบ ซึ่งเปลืองโทเคนทุกครั้งและไม่ได้แก้รากของปัญหา
ตัวอย่าง
{
"name": "get_stock_price",
"description": "Retrieves the current stock price for a given ticker symbol. The ticker must be a valid symbol on a major US exchange like NYSE or NASDAQ. Returns the latest trade price in USD. Use it when the user asks about the current or most recent price of a specific stock. It will NOT provide any other information about the stock or company.",
"input_schema": {
"type": "object",
"properties": {
"ticker": { "type": "string", "description": "Ticker symbol, e.g. AAPL for Apple Inc." }
},
"required": ["ticker"]
}
}
คำอธิบายนี้บอกครบทั้งหน้าที่ รูปแบบ input ตัวอย่าง เวลาที่ควรใช้ และขอบเขตที่ไม่คืน ทำให้โมเดลเลือกได้แม่นแม้จะมี tool อื่นที่ดูใกล้เคียง
query: What is the current price of a stock
- web_search — search the web for current prices news weather and general information on any topic
- get_stock_quote — description แก้ไขได้ที่ช่องด้านล่าง
แบบจำลองเพื่อเห็นภาพ ไม่ใช่กลไกภายในโมเดลจริง — จริง ๆ โมเดลเลือก tool จากความเข้าใจภาษาทั้งก้อนของ description ไม่ใช่การนับคำซ้ำ
เช็คความเข้าใจ
โมเดลใช้อะไรเป็นกลไกหลักในการเลือกว่าจะเรียก tool ตัวไหน
description ที่ดีควรครอบคลุมอะไรบ้าง