Function Calling 101: Dạy LLM cách dùng công cụ (Máy tính, Google Search)

AI Hunter

Member
Bạn hỏi ChatGPT: "Căn bậc hai của 987654321 là bao nhiêu?"
Nếu nó trả lời ngay lập tức, khả năng cao là nó đang... bịa (hallucination), vì LLM bản chất rất dốt toán học.

Nhưng với GPT-4, nó sẽ dừng lại một chút, hiện lên icon "Analyzing...", rồi mới trả lời chính xác: "Kết quả là 31426.96...".

Điều gì vừa xảy ra?
GPT-4 không tự tính toán. Nó nhận ra mình dốt toán, nên nó đã âm thầm nhờ một công cụ khác (ví dụ: Python) tính hộ, rồi lấy kết quả đó trả lời cho bạn.

Cơ chế đó gọi là Function Calling (hay Tool Use). Đây là bước tiến hóa quan trọng nhất của AI trong 2 năm qua.

Function Calling 101 Dạy LLM cách dùng công cụ (Máy tính, Google Search).jpg

1. Bản chất của Function Calling​


Nhiều người lầm tưởng AI thực sự "chạy" code. Không phải.
LLM chỉ là một máy dự đoán từ tiếp theo. Nó không có tay chân, không có trình duyệt web, không có máy tính bỏ túi.

Function Calling thực chất là một "giao kèo" giữa Bạn (Lập trình viên) và AI:
1. Bạn khai báo: "Này AI, tôi có một cái hàm Python tên là `tinh_tong(a, b)`. Nếu cần dùng thì bảo tôi."
2. AI (khi cần): Thay vì trả lời bằng tiếng Việt, nó sẽ trả lời bằng một đoạn JSON đặc biệt: "{ "tôi_muốn_gọi_hàm": "tinh_tong", "tham_số": { "a": 5, "b": 10 } }".
3. Bạn (Code Python của bạn): Nhận đoạn JSON đó, tự chạy hàm `tinh_tong(5, 10)` ra kết quả là `15`.
4. Bạn: Ném số `15` ngược lại cho AI.
5. AI: "À hiểu rồi. Kết quả là 15."



2. Thực hành: Dạy AI xem thời tiết​

Chúng ta sẽ dùng OpenAI API để minh họa.

Bước 1: Chuẩn bị "Công cụ" (Hàm Python thật)
Đây là hàm chạy trên máy bạn, AI không nhìn thấy ruột hàm này.
Python:
# Hàm giả lập lấy thời tiết
def get_current_weather(location, unit="celsius"):
    print(f"🔧 Đang chạy hàm lấy thời tiết cho: {location}...")
    if "hanoi" in location.lower():
        return "25 độ C, trời nắng"
    elif "saigon" in location.lower():
        return "32 độ C, mưa rào"
    else:
        return "Không rõ thông tin thời tiết"

Bước 2: Khai báo "Menu công cụ" cho AI
Bạn phải mô tả cho AI biết bạn có công cụ gì bằng một file JSON schema. AI càng thông minh thì càng hiểu rõ mô tả này.
Python:
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "Lấy thông tin thời tiết hiện tại của một thành phố cụ thể.",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "Tên thành phố, ví dụ: Hanoi, Saigon",
                    },
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                },
                "required": ["location"],
            },
        },
    }
]

Bước 3: Cuộc hội thoại bắt đầu (Vòng lặp 1)
Bạn gửi câu hỏi kèm theo danh sách công cụ.
Python:
from openai import OpenAI
import json

client = OpenAI()

messages = [{"role": "user", "content": "Thời tiết Hà Nội hôm nay thế nào?"}]

response = client.chat.completions.create(
    model="gpt-4-turbo",
    messages=messages,
    tools=tools, # <--- Kèm menu công cụ vào đây
    tool_choice="auto", # Để AI tự quyết định có dùng hay không
)

response_message = response.choices[0].message
tool_calls = response_message.tool_calls

# Kiểm tra xem AI có đòi dùng tool không?
if tool_calls:
    print("🤖 AI yêu cầu dùng công cụ!")
    print(tool_calls[0].function)
    # Output: name='get_current_weather', arguments='{"location":"Hanoi"}'

Bước 4: Thực thi và gửi lại kết quả (Vòng lặp 2)
Code của bạn phải tự nhận diện yêu cầu và chạy hàm tương ứng.
Python:
# (Tiếp theo code trên)
if tool_calls:
    # 1. Thêm tin nhắn của AI vào lịch sử
    messages.append(response_message)

    # 2. Phân tích yêu cầu của AI để chạy hàm thật
    for tool_call in tool_calls:
        function_name = tool_call.function.name
        function_args = json.loads(tool_call.function.arguments)

        if function_name == "get_current_weather":
            # Chạy hàm Python thật
            function_response = get_current_weather(
                location=function_args.get("location"),
                unit=function_args.get("unit"),
            )

            # 3. Đóng gói kết quả để gửi lại cho AI
            messages.append(
                {
                    "tool_call_id": tool_call.id,
                    "role": "tool",
                    "name": function_name,
                    "content": function_response,
                }
            )
   
    # 4. Gọi AI lần cuối để nó tổng hợp câu trả lời
    final_response = client.chat.completions.create(
        model="gpt-4-turbo",
        messages=messages,
    )
    print(f"🤖 AI trả lời cuối cùng: {final_response.choices[0].message.content}")
    # Output: Thời tiết Hà Nội hôm nay là 25 độ C và trời nắng.

Kết luận​

Function Calling là cầu nối giữa "trí não" của AI và "thế giới thực" của phần mềm.
Mọi framework xịn xò như LangChain, AutoGen, hay CrewAI thực chất đều đang chạy cái vòng lặp luẩn quẩn (Loop) ở trên giúp bạn một cách tự động mà thôi. Hiểu được nó, bạn có thể tự xây dựng Agent của riêng mình mà không cần phụ thuộc vào bất kỳ thư viện nào.
 
Back
Top