CCA · Foundations

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_searchsearch the web for current prices news weather and general information on any topic
  • get_stock_quote — description แก้ไขได้ที่ช่องด้านล่าง

แบบจำลองเพื่อเห็นภาพ ไม่ใช่กลไกภายในโมเดลจริงจริง ๆ โมเดลเลือก tool จากความเข้าใจภาษาทั้งก้อนของ description ไม่ใช่การนับคำซ้ำ

เช็คความเข้าใจ

โมเดลใช้อะไรเป็นกลไกหลักในการเลือกว่าจะเรียก tool ตัวไหน

description ที่ดีควรครอบคลุมอะไรบ้าง

อ่านต่อ