Để xây được agent, bạn cần biết nó gồm những khối gì. Hãy hình dung agent như một nhân viên: có bộ não (reasoning), có tay chân (tools), có sổ tay (memory) và làm việc theo vòng lặp cho đến xong.
Bốn khối cấu thành
- Reasoning engine (LLM): đọc ngữ cảnh, quyết định bước tiếp theo.
- Tools: các hàm agent gọi được — gửi email, truy vấn DB, tạo dòng Sheet, tìm web.
- Memory: ngắn hạn (nội dung phiên hiện tại) và dài hạn (dữ liệu lưu lại giữa các phiên).
- Orchestration loop: vòng lặp "nghĩ → hành động → quan sát" cho đến khi đạt goal hoặc chạm giới hạn.
Vòng lặp ReAct — trái tim của agent
Mẫu phổ biến nhất là ReAct (Reason + Act). Mỗi vòng lặp, LLM sinh ra một suy nghĩ và một hành động; hệ thống chạy hành động rồi trả kết quả (observation) về cho LLM.
Thought: Cần biết tồn kho sản phẩm X trước khi trả lời khách.
Action: check_inventory(product="X")
Observation: {"stock": 0}
Thought: Hết hàng. Nên đề xuất sản phẩm thay thế.
Action: find_alternative(product="X")
Observation: ["Y", "Z"]
Thought: Đủ thông tin để trả lời khách.
Final: "X đang hết hàng, bạn tham khảo Y hoặc Z nhé."
So với Zapier: Zap chạy hết action theo thứ tự cố định. Agent thì chọn action tùy tình huống và có thể lặp lại tool nhiều lần.
Định nghĩa một tool (pseudocode)
Tool là điểm giao giữa "suy nghĩ" và "thế giới thực". Mỗi tool cần: tên, mô tả, tham số có schema rõ ràng.
{
"name": "create_invoice_row",
"description": "Ghi một hóa đơn vào Google Sheet kế toán",
"parameters": {
"type": "object",
"properties": {
"customer": { "type": "string" },
"amount": { "type": "number" },
"tax_code": { "type": "string" }
},
"required": ["customer", "amount"]
}
}
LLM đọc description để biết khi nào dùng tool, đọc parameters để biết điền gì. Mô tả càng rõ, agent chọn càng đúng.
Memory: đừng nhầm hai loại
- Short-term: lịch sử hội thoại/các observation trong phiên. Nằm trong context window.
- Long-term: hồ sơ khách hàng, kết quả các phiên trước, thường lưu ở DB hoặc vector store và nạp lại khi cần.
Checklist thiết kế agent trước khi code
- [ ] Goal viết thành một câu rõ ràng, đo được.
- [ ] Liệt kê 100% tool agent cần (không thừa, không thiếu).
- [ ] Mỗi tool có description + schema tham số.
- [ ] Quyết định giới hạn vòng lặp tối đa (vd 8 bước).
- [ ] Xác định điều kiện dừng (khi nào coi là xong).
- [ ] Xác định memory: cần nhớ gì trong phiên, cần lưu gì lâu dài.
- [ ] Xác định tool nào cần người duyệt trước khi chạy.
Các bước dựng agent tối giản
- Viết system prompt: vai trò + goal + quy tắc.
- Khai báo danh sách tools kèm schema.
- Viết loop: gọi LLM → nếu có tool_call thì chạy tool → đẩy observation vào lịch sử → lặp.
- Thêm điều kiện dừng: LLM trả
Finalhoặc chạm max_steps. - Log lại từng Thought/Action/Observation để debug.
Sai lầm thường gặp
- Tool description mơ hồ: viết "gửi thông báo" chung chung khiến agent gọi nhầm giữa Slack và email.
- Không đặt max_steps: agent kẹt trong vòng lặp vô tận, đốt token.
- Nhồi cả nghiệp vụ vào một tool khổng lồ: nên tách nhỏ, mỗi tool một việc.
- Bỏ log: khi agent làm sai bạn không biết nó "nghĩ" gì để sửa.
Tổng kết
Agent = LLM (não) + Tools (tay) + Memory (sổ) + Loop (nhịp làm việc). Nắm bốn khối này, bạn đã có bản đồ. Bài 3 ta thiết lập môi trường thực tế để bắt đầu build.