Gọi hàm (Function Calling)

Gọi hàm cho phép mô hình tự động chọn và gọi các hàm công cụ do bạn định nghĩa trước dựa trên nhu cầu của người dùng, qua đó thực hiện các khả năng như truy vấn dữ liệu, gọi API, thực thi tác vụ, v.v.

Khái niệm cơ bản#

Quy trình hoàn chỉnh của việc gọi hàm:

  • Định nghĩa công cụ — Mô tả các hàm và tham số khả dụng trong yêu cầu
  • Mô hình quyết định — Mô hình phán đoán có cần gọi công cụ hay không
  • Trả về lệnh gọi — Mô hình trả về tên hàm và tham số
  • Thực thi hàm — Bạn thực thi hàm và lấy kết quả
  • Tiếp tục hội thoại — Gửi kết quả về lại mô hình để tạo phản hồi cuối cùng

Giao thức OpenAI#

Python

from openai import OpenAI
import json
 
client = OpenAI(
    base_url="https://as.apinoma.com/v1",
    api_key="<APINOMA_API_KEY của bạn>"
)

# 1. Định nghĩa công cụ
tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Lấy thông tin thời tiết theo thời gian thực của thành phố được chỉ định",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "Tên thành phố, ví dụ: Bắc Kinh, Thượng Hải"
                },
                "unit": {
                    "type": "string",
                    "enum": ["celsius", "fahrenheit"],
                    "description": "Đơn vị nhiệt độ"
                }
            },
            "required": ["city"]
        }
    }
}]

# 2. Gửi yêu cầu
messages = [{"role": "user", "content": "Hôm nay thời tiết Bắc Kinh thế nào?"}]
 
response = client.chat.completions.create(
    model="openai/gpt-4o",
    messages=messages,
    tools=tools,
    tool_choice="auto"
)
 
message = response.choices[0].message
 
# 3. Xử lý lệnh gọi công cụ
if message.tool_calls:
    for tool_call in message.tool_calls:
        args = json.loads(tool_call.function.arguments)

        # 4. Thực thi hàm của bạn
        result = get_weather(args["city"])  # Phần triển khai của riêng bạn

        # 5. Gửi kết quả về lại mô hình
        messages.append(message)
        messages.append({
            "role": "tool",
            "tool_call_id": tool_call.id,
            "content": json.dumps(result)
        })
 
    # Lấy phản hồi cuối cùng
    final = client.chat.completions.create(
        model="openai/gpt-4o",
        messages=messages,
        tools=tools
    )
    print(final.choices[0].message.content)

TypeScript

Giao thức Anthropic#

Anthropic sử dụng tham số `tools`, định dạng hơi khác một chút:

import anthropic
 
client = anthropic.Anthropic(
    base_url="https://as.apinoma.com/anthropic",
    api_key="<APINOMA_API_KEY của bạn>"
)

response = client.messages.create(
    model="anthropic/claude-sonnet-4.6",
    max_tokens=1024,
    tools=[{
        "name": "get_weather",
        "description": "Lấy thông tin thời tiết theo thời gian thực của thành phố được chỉ định",
        "input_schema": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "Tên thành phố"}
            },
            "required": ["city"]
        }
    }],
    messages=[{"role": "user", "content": "Hôm nay thời tiết Bắc Kinh thế nào?"}]
)

# Xử lý content block tool_use
for block in response.content:
    if block.type == "tool_use":
        print(f"Gọi công cụ: {block.name}, tham số: {block.input}")

Gọi hàm song song#

Mô hình có thể trả về nhiều lệnh gọi công cụ trong một phản hồi, bạn nên thực thi chúng song song:

# Mô hình có thể yêu cầu nhiều lệnh gọi công cụ cùng lúc
if message.tool_calls:
    # Thực thi song song tất cả các lệnh gọi công cụ
    import asyncio
 
    async def execute_tools(tool_calls):
        tasks = []
        for tc in tool_calls:
            args = json.loads(tc.function.arguments)
            tasks.append(execute_function(tc.function.name, args))
        return await asyncio.gather(*tasks)

Tham số tool_choice#

Giá trị

Mô tả

`"auto"`

Mô hình tự quyết định có gọi công cụ hay không (mặc định)

`"none"`

Cấm gọi công cụ

`"required"`

Bắt buộc gọi công cụ

`{"type": "function", "function": {"name": "xxx"}}`

Bắt buộc gọi công cụ được chỉ định

Các mô hình được hỗ trợ#

Các mô hình sau hỗ trợ Function Calling:

  • OpenAI: `gpt-4o`、`gpt-4o-mini`、`o1`、`o3-mini`
  • Anthropic: `claude-opus-4`、`claude-sonnet-4`、`claude-3-5-haiku`
  • Google: `gemini-pro-compatible-pro-preview`、`gemini-pro-compatible-flash-lite-preview`、`gemini-3-pro-preview`
  • Trong nước: `deepseek-chat`、`qwen-max`、`glm-4`

Cập nhật lần cuối vào 23 tháng 6, 2026