Function Calling (Tool Use)
Gọi hàm, hay sử dụng công cụ, cho phép model ngôn ngữ yêu cầu một hàm bên ngoài bằng các đối số JSON; ứng dụng sẽ thực thi hàm và trả về kết quả.
Gọi hàm, còn gọi là gọi công cụ hoặc sử dụng công cụ, là khả năng của một model ngôn ngữ lớn (LLM) trả lời bằng yêu cầu chạy một hàm bên ngoài thay vì văn bản thuần. Ứng dụng mô tả từng công cụ khả dụng bằng tên, mục đích và JSON Schema cho các đối số. Khi yêu cầu cần dữ liệu trực tiếp hoặc cần thực hiện một hành động, model phản hồi bằng tên công cụ cùng các đối số JSON, ứng dụng chạy hàm, rồi model tạo câu trả lời dựa trên kết quả. Bản thân model không thực thi bất cứ thứ gì. Toolformer của Meta cho thấy vào tháng 2 năm 2023 rằng model có thể tự học cách chèn lệnh gọi API vào văn bản của mình; đến ngày 13 tháng 6 năm 2023, OpenAI bổ sung chức năng gọi hàm vào API của mình, với các model được fine-tune để phát hiện khi nào cần gọi hàm và định dạng đối số khớp với chữ ký hàm. Hiện nay, mọi nhà cung cấp model lớn đều hỗ trợ tính năng này; các model mở học cách sử dụng tính năng này thông qua fine-tune theo chỉ dẫn và template chat.
Cách gọi hàm hoạt động#
Lời gọi công cụ là một vòng trao đổi giữa model và ứng dụng, được lặp lại cho đến khi model có đủ thông tin cần thiết:
Đoạn code dưới đây mô phỏng cả hai phía của một vòng trao đổi theo định dạng trong hướng dẫn gọi hàm của OpenAI; phản hồi của model được viết sẵn để đoạn code chạy mà không cần API key:
import json
from jsonschema import validate
# Định nghĩa công cụ được gửi kèm yêu cầu: tên, mục đích và JSON Schema cho các đối số
tool = {
"type": "function",
"name": "get_order_status",
"description": "Look up the shipping status of an order by its number.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string", "pattern": "^[0-9]+$"}},
"required": ["order_id"],
},
}
# Đầu ra của model là một lệnh gọi hàm có các đối số được gửi đến dưới dạng chuỗi JSON
call = {"type": "function_call", "call_id": "call_1", "name": "get_order_status", "arguments": '{"order_id": "4417"}'}
args = json.loads(call["arguments"])
validate(args, tool["parameters"]) # Phát sinh lỗi trước khi chạy bất cứ thứ gì nếu các đối số không khớp với schema
# Ứng dụng tự chạy hàm của mình và trả về kết quả với cùng call_id
orders = {"4417": "Shipped, arriving Thursday"}
print({"type": "function_call_output", "call_id": call["call_id"], "output": orders[args["order_id"]]})Lệnh này in {'type': 'function_call_output', 'call_id': 'call_1', 'output': 'Shipped, arriving Thursday'}, mục mà ứng dụng thêm vào cuộc hội thoại trước khi gọi model lần nữa. Khi đặt "strict": true trên một công cụ, API sẽ áp dụng giải mã có ràng buộc, nhờ đó các đối số do model tạo ra luôn khớp với schema.
Lựa chọn và kết nối chuỗi công cụ#
Model có thể phát ra nhiều lệnh gọi độc lập trong một lượt, chẳng hạn như kiểm tra hai đơn hàng cùng lúc; ứng dụng cũng có thể buộc dùng một công cụ cụ thể, yêu cầu dùng một công cụ nào đó hoặc cấm dùng công cụ trong một lượt. Việc nối các lệnh gọi qua nhiều lượt, trong đó mỗi kết quả quyết định lệnh gọi tiếp theo, tạo thành vòng lặp biến model thành một AI agent chạy bên trong một agent harness. Berkeley Function Calling Leaderboard đánh giá các kỹ năng này: chọn đúng hàm, điền đối số, thực hiện lệnh gọi song song và qua nhiều lượt, cũng như từ chối khi không có công cụ phù hợp. Vì kết quả từ công cụ được trả lại cho model dưới dạng đầu vào, một trang web hoặc tài liệu do công cụ truy xuất có thể chứa prompt injection, vì vậy ứng dụng chỉ cấp cho công cụ các quyền tối thiểu cần thiết và yêu cầu con người xác nhận trước khi mua hàng, xóa dữ liệu hoặc gửi tin nhắn.
Model thị giác là công cụ tự nhiên vì đầu ra của chúng vốn đã có cấu trúc. Trong Ultralytics YOLO, Results.summary() trả về mỗi đối tượng mà model YOLO26 phát hiện dưới dạng một dictionary gồm tên lớp, chỉ số lớp, độ tin cậy và tọa độ hộp, còn json.dumps chuyển danh sách đó trực tiếp thành kết quả của công cụ, để model chat hoặc mô hình thị giác-ngôn ngữ (VLM) có thể đếm và định vị đối tượng trong ảnh bằng cách gọi chế độ predict.
Function Calling và các thuật ngữ liên quan#
- Agent điều khiển máy tính: Điều khiển phần mềm thông qua ảnh chụp màn hình, thao tác nhấp và phím bấm, phù hợp với các ứng dụng không có API. Khi có API, một lệnh gọi hàm sẽ đạt được kết quả tương tự chỉ bằng một yêu cầu có cấu trúc.
- Đầu ra có cấu trúc: Giới hạn câu trả lời cuối cùng của model theo một schema, chẳng hạn như trích xuất các trường từ hóa đơn. Function calling sử dụng cùng schema để yêu cầu thực hiện một hành động và chờ nhận lại kết quả.
- Sinh tăng cường truy xuất (RAG): Bổ sung tài liệu được truy xuất vào prompt. Công cụ tìm kiếm có thể triển khai RAG, còn RAG tác tử cho phép model quyết định khi nào cần tìm kiếm và tìm nội dung gì.
- Giao thức ngữ cảnh model (MCP): Một giao thức mở do Anthropic giới thiệu vào tháng 11 năm 2024, cho phép ứng dụng khám phá các công cụ do chương trình bên ngoài cung cấp. Model vẫn gọi công cụ MCP thông qua function calling.










