Agentic Pattern – Gọi Tool & Quản lý Context

6 min read

Phần 2 trong 3 của chuỗi bài “Bí thuật Claude Code”


Trong phần trước, chúng ta đã khám phá cách các Agent suy nghĩ theo vòng lặp. Nhưng một bộ não vĩ đại sẽ vô dụng nếu không có tay chân để hành động và một trí nhớ để lưu giữ thông tin.

Đó chính là chủ đề của bài viết này: Công cụ (Tools) và Bối cảnh (Context).

Có một nghịch lý thú vị trong thế giới AI Agent: Những kỹ sư mới vào nghề thường cố gắng nhồi nhét càng nhiều công cụ và càng nhiều dữ liệu vào Agent càng tốt. Nhưng những Agent xuất sắc nhất—như Claude Code hay Devin—lại hoạt động theo nguyên tắc ngược lại: Làm ít hơn nhưng chất hơn.

Nghịch lý Công cụ: Tại sao “Dao đa năng” lại thua “Dao mổ”

Hãy tưởng tượng bạn đưa cho một người thợ mộc 100 chiếc cờ-lê gần giống nhau. Mỗi khi cần vặn một con ốc, anh ta phải mất 5 phút để tìm ra chiếc cờ-lê đúng kích cỡ. Đó là tình trạng “Lựa chọn quá tải” (Choice Overload).

Sai lầm phổ biến: Quá cụ thể hóa

Nhiều người xây dựng Agent với danh sách công cụ dài dằng dặc:

  • read_python_file
  • read_js_file
  • run_pytest
  • run_jest
  • git_commit
  • git_checkout …

Cách tiếp cận này có hai vấn đề chết người:

  1. Gây nhiễu loạn cho LLM: Mô hình phải tốn token để đọc mô tả của 50 công cụ mỗi lần suy nghĩ.
  2. Khó bảo trì: Nếu bạn chuyển từ pytest sang unittest, bạn phải viết lại công cụ cho Agent.

Giải pháp: “Năm Động từ” quyền năng

Thay vì hàng trăm công cụ nhỏ, chúng ta chỉ cần một vài hành động nguyên tử (atomic actions) mạnh mẽ. Tôi gọi đây là bộ công cụ “Năm Động từ”:

Động từChức năng (Tool Name)Ý nghĩa
Readview_fileKhả năng “nhìn”. Đọc nội dung file để hiểu code.
Writecreate_fileKhả năng “tạo tác”. Tạo ra những file mới từ con số 0.
Editedit_fileKhả năng “tinh chỉnh”. Sửa đổi một phần nội dung (thường dùng search & replace).
Findgrep_search / lsKhả năng “định hướng”. Tìm file hoặc tìm chuỗi trong dự án.
Executerun_commandKhả năng “tác động”. Chạy bất kỳ lệnh shell nào.

Chỉ với 5 động từ này, bạn có thể làm mọi thứ:

  • Bạn muốn git commit? Đó chỉ là Execute("git commit -m '...'").
  • Bạn muốn cài thư viện? Đó là Execute("npm install ...").
  • Bạn muốn refactor code? Đó là chuỗi Read -> Think -> Edit -> Execute(test).

Bài học: Sự linh hoạt đến từ việc kết hợp các công cụ cơ bản, không phải từ việc tạo ra công cụ cho mọi tình huống cụ thể.

Quản lý Context: Cuộc chiến chống lại sự quên lãng

Nếu Công cụ là tay chân, thì Context (Ngữ cảnh) là trí nhớ ngắn hạn của Agent. Mỗi LLM đều có giới hạn về “Cửa sổ ngữ cảnh” (Context Window)—ví dụ 128k hoặc 200k tokens. Nghe có vẻ nhiều, nhưng với một codebase lớn và lịch sử chat dài, nó sẽ đầy rất nhanh.

Hơn nữa, các nghiên cứu cho thấy hiện tượng “Lost in the Middle”: LLM thường nhớ tốt phần đầu và phần cuối của prompt, nhưng hay quên phần giữa.

Phép ẩn dụ cái Bàn làm việc

Hãy hình dung trí nhớ của Agent như một chiếc bàn làm việc vật lý. Diện tích mặt bàn là hữu hạn. Bạn không thể bày tất cả hồ sơ của công ty lên bàn cùng một lúc.

Để làm việc hiệu quả, bạn cần phân loại thông tin:

  1. Trên mặt bàn (Hot Context):
    • Nhiệm vụ hiện tại (“Sửa lỗi null pointer”).
    • File đang mở và đang edit.
    • Kết quả của lệnh chạy gần nhất.
    • Agent cần nhìn thấy những thứ này rõ nhất.
  2. Trong ngăn kéo (Warm Context):
    • Danh sách file trong thư mục (file tree).
    • Tóm tắt của các file đã đọc trước đó.
    • Agent cần truy cập nhanh khi cần, nhưng không cần bày ra 24/7.
  3. Trong thùng rác (Cold/Deleted Context):
    • Nội dung chi tiết của các file đã đọc 10 bước trước và không còn liên quan.
    • Output của các lệnh ls hoặc grep cũ.
    • Cần vứt bỏ những thứ này để giải phóng chỗ trống.

Chiến lược ưu tiên thông tin (Pruning Strategy)

Khi bộ nhớ (context window) sắp đầy, Agent thông minh không “cắt đại” phần đầu cuộc hội thoại. Nó thực hiện nén ngữ cảnh (Context Compression) dựa trên độ ưu tiên:

  1. Bất khả xâm phạm: System Prompt (Nhân cách của Agent) và Mục tiêu hiện tại của người dùng.
  2. Ưu tiên cao: Tóm tắt các bước đã thực hiện (để Agent biết mình đã làm gì và không lặp lại).
  3. Ưu tiên trung bình: Nội dung file đang mở.
  4. Ưu tiên thấp: Lịch sử hội thoại chi tiết cũ.

Kỹ thuật thực chiến: Thay vì lưu toàn bộ nội dung file đã đọc vào lịch sử chat (khiến context bị phình to), hãy chỉ lưu một “liên kết” hoặc tóm tắt:

Agent đã đọc file utils.js (200 dòng). Tóm tắt: Chứa các hàm helper xử lý date và string.

Khi cần chi tiết, Agent có thể gọi Read lại file đó. Đây là cách con người làm việc: chúng ta không nhớ từng dòng code, chúng ta nhớ file đó làm gì và mở nó ra khi cần.

Cách thiết kế Tool Schema hiệu quả

Một khía cạnh kỹ thuật quan trọng là cách bạn mô tả công cụ cho Agent (thông thường qua JSON Schema).

Tệ:

{
  "name": "run_command",
  "description": "Runs a command",
  "parameters": { ... }
}

Mô tả quá ngắn khiến Agent không biết giới hạn và cách dùng.

Tốt:

{
  "name": "run_command",
  "description": "Executes a shell command in the current working directory. Use this to run tests, manage git, or manipulate files. WARNING: Commands that require user interaction (like 'nano' or 'npm login') will linger. Do not use them.",
  "parameters": {
      "command": { "type": "string", "description": "The command to run, e.g., 'ls -la' or 'npm test'" }
  }
}

Mô tả chi tiết, đưa ra ví dụ (e.g.), và cảnh báo (WARNING) giúp Agent sử dụng công cụ chính xác hơn nhiều.

Điều này có ý nghĩa gì với bạn?

Khi xây dựng hoặc sử dụng AI Agent, hãy nhớ:

  1. Tinh gọn bộ công cụ: Đừng hỏi “Agent có thể dùng tool gì?”, hãy hỏi “Đâu là những hành động cơ bản nhất?”. Hãy bắt đầu với 5 động từ cốt lõi.
  2. Quản lý bộ nhớ chủ động: Đừng ném toàn bộ lịch sử vào context. Hãy xây dựng cơ chế tóm tắt và quên (forgetting mechanism).
  3. Context là vàng: Hãy sử dụng token một cách tiết kiệm. Mỗi dòng log vô nghĩa, mỗi file thừa thãi được đưa vào context đều làm giảm IQ của Agent đối với nhiệm vụ chính.

Sức mạnh của một Agent không nằm ở số lượng công cụ nó có, mà nằm ở khả năng kết hợp chúng một cách sáng tạo trong một không gian làm việc gọn gàng.


← Vòng lặp Agentic · Tiếp theo: Điều phối & Ủy quyền →

Trong phần cuối: Khi một Agent là không đủ, làm thế nào để chúng ta tạo ra một “biệt đội” Agent phối hợp nhịp nhàng như một dàn nhạc giao hưởng?

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *