3A.COM.VN

Kỹ Thuật Dev

Function Calling là gì: 4 bước nối LLM với API nội bộ

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 rồi gửi kết quả lại để mô hình trả lời. Bài này đi qua 4 bước của luồng chuẩn giữa App Server, LLM và API nội bộ.

Sản phẩm trong bài:
OpenAI
Quang Minh· Trưởng ban Nghiên cứu & Đo kiểm AI6 phút đọc14/11/20260 lượt xem
Function Calling là gì: 4 bước nối LLM với API nội bộ
OpenAI

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.

Dự án nội bộ · 3A AI Stack Advisor

Đừ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.

Người đàn ông suy nghĩ ý tưởng khi dùng laptop
Người đàn ông suy nghĩ ý tưởng khi dùng laptopNguồn chính hãng / Kho ảnh bản quyền mở · Official / Free Commercial License

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 APIAnthropic Claude API
Tên gọi trong tài liệuFunction calling, còn gọi là tool callingTool use, còn gọi là function calling
Trường khai báo schemaparameters, kiểu JSON Schema trong toolsinput_schema, kiểu JSON Schema trong tools
Ép khớp schemaCó cờ strict: true, kèm required và additionalProperties: falseKhô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ọiTool call, trả về kèm call_idKhối tool_use, kèm stop_reason: tool_use
Khối kết quảfunction_call_output, kèm call_idKhối tool_result gửi lại trong request sau
Luồng chuẩn5 bước: gửi tools, nhận tool call, thực thi, gửi kết quả, nhận đáp án cuốiVò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àoSonnet 5.5 tốn thêm 286 token system prompt ở tool_choice auto hoặc none, 406 token ở any hoặc tool
Ghi chú APIGPT-6 Astra và GPT-6.1 Sol yêu cầu Responses API cho tool callingCó 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:

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/
— Quang Minh, từ phòng đo kiểm 3A.

Bài liên quan