Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 2 — Giải phẫu một AI Agent: Reasoning, Tools, Memory, Loop

Đã đọc 0/9 mục · còn khoảng 3 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Để 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.
Ví dụ: agent CSKH nhớ trong phiên rằng khách tên Lan (short-term); và tra được lịch sử đơn hàng của Lan từ DB (long-term).

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ả Final hoặ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.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi