
AI Function Calling: Kỹ Thuật Để LLM Sử Dụng Công Cụ Thực Tế
Function calling (gọi hàm) là kỹ thuật cho phép mô hình ngôn ngữ lớn (LLM) tương tác với thế giới thực bằng cách gọi các API, truy xuất dữ liệu và thực thi mã lệnh. Thay vì chỉ trả lời văn bản, LLM giờ đây có thể tìm giá Bitcoin, gửi email, truy vấn database hay điều khiển IoT — tất cả thông qua một hệ thống function calling có cấu trúc.

Kỹ thuật này là nền tảng của AI Agent — hệ thống AI tự chủ thực hiện tác vụ phức tạp thông qua nhiều bước gọi hàm liên tiếp. OpenAI giới thiệu function calling vào tháng 6/2023 và hiện nayhầu hết các nền tảng LLM lớn đều hỗ trợ.
Function Calling Hoạt Động Thế Nào?
Quy trình function calling gồm 4 bước chính:
- Định nghĩa hàm: Developer khai báo danh sách hàm với tên, mô tả tham số (JSON Schema) cho LLM.
- Gửi prompt: Người dùng nhập câu hỏi hoặc yêu cầu đến LLM kèm danh sách hàm.
- LLM quyết định: Mô hình phân tích yêu cầu, chọn hàm phù hợp, trích xuất tham số từ ngữ cảnh.
- Thực thi và phản hồi: Ứng dụng chạy hàm được gọi, trả kết quả về cho LLM để tổng hợp thành câu trả lời cuối cùng.
Ví dụ: Khi người dùng hỏi “Giá BTC hiện tại bao nhiêu?”, LLM không tự tạo số liệu mà trả về lệnh gọi get_bitcoin_price(currency: "USD"). Ứng dụng thực thi lệnh này qua API và LLM tổng hợp kết quả thành câu trả lời.
So Sánh Các Nền Tảng Hỗ Trợ
| Nền tảng | Cách khai báo | Đặc điểm |
|---|---|---|
| OpenAI (GPT-4o, GPT-4.1) | tools array trong API |
Pioneer, hỗ trợ parallel function calls, tool_choice |
| Anthropic Claude | tools array, JSON schema |
Claude 3.5+ hỗ trợ native, thinking mode kết hợp tool use |
| Google Gemini | function_declarations |
Hỗ trợ inline function, code execution tích hợp |
| Open Source (Llama, Mistral, Qwen) | Tùy framework (llama.cpp, vLLM) | Hỗ trợ qua template, cần fine-tune hoặc prompt engineering |
Ví Dụ Thực Tế Với OpenAI API
Định nghĩa hàm tìm kiếm thời tiết:
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Lấy thông tin thời tiết hiện tại cho một thành phố",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Tên thành phố, ví dụ: Ho Chi Minh"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Đơn vị nhiệt độ"
}
},
"required": ["city"]
}
}
}

Gọi API với hàm trên:
import openai
import json
client = openai.OpenAI()
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Lấy thông tin thời tiết hiện tại cho một thành phố",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city"]
}
}
}]
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Thời tiết Hà Nội hôm nay thế nào?"}],
tools=tools,
tool_choice="auto"
)
# Kiểm tra xem model có gọi function không
msg = response.choices[0].message
if msg.tool_calls:
for call in msg.tool_calls:
func_name = call.function.name
args = json.loads(call.function.arguments)
print(f"Gọi: {func_name}({args})")
# get_weather({'city': 'Hà Nội'})
Muilti-Step Agent: Gọi Hàm Liên Tục
AI Agent sử dụng function calling theo vòng lặp: LLM gọi hàm → nhận kết quả → quyết định gọi tiếp hoặc dừng lại. Mô hình ReAct (Reason + Act) phổ biến nhất:
- Thought: LLM phân tích tình huống và lập kế hoạch.
- Action: Gọi hàm phù hợp.
- Observation: Nhận kết quả từ hàm.
- Lặp lại cho đến khi có đủ thông tin để trả lời.
Ví dụ Ask: “So sánh giá BTC và ETH, cho tôi biết nên mua cái nào?”
- Bước 1: LLM gọi
get_price("BTC")→ $67,500 - Bước 2: LLM gọi
get_price("ETH")→ $3,450 - Bước 3: LLM gọi
get_price_history("BTC", "7d")→ +5.2% - Bước 4: LLM gọi
get_price_history("ETH", "7d")→ -1.8% - Bước 5: LLM tổng hợp phân tích từ cả 4 kết quả → câu trả lời cuối
MCP Protocol: Chuẩn Kết Nối Công Cụ
Model Context Protocol (MCP) là giao thức chuẩn hóa cách AI model kết nối với các công cụ bên ngoài. MCP định nghĩa cách server cung cấp tool và client gọi tool — giúp một function definition dùng được với nhiều LLM khác nhau.
So sánh function calling truyền thống với MCP:
- Truyền thống: Mỗi LLM có format
toolsriêng, phải viết adapter. - MCP: Server một lần, nhiều client (Claude, GPT, Gemini) đều dùng được.
Pitfalls và Best Practices
- Validation: Luôn validate tham số từ LLM trước khi thực thi — model có thể tạo tham số sai.
- Rate limiting: Giới hạn số lần gọi hàm mỗi request để tránh vòng lặp vô hạn.
- Error handling: Khi hàm lỗi, trả message rõ ràng cho LLM để model có thể retry hoặc báo người dùng.
- Mô tả hàm: Viết description rõ ràng — LLM dùng mô tả để quyết định gọi hàm nào.
- Parallel calls: Hỗ trợ gọi nhiều hàm cùng lúc để giảm latency (OpenAI, Claude).
- Security: Không bao giờ cho LLM gọi hàm nguy hiểm (xóa DB, gửi tiền) mà không có human approval.
Kết Luận
Function calling là bước nhảy vọt lớn nhất cho LLM từ chatbot thuần túy sang AI Agent thực thụ. Bằng cách định nghĩa hàm rõ ràng, validate tham số và thiết kế vòng lặp ReAct hợp lý, developer có thể xây dựng hệ thống AI giải quyết tác vụ phức tạp — từ phân tích dữ liệu đến quản lý hệ thống. Kết hợp với MCP protocol, function calling đang trở thành chuẩn mực mới cho cách AI tương tác với thế giới thực.
Tham khảo thêm: OpenAI Function Calling Guide | Anthropic Tool Use | MCP Protocol
