AI Engineer Roadmap: Tạo Đặc Vụ AI Thông Minh Hơn Với OpenAI Functions và Tools

Giới thiệu: Tại sao cần Đặc Vụ AI có Khả năng Tương tác?

Chào mừng bạn quay trở lại với series “AI Engineer Roadmap”! Trên hành trình khám phá thế giới của Kỹ sư AI, chúng ta đã cùng tìm hiểu về Đặc Vụ AI (AI Agents) là gì, những khái niệm cơ bản và cách chúng hoạt động. Chúng ta cũng đã dành thời gian tìm hiểu sâu về cách tương tác với các mô hình ngôn ngữ lớn (LLMs) của OpenAI thông qua Chat Completions APInghệ thuật viết prompt hiệu quả.

Tuy nhiên, các mô hình LLM cơ bản, dù mạnh mẽ đến đâu, vẫn có một hạn chế lớn: chúng bị giới hạn bởi dữ liệu mà chúng được huấn luyện và không có khả năng tương tác trực tiếp với thế giới bên ngoài hoặc thực hiện các hành động cụ thể. Chúng không thể tự tra cứu thông tin thời gian thực trên internet, gửi email, cập nhật cơ sở dữ liệu, hoặc sử dụng các công cụ chuyên biệt.

Để xây dựng các Đặc vụ AI thực sự hữu ích và có khả năng giải quyết các tác vụ phức tạp, chúng ta cần trang bị cho chúng khả năng này. Đây chính là lúc khái niệm về “Function Calling” (Gọi hàm) hoặc “Tool Use” (Sử dụng công cụ) của OpenAI trở nên cực kỳ quan trọng. Nó biến mô hình LLM từ một “bộ não” chỉ biết trả lời văn bản thành một “bộ não” có thể đưa ra quyết định cần sử dụng công cụ nào và khi nào, mở ra cánh cửa để tạo ra các Đặc vụ AI có khả năng hành động và tương tác với môi trường xung quanh.

Bài viết này sẽ đi sâu vào cách bạn, với tư cách là một Kỹ sư AI, có thể sử dụng OpenAI Functions và Tools để tạo ra các Đặc vụ AI thông minh hơn, có khả năng thực hiện nhiều loại tác vụ khác nhau.

OpenAI Functions và Tools: “Bộ Não” Kết Nối Thế Giới Thực

Về cơ bản, tính năng Functions (nay được gọi là Tools trong các phiên bản API mới nhất, nhưng cơ chế cốt lõi vẫn giống nhau) cho phép bạn mô tả các hàm hoặc công cụ bên ngoài mà mô hình AI có thể gọi. Bạn cung cấp cho mô hình một danh sách các mô tả công cụ có sẵn, bao gồm tên, mô tả chức năng và các tham số cần thiết ở định dạng JSON Schema.

Khi người dùng đưa ra một yêu cầu, mô hình sẽ phân tích yêu cầu đó, so sánh với các mô tả công cụ được cung cấp, và nếu nó xác định rằng một hoặc nhiều công cụ có thể giúp hoàn thành yêu cầu, nó sẽ không trả lời trực tiếp bằng văn bản. Thay vào đó, nó sẽ trả về một cấu trúc dữ liệu đặc biệt, chỉ ra rằng nó muốn gọi công cụ nào và cung cấp các tham số cần thiết dựa trên yêu cầu của người dùng.

**Quan trọng:** Bản thân mô hình AI không tự thực thi các hàm này. Nó chỉ là “bộ não” ra quyết định cần gọi gì và chuẩn bị các tham số. Việc thực thi hàm thực tế và xử lý kết quả hoàn toàn nằm trong tay mã của nhà phát triển.

Điều này tạo ra một vòng lặp tương tác giữa mô hình AI và mã ứng dụng của bạn, cho phép đặc vụ AI thực hiện các bước tư duy (quyết định gọi hàm), hành động (gọi hàm thông qua mã của bạn) và xử lý kết quả (nhận kết quả từ hàm và sử dụng nó để đưa ra câu trả lời cuối cùng cho người dùng). Đây chính là một trong những nền tảng quan trọng để xây dựng các Đặc vụ AI phức tạp hơn, giống như chúng ta đã thảo luận trong bài viết về ReAct Prompting.

Cơ Chế Hoạt Động: Vòng Lặp Function Calling

Để hiểu rõ hơn, hãy cùng xem xét luồng hoạt động của một cuộc tương tác sử dụng Function Calling/Tool Use:

  1. Người dùng gửi yêu cầu: Người dùng đưa ra một câu hỏi hoặc yêu cầu (ví dụ: “Thời tiết ở Hà Nội hôm nay thế nào?”).
  2. Ứng dụng gửi yêu cầu đến LLM: Mã ứng dụng của bạn gửi tin nhắn của người dùng đến API Chat Completions của OpenAI, cùng với danh sách các mô tả công cụ có sẵn (ví dụ: một công cụ để lấy thông tin thời tiết).
  3. LLM phân tích và ra quyết định: Mô hình LLM đọc tin nhắn của người dùng và các mô tả công cụ. Nó nhận ra rằng yêu cầu về thời tiết có thể được giải quyết bằng công cụ thời tiết được cung cấp.
  4. LLM trả về yêu cầu gọi công cụ: Thay vì trả lời trực tiếp, mô hình trả về một phản hồi đặc biệt chứa thông tin về “cuộc gọi công cụ” (`tool_calls`). Phản hồi này bao gồm tên công cụ nó muốn gọi (get_current_weather) và các đối số cần thiết (ví dụ: {"location": "Hà Nội", "unit": "celsius"}) dưới dạng chuỗi JSON.
  5. Ứng dụng nhận và xử lý yêu cầu gọi công cụ: Mã ứng dụng của bạn nhận phản hồi từ API, phát hiện ra yêu cầu gọi công cụ. Nó phân tích tên công cụ và các đối số.
  6. Ứng dụng thực thi công cụ: Mã ứng dụng của bạn chạy hàm hoặc gọi API bên ngoài tương ứng với công cụ được yêu cầu (ví dụ: gọi API thời tiết thực tế với tham số “Hà Nội”).
  7. Ứng dụng gửi kết quả trở lại LLM: Sau khi nhận được kết quả từ công cụ (ví dụ: “Thời tiết ở Hà Nội là 25 độ C”), mã ứng dụng sẽ tạo một tin nhắn mới với vai trò (`role`) là tool hoặc tool_response (tùy phiên bản API và cách triển khai) và nội dung là kết quả từ công cụ. Tin nhắn này được thêm vào lịch sử hội thoại.
  8. Ứng dụng gửi lại lịch sử hội thoại đến LLM: Mã ứng dụng thực hiện một cuộc gọi API Chat Completions thứ hai, lần này gửi toàn bộ lịch sử hội thoại bao gồm cả tin nhắn gốc của người dùng, phản hồi yêu cầu gọi công cụ của LLM, và kết quả từ công cụ.
  9. LLM tổng hợp thông tin và trả lời người dùng: Mô hình LLM đọc lại toàn bộ lịch sử hội thoại. Nó thấy rằng công cụ đã được gọi và kết quả đã được cung cấp. Dựa trên kết quả này, mô hình tạo ra phản hồi cuối cùng bằng ngôn ngữ tự nhiên cho người dùng (ví dụ: “Thời tiết hiện tại ở Hà Nội là 25 độ C.”).

Đây là một vòng lặp mạnh mẽ cho phép Đặc vụ AI thực hiện nhiều bước “suy nghĩ” và “hành động” để hoàn thành một tác vụ.

Định nghĩa Tools: Cú Pháp và Cấu trúc

Để mô hình có thể sử dụng công cụ của bạn, bạn cần mô tả công cụ đó cho nó. Mô tả này được cung cấp dưới dạng một danh sách các đối tượng Tool khi bạn gọi API Chat Completions. Mỗi đối tượng Tool thường bao gồm:

  • type: Chỉ định loại công cụ. Hiện tại, loại phổ biến nhất là function.
  • function: Một đối tượng mô tả chi tiết hàm.
    • name: Tên của hàm (ví dụ: get_current_weather). Tên này phải khớp với tên hàm trong mã của bạn.
    • description: Mô tả mục đích của hàm. Điều này giúp mô hình hiểu khi nào nên sử dụng hàm này. Mô tả càng rõ ràng càng tốt.
    • parameters: Mô tả các tham số mà hàm chấp nhận, sử dụng định dạng JSON Schema. Đây là nơi bạn chỉ định các trường thông tin mà mô hình cần trích xuất từ yêu cầu của người dùng để truyền vào hàm của bạn.

Dưới đây là ví dụ về cách định nghĩa một công cụ lấy thông tin thời tiết:


[
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "Lấy thông tin thời tiết hiện tại cho một địa điểm.",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "Tên thành phố hoặc khu vực, ví dụ: Hà Nội, Đà Nẵng"
                    },
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "Đơn vị nhiệt độ. Mặc định là celsius."
                    }
                },
                "required": ["location"]
            }
        }
    }
]

Trong ví dụ này:

  • Chúng ta định nghĩa một công cụ kiểu function.
  • Hàm có tên là get_current_weather.
  • Mô tả rõ ràng mục đích của hàm.
  • Phần parameters sử dụng JSON Schema để định nghĩa:
    • Một thuộc tính location kiểu chuỗi, bắt buộc.
    • Một thuộc tính unit kiểu chuỗi, là tùy chọn và chỉ chấp nhận hai giá trị “celsius” hoặc “fahrenheit”.

Mô hình sẽ sử dụng thông tin này để xác định khi nào cần gọi get_current_weather và cách trích xuất giá trị cho locationunit từ yêu cầu của người dùng.

Xây Dựng Thực Tế: Các Bước Triển Khai

Hãy cùng xem xét một ví dụ Python đơn giản để minh họa cách triển khai vòng lặp Function Calling. Chúng ta sẽ tạo một Đặc vụ AI có thể lấy thông tin thời tiết giả lập.

Đầu tiên, bạn cần cài đặt thư viện OpenAI Python:


pip install openai

Tiếp theo, đây là mã Python:


import os
import json
from openai import OpenAI

# Khởi tạo OpenAI client
# Đảm bảo bạn đã đặt biến môi trường OPENAI_API_KEY
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

# 1. Định nghĩa hàm (công cụ) thực tế trong mã của bạn
def get_current_weather(location, unit="celsius"):
    """Lấy thông tin thời tiết hiện tại cho một địa điểm."""
    # Đây là nơi bạn tích hợp với API thời tiết thực tế
    # Trong ví dụ này, chúng ta chỉ trả về dữ liệu giả lập
    weather_info = {
        "location": location,
        "temperature": "25",
        "unit": unit,
        "forecast": "sunny",
    }
    print(f"DEBUG: Gọi hàm get_current_weather với location={location}, unit={unit}")
    return json.dumps(weather_info)

# Map tên hàm với hàm Python
available_functions = {
    "get_current_weather": get_current_weather,
}

# 2. Định nghĩa mô tả công cụ cho LLM
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "Lấy thông tin thời tiết hiện tại cho một địa điểm.",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "Tên thành phố hoặc khu vực, ví dụ: Hà Nội, Đà Nẵng",
                    },
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "Đơn vị nhiệt độ. Mặc định là celsius.",
                    },
                },
                "required": ["location"],
            },
        }
    }
]

# 3. Bắt đầu hội thoại và vòng lặp Function Calling
def run_conversation():
    messages = [{"role": "user", "content": "Thời tiết ở Hà Nội hôm nay thế nào?"}]

    # Lần gọi API đầu tiên
    response = client.chat.completions.create(
        model="gpt-3.5-turbo-0125", # Hoặc mô hình hỗ trợ tools khác
        messages=messages,
        tools=tools,
        tool_choice="auto", # Cho phép mô hình tự quyết định có gọi tool hay không
    )
    response_message = response.choices[0].message
    print(f"DEBUG: Phản hồi đầu tiên từ LLM: {response_message}")

    # Kiểm tra xem LLM có yêu cầu gọi tool không
    if response_message.tool_calls:
        print("DEBUG: LLM yêu cầu gọi tool...")
        # Thêm phản hồi của LLM (yêu cầu gọi tool) vào lịch sử
        messages.append(response_message)

        # Duyệt qua từng tool call mà LLM yêu cầu (có thể có nhiều tool call trong 1 response)
        for tool_call in response_message.tool_calls:
            function_name = tool_call.function.name
            function_to_call = available_functions.get(function_name)

            if function_to_call:
                function_args = json.loads(tool_call.function.arguments)
                # Thực thi hàm thực tế
                function_response = function_to_call(
                    location=function_args.get("location"),
                    unit=function_args.get("unit", "celsius"), # Sử dụng giá trị mặc định nếu không có trong args
                )

                # Thêm kết quả từ tool vào lịch sử hội thoại
                messages.append(
                    {
                        "tool_call_id": tool_call.id, # Quan trọng để LLM biết kết quả này thuộc về yêu cầu gọi tool nào
                        "role": "tool", # Vai trò mới là 'tool'
                        "name": function_name, # Tên tool đã được gọi
                        "content": function_response, # Kết quả trả về từ tool
                    }
                )
                print(f"DEBUG: Kết quả từ tool '{function_name}': {function_response}")
            else:
                print(f"DEBUG: Lỗi: Không tìm thấy hàm '{function_name}'")
                # Xử lý trường hợp hàm không tồn tại

        # Lần gọi API thứ hai với lịch sử hội thoại đầy đủ (bao gồm kết quả tool)
        print("DEBUG: Gửi lại lịch sử hội thoại kèm kết quả tool cho LLM...")
        second_response = client.chat.completions.create(
            model="gpt-3.5-turbo-0125",
            messages=messages,
        )
        print(f"DEBUG: Phản hồi thứ hai từ LLM: {second_response.choices[0].message.content}")
        return second_response.choices[0].message.content
    else:
        # LLM không yêu cầu gọi tool, trả về phản hồi văn bản trực tiếp
        print("DEBUG: LLM không yêu cầu gọi tool, trả về phản hồi trực tiếp.")
        return response_message.content

# Chạy thử
if __name__ == "__main__":
    print("Đặc vụ AI đang xử lý yêu cầu...")
    final_response = run_conversation()
    print("\nPhản hồi cuối cùng cho người dùng:")
    print(final_response)

Hãy phân tích các bước chính trong mã trên:

  1. Chúng ta định nghĩa hàm Python get_current_weather mô phỏng việc lấy dữ liệu thời tiết. Trong ứng dụng thực tế, hàm này sẽ gọi một API thời tiết bên ngoài.
  2. Chúng ta tạo một dictionary available_functions để dễ dàng tra cứu hàm Python dựa trên tên hàm mà LLM yêu cầu.
  3. Chúng ta định nghĩa danh sách tools theo cấu trúc JSON Schema như đã mô tả ở trên.
  4. Hàm run_conversation chứa logic chính:
    • Bắt đầu với tin nhắn của người dùng và gửi nó cùng với danh sách tools đến API.
    • Kiểm tra phản hồi từ API. Nếu có response_message.tool_calls, điều đó có nghĩa là mô hình muốn gọi một hoặc nhiều công cụ.
    • Nếu có tool calls, chúng ta thêm tin nhắn yêu cầu gọi tool của LLM vào lịch sử hội thoại.
    • Duyệt qua từng tool_call. Trích xuất tên hàm và đối số.
    • Tìm hàm Python tương ứng trong available_functions và thực thi nó với các đối số nhận được.
    • Tạo một tin nhắn mới với role="tool", bao gồm tool_call_id tương ứng và kết quả từ hàm thực thi. Thêm tin nhắn này vào lịch sử.
    • Gửi lại toàn bộ lịch sử hội thoại đã được cập nhật đến API trong lần gọi thứ hai.
    • Lần gọi thứ hai này, LLM sẽ thấy kết quả từ tool và sử dụng nó để tạo ra phản hồi cuối cùng cho người dùng.
    • Nếu phản hồi đầu tiên không có tool_calls, LLM đã trả lời trực tiếp bằng văn bản, và chúng ta chỉ cần trả về nội dung đó.

Đây là cấu trúc cơ bản của việc triển khai Function Calling. Các đặc vụ phức tạp hơn có thể liên quan đến nhiều công cụ khác nhau và các vòng lặp gọi công cụ kéo dài hơn.

Lợi Ích và Trường Hợp Sử Dụng

Việc trang bị khả năng gọi hàm/công cụ cho Đặc vụ AI mang lại nhiều lợi ích và mở ra vô số trường hợp sử dụng:

  • Truy cập Dữ liệu Thời gian Thực: Đặc vụ có thể lấy thông tin mới nhất mà không bị giới hạn bởi dữ liệu huấn luyện (ví dụ: giá cổ phiếu hiện tại, tỷ giá hối đoái, tin tức nóng hổi, thông tin chuyến bay).
  • Thực hiện Hành động: Đặc vụ có thể thực hiện các tác vụ trong thế giới thực hoặc trong các hệ thống kỹ thuật số (ví dụ: gửi email, đặt lịch hẹn, tạo tài khoản người dùng, cập nhật trạng thái đơn hàng, tương tác với thiết bị IoT).
  • Sử Dụng Công cụ Chuyên biệt: Đặc vụ có thể sử dụng các công cụ vượt ra ngoài khả năng ngôn ngữ của LLM (ví dụ: máy tính để thực hiện phép tính phức tạp, công cụ dịch thuật chuyên sâu, công cụ xử lý hình ảnh, truy vấn cơ sở dữ liệu).
  • Cá nhân hóa: Đặc vụ có thể truy cập thông tin cá nhân (với sự cho phép) để đưa ra phản hồi phù hợp hơn (ví dụ: truy vấn lịch sử mua hàng của người dùng).
  • Tự động hóa Quy trình: Xây dựng các luồng làm việc phức tạp yêu cầu nhiều bước suy luận và hành động.

Các trường hợp sử dụng cụ thể có thể bao gồm:

  • Trợ lý ảo thông minh: Có khả năng kiểm tra lịch, gửi email, đặt báo thức.
  • Chatbot hỗ trợ khách hàng: Có thể truy vấn thông tin đơn hàng, kiểm tra tồn kho, xử lý yêu cầu trả hàng.
  • Công cụ phân tích dữ liệu tự động: Có thể truy vấn cơ sở dữ liệu, thực hiện phân tích thống kê và trình bày kết quả.
  • Ứng dụng tài chính: Theo dõi giá cổ phiếu, thực hiện giao dịch (cần cẩn trọng bảo mật).

Thách Thức và Lưu Ý Quan Trọng

Mặc dù mạnh mẽ, việc triển khai Đặc vụ AI với Functions/Tools cũng đi kèm với một số thách thức và điều cần lưu ý:

  • Độ phức tạp của mã: Vòng lặp Function Calling đòi hỏi mã phía nhà phát triển phải xử lý các bước trung gian (nhận yêu cầu gọi tool, thực thi tool, gửi kết quả trở lại). Điều này phức tạp hơn nhiều so với chỉ đơn giản là gửi prompt và nhận kết quả văn bản.
  • Quản lý trạng thái hội thoại: Bạn cần duy trì lịch sử hội thoại bao gồm cả các tin nhắn yêu cầu gọi tool và tin nhắn kết quả từ tool. Việc quản lý context window và chi phí API (vì bạn gửi nhiều tin nhắn hơn) trở nên quan trọng hơn.
  • Xử lý lỗi: Cần có cơ chế xử lý khi hàm thực tế gặp lỗi (ví dụ: API thời tiết không phản hồi). Bạn cần thông báo lỗi này cho LLM để nó có thể xử lý phù hợp (ví dụ: thông báo cho người dùng rằng không thể lấy thông tin).
  • Độ trễ: Mỗi vòng lặp gọi tool yêu cầu ít nhất hai cuộc gọi API đến LLM cộng với thời gian thực thi hàm của bạn. Điều này có thể làm tăng đáng kể độ trễ của phản hồi.
  • Định nghĩa Tool hiệu quả: Việc viết mô tả tool (description) và định nghĩa tham số (parameters) rõ ràng và chính xác là rất quan trọng. Mô tả tốt giúp LLM hiểu đúng khi nào nên sử dụng tool và cách trích xuất thông tin. Đây là một dạng prompt engineering áp dụng cho công cụ.
  • An toàn và Bảo mật: Khi cho phép Đặc vụ AI thực hiện hành động thông qua các tool, bạn phải cực kỳ cẩn trọng về vấn đề bảo mật. Chỉ cung cấp quyền truy cập đến các hàm an toàn và cần thiết. Hãy nhớ lại các bài viết về Prompt InjectionXây Dựng Ứng Dụng AI An Toàn và Đạo Đức – những nguyên tắc này càng trở nên quan trọng hơn khi Đặc vụ AI có khả năng hành động.

Functions/Tools so với OpenAI Assistants API

OpenAI cũng cung cấp một sản phẩm cấp cao hơn gọi là OpenAI Assistants API. Assistants API được xây dựng dựa trên cơ chế Function Calling và RAG, nhưng nó trừu tượng hóa nhiều chi tiết của vòng lặp tương tác và quản lý trạng thái. Với Assistants API, bạn chỉ cần định nghĩa Assistant của mình, cung cấp các tool, và gửi tin nhắn vào một Thread. API sẽ tự động quản lý việc gọi tool, thêm kết quả vào lịch sử và thực hiện các cuộc gọi tiếp theo đến mô hình cho đến khi tác vụ hoàn thành.

Vậy khi nào nên sử dụng Function Calling trực tiếp và khi nào nên dùng Assistants API?

Tính năng Function Calling (Manual) OpenAI Assistants API
Mức độ Trừu tượng Thấp (Bạn tự quản lý vòng lặp, state, tool execution) Cao (API quản lý vòng lặp, state, tích hợp RAG và code interpreter)
Linh hoạt Cực kỳ linh hoạt, kiểm soát hoàn toàn luồng xử lý Ít linh hoạt hơn, bị ràng buộc bởi cấu trúc của Assistant
Độ phức tạp triển khai ban đầu Cao hơn (Phải viết code quản lý vòng lặp) Thấp hơn (API lo phần lớn logic)
Quản lý trạng thái Bạn tự quản lý lịch sử tin nhắn API tự động quản lý Thread (lịch sử hội thoại)
Tích hợp Tool Tự định nghĩa JSON Schema và viết code thực thi Định nghĩa JSON Schema, API gọi đến endpoint/hàm của bạn
Tích hợp RAG & Code Interpreter Phải tự triển khai hoặc dùng thư viện ngoài (LangChain, LlamaIndex) Tích hợp sẵn dưới dạng built-in tools
Kiểm soát chi phí/độ trễ Kiểm soát trực tiếp từng cuộc gọi API API quản lý nhiều cuộc gọi nội bộ, khó dự đoán chính xác số lượng
Trường hợp sử dụng Cần kiểm soát chi tiết luồng logic, tùy chỉnh cao, tích hợp phức tạp với hệ thống backend hiện có Xây dựng chatbot hoặc trợ lý ảo nhanh chóng, cần các tính năng RAG/Code Interpreter tích hợp sẵn, không cần kiểm soát luồng quá chi tiết

Đối với các Kỹ sư AI mới bắt đầu, việc học và hiểu cách thức hoạt động của Function Calling “thủ công” thông qua Chat Completions API là cực kỳ hữu ích. Nó giúp bạn nắm vững cơ chế cơ bản của cách LLM tương tác với công cụ, điều này sẽ là nền tảng vững chắc ngay cả khi bạn chuyển sang sử dụng các framework hoặc API cấp cao hơn như Assistants API, LangChain, hay LlamaIndex.

Tổng kết và Bước Tiếp Theo

OpenAI Functions và Tools là một trong những tính năng mạnh mẽ nhất giúp biến các mô hình LLM thành các Đặc vụ AI có khả năng thực hiện hành động và tương tác với thế giới. Bằng cách cung cấp cho mô hình các mô tả công cụ và xử lý vòng lặp gọi hàm trong mã ứng dụng của bạn, bạn có thể tạo ra các ứng dụng AI thông minh hơn, hữu ích hơn và có khả năng giải quyết nhiều loại vấn đề phức tạp.

Mặc dù việc triển khai ban đầu có thể đòi hỏi nhiều công sức hơn so với chỉ sử dụng Chat Completions API đơn thuần, khả năng mà nó mang lại là vô cùng lớn. Việc nắm vững Function Calling là một kỹ năng thiết yếu trong lộ trình trở thành một Kỹ sư AI.

Hãy bắt tay vào thực hành! Thử mở rộng ví dụ thời tiết đơn giản, thêm các công cụ khác như tính toán, tra cứu thông tin giả lập, hoặc thậm chí là tích hợp với các API thực tế mà bạn quen thuộc.

Trong các bài viết tiếp theo của series “AI Engineer Roadmap”, chúng ta sẽ tiếp tục khám phá các chủ đề nâng cao hơn và các công cụ khác giúp bạn xây dựng những ứng dụng AI ngày càng tinh vi. Hẹn gặp lại bạn trên hành trình này!

Chỉ mục