Sử dụng công cụ: Tăng thêm sức mạnh cho AI agent

Một agent không có công cụ chỉ là một chatbot với prompt hệ thống hào nhoáng. Công cụ là thứ làm cho agent trở nên có tính chủ động - khả năng tìm kiếm, tính toán, giao tiếp và sáng tạo.

🔄 Tóm tắt nhanh: Trong bài học trước, bạn đã học mô hình ReAct: Suy nghĩ → Hành động → Quan sát. Bước "Hành động" là sử dụng công cụ. Bây giờ, bạn sẽ tìm hiểu chính xác cách thức hoạt động của nó - các giao thức, định dạng và mô hình kết nối AI với thế giới thực.

Cách chức năng gọi hàm hoạt động

Gọi hàm là cơ chế sử dụng công cụ phổ biến nhất. Đây là chu trình đầy đủ:

Bước 1: Định nghĩa công cụ

Bạn mô tả công cụ cho LLM bằng cách sử dụng JSON schema:

{
  "name": "get_weather",
  "description": "Get current weather for a city. Use when the user asks about weather conditions, temperature, or forecasts.",
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "City name, e.g. 'San Francisco'"
      },
      "units": {
        "type": "string",
        "enum": ["celsius", "fahrenheit"],
        "default": "celsius"
      }
    },
    "required": ["city"]
  }
}

Bước 2: LLM quyết định gọi

Khi người dùng hỏi "Thời tiết ở Tokyo như thế nào?", LLM sẽ trả về:

{
  "tool_call": {
    "name": "get_weather",
    "arguments": {"city": "Tokyo", "units": "celsius"}
  }
}

LLM không thực thi công cụ - nó chỉ yêu cầu cuộc gọi. Code của bạn sẽ thực thi yêu cầu đó.

Bước 3: Trả về kết quả

Code của bạn gọi API thời tiết thực tế và trả về kết quả cho LLM:

{
  "tool_result": {
    "temperature": 22,
    "conditions": "partly cloudy",
    "humidity": 65
  }
}

Bước 4: LLM xây dựng câu trả lời

LLM sử dụng kết quả từ công cụ để tạo ra câu trả lời bằng ngôn ngữ tự nhiên: "Hiện tại ở Tokyo trời 22°C và có mây rải rác, độ ẩm 65%".

Kiểm tra nhanh: LLM nhận được kết quả từ công cụ cho biết "Lỗi: Đã vượt quá giới hạn tốc độ API". Liệu LLM có nên che giấu lỗi này và tự bịa ra câu trả lời không?

Câu trả lời: Tuyệt đối không. LLM nên minh bạch thông báo vấn đề: "Tôi không thể kiểm tra thời tiết hiện tại - dịch vụ tạm thời không khả dụng. Bạn có muốn tôi thử lại sau một lát không?" Việc che giấu lỗi dẫn đến dữ liệu không chính xác, làm mất lòng tin. Tính minh bạch về các lỗi là điều cần thiết cho các agent đáng tin cậy.

Model Context Protocol (MCP)

MCP là một tiêu chuẩn mở được tạo ra bởi Anthropic, chuẩn hóa cách các AI agent kết nối với những công cụ và nguồn dữ liệu bên ngoài. Hãy coi nó như USB-C dành cho AI.

Trước khi có MCP

Mọi sự tích hợp công cụ đều được tùy chỉnh:

Agent → Code tùy chỉnh → Slack API
Agent → Code tùy chỉnh khác → GitHub API 
Agent → Thêm code tùy chỉnh → Database

Với MCP

Các công cụ cung cấp một giao diện chuẩn:

Agent → Giao thức MCP → Slack MCP Server
Agent → Giao thức MCP → GitHub MCP Server
Agent → Giao thức MCP → Database MCP Server

Những gì MCP cung cấp

Một MCP server có thể cung cấp ba loại khả năng:

LoạiNhững gì nó cung cấpVí dụ
Công cụCác hành động mà agent có thể thực hiện"Tạo một vấn đề trên GitHub", "Gửi tin nhắn trên Slack"
Tài nguyênDữ liệu mà agent có thể đọcNội dung file, bản ghi cơ sở dữ liệu, phản hồi API
PromptCác prompt trong template cho các nhiệm vụ cụ thể"Tóm tắt PR này", "Xem lại code này"

Ứng dụng MCP trong thực tế

Ví dụ, Claude Code kết nối với MCP server để truy cập file, duyệt web, truy vấn cơ sở dữ liệu, v.v... Khi bạn cấu hình MCP server, agent sẽ tự động phát hiện các công cụ có sẵn - không cần code tích hợp thủ công.

Đầu ra có cấu trúc

Đầu ra có cấu trúc đảm bảo rằng LLM tạo ra dữ liệu hợp lệ, có thể phân tích được - chứ không chỉ là văn bản tự do.

Vấn đề khi không có đầu ra có cấu trúc

Prompt: "Return the data as JSON"
LLM Output: "Sure! Here's the JSON:
```json
{\"name\": \"Tokyo\", \"population\": 13960000}

Bạn còn muốn biết thêm điều gì nữa không?

LLM đã bao bọc dữ liệu JSON trong văn bản giải thích và các vùng code. Trình phân tích cú pháp của bạn bị lỗi.

### Với đầu ra có cấu trúc

Bạn định nghĩa một schema, và LLM *bị giới hạn* chỉ xuất ra JSON hợp lệ phù hợp với schema đó:

```json
{
  "schema": {
    "type": "object",
    "properties": {
      "name": {"type": "string"},
      "population": {"type": "integer"}
    },
    "required": ["name", "population"]
  }
}

Đầu ra (đảm bảo):

{"name": "Tokyo", "population": 13960000}

Không có lời mở đầu, không có hàng rào code, không có văn bản giải thích. Chỉ là JSON hợp lệ khớp với schema của bạn.

Kiểm tra nhanh: Agent của bạn trích xuất chi tiết cuộc họp từ email và lưu trữ chúng trong API lịch. Nếu không có đầu ra có cấu trúc, 15% các trích xuất có lỗi định dạng gây ra sự cố tích hợp lịch. Với đầu ra có cấu trúc, tỷ lệ đó giảm xuống 0%. Tại sao điều này lại đặc biệt quan trọng đối với các agent so với chatbot?

Câu trả lời: Những agent truyền dữ liệu giữa các bước - lỗi định dạng ở bước 3 sẽ dẫn đến lỗi ở các bước 4, 5 và 6. Trong chatbot, người dùng sẽ đọc đầu ra và khắc phục các vấn đề về định dạng. Trong agent pipeline, không có người tham gia để phát hiện dữ liệu bị lỗi. Đầu ra có cấu trúc loại bỏ toàn bộ loại lỗi dây chuyền này.

Các mẫu thiết kế công cụ

Mẫu 1: Xác nhận trước khi hành động

Đối với các hành động phá hủy hoặc không thể đảo ngược, hãy yêu cầu xác nhận của người dùng:

Agent: "Tôi sắp xóa 47 file có đuôi *.tmp khỏi
       máy chủ sản xuất. Tôi có nên tiếp tục không?"
User: "Có, cứ tiếp tục."
Agent: [thực hiện xóa]

Mẫu 2: Chuỗi công cụ

Đầu ra của công cụ này trở thành đầu vào của công cụ tiếp theo:

search("quarterly earnings report") →
  read_file(result.url) →
    extract_data(file_content, schema="financials") →
      create_chart(data, type="bar")

Mẫu 3: Công cụ dự phòng

Nếu công cụ chính bị lỗi, hãy thử một công cụ thay thế:

Primary: database_query("SELECT * FROM users WHERE...")
Fallback: search_api("/users?filter=...")
Last resort: ask_user("I couldn't access the database. Can you provide the user data?")

Bài tập thực hành

  1. Viết định nghĩa công cụ (tên, mô tả, tham số) cho một tác vụ bạn thường xuyên thực hiện
  2. Hãy nghĩ về các trường hợp lỗi: Điều gì xảy ra nếu công cụ bị lỗi? Công cụ dự phòng là gì?
  3. Thiết kế một chuỗi ba công cụ, trong đó đầu ra của mỗi công cụ sẽ cung cấp dữ liệu cho công cụ tiếp theo.

Những điểm chính cần ghi nhớ

  • Cơ chế cốt lõi là gọi hàm: Định nghĩa công cụ → LLM quyết định sử dụng nó → code của bạn được thực thi → LLM xử lý kết quả.
  • Mô tả công cụ rất quan trọng - mô tả mơ hồ dẫn đến việc lựa chọn công cụ sai.
  • MCP chuẩn hóa việc tích hợp công cụ bằng một giao thức mở, loại bỏ code tích hợp tùy chỉnh cho mỗi công cụ.
  • Đầu ra có cấu trúc đảm bảo định dạng dữ liệu hợp lệ, ngăn ngừa các lỗi dây chuyền trong những agent pipeline.
  • Các mẫu thiết kế (xác nhận, chuỗi, dự phòng) giúp việc sử dụng công cụ trở nên mạnh mẽ trong môi trường sản xuất.
  • Câu 1:

    Agent của bạn gọi một công cụ máy tính với đầu vào là '15% của 247'. Công cụ này mong đợi đầu vào là số và trả về lỗi. Làm thế nào để ngăn chặn điều này?

    GIẢI THÍCH:

    Đầu ra có cấu trúc giải quyết sự không khớp định dạng giữa ngôn ngữ tự nhiên (những gì LLM tạo ra) và dữ liệu có cấu trúc (những gì công cụ mong đợi). Bằng cách xác định JSON schema cho đầu vào của công cụ, bạn đảm bảo LLM xuất ra dữ liệu ở định dạng chính xác - đúng kiểu dữ liệu, đúng tên trường, đúng trường bắt buộc. Điều này loại bỏ một nhóm lớn các lỗi gọi công cụ trong đó agent gửi 'mười lăm phần trăm' thay vì 0,15.

  • Câu 2:

    Model Context Protocol (MCP) là gì và tại sao nó lại quan trọng đối với các AI agent?

    GIẢI THÍCH:

    Trước MCP, việc kết nối một agent với một công cụ mới có nghĩa là phải viết code tích hợp tùy chỉnh cho mỗi công cụ. MCP chuẩn hóa điều này: Bất kỳ máy chủ MCP nào cũng hiển thị các công cụ thông qua một giao diện nhất quán và bất kỳ MCP client nào (Claude, ChatGPT hoặc agent tùy chỉnh của bạn) đều có thể tự động phát hiện và sử dụng các công cụ đó. Điều này tương tự như cách USB-C thay thế hàng chục loại cáp độc quyền - một kết nối tiêu chuẩn hoạt động ở mọi nơi.

  • Câu 3:

    Bạn định nghĩa một công cụ với mô tả này: 'Thực hiện các thao tác với dữ liệu'. Agent thường xuyên gọi nhầm công cụ. Nguyên nhân gốc rễ là gì?

    GIẢI THÍCH:

    LLM quyết định sử dụng công cụ nào dựa trên mô tả. 'Thực hiện các thao tác với dữ liệu' phù hợp với hầu hết mọi yêu cầu - vì vậy agent sẽ gọi nó cho mọi thứ. Một mô tả công cụ tốt giải thích: (1) cụ thể nó làm gì, (2) khi nào nên sử dụng nó, và (3) khi nào KHÔNG nên sử dụng nó. LLM coi mô tả công cụ như các hướng dẫn - càng rõ ràng thì việc lựa chọn công cụ của agent càng tốt.

Thứ Tư, 06/05/2026 13:51
51 👨 15
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo