Tăng cường sức mạnh AI agent với OpenAI tools (Phần 3): Function calling, search và agent as tool

Viewed 1

Chia sẻ bởi Tù Bà Khuỳm

Chào mừng bạn đến với bài viết hướng dẫn chi tiết về cách tăng cường khả năng cho các AI agent của bạn bằng việc sử dụng "tools" trong hệ sinh thái OpenAI. Nếu bạn đang tìm cách làm cho AI agent của mình thông minh hơn, linh hoạt hơn và có khả năng tương tác với thế giới bên ngoài một cách hiệu quả, thì việc hiểu và áp dụng các loại tools khác nhau chính là chìa khóa. Trong bài viết này, chúng ta sẽ cùng khám phá định nghĩa về tools, các loại tools phổ biến như function tools, hosted tools (bao gồm web search và file search), và một khái niệm thú vị là agent as tool – sử dụng một agent làm công cụ cho agent khác.

Tools trong OpenAI agent là gì và tại sao chúng quan trọng?

Trong bối cảnh của OpenAI và các mô hình ngôn ngữ lớn (LLM), tools đóng vai trò như những cầu nối quan trọng, cho phép AI agent của bạn vượt ra ngoài những kiến thức đã được huấn luyện sẵn để tương tác với các nguồn dữ liệu và khả năng bên ngoài. Hãy hình dung đơn giản, tools là cách để agent của bạn:

  • Gọi API bên ngoài: Lấy thông tin thời gian thực, dữ liệu từ các dịch vụ web, hoặc thực hiện hành động trên các hệ thống khác.
  • Thực thi mã lệnh tùy chỉnh: Chạy các hàm Python (hoặc ngôn ngữ khác) do bạn tự định nghĩa để xử lý logic phức tạp, tính toán, hoặc định dạng dữ liệu.
  • Truy cập cơ sở kiến thức riêng: Tìm kiếm và truy xuất thông tin từ tài liệu, database cá nhân của bạn.

Bằng cách trang bị tools, AI agent không còn bị giới hạn bởi dữ liệu huấn luyện tĩnh mà có thể chủ động tìm kiếm, xử lý và cung cấp thông tin mới nhất, chính xác nhất, hoặc thực hiện các tác vụ chuyên biệt mà bản thân mô hình gốc không thể làm được.

Khám phá function tools: Cho phép AI agent thực thi mã lệnh của bạn

Function tools (hay còn gọi là function calling) là một trong những cách mạnh mẽ nhất để mở rộng khả năng của AI agent. Về cơ bản, chúng cho phép bạn định nghĩa các hàm (functions) mà AI agent có thể "gọi" khi cần thiết để thực hiện một tác vụ cụ thể.

Cách tạo function tools đơn giản với decorator

Một cách tiếp cận phổ biến và trực quan để tạo function tools là sử dụng decorator, đặc biệt khi làm việc với các thư viện hỗ trợ phát triển AI agent (ví dụ như LangChain hoặc các SDK tương tự được xây dựng trên OpenAI).

Giả sử chúng ta muốn tạo một tool để lấy transcript (nội dung văn bản) của một video YouTube dựa trên ID video và ngôn ngữ mong muốn.

  1. Viết hàm Python bình thường:
    Đầu tiên, bạn cần viết một hàm Python thực hiện logic này.

    # Ví dụ minh họa, bạn cần cài đặt thư viện phù hợp
    # from youtube_transcript_api import YouTubeTranscriptApi
    
    def get_youtube_transcript(video_id: str, language: str = "en") -> str:
        """
        Lấy transcript của một video YouTube dựa vào video ID và mã ngôn ngữ.
        Ví dụ: video_id='dQw4w9WgXcQ', language='vi'
        """
        try:
            # transcript_list = YouTubeTranscriptApi.get_transcript(video_id, languages=[language])
            # transcript_text = " ".join([item['text'] for item in transcript_list])
            # return transcript_text
            return f"Đây là transcript của video {video_id} bằng ngôn ngữ {language} (đây chỉ là ví dụ)" # Giả lập kết quả
        except Exception as e:
            return f"Lỗi khi lấy transcript: {str(e)}"
    
  2. Sử dụng decorator và mô tả chi tiết:
    Điều đặc biệt là bạn sẽ sử dụng một decorator (ví dụ @tool trong LangChain, hoặc khai báo theo cấu trúc JSON nếu dùng trực tiếp OpenAI Assistants API) và quan trọng hơn hết là cung cấp mô tả (description) và định nghĩa tham số (parameters) thật rõ ràng.
    Mô tả này giúp AI agent hiểu được tool này dùng để làm gì, khi nào nên dùng, và cần những thông tin đầu vào nào.

    Nếu sử dụng API của OpenAI, bạn sẽ cần định nghĩa tool dưới dạng JSON schema mô tả tên hàm, mục đích, và các tham số đầu vào. Ví dụ, trong transcript có đề cập đến việc "sử dụng cái decorator là function tools của bộ open AI" và "khai báo, định nghĩa những cái description cũng như là parameter ở đây một cách cụ thể nhất có thể."

    # Giả sử sử dụng một thư viện có decorator @function_tool
    # from some_openai_wrapper import function_tool
    
    # @function_tool # Đây là ví dụ, cách khai báo cụ thể tùy thuộc thư viện/API
    # def get_youtube_transcript(video_id: str, language: str = "en") -> str:
    #     """Lấy transcript cho video YouTube dựa theo ID và language.
    #     Sử dụng tool này khi người dùng yêu cầu tóm tắt hoặc lấy nội dung từ một video YouTube cụ thể.
    #     Args:
    #         video_id (str): ID của video YouTube.
    #         language (str): Mã ngôn ngữ mong muốn cho transcript (ví dụ: 'vi' cho tiếng Việt, 'en' cho tiếng Anh).
    #     """
    #     # ... phần logic như trên ...
    #     return f"Đây là transcript của video {video_id} bằng ngôn ngữ {language} (đây chỉ là ví dụ)"
    

    Phần mô tả (docstring) và type hints (ví dụ video_id: str) rất quan trọng để AI agent hiểu và sử dụng tool chính xác.

  3. Nhúng tool vào agent:
    Sau khi định nghĩa, bạn sẽ "đăng ký" tool này với AI agent của mình. Agent sẽ tự động quyết định khi nào cần gọi tool này dựa trên yêu cầu của người dùng và mô tả bạn đã cung cấp.

    Ví dụ, khi bạn yêu cầu agent: "Hãy tóm tắt video YouTube có ID là [XYZ] bằng tiếng Việt", agent sẽ nhận diện cần dùng get_youtube_transcript, trích xuất ID và ngôn ngữ, gọi hàm, nhận kết quả transcript, rồi mới tiến hành tóm tắt.

Tạo function tools nâng cao với class-based approach

Trong trường hợp bạn muốn tổ chức codebase của mình một cách chặt chẽ hơn, đặc biệt với các dự án lớn hoặc khi cần tuân theo một kiến trúc cụ thể, việc định nghĩa tools dưới dạng class có thể là lựa chọn tốt hơn.

Cách này cho phép bạn đóng gói logic, tên, mô tả, và schema của tham số (argument schema) vào một đối tượng duy nhất.

# from langchain_core.tools import BaseTool
# from pydantic.v1 import BaseModel, Field # Để định nghĩa schema cho input

# class YouTubeTranscriptInput(BaseModel):
#     video_id: str = Field(description="ID của video YouTube.")
#     language: str = Field(description="Mã ngôn ngữ mong muốn cho transcript (ví dụ: 'vi', 'en').", default="en")

# class YouTubeTranscriptTool(BaseTool):
#     name: str = "get_youtube_transcript"
#     description: str = "Công cụ hữu ích để lấy transcript của một video YouTube dựa vào video ID và mã ngôn ngữ. Sử dụng khi cần tóm tắt hoặc phân tích nội dung video."
#     args_schema = YouTubeTranscriptInput

#     def _run(self, video_id: str, language: str = "en") -> str:
#         """Sử dụng tool này một cách đồng bộ."""
#         # ... phần logic lấy transcript tương tự như trên ...
#         return f"Transcript của video {video_id} ({language}) lấy bằng class-based tool (ví dụ)."

#     async def _arun(self, video_id: str, language: str = "en") -> str:
#         """Sử dụng tool này một cách bất đồng bộ (nếu cần)."""
#         # ... phần logic lấy transcript tương tự như trên, nhưng có thể là bất đồng bộ ...
#         return f"Transcript của video {video_id} ({language}) lấy bằng class-based tool (ví dụ, async)."

Dù bạn chọn cách nào, việc cung cấp mô tả rõ ràng và chính xác cho từng tool là yếu tố then chốt để AI agent có thể sử dụng chúng một cách hiệu quả.

Khai thác hosted tools: Web search và file search với OpenAI agent

Bên cạnh việc tự tạo function tools, OpenAI cũng cung cấp sẵn một số "hosted tools" – những công cụ đã được tích hợp và bạn có thể sử dụng ngay. Hai hosted tools nổi bật được đề cập trong video là web search và file search.

Giới thiệu về hosted tools của OpenAI

Hosted tools là những công cụ được OpenAI xây dựng và duy trì, giúp agent của bạn dễ dàng thực hiện các tác vụ phổ biến mà không cần bạn phải tự viết mã từ đầu. Transcript có nhắc đến "computer search" (có thể là browsing tool nâng cao) nhưng yêu cầu một tier nhất định nên không đi sâu. Chúng ta sẽ tập trung vào web search và file search.

Sử dụng web search tool hiệu quả

Khả năng tìm kiếm thông tin trên web là một năng lực cực kỳ giá trị cho AI agent, giúp nó cập nhật kiến thức và trả lời các câu hỏi về những sự kiện mới nhất.

  • Cách hoạt động: OpenAI cung cấp WebSearchTool (hoặc tên gọi tương tự tùy theo SDK/API bạn dùng). Bạn có thể cấu hình một số tham số như:
    • location: Giới hạn phạm vi tìm kiếm theo địa lý (ví dụ: thành phố, quốc gia). Trong video, người hướng dẫn đã thử giới hạn tìm kiếm ở Hà Nội, Việt Nam.
    • context_size: Kiểm soát lượng thông tin trả về từ kết quả tìm kiếm (ví dụ: low, medium, high).
  • Ví dụ: "Giá vàng hôm nay tại Hà Nội là bao nhiêu?"
    Agent sẽ sử dụng web search tool để tìm kiếm thông tin này. Tuy nhiên, như trong video đã minh họa, đôi khi kết quả trả về có thể chưa hoàn toàn chính xác hoặc cập nhật (ví dụ trả về giá vàng của một ngày trong tương lai xa). Điều này nhấn mạnh tầm quan trọng của việc kiểm tra và có thể kết hợp với các tools khác (như tool lấy ngày giờ hiện tại) và prompt kỹ lưỡng để tăng độ tin cậy.
  • Lưu ý: Chất lượng tìm kiếm phụ thuộc vào nhiều yếu tố. Đôi khi agent có thể chỉ đơn thuần trả về kết quả tìm được mà không qua kiểm chứng sâu. Việc thiết kế prompt để agent phân tích và tổng hợp thông tin từ nhiều nguồn là rất cần thiết.

Tận dụng file search tool cho dữ liệu cá nhân

File search tool cho phép AI agent của bạn tìm kiếm và truy xuất thông tin từ chính những tài liệu bạn cung cấp. Điều này cực kỳ hữu ích để xây dựng các agent chuyên biệt cho doanh nghiệp hoặc các ứng dụng cá nhân dựa trên kho kiến thức riêng.

  • Cách hoạt động:
    1. Tạo Vector Store: Bạn cần tạo một "vector store" trên nền tảng OpenAI. Đây là nơi lưu trữ các file của bạn sau khi chúng được xử lý và chuyển đổi thành dạng vector embedding (một dạng biểu diễn số học mà máy tính có thể hiểu và so sánh). Bạn có thể tạo vector store qua API hoặc trực tiếp trên dashboard của OpenAI (trong phần Storage).
    2. Upload Files: Upload các file chứa thông tin bạn muốn agent truy cập (ví dụ: file .txt, .pdf, .docx, .json tùy theo định dạng được hỗ trợ). Video minh họa việc upload một file .txt kể câu chuyện về chú thỏ.
    3. Khai báo Tool: Trong AI agent của bạn, bạn khai báo FileSearchTool và chỉ định vector_store_id (ID của vector store bạn vừa tạo) mà agent sẽ sử dụng. Bạn cũng có thể chỉ định nhiều vector store nếu cần.
  • Ví dụ: Sau khi upload file truyện "Thỏ Con", bạn có thể hỏi agent: "Trong dữ liệu cá nhân của tôi, thỏ con tên là gì?" Agent sẽ sử dụng file search tool, tìm kiếm trong vector store được chỉ định và trả lời (ví dụ: "Thỏ con của mình tên là Bông Lông Nhông").
  • Lưu ý về định dạng file: Hiện tại, số lượng định dạng file được hỗ trợ có thể còn hạn chế. Video có đề cập rằng các file như CSV, XLSX có thể chưa được hỗ trợ rộng rãi, chủ yếu là các định dạng text-based. Hãy kiểm tra tài liệu mới nhất của OpenAI để biết danh sách các định dạng được hỗ trợ.

Agent as tool: Nâng tầm AI agent bằng cách kết hợp nhiều agent

Đây là một khái niệm nâng cao và rất thú vị: sử dụng một AI agent như một "tool" cho một AI agent khác. Điều này mở ra khả năng xây dựng các hệ thống AI phức tạp hơn, nơi mỗi agent có một chuyên môn riêng và một agent "điều phối" sẽ quyết định khi nào nên sử dụng agent nào.

Khái niệm agent as tool

Hãy tưởng tượng bạn có:

  • Một agent chuyên tóm tắt video YouTube (sử dụng YouTubeTranscriptTool).
  • Một agent chuyên tìm kiếm thông tin trên web (sử dụng WebSearchTool).
  • Một agent chuyên tra cứu tài liệu nội bộ (sử dụng FileSearchTool).

Thay vì nhồi nhét tất cả các tools này vào một agent duy nhất, bạn có thể tạo một agent "quản lý" hoặc "điều phối". Agent này sẽ nhận yêu cầu từ người dùng, phân tích yêu cầu đó, và sau đó "giao việc" cho agent chuyên biệt phù hợp nhất.

Ví dụ thực tế về agent as tool

Trong video, người hướng dẫn đã tạo một "agent điều phối" và nhúng ba agent con (YouTube agent, web search agent, file search agent) vào làm tools cho agent điều phối này.

  • Khi người dùng yêu cầu: "Hãy summarize cho tôi video này (kèm ID) bằng tiếng Việt."
    Agent điều phối sẽ nhận diện đây là tác vụ liên quan đến YouTube và kích hoạt "YouTube agent tool".
  • Khi người dùng hỏi: "Giá vàng ngày hôm nay ở Hà Nội là bao nhiêu?"
    Agent điều phối sẽ sử dụng "web search agent tool".
  • Khi người dùng hỏi: "Tìm trong dữ liệu cá nhân của tôi, thỏ con có tên là gì?"
    Agent điều phối sẽ chọn "file search agent tool".

Lưu ý khi triển khai agent as tool

  • Prompting là chìa khóa: Agent điều phối cần được "prompt" (hướng dẫn) rất cẩn thận để nó hiểu rõ khả năng của từng agent "tool" và biết cách lựa chọn đúng đắn.
  • Tránh sự hỗn loạn: Như người hướng dẫn đã lưu ý, việc nhồi nhét các tools (hoặc agent-tools) không liên quan mật thiết vào một agent mà không có logic điều phối rõ ràng có thể không hiệu quả. Mục tiêu là tạo ra sự chuyên môn hóa và phối hợp nhịp nhàng.
  • "Hand-off": Khái niệm "điều phối" thực sự mạnh mẽ khi có cơ chế "hand-off" (chuyển giao) rõ ràng giữa các agent, đảm bảo luồng công việc được xử lý một cách mạch lạc.
  • Tính phù hợp: Việc sắp xếp agent và tools theo kiến trúc này phụ thuộc rất nhiều vào bài toán cụ thể và mục đích sử dụng. Đôi khi, một agent đơn lẻ với nhiều tools được chọn lọc kỹ càng lại hiệu quả hơn.

Kết luận

Việc sử dụng OpenAI agent tools – từ việc tự định nghĩa các function tools, khai thác các hosted tools như web search và file search, cho đến việc áp dụng mô hình agent as tool – là một bước tiến quan trọng để xây dựng những AI agent thực sự mạnh mẽ, linh hoạt và hữu ích.

Mỗi loại tool mang lại những lợi ích riêng và cho phép agent của bạn tương tác với thế giới bên ngoài, truy cập thông tin động, và thực hiện các tác vụ phức tạp. Chìa khóa để thành công nằm ở việc hiểu rõ khả năng của từng tool, cách cấu hình chúng một cách chính xác (đặc biệt là phần mô tả và tham số), và thiết kế luồng làm việc của agent một cách thông minh.

Hy vọng bài viết này đã cung cấp cho bạn cái nhìn tổng quan và những kiến thức cần thiết để bắt đầu tăng cường sức mạnh cho AI agent của mình. Đừng ngần ngại thử nghiệm, khám phá và kết hợp các loại tools khác nhau để tạo ra những ứng dụng AI đột phá!

0 Answers