ข้ามไปยังเนื้อหา
ราคาผู้ก่อตั้ง — ล็อกไว้สำหรับลูกค้ารุ่นแรกเริ่มต้นใช้งาน →

การใช้เครื่องมือของ AI Agent: การเรียกฟังก์ชัน สคีมา และการรันอย่างปลอดภัย

การใช้เครื่องมือของ AI agent คือกลไกที่ LLM ร้องขอการรันฟังก์ชันภายนอก — การค้นหาเว็บ การค้นหาฐานข้อมูล การเรียก API การดำเนินการกับไฟล์ — โดยส่ง JSON การเรียกเครื่องมือแบบมีโครงสร้างที่ runtime จะสกัดกั้น ตรวจสอบกับ JSON Schema และรันก่อนส่งคืนผลลัพธ์ของเครื่องมือ LLM ไม่เคยรันสิ่งใดด้วยตัวเอง มันเพียงแค่ร้องขอ runtime จะบังคับใช้การตรวจสอบสคีมา การตรวจสอบ ACL และงบประมาณขั้นตอนก่อนการรันใดๆ tau-bench (2025) แสดงให้เห็นว่าข้อผิดพลาดในการสร้างอาร์กิวเมนต์คือโหมดความล้มเหลวที่พบบ่อยที่สุดในการใช้เครื่องมือ

การใช้เครื่องมือของ AI agent คือกลไกที่โมเดลภาษาขนาดใหญ่ร้องขอการรันฟังก์ชันภายนอก — การค้นหาเว็บ การค้นหาฐานข้อมูล การเรียก API การดำเนินการกับไฟล์ หรือตรรกะธุรกิจแบบกำหนดเอง — โดยส่งการเรียกเครื่องมือแบบมีโครงสร้างในผลลัพธ์ ซึ่ง runtime จะสกัดกั้น ตรวจสอบกับนิยาม JSON Schema รัน และส่งคืนเป็นผลลัพธ์ของเครื่องมือในรอบบริบทถัดไป

วิธีการทำงานของการเรียกเครื่องมือ: ลูปร้องขอ-รัน-ส่งคืน

วงจรชีวิตการเรียกเครื่องมือ

การเรียกเครื่องมือทุกครั้งปฏิบัติตามลูปห้าขั้นตอนเดียวกันโดยไม่คำนึงถึงเฟรมเวิร์กหรือผู้ให้บริการ:

  1. การตั้งค่าบริบท — agent รับงานและรายการเครื่องมือที่มีอยู่ แต่ละเครื่องมืออธิบายด้วยชื่อ คำอธิบายภาษาธรรมชาติ และนิยาม JSON Schema ของพารามิเตอร์
  2. การตัดสินใจของ LLM — โมเดลส่งบล็อกการเรียกเครื่องมือในผลลัพธ์: ชื่อฟังก์ชันและอ็อบเจกต์ JSON ของอาร์กิวเมนต์ที่ตรงกับสคีมาที่ประกาศ
  3. การสกัดกั้นของ runtime — เฟรมเวิร์กสกัดกั้นการเรียกเครื่องมือก่อนการรันใดๆ อาร์กิวเมนต์จะถูกตรวจสอบกับสคีมา ACL ของ agent จะถูกตรวจสอบ: agent นี้ได้รับอนุญาตให้เรียกเครื่องมือนี้หรือไม่?
  4. การรัน — หากการตรวจสอบและการตรวจสอบสิทธิ์ผ่าน runtime จะรันฟังก์ชันและเก็บผลลัพธ์
  5. การฉีดบริบท — ผลลัพธ์ของเครื่องมือจะถูกฉีดกลับเข้าไปในบริบทการสนทนาเป็นรอบผลลัพธ์เครื่องมือ 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 เป็นทางเลือก

การเขียนคำอธิบายที่ลดข้อผิดพลาดของอาร์กิวเมนต์

กฎสามข้อสำหรับคำอธิบายเครื่องมือที่ปรับปรุงความแม่นยำในการสร้างอาร์กิวเมนต์:

  1. ตั้งชื่อด้วยคู่กริยา-คำนาม: search_web, create_ticket, read_file หลีกเลี่ยงความคลุมเครือระหว่างเครื่องมือที่คล้ายกัน
  2. แก้ความคลุมเครือในคำอธิบาย: หากเครื่องมือสองอย่างดูคล้ายกัน ระบุอย่างชัดเจนว่าควรใช้แต่ละอันเมื่อใด
  3. อธิบายพารามิเตอร์ด้วยตัวอย่าง: "คำค้นหา ตัวอย่าง: 'LangGraph v0.2 parallel tool calls'" เหนือกว่า "สตริงคำค้นหา" ในความแม่นยำของอาร์กิวเมนต์

ข้อผิดพลาดของสคีมาที่พบบ่อยและวิธีแก้ไข

ข้อผิดพลาดผลการแก้ไข
"type": "string" ไม่มีข้อจำกัดสำหรับค่าหมวดหมู่โมเดลสร้างค่าที่ไม่ถูกต้องใช้ "enum": ["option_a", "option_b"]
ขาด description ในพารามิเตอร์โมเดลเดาความหมายของอาร์กิวเมนต์เขียนคำอธิบายชัดเจนพร้อมตัวอย่าง
พารามิเตอร์ทั้งหมดอยู่ใน requiredโมเดลปฏิเสธการเรียกเมื่อฟิลด์ทางเลือกไม่รู้จักแสดงรายการเฉพาะพารามิเตอร์ที่จำเป็นจริงๆ
ชื่อเครื่องมือคลุมเครือ (process, handle)โมเดลไม่สามารถแยกแยะเครื่องมือที่คล้ายกันใช้กริยา-คำนาม: submit_form, parse_date
ไม่มีอาร์เรย์ requiredJSON 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 ก่อนการรัน

มิติOpenLegionLangChain / LangGraphOpenAI Agents SDKCrewAIAnthropic โดยตรง
รูปแบบนิยามเครื่องมือสคีมาเดียว แปลตามผู้ให้บริการต้องใช้ wrapper เฉพาะผู้ให้บริการรูปแบบ OpenAI เท่านั้นตัวตกแต่งเครื่องมือ CrewAIรูปแบบ Anthropic tool_use เท่านั้น
การ abstraction ผู้ให้บริการใช่ — GPT-4o, Claude, Gemini รวมกันบางส่วน — ผ่าน LangChain integrationsไม่ — โมเดล OpenAI เท่านั้นบางส่วนไม่ — Anthropic เท่านั้น
การบังคับใช้ ACLเมทริกซ์สิทธิ์ต่อ agent เชิงโครงสร้างไม่มีในตัวไม่มีในตัวไม่มีในตัวไม่มีในตัว
การเรียกเครื่องมือแบบขนานรองรับรองรับ (ขึ้นอยู่กับผู้ให้บริการ)ใช่ — ค่าเริ่มต้นใน Responses APIรองรับใช่ — Claude รองรับ
เครื่องมือในตัวเบราว์เซอร์ ไฟล์ HTTP shell สร้างภาพผ่านเครื่องมือชุมชน LangChainweb_search, file_search, computer_useไม่มีในตัวไม่มีในตัว
การผสาน MCPNative — 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 →