Function calling là gì? Đó là cách cho LLM gọi hàm của ứng dụng qua JSON Schema. Mô hình trả về lệnh gọi hàm. Code của bạn thực thi hàm đó rồi gửi kết quả lại để mô hình trả lời. Nhờ vậy, mô hình chạm được dữ liệu ngoài dữ liệu huấn luyện.
OpenAI gọi kỹ thuật này là tool calling. Anthropic gọi là tool use. Hai hãng dùng tên khác nhau nhưng cùng một ý: mô hình không tự chạy code của bạn. Nó chỉ quyết định nên gọi hàm nào với tham số nào. Phần thực thi luôn nằm ở code của bạn.
Bước 1: Khai báo hàm bằng JSON Schema trong tools
Mọi thứ bắt đầu từ khai báo hàm. Bạn mô tả tên hàm, công dụng và tham số bằng JSON Schema. Ví dụ hàm get_weather nhận location là chuỗi. Khai báo này gửi kèm trong mỗi request, nằm trong tham số tools.
Đừng trả tiền thừa cho SaaS AI — Nhận lộ trình công cụ & chi phí tối ưu trong 10 giây
Mô tả bài toán của doanh nghiệp bạn (CSKH Zalo OA, Coding, RAG tài liệu nội bộ, Báo cáo P&L). Hệ thống cố vấn của 3A sẽ đề xuất bộ công cụ đã qua kiểm thử thực chiến.
OpenAI yêu cầu ghi rõ type là function, kèm description và parameters. Bạn có thể bật strict để ép mô hình trả đúng schema. Khi strict bật, bạn phải liệt kê đủ required và đặt additionalProperties là false.
Anthropic dùng input_schema thay cho parameters. Schema này cũng viết bằng JSON Schema. Bạn khai báo công cụ trong tham số tools của Messages API. Tài liệu của hãng nhắc rõ: định nghĩa công cụ cũng tính vào token đầu vào. Vì vậy, mô tả hàm càng dài thì mỗi request càng tốn token.
Một lưu ý từ tài liệu OpenAI: đừng để mô hình điền tham số mà bạn đã biết. Nếu order_id đã có từ bước trước, hãy viết hàm submit_refund không tham số. Code của bạn tự gắn order_id khi thực thi.
Bước 2: LLM chọn hàm và trả về lệnh gọi
Khi nhận câu hỏi, mô hình đọc danh sách hàm rồi quyết định có cần gọi hàm hay không. Với tool_choice mặc định là auto, Claude tự chọn gọi hàm hay trả lời trực tiếp. Nó gọi hàm khi yêu cầu khớp mô tả công cụ và đáp án chưa có trong ngữ cảnh.
OpenAI mô tả luồng này gồm 5 bước lớn. Bước 1 là gửi request kèm tools. Bước 2 là nhận tool call từ mô hình. Mô hình trả về tên hàm và tham số dưới dạng JSON. Nó chưa thực thi gì ở bước này.
Muốn ép mô hình phải gọi một hàm cụ thể, bạn đặt tool_choice sang dạng bắt buộc thay vì chỉ gợi ý bằng system prompt. Ngược lại, muốn mô hình dè dặt hơn, bạn viết rõ trong system prompt khi nào không nên gọi hàm.

Chú thích ảnh: Người đàn ông suy nghĩ ý tưởng khi dùng laptop, minh họa cho bước mô hình chọn hàm. Ảnh: August de Richelieu, Pexels, giấy phép Pexels (link gốc xem mục Nguồn, phần Ảnh).
Bước 3: App Server thực thi và gọi API nội bộ
Đây là bước code của bạn làm việc thật. App Server nhận tool call, kiểm tra tên hàm và tham số rồi chạy hàm tương ứng. Hàm này có thể đọc cơ sở dữ liệu, gọi API nội bộ hay thực hiện một hành động như hoàn tiền.
Với Claude, vòng này trả về khối tool_use kèm stop_reason là tool_use. Code của bạn chạy thao tác rồi gửi lại khối tool_result. Với OpenAI, kết quả hàm gửi lại dưới dạng function_call_output, kèm call_id để mô hình biết kết quả này thuộc lệnh gọi nào.
Điểm an toàn quan trọng: mô hình chỉ gợi ý tham số, code của bạn phải kiểm tra lại. Kiểm tra quyền truy cập trước khi chạy hàm ghi dữ liệu. Kiểm tra khoảng giá trị của tham số trước khi gọi API nội bộ. Lỗi từ API nội bộ cũng nên trả lại cho mô hình dưới dạng kết quả. Mô hình sẽ xử lý tiếp thay vì dừng hẳn.
Bước 4: Gửi kết quả lại để LLM trả lời cuối
Sau khi thực thi, bạn gửi lại toàn bộ lịch sử cho mô hình. Lịch sử gồm định nghĩa hàm, câu hỏi gốc, lệnh gọi hàm và kết quả hàm. Mô hình đọc kết quả rồi sinh câu trả lời cuối bằng ngôn ngữ tự nhiên.
Luồng này có thể lặp nhiều vòng. Mô hình có thể gọi thêm hàm khác sau khi thấy kết quả hàm đầu. Tài liệu OpenAI ghi rõ: với Responses API, ứng dụng tiếp tục luồng này qua bao nhiêu lệnh gọi tùy ý.
Chi phí token của vòng lặp này cần tính trước. Mỗi vòng gửi lại toàn bộ lịch sử, gồm cả kết quả hàm. Vì vậy, kết quả hàm nên gọn: chỉ trả trường cần thiết, không trả toàn bộ bản ghi. Anthropic cũng tính phí tương tự: token của tools, token của khối tool_use và khối tool_result đều cộng vào hóa đơn.
Bảng đối chiếu: JSON Schema tools trên OpenAI API và Anthropic Claude API
| Tiêu chí | OpenAI API | Anthropic Claude API |
|---|---|---|
| Tên gọi trong tài liệu | Function calling, còn gọi là tool calling | Tool use, còn gọi là function calling |
| Trường khai báo schema | parameters, kiểu JSON Schema trong tools | input_schema, kiểu JSON Schema trong tools |
| Ép khớp schema | Có cờ strict: true, kèm required và additionalProperties: false | Không ghi cờ strict tương đương trên trang tài liệu đã mở ngày 12/11/2026 |
| Khối lệnh gọi | Tool call, trả về kèm call_id | Khối tool_use, kèm stop_reason: tool_use |
| Khối kết quả | function_call_output, kèm call_id | Khối tool_result gửi lại trong request sau |
| Luồng chuẩn | 5 bước: gửi tools, nhận tool call, thực thi, gửi kết quả, nhận đáp án cuối | Vòng tương tự: định nghĩa tool, nhận tool_use, chạy code, gửi tool_result, nhận đáp án |
| Token hệ thống khi bật tool | Định nghĩa hàm tính vào token đầu vào | Sonnet 5.5 tốn thêm 286 token system prompt ở tool_choice auto hoặc none, 406 token ở any hoặc tool |
| Ghi chú API | GPT-6 Astra và GPT-6.1 Sol yêu cầu Responses API cho tool calling | Có tool chạy phía máy chủ như web_search, không cần code xử lý phía bạn |
Rủi ro và giới hạn khi nối LLM với API nội bộ
Rủi ro lớn nhất là mô hình gọi hàm có quyền quá rộng. Một lệnh gọi sai có thể ghi dữ liệu thật hoặc hoàn tiền thật. Vì vậy, hàm ghi dữ liệu phải có bước duyệt của người hoặc giới hạn chặt chẽ. Rủi ro thứ hai là prompt injection qua kết quả hàm. Nội dung từ API nội bộ có thể chứa dòng chữ hướng dẫn mô hình làm việc khác. Đội vận hành nên coi kết quả hàm là dữ liệu, không phải chỉ thị. Rủi ro thứ ba là chi phí vòng lặp. Mỗi vòng gọi hàm gửi lại toàn bộ lịch sử nên hóa đơn tăng theo số vòng.
Đọc thêm trên 3a.com.vn:
- AI Agent là gì và khi nào nên dùng
- MCP là gì: hướng dẫn cho người mới
- Agent đặt lịch và gửi email: ranh giới phê duyệt
Nguồn
Nguồn
- OpenAI, "Function calling", truy cập ngày 2026-11-12. Link: https://platform.openai.com/docs/guides/function-calling
- Anthropic, "Tool use with Claude", truy cập ngày 2026-11-12. Link: https://docs.anthropic.com/en/docs/build-with-claude/tool-use
Ảnh
- Bìa: Moses Londo, Pexels, giấy phép Pexels, ngày 2021-11-23. Link gốc: https://www.pexels.com/photo/10326696/
- Ảnh thân bài: August de Richelieu, Pexels, giấy phép Pexels, ngày 2021-04-07. Link gốc: https://www.pexels.com/photo/a-man-thinking-for-ideas-while-using-a-laptop-7431936/



