Một agent không phải "một khối AI" mà là bốn bộ phận ghép lại. Hiểu từng bộ phận giúp bạn biết chỉnh cái gì khi agent hoạt động kém.
Bốn thành phần
- LLM (bộ não / reasoning engine): nơi suy nghĩ, hiểu ngôn ngữ, quyết định hành động. Đây là pha Think.
- Tools (tay chân): các hàm agent có thể gọi để tác động lên thế giới — tra database, gọi API, gửi email, chạy tính toán. Không có tool, agent chỉ biết nói.
- Memory (trí nhớ): nơi lưu ngữ cảnh. Gồm short-term (lịch sử hội thoại/các bước trong task hiện tại) và long-term (dữ liệu tra cứu được, thường qua vector DB / RAG).
- Planner / Orchestrator (điều phối): logic điều khiển vòng lặp — quyết định khi nào Think, khi nào Act, khi nào dừng, xử lý lỗi.
┌─────────── PLANNER (vòng lặp, điều phối) ───────────┐
│ │
│ MEMORY ──► LLM (Think) ──► TOOLS (Act) ──► MEMORY │
│ (ngữ cảnh) (bộ não) (tay chân) (cập nhật)│
└─────────────────────────────────────────────────────┘
Tool là gì, cụ thể?
Một tool là một hàm có mô tả để LLM biết khi nào dùng. Ví dụ khai báo tool tra đơn hàng:
{
"name": "tra_don_hang",
"description": "Tra trạng thái đơn hàng theo mã đơn. Dùng khi khách hỏi về tình trạng giao hàng.",
"parameters": {
"ma_don": { "type": "string", "description": "Mã đơn, ví dụ VN12345" }
}
}
Chất lượng phần description quyết định agent có chọn đúng tool hay không. Mô tả mơ hồ = agent chọn lung tung.
Ví dụ ghép bốn bộ phận
Agent chăm sóc khách hàng cho một shop:
- LLM: đọc "đơn VN789 của tôi bị lỗi" → hiểu ý định là khiếu nại.
- Memory (long-term): RAG tra chính sách đổi trả của shop.
- Tools:
tra_don_hang("VN789"),tao_ticket(...),gui_email(...). - Planner: điều phối: tra đơn → tra chính sách → nếu đủ điều kiện thì tạo ticket đổi trả → gửi mail xác nhận → dừng.
Khung tư duy thiết kế: bắt đầu từ Tools, không phải từ LLM
Nhiều người bắt đầu bằng "chọn model nào". Sai thứ tự. Hãy đi ngược:
- Liệt kê HÀNH ĐỘNG agent cần làm để đạt mục tiêu (đây chính là danh sách tools).
- Xác định DỮ LIỆU agent cần đọc (đây là memory/RAG cần có).
- Vẽ LUỒNG các bước (đây là planner).
- Cuối cùng mới chọn LLM đủ giỏi để chạy luồng đó.
Checklist các bộ phận
- [ ] Mỗi tool có tên rõ + description nêu "khi nào dùng"?
- [ ] Có phân biệt memory ngắn hạn (task hiện tại) và dài hạn (kiến thức tra cứu)?
- [ ] Planner có xử lý khi tool trả về lỗi không?
- [ ] Có giới hạn số bước và cơ chế dừng an toàn?
Short-term và long-term memory: đừng nhầm lẫn
Hai loại memory phục vụ hai mục đích hoàn toàn khác nhau. Short-term memory là bối cảnh của tác vụ đang chạy: câu hỏi gốc, các bước đã làm, kết quả tool vừa nhận. Nó nằm ngay trong cửa sổ ngữ cảnh (context window) của LLM và biến mất khi phiên kết thúc. Long-term memory là kiến thức bền vững mà agent cần tra cứu: tài liệu chính sách, lịch sử khách hàng, tài liệu sản phẩm. Vì lượng này quá lớn để nhét hết vào prompt, ta lưu ở vector database và dùng RAG để lấy đúng vài đoạn liên quan mỗi khi cần. Nhầm lẫn hai loại này là nguồn của rất nhiều lỗi: nhét cả database vào prompt (vượt context, đốt token) hoặc quên lưu bối cảnh task (agent 'mất trí nhớ' giữa các bước).
Planner: nơi bạn kiểm soát agent
Planner (hay orchestrator) là phần code bạn thực sự kiểm soát được — khác với LLM vốn là hộp đen xác suất. Chính planner quyết định: số vòng lặp tối đa, khi nào chèn bước phê duyệt của con người, cách xử lý khi tool trả lỗi, và khi nào coi là hoàn thành. Một sai lầm phổ biến của người mới là dồn hết logic vào prompt và mong LLM 'tự lo'. Thực tế, những ràng buộc cứng về an toàn (hạn mức, số bước, quyền gọi tool) nên nằm trong planner — code — chứ không phó thác cho LLM, vì LLM có thể bị prompt injection hoặc đơn giản là lập luận sai.
Sai lầm thường gặp
- Nhồi mọi thứ vào một prompt khổng lồ thay vì tách thành tools rõ ràng — agent dễ nhầm, khó bảo trì.
- Bỏ qua xử lý lỗi tool: API timeout mà planner không bắt lỗi → agent bịa kết quả.
- Nhầm memory dài hạn với việc nhét cả DB vào prompt — vừa tốn token vừa vượt context. Dùng RAG lấy đúng phần cần.
- Quá nhiều tool ngay từ đầu: 15 tool khiến LLM chọn sai. Bắt đầu tối thiểu, thêm dần.
- Phó thác ràng buộc an toàn cho LLM thay vì đặt trong planner (code) — dễ bị vượt qua.