Function Calling trong LLM: Cách AI gọi tool và thực thi hành động

Function Calling là gì?

Function Calling là kỹ thuật cho phép mô hình ngôn ngữ lớn (LLM) gọi các hàm bên ngoài thay vì chỉ sinh văn bản thuần. Thay vì trả lời “Tôi không biết thời tiết hôm nay”, model sẽ gửi yêu cầu có cấu trúc đến API thời tiết, nhận kết quả rồi trả lời người dùng. Đây là nền tảng biến LLM từ công cụ chat thuần thành agent có khả năng thao tác với dữ liệu thực.

Sơ đồ agent cơ bản: Sense → Think → Act

Cơ chế này biến LLM thành agent thực sự. OpenAI giới thiệu function calling vào năm 2023 trong API GPT-4. Sau đó Anthropic (Claude tool use), Google (Gemini function calling) và Meta (Llama 3.1) đều triển khai phiên bản riêng với định dạng JSON schema tương tự. Chuẩn này nhanh chóng trở thành tính năng bắt buộc của mọi nhà cung cấp LLM lớn.

Vì sao Function Calling quan trọng?

Trước đây, LLM chỉ sinh văn bản và không thể truy cập dữ liệu ngoài ngữ cảnh được huấn luyện. Muốn lấy thời tiết, đặt vé, chuyển tiền hay truy xuất dữ liệu nội bộ, bạn phải tự viết code phức tạp để parse câu lệnh và gọi API. Function Calling chuẩn hóa toàn bộ quy trình này.

  • Chính xác: model phân tích câu hỏi, chọn đúng hàm và điền đúng tham số có cấu trúc, không cần parse văn bản tự do
  • Đáng tin cậy: kết quả hàm đi qua runtime kiểm soát, không phải model tự bịa
  • An toàn: developer kiểm soát tất cả hàm nào được gọi, tham số gì được phép
  • Mở rộng: thêm hàm mới là thêm một tool definition, không sửa logic chính

Cách hoạt động chi tiết

Quy trình gồm nhiều bước được runtime lặp lại cho đến khi có câu trả lời cuối:

  1. Khai báo tool: developer định nghĩa schema hàm gồm tên, mô tả, tham số bắt buộc và tùy chọn bằng cấu trúc JSON
  2. Model quyết định: LLM phân tích tin nhắn người dùng, nhận diện ý định cần gọi hàm, trả về đối tượng JSON tool_calls chứa tên hàm và tham số đã điền
  3. Runtime thực thi: ứng dụng nhận tool call, gọi hàm thực tế (query database, gọi API ngoài, chạy tính toán)
  4. Đưa kết quả vào ngữ cảnh: kết quả (tool result) được gửi ngược vào model như một message mới
  5. Sinh câu trả lời: model đọc kết quả và sinh phản hồi cuối cho người dùng

Vòng lặp này có thể chạy nhiều lần trong một phiên khi agent cần gọi nhiều hàm. Một số framework gọi đây là agent loop hoặc tool-use loop.

Sơ đồ agent dựa trên mô hình và mục tiêu

Ví dụ thực tế với OpenAI

{
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Lấy thời tiết hiện tại của một thành phố",
        "parameters": {
          "type": "object",
          "properties": {
            "location": {"type": "string", "description": "Tên thành phố"}
          },
          "required": ["location"]
        }
      }
    }
  ]
}

Người dùng hỏi “Hà Nội hôm nay nóng không?”, model trả về:

{
  "tool_calls": [{
    "id": "call_123",
    "type": "function",
    "function": {
      "name": "get_weather",
      "arguments": "{"location": "Hà Nội"}"
    }
  }]
}

Ứng dụng chạy get_weather(“Hà Nội”), nhận kết quả 33 độ, đưa lại cho model để trả lời. Toàn bộ quá trình không cần viết parser JSON thủ công.

So sánh với MCP và Agent

Function Calling là primitives đơn lẻ cho một hoặc nhiều hàm được khai báo trong từng request. Model Context Protocol (MCP) của Anthropic đưa khái niệm này lên tầm hệ thống: cung cấp giao thức chuẩn để LLM kết nối với bất kỳ công cụ nào thông qua MCP server, có thể qua stdio hoặc HTTP/SSE.

Khi số lượng công cụ lớn (vài chục), định nghĩa function calling thủ công trong từng ứng dụng trở nên khó bảo trì. MCP tập trung hóa định nghĩa tool ở server, ứng dụng chỉ cần kết nối. Đây là lý do các coding agent như Claude Code, Cursor hỗ trợ MCP server plugin.

Tuy nhiên, với ứng dụng nhỏ gọi vài hàm nội bộ (database, API riêng), function calling trực tiếp vẫn đơn giản và hiệu quả hơn là triển khai MCP server.

Best practices

  • Mô tả rõ ràng: viết mô tả hàm và tham số chi tiết bằng ngôn ngữ tự nhiên, model dùng mô tả này để quyết định gọi hàm nào
  • Validate đầu vào: không tin JSON do model sinh, luôn validate tham số trước khi thực thi hàm thật
  • Xử lý lỗi: hàm có thể fail, trả kết quả lỗi về model kèm hướng dẫn thử lại
  • Giới hạn quyền: tool side-effect (xóa, ghi, chuyển tiền) nên có xác nhận thủ công
  • Timeout và vòng lặp: giới hạn số vòng lặp tool-call để tránh agent lặp vô hạn

Hệ sinh thái và framework

  • OpenAI: Function calling (tool use) qua Chat Completions API
  • Anthropic: Claude tool use với tool definition trong messages API
  • LangChain: bind_tools và ToolNode trong LangGraph
  • OpenAI Agents SDK / Swarm: framework agent đa tool
  • Vercel AI SDK: tool calling đa provider thống nhất

Function Calling đã trở thành tính năng cốt lõi của mọi ứng dụng AI hiện đại. Dù bạn xây chatbot, coding assistant hay automation workflow, nắm vững cơ chế tool calling sẽ giúp xây agent đáng tin cậy, bảo trì được và mở rộng dễ dàng.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

RAG là gì? Giải pháp Retrieval Augmented Generation cho LLM

RAG là gì? Retrieval-Augmented Generation (RAG) là kỹ thuật tiên tiến trong trí tuệ nhân tạo, kết hợp khả năng sinh văn bản của mô hình ngôn ngữ lớn (LLM)…

Xem thêm

Model Context Protocol là gì?

Model Context Protocol là gì? Model Context Protocol (MCP) là chuẩn mở do Anthropic đề xuất, cho phép AI models kết nối với nguồn dữ liệu bên ngoài và công…

Xem thêm

CrewAI: Framework xây dựng AI Agent đa vai trò tự động hóa quy trình

CrewAI là gì? CrewAI là framework Python mã nguồn mở cho phép xây dựng hệ thống multi-agent (đa tác nhân) nơi các AI agent làm việc cùng nhau như một…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất