TROISINH
Làm quen AgentCác thành phần cốt lõi

Tools & Actions: Cho agent 'tay chân' để hành động

Tìm hiểu cách Tools biến AI từ 'bộ não không thân' thành agent thực sự có khả năng tác động lên thế giới thông qua API, code, và tìm kiếm.

AI Agent không chỉ là "bộ não" biết suy nghĩ. Nếu chỉ có LLM, agent như một nhà toán học thiên tài bị nhốt trong phòng kín—thông minh nhưng không thể chạm vào file, lên mạng, hay chạy code để kiểm chứng. Tools chính là đôi tay, đôi mắt, và cặp chân để agent tương tác với thế giới thực, biến suy luận thành hành động.

Vấn đề

LLM (Large Language Model) được huấn luyện trên dữ liệu tĩnh—như một cuốn bách khoa toàn thư khổng lồ nhưng đãng trí. Khi bạn hỏi "thời tiết Hà Nội hôm nay", nó không thể ra ban công nhìn trời; khi yêu cầu tính toán số liệu phức tạp, nó có thể "ảo tưởng" về kết quả (hallucination). Vấn đề cốt lõi là grounding: LLM thiếu khả năng "bám đất", không thể thực thi hành động (action) để kiểm chứng thông tin hay tác động lên hệ thống bên ngoài.

Chỉ có text-in-text-out không đủ để tự động hóa workflow. Hơn nữa, khi cho agent quyền thực thi (chạy shell, xóa file, gọi API nội bộ), rủi ro bảo mật trở thành mối đe dọa thực sự. Một câu lệnh "hãy xóa toàn bộ database" từ kẻ tấn công qua prompt injection có thể gây thảm họa nếu không có lớp phân quyền cứng nhắc giữa "ý định" và "hành động".

Ý tưởng cốt lõi

Tools & Actions là kiến trúc kết nối "ý định" (intent) của LLM với "thực thi" (execution) trong môi trường sandbox an toàn. Thay vì chỉ dự đoán text tiếp theo, agent phát sinh lệnh gọi công cụ (tool call) để lấy dữ liệu ngoài hoặc thay đổi trạng thái hệ thống, rồi quan sát kết quả để tiếp tục suy luận.

Tools là "giác quan và tay chân"

Mỗi tool là một khả năng nguyên tử: read_file, search_web, run_python, send_email. Giống như cơ thể người, tools cho phép agent:

  • Thu thập: browser, database_query, vector_search để xem và nghe thế giới bên ngoài.
  • Tác động: file_edit, api_call, shell_command để sửa code, gửi invoice, hay khởi động server.

Cơ chế ReAct: Vòng lặp Suy luận → Hành động → Quan sát

Framework ReAct (Reasoning + Acting) định nghĩa vòng đời của một hành động:

  1. Suy luận: LLM phân tích tình huống và quyết định cần tool gì (ví dụ: "cần tìm kiếm thông tin mới nhất về giá Bitcoin").
  2. Hành động: Hệ thống thực thi tool trong sandbox (chạy Python, gọi API) và trả về observation—kết quả thô, không qua lọc.
  3. Quan sát: Kết quả (stdout, JSON, error log) được đưa vào context để LLM suy luận tiếp, điều chỉnh kế hoạch.

Vòng lặp tiếp diễn cho đến khi task hoàn thành—giống như con người làm việc: nghĩ → làm → quan sát kết quả → điều chỉnh. Đây là sự khác biệt giữa chatbot (trả lời một lần) và agent (thực thi nhiều bước).

Anatomy of a Tool: 3 thành phần bắt buộc

Để LLM "hiểu" cách dùng một tool, định nghĩa phải gồm schema rõ ràng:

  • Name: Tên hàm mang tính ngữ nghĩa (semantic naming), ví dụ reconcile_invoice_payments thay vì POST /api/v2/pay—giúp LLM liên tưởng đúng ngữ cảnh khi lập kế hoạch.
  • Description: Hướng dẫn sử dụng chi tiết—không chỉ mô tả chức năng mà còn chỉ rõ khi nào dùng, input cần gì, output trả về gì. Đây là "sách hướng dẫn" duy nhất LLM được đọc trước khi gọi.
  • Parameters: Schema JSON (type, required, enum) định nghĩa kiểu dữ liệu, giống như hợp đồng giao diện (API contract).

Ví dụ định nghĩa tool đơn giản trong OpenAI/Anthropic format:

{
  "type": "function",
  "function": {
    "name": "read_file",
    "description": "Đọc nội dung file văn bản tại đường dẫn cụ thể. Chỉ dùng khi cần phân tích code, log, hoặc tài liệu có cấu trúc. Không dùng cho file nhị phân.",
    "parameters": {
      "type": "object",
      "properties": {
        "filepath": {
          "type": "string",
          "description": "Đường dẫn tuyệt đối, ví dụ: /workspace/src/main.py"
        }
      },
      "required": ["filepath"]
    }
  }
}

Từ 40+ tools đến "Progressive Disclosure"

Modern agents như Claude Code hay OpenClaw tích hợp 40+ built-in tools (Python interpreter, bash, browser, search). Tuy nhiên, đổ toàn bộ mô tả tool vào context window sẽ chiếm ~8K tokens, làm loãng attention và tăng chi phí tính toán.

Giải pháp là progressive disclosure—tiết lộ từng phần:

  • Tier 1: Chỉ load tên và mô tả ngắn (200 ký tự) của tất cả tool để LLM biết "có gì trong nhà".
  • Tier 2: Khi LLM quyết định dùng tool X, mới load chi tiết schema và ví dụ của tool đó.
  • MCP (Model Context Protocol): Chuẩn mở cho phép agent "khám phá" (discover) tool từ server bên ngoài on-demand thay vì preload tất cả, giống như plug-and-play USB-C cho AI.

Lớp phân quyền: Tách "muốn làm" khỏi "được phép làm"

Kiến trúc an toàn tách biệt hai giai đoạn:

  • Intent Generation: LLM tạo ra ý định gọi tool ("muốn xóa file X").
  • Validation Harness: Lớp kiểm soát không phải LLM (thường là code cứng với 23+ lớp validation) kiểm tra quyền hạn, allowlist đường dẫn, và rủi ro ("có được phép xóa không?") trước khi thực thi.

Điều này ngăn prompt injection—kẻ tấn công có thể lừa LLM "muốn" làm điều xấu, nhưng không qua được lớp "được phép" xác định bằng code.

Tại sao nó hoạt động

Tools hoạt động như cầu nối giữa thế giới xác suất (LLM) và thế giới xác định (code):

  • Grounding: Khi agent cần tính 234*567, nó gọi calculator thay vì tự tính sai trong đầu—cung cấp ground truth không thể bàn cãi, ngăn hallucination trên dữ liệu số và fact-checking.
  • Composition: Như LEGO, các tool đơn giản (đọc file, search, ghi file) kết hợp thành workflow phức tạp (research → tổng hợp → viết báo cáo → commit Git).
  • Separation of Concerns: LLM chỉ cần biết "cái gì" (what), tool xử lý "như thế nào" (how). Điều này cho phép thay thế implementation (đổi từ Google Search sang Bing) mà không cần retrain model.

Trade-off quan trọng là latency tax: Mỗi lần gọi tool thêm 2–5 giây (API roundtrip, sandbox khởi động). Agent phải cân bằng giữa "dùng tool để chính xác" và "tự trả lời để nhanh". Ngoài ra, cascading errors là rủi ro nghiêm trọng: một lệnh shell sai ở bước 3 (xóa nhầm file) sẽ khiến toàn bộ chuỗi 20 bước sau thất bại, vì agent không có "undo" tự động mặc định.

Ý nghĩa thực tế

Trong production, Tools biến chatbot thành kỹ sư phần mềm (Devin), trợ lý IT (Claude Code), hoặc nhân viên văn phòng tự động.

Benchmark thực tế:

  • SWE-bench: Tỷ lệ giải quyết issue tăng từ 12.8% (chỉ reasoning) lên 43% khi có Code Interpreter (Claude 3.5 Sonnet, 2024).
  • WebArena: Agent cần trung bình 7.3 lần gọi tool/task; cứ mỗi bước thêm trong chuỗi, tỷ lệ lỗi tăng 23%—minh chứng cho độ mong manh của multi-step tool chains.

Ai đang dùng:

  • Devin (Cognition): Dùng bash, browser, editor để viết code end-to-end.
  • Claude Computer Use: Kết hợp screenshot (perception) với keyboard/mouse actions (actuation).
  • OpenAI Assistants: Code Interpreter + Retrieval làm cặp song sinh cho data analysis.

Hạn chế không thể bỏ qua:

  • Tool Blindness: LLM đôi khi "tự tin thái quá", tự tính nhẩm thay vì dùng calculator có sẵn, đặc biệt với các phép toán mà nó "nghĩ" mình biết.
  • Security Surface: Tools mở ra SSRF (gọi nội bộ 169.254.169.254 để lấy AWS credential), Shell Injection (; rm -rf /), và Data Exfiltration. Cần 5 lớp bảo vệ (rate limiting, injection detection, SSRF filter, sandboxing, encryption).
  • Context Bloat: 40 tool descriptions chiếm ~8K tokens trong context window 32K, để lại ít chỗ cho dữ liệu người dùng.

Đào sâu hơn

On this page