การใช้เครื่องมือของ AI Agent: การเรียกฟังก์ชัน สคีมา และการรันอย่างปลอดภัย
การใช้เครื่องมือของ AI agent คือกลไกที่ LLM ร้องขอการรันฟังก์ชันภายนอก — การค้นหาเว็บ การค้นหาฐานข้อมูล การเรียก API การดำเนินการกับไฟล์ — โดยส่ง JSON การเรียกเครื่องมือแบบมีโครงสร้างที่ runtime จะสกัดกั้น ตรวจสอบกับ JSON Schema และรันก่อนส่งคืนผลลัพธ์ของเครื่องมือ LLM ไม่เคยรันสิ่งใดด้วยตัวเอง มันเพียงแค่ร้องขอ runtime จะบังคับใช้การตรวจสอบสคีมา การตรวจสอบ ACL และงบประมาณขั้นตอนก่อนการรันใดๆ tau-bench (2025) แสดงให้เห็นว่าข้อผิดพลาดในการสร้างอาร์กิวเมนต์คือโหมดความล้มเหลวที่พบบ่อยที่สุดในการใช้เครื่องมือ
การใช้เครื่องมือของ AI agent คือกลไกที่โมเดลภาษาขนาดใหญ่ร้องขอการรันฟังก์ชันภายนอก — การค้นหาเว็บ การค้นหาฐานข้อมูล การเรียก API การดำเนินการกับไฟล์ หรือตรรกะธุรกิจแบบกำหนดเอง — โดยส่งการเรียกเครื่องมือแบบมีโครงสร้างในผลลัพธ์ ซึ่ง runtime จะสกัดกั้น ตรวจสอบกับนิยาม JSON Schema รัน และส่งคืนเป็นผลลัพธ์ของเครื่องมือในรอบบริบทถัดไป
วิธีการทำงานของการเรียกเครื่องมือ: ลูปร้องขอ-รัน-ส่งคืน
วงจรชีวิตการเรียกเครื่องมือ
การเรียกเครื่องมือทุกครั้งปฏิบัติตามลูปห้าขั้นตอนเดียวกันโดยไม่คำนึงถึงเฟรมเวิร์กหรือผู้ให้บริการ:
- การตั้งค่าบริบท — agent รับงานและรายการเครื่องมือที่มีอยู่ แต่ละเครื่องมืออธิบายด้วยชื่อ คำอธิบายภาษาธรรมชาติ และนิยาม JSON Schema ของพารามิเตอร์
- การตัดสินใจของ LLM — โมเดลส่งบล็อกการเรียกเครื่องมือในผลลัพธ์: ชื่อฟังก์ชันและอ็อบเจกต์ JSON ของอาร์กิวเมนต์ที่ตรงกับสคีมาที่ประกาศ
- การสกัดกั้นของ runtime — เฟรมเวิร์กสกัดกั้นการเรียกเครื่องมือก่อนการรันใดๆ อาร์กิวเมนต์จะถูกตรวจสอบกับสคีมา ACL ของ agent จะถูกตรวจสอบ: agent นี้ได้รับอนุญาตให้เรียกเครื่องมือนี้หรือไม่?
- การรัน — หากการตรวจสอบและการตรวจสอบสิทธิ์ผ่าน runtime จะรันฟังก์ชันและเก็บผลลัพธ์
- การฉีดบริบท — ผลลัพธ์ของเครื่องมือจะถูกฉีดกลับเข้าไปในบริบทการสนทนาเป็นรอบผลลัพธ์เครื่องมือ LLM ดำเนินการให้เหตุผลต่อจากบริบทที่เพิ่มคุณค่านี้
ข้อเท็จจริงทางสถาปัตยกรรมที่สำคัญ: LLM ไม่เคยรันสิ่งใด มันแค่ร้องขอ ทุกการกระทำที่ไม่ปลอดภัย — การเขียนไฟล์ การเรียก API การส่งอีเมล — ถูกควบคุมโดย runtime การแยกระหว่างการร้องขอและการรันคือรากฐานของการใช้เครื่องมือของ agent อย่างปลอดภัย
ความแตกต่างของรูปแบบผู้ให้บริการ: OpenAI vs Anthropic vs Google
ผู้ให้บริการ LLM สามรายหลักรองรับการใช้เครื่องมือแบบ native แต่รูปแบบ JSON แตกต่างกัน:
OpenAI (openai/openai-python, 30,941 ดาว, Apache-2.0): นิยามเครื่องมือถูกวางในพารามิเตอร์ tools เป็นอาร์เรย์ของอ็อบเจกต์ JSON Schema โมเดลส่งคืนการเรียกเครื่องมือในฟิลด์ tool_calls ของข้อความผู้ช่วย Responses API (มีนาคม 2025) เพิ่มเครื่องมือในตัว (web_search, file_search, computer_use) ที่รันฝั่งเซิร์ฟเวอร์
Anthropic (anthropic-sdk-python, 3,595 ดาว, MIT): นิยามเครื่องมือถูกวางในพารามิเตอร์ tools ระดับบนสุด โมเดลส่งคืนบล็อกเนื้อหา tool_use ภายในรอบผู้ช่วย ไคลเอนต์ต้องวิเคราะห์บล็อกเหล่านี้และส่งคืนบล็อก tool_result ในรอบมนุษย์ถัดไป
Google Gemini: นิยามเครื่องมือใช้ functionDeclarations ภายในพารามิเตอร์ tools โมเดลส่งคืนส่วน functionCall; ไคลเอนต์ส่งส่วน functionResponse Gemini รองรับ tool_config ด้วยโหมด ANY และโหมด AUTO
รูปแบบมีความเท่ากันทางความหมายแต่แตกต่างทางไวยากรณ์เพียงพอที่การเข้ารหัสแบบ hard-code ของหนึ่งผู้ให้บริการจะล้มเหลวเมื่อสลับโมเดล
ใครเป็นผู้รันเครื่องมือจริงๆ (และทำไมถึงสำคัญสำหรับความปลอดภัย)
LLM ไม่สามารถรันเครื่องมือได้ มันสามารถแค่ร้องขอเท่านั้น เมื่อ runtime บังคับใช้ประตู ACL ก่อนการรันเครื่องมือทุกครั้ง ผลลัพธ์ LLM ใดก็ไม่สามารถหลีกเลี่ยงการตรวจสอบสิทธิ์ได้ โมเดลสามารถขอ delete_all_records() ด้วยอาร์กิวเมนต์ใดก็ได้ แต่หากเมทริกซ์สิทธิ์ของ agent ไม่รวมเครื่องมือนั้น runtime จะปฏิเสธคำขอก่อนการรันใดๆ
การนิยามสคีมาเครื่องมือที่ LLM ใช้อย่างถูกต้อง
tau-bench (ServiceNow Research, 2025) วัด GPT-4o ที่ 44% pass@1 ในงานการใช้เครื่องมือค้าปลีก หมวดหมู่ความล้มเหลวที่ใหญ่ที่สุดไม่ใช่การเลือกเครื่องมือ — โมเดลเลือกเครื่องมือที่ถูกต้อง — แต่เป็นการสร้างอาร์กิวเมนต์ คุณภาพสคีมาคือคันโยกความน่าเชื่อถือหลัก
โครงสร้าง JSON Schema สำหรับนิยามเครื่องมือ
สคีมาเครื่องมือที่ถูกต้องขั้นต่ำต้องการสี่ฟิลด์:
{
"name": "search_web",
"description": "ค้นหาเว็บสาธารณะสำหรับข้อมูลปัจจุบัน ใช้เมื่องานต้องการข้อเท็จจริงหลังจากวันตัดของการฝึก ข้อมูลเรียลไทม์ หรือแหล่งข้อมูลที่ไม่อยู่ในข้อมูลการฝึก",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "คำค้นหา ใช้คำเฉพาะเจาะจง ไม่ใช่ประโยคเต็ม"
},
"max_results": {
"type": "integer",
"description": "จำนวนผลลัพธ์สูงสุดที่จะส่งคืน ค่าเริ่มต้น 5 สูงสุด 20",
"default": 5
}
},
"required": ["query"]
}
}
อาร์เรย์ required สำคัญ: พารามิเตอร์ที่ไม่อยู่ใน required เป็นทางเลือก
การเขียนคำอธิบายที่ลดข้อผิดพลาดของอาร์กิวเมนต์
กฎสามข้อสำหรับคำอธิบายเครื่องมือที่ปรับปรุงความแม่นยำในการสร้างอาร์กิวเมนต์:
- ตั้งชื่อด้วยคู่กริยา-คำนาม:
search_web,create_ticket,read_fileหลีกเลี่ยงความคลุมเครือระหว่างเครื่องมือที่คล้ายกัน - แก้ความคลุมเครือในคำอธิบาย: หากเครื่องมือสองอย่างดูคล้ายกัน ระบุอย่างชัดเจนว่าควรใช้แต่ละอันเมื่อใด
- อธิบายพารามิเตอร์ด้วยตัวอย่าง:
"คำค้นหา ตัวอย่าง: 'LangGraph v0.2 parallel tool calls'"เหนือกว่า"สตริงคำค้นหา"ในความแม่นยำของอาร์กิวเมนต์
ข้อผิดพลาดของสคีมาที่พบบ่อยและวิธีแก้ไข
| ข้อผิดพลาด | ผล | การแก้ไข |
|---|---|---|
"type": "string" ไม่มีข้อจำกัดสำหรับค่าหมวดหมู่ | โมเดลสร้างค่าที่ไม่ถูกต้อง | ใช้ "enum": ["option_a", "option_b"] |
ขาด description ในพารามิเตอร์ | โมเดลเดาความหมายของอาร์กิวเมนต์ | เขียนคำอธิบายชัดเจนพร้อมตัวอย่าง |
พารามิเตอร์ทั้งหมดอยู่ใน required | โมเดลปฏิเสธการเรียกเมื่อฟิลด์ทางเลือกไม่รู้จัก | แสดงรายการเฉพาะพารามิเตอร์ที่จำเป็นจริงๆ |
ชื่อเครื่องมือคลุมเครือ (process, handle) | โมเดลไม่สามารถแยกแยะเครื่องมือที่คล้ายกัน | ใช้กริยา-คำนาม: submit_form, parse_date |
ไม่มีอาร์เรย์ required | JSON Schema ไม่ถูกต้อง | รวม required เสมอ แม้ว่าจะว่างเปล่า ([]) |
การเรียกเครื่องมือแบบขนานและแบบลำดับ
เมื่อใดควรใช้การเรียกเครื่องมือแบบขนาน
Responses API ของ OpenAI (มีนาคม 2025) ทำให้การเรียกเครื่องมือแบบขนานเป็นค่าเริ่มต้น ในรอบ LLM เดียว โมเดลสามารถขอการรันเครื่องมือหลายอย่างพร้อมกัน สำหรับเครื่องมือที่เป็นอิสระ การส่งแบบขนานจะลดรอบทริปจาก N รอบตามลำดับเป็นชุดเดียวพร้อมกัน
ตัวอย่าง: agent วิจัยต้องการราคาหุ้นปัจจุบัน ข่าวล่าสุด และเอกสาร SEC ของบริษัท ทั้งสามเป็นอิสระ ตามลำดับ: 3 รอบ LLM × 10 วินาที = 30 วินาที แบบขนาน: 1 รอบ LLM + max(latency เครื่องมือ) ประมาณ 10 วินาที
เงื่อนไขเบื้องต้น: เครื่องมือต้องเป็นอิสระอย่างแท้จริง หากเครื่องมือ B ต้องการผลลัพธ์ของเครื่องมือ A เป็นอาร์กิวเมนต์ ต้องเป็นแบบลำดับ
การเรียกเครื่องมือแบบลำดับสำหรับการดำเนินการที่ขึ้นต่อกัน
การเชื่อมต่อเครื่องมือ — การใช้ผลลัพธ์ของเครื่องมือหนึ่งเป็นอินพุตของเครื่องมือถัดไป — ต้องการการรันแบบลำดับ รูปแบบ: search_web(query) → fetch_page(URL จากผลการค้นหา) → extract_data(เนื้อหาหน้า) → summarize(ข้อมูลที่ดึงออกมา)
การวิเคราะห์ผลลัพธ์เครื่องมือและการกู้คืนข้อผิดพลาด
การเรียกเครื่องมือล้มเหลว API ภายนอกส่งคืน 503 การค้นหาฐานข้อมูลหมดเวลา การใช้งานที่ออกแบบมาดีจะจัดการกับความล้มเหลวโดยไม่ต้องมีการแทรกแซงจากมนุษย์สำหรับข้อผิดพลาดที่กู้คืนได้
ตรวจสอบผลลัพธ์เครื่องมือ
เครื่องมือที่ส่งคืน HTTP 200 ไม่เหมือนกับเครื่องมือที่ส่งคืนผลลัพธ์ที่ถูกต้องและมีประโยชน์ ตรวจสอบผลลัพธ์กับสคีมาที่คาดหวังก่อนฉีดเข้าไปในบริบทของ agent
กลยุทธ์การลองใหม่
รูปแบบการลองใหม่สามแบบสำหรับโหมดความล้มเหลวที่แตกต่างกัน:
- การลองใหม่สำหรับความล้มเหลวชั่วคราว (network timeout, rate limit): เรียกเครื่องมือเดิมซ้ำด้วยอาร์กิวเมนต์เดิมหลังจาก backoff สั้นๆ
- การลองใหม่พร้อมการชี้แจงอาร์กิวเมนต์: ส่งคืนข้อผิดพลาดที่มีโครงสร้างไปยัง LLM เพื่ออธิบายว่าทำไมอาร์กิวเมนต์ถูกปฏิเสธ
- เครื่องมือสำรอง: หากเครื่องมือ A ล้มเหลวหลังจาก N ครั้ง ให้ route ไปยังเครื่องมือ B ที่มีความสามารถเทียบเท่า
การกำหนดขอบเขตสิทธิ์เครื่องมือและความปลอดภัย
การกำหนดเครื่องมือด้วยสิทธิ์ขั้นต่ำ
แต่ละ agent ควรมีเฉพาะเครื่องมือที่งานเฉพาะต้องการ รัศมีการระเบิดของ agent ที่ถูก prompt injection สำเร็จถูกจำกัดโดยชุดเครื่องมือที่ได้รับอนุญาต OWASP LLM Top 10 v1.1 (2025) ระบุ prompt injection (LLM01) เป็นความเสี่ยงสูงสุดสำหรับแอปพลิเคชัน LLM
การตรวจสอบอินพุตก่อนการรัน
ตรวจสอบอาร์กิวเมนต์การเรียกเครื่องมือในสองชั้น: การตรวจสอบสคีมาและการตรวจสอบความหมาย เครื่องมือ fetch_page ควรปฏิเสธอาร์กิวเมนต์ที่มี URL file:// หรือ localhost เพื่อป้องกัน SSRF
ดู โมเดลภัยคุกคามความปลอดภัยของ AI agent สำหรับอนุกรมวิธานครบถ้วนของเวกเตอร์การโจมตีระดับเครื่องมือ
การกระทำที่ย้อนกลับไม่ได้: ประตู human-in-the-loop
การเรียกเครื่องมือที่มีผลข้างเคียงที่ย้อนกลับไม่ได้ — การส่งอีเมล การลบบันทึก การโอนเงิน การเผยแพร่เนื้อหา — ต้องการประตูการยืนยันจากมนุษย์อย่างชัดเจนหรือการตรวจสอบ idempotency ก่อนการรัน
มุมมองของ OpenLegion: รีจิสทรีเครื่องมือและประตู ACL
ผู้ให้บริการ LLM หลักแต่ละรายมี API การเรียกเครื่องมือที่แตกต่างกัน การ abstraction ที่ถูกต้อง: นิยามเครื่องมือครั้งเดียวและให้เฟรมเวิร์กแปลเป็นรูปแบบที่ถูกต้องของผู้ให้บริการเมื่อถึงเวลาเรียก
รีจิสทรีเครื่องมือของ OpenLegion ใช้ abstraction นี้ นิยาม search_web ครั้งเดียว mesh จะแปลนิยามไปยัง OpenAI tools, Anthropic tools หรือ Gemini functionDeclarations ขึ้นอยู่กับโมเดลที่กำหนดค่า ประตู ACL ไม่ใช่ทางเลือก การเรียกเครื่องมือทุกครั้ง — ในตัว MCP หรือกำหนดเอง — ผ่านเมทริกซ์สิทธิ์ต่อ agent ก่อนการรัน
| มิติ | OpenLegion | LangChain / LangGraph | OpenAI Agents SDK | CrewAI | Anthropic โดยตรง |
|---|---|---|---|---|---|
| รูปแบบนิยามเครื่องมือ | สคีมาเดียว แปลตามผู้ให้บริการ | ต้องใช้ wrapper เฉพาะผู้ให้บริการ | รูปแบบ OpenAI เท่านั้น | ตัวตกแต่งเครื่องมือ CrewAI | รูปแบบ Anthropic tool_use เท่านั้น |
| การ abstraction ผู้ให้บริการ | ใช่ — GPT-4o, Claude, Gemini รวมกัน | บางส่วน — ผ่าน LangChain integrations | ไม่ — โมเดล OpenAI เท่านั้น | บางส่วน | ไม่ — Anthropic เท่านั้น |
| การบังคับใช้ ACL | เมทริกซ์สิทธิ์ต่อ agent เชิงโครงสร้าง | ไม่มีในตัว | ไม่มีในตัว | ไม่มีในตัว | ไม่มีในตัว |
| การเรียกเครื่องมือแบบขนาน | รองรับ | รองรับ (ขึ้นอยู่กับผู้ให้บริการ) | ใช่ — ค่าเริ่มต้นใน Responses API | รองรับ | ใช่ — Claude รองรับ |
| เครื่องมือในตัว | เบราว์เซอร์ ไฟล์ HTTP shell สร้างภาพ | ผ่านเครื่องมือชุมชน LangChain | web_search, file_search, computer_use | ไม่มีในตัว | ไม่มีในตัว |
| การผสาน MCP | Native — pipeline ACL/budget เดียวกัน | ผ่าน LangChain MCP adapters | ทดลอง | ไม่ใช่ native | ไม่ใช่ native |
คำถามที่พบบ่อย
การใช้เครื่องมือของ AI agent คืออะไร?
การใช้เครื่องมือของ AI agent คือกลไกที่โมเดลภาษาขนาดใหญ่ร้องขอการรันฟังก์ชันภายนอก — การค้นหาเว็บ การเรียก API การค้นหาฐานข้อมูล การดำเนินการกับไฟล์ — โดยส่ง JSON การเรียกเครื่องมือแบบมีโครงสร้างที่ runtime สกัดกั้น ตรวจสอบ และรัน LLM ไม่เคยรันโดยตรง มันเพียงอธิบายสิ่งที่ต้องการเรียกและด้วยอาร์กิวเมนต์ใด
การเรียกฟังก์ชันทำงานอย่างไรใน AI agent?
การเรียกฟังก์ชันทำงานในลูปร้องขอ-รัน-ส่งคืน: agent รับงานและรายการเครื่องมือที่มีอยู่; LLM ส่งการเรียกเครื่องมือที่ระบุชื่อฟังก์ชันและให้อาร์กิวเมนต์; runtime ตรวจสอบอาร์กิวเมนต์เหล่านั้น รันฟังก์ชัน และฉีดผลลัพธ์เป็นผลลัพธ์ของเครื่องมือในบริบท
อะไรทำให้สคีมาเครื่องมือดีสำหรับ AI agent?
สคีมาเครื่องมือที่ดีใช้ชื่อกริยา-คำนาม (search_web, create_ticket) คำอธิบายที่ระบุอย่างชัดเจนว่าควรใช้เมื่อใด พารามิเตอร์แบบ strongly typed พร้อม enum เท่าที่เป็นไปได้ และอาร์เรย์ required tau-bench (2025) แสดงให้เห็นว่าการสร้างอาร์กิวเมนต์ไม่ถูกต้องคือโหมดความล้มเหลวที่พบบ่อยที่สุด
การเรียกเครื่องมือแบบขนานคืออะไรและควรใช้เมื่อใด?
การเรียกเครื่องมือแบบขนานช่วยให้ agent สามารถขอการรันเครื่องมือหลายอย่างในรอบ LLM เดียว ส่งพร้อมกันโดย runtime ใช้การเรียกแบบขนานเมื่อเครื่องมือเป็นอิสระ — ผลลัพธ์ไม่ขึ้นอยู่กับกัน และไม่เขียนไปยังทรัพยากรที่มีสถานะที่แชร์กัน
ฉันจะป้องกันลูปการเรียกเครื่องมือใน AI agent ได้อย่างไร?
ลูปการเรียกเครื่องมือเกิดขึ้นเมื่อ agent เรียกเครื่องมือต่อเนื่องโดยไม่บรรจบสู่คำตอบสุดท้าย การป้องกันที่เชื่อถือได้เพียงอย่างเดียวคืองบประมาณขั้นตอนที่บังคับใช้ในระดับโครงสร้างพื้นฐาน: จำนวนสูงสุดของการเรียกเครื่องมือต่อการรัน agent บังคับใช้โดย orchestrator
ความเสี่ยงด้านความปลอดภัยของการใช้เครื่องมือ AI agent คืออะไร?
ความเสี่ยงหลักคือการฉีดผลลัพธ์เครื่องมือ: เมื่อ agent เรียกเครื่องมือที่ส่งคืนเนื้อหาที่ควบคุมโดยผู้โจมตีซึ่งสามารถเปลี่ยนเส้นทางพฤติกรรมของ agent OWASP LLM Top 10 v1.1 (2025) ระบุ prompt injection เป็นความเสี่ยงสูงสุด การบรรเทาได้แก่การ sanitize ผลลัพธ์ การกำหนดเครื่องมือด้วยสิทธิ์ขั้นต่ำ และประตู human-in-the-loop สำหรับการกระทำที่ย้อนกลับไม่ได้
ความแตกต่างระหว่างเครื่องมือในตัว เครื่องมือ MCP และเครื่องมือกำหนดเองคืออะไร?
เครื่องมือในตัวจัดหาโดย runtime ของ agent พร้อม ACL enforcement ที่ใช้แล้ว เครื่องมือ MCP จัดหาโดยเซิร์ฟเวอร์ Model Context Protocol ที่เปิดเผยความสามารถภายนอกผ่าน JSON-RPC; ต้องการ sandboxing และการกำหนดขอบเขตสิทธิ์ต่อเซิร์ฟเวอร์ เครื่องมือกำหนดเองคือฟังก์ชันที่คุณเขียนและลงทะเบียน มอบความยืดหยุ่นเต็มที่แต่รับผิดชอบในการตรวจสอบและความปลอดภัย
ผู้ให้บริการ LLM ต่างๆ ใช้การใช้เครื่องมืออย่างไร?
OpenAI ใช้พารามิเตอร์ tools, tool_calls ในการตอบสนองของผู้ช่วย ข้อความผลลัพธ์ role: "tool" Anthropic ใช้บล็อกเนื้อหา tool_use พร้อมบล็อก tool_result ในรอบมนุษย์ถัดไป Google Gemini ใช้ functionDeclarations พร้อมส่วน functionCall ในการตอบสนองและส่วน functionResponse ในรอบต่อเนื่อง ทั้งสามรูปแบบมีความเท่ากันทางความหมายแต่แตกต่างทางไวยากรณ์
นิยามเครื่องมือของคุณครั้งเดียว รันอย่างปลอดภัยทุกที่
tau-bench (2025) วาง GPT-4o ที่ 44% pass@1 ในงานการใช้เครื่องมือ โดยการสร้างอาร์กิวเมนต์เป็นหมวดหมู่ความล้มเหลวที่โดดเด่น สคีมาที่แม่นยำพร้อมชื่อกริยา-คำนาม enum ที่มีชนิด และตัวอย่างพารามิเตอร์ช่วยปิดช่องว่างส่วนใหญ่
สำหรับ รูปแบบ agentic workflow ที่ครอบคลุมงบประมาณขั้นตอนและการป้องกันลูป และสำหรับ เกณฑ์มาตรฐานการประเมิน AI agent ที่วัดความน่าเชื่อถือในการใช้เครื่องมือ คู่มือเหล่านั้นขยายรากฐานที่หน้านี้ครอบคลุม
สร้าง agent ที่ใช้เครื่องมือพร้อม ACL enforcement ต่อ agent บน OpenLegion →