Product Management
Đăng nhập
ESC

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

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

Bài 7 — Ráp lại: xây một agent hoàn chỉnh từ đầu đến cuối

Đã đọc 0/8 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.

Đã mổ xẻ đủ 4 bộ phận. Bài này ta ráp chúng thành một agent chạy thật: một Trợ lý nghiên cứu nhận câu hỏi, tự tra web + tra DB nội bộ, và trả báo cáo — theo mô hình ReAct.

Kiến trúc tổng thể

┌─────────────────────────────────────────────┐
│  SYSTEM PROMPT (vai trò + tools + guardrail)  │
├─────────────────────────────────────────────┤
│  MEMORY: history phiên + tóm tắt khi dài      │
├─────────────────────────────────────────────┤
│  LOOP (ReAct, max_steps):                     │
│    LLM (bộ não) → Action → execute_tool →     │
│    Observation → lặp → Final Answer           │
├─────────────────────────────────────────────┤
│  TOOLS: web_search, query_db, (human_confirm) │
└─────────────────────────────────────────────┘

Các bước ráp (theo thứ tự)

  • Định nghĩa tools kèm schema và validate (Bài 3).
  • Viết system prompt khai báo vai trò, tools, guardrail (Bài 2).
  • Dựng vòng ReAct có max_steps và điều kiện dừng (Bài 5).
  • Gắn memory: đưa observation vào history, tóm tắt khi dài (Bài 4).
  • Thêm xử lý lỗi: tool lỗi → trả text lỗi cho model tự sửa.
  • Chèn human-in-the-loop trước hành động rủi ro cao.
  • Thêm logging mỗi Thought/Action/Observation.

Khung code tối giản (Python-pseudocode)

TOOLS = {
  "web_search": web_search,   # read-only
  "query_db":  query_db,      # read-only
}

SYSTEM = """Bạn là Trợ lý nghiên cứu. 
Dùng web_search cho tin ngoài, query_db cho dữ liệu nội bộ.
Luôn nêu nguồn. Nếu thiếu thông tin, HỎI. 
Không bịa số liệu."""

def agent(question, max_steps=8):
    history = [SYSTEM, f"Câu hỏi: {question}"]
    for _ in range(max_steps):
        r = llm(history, tools=TOOLS.keys())
        log(r.thought, r.action)                 # bước 7: logging
        if r.is_final:
            return r.answer                      # điều kiện dừng
        try:
            obs = TOOLS[r.action](**r.args)      # thực thi tool
        except Exception as e:
            obs = f"Lỗi: {e}. Hãy thử cách khác." # bước 5
        history += [r.thought, obs]
        if too_long(history):
            history = summarize(history)         # bước 4
    return "Chưa hoàn thành trong giới hạn bước."

Đây là bộ khung ~30 dòng nhưng hội đủ: bộ não (llm), tay chân (TOOLS), trí nhớ (history+summarize), vòng lặp (for + dừng). Bạn thay llm, web_search, query_db bằng cài đặt thật là chạy được.

Human-in-the-loop cho hành động rủi ro

def send_email(to, body):
    if not confirm_with_human(to, body):   # chặn chờ người duyệt
        return "User từ chối gửi."
    return really_send(to, body)

Với tool ghi/không đảo ngược, luôn có một cửa xác nhận. Đừng để agent tự gửi tiền hay xóa dữ liệu.

Kiểm thử agent trước khi giao việc thật

  • Test từng tool riêng (unit) — chưa cần LLM.
  • Test với mock LLM trả action cố định — kiểm tra loop, dừng, xử lý lỗi.
  • Chạy end-to-end vài kịch bản thật, đọc log Thought.
  • Thử ca xấu: tool lỗi, thiếu thông tin, mục tiêu mơ hồ — agent có tự sửa/hỏi không?

Checklist agent sẵn sàng dùng

  • [ ] Mọi tool có validate + trả lỗi text.
  • [ ] Loop có max_steps và điều kiện dừng.
  • [ ] Memory có cắt/tóm khi dài.
  • [ ] Hành động rủi ro có human-in-the-loop.
  • [ ] Có logging đầy đủ để truy vết.
  • [ ] Đã test tool đơn lẻ + end-to-end + ca xấu.

Sai lầm thường gặp

  • Ráp thẳng rồi thả chạy thật: chưa test loop/lỗi, agent làm bậy trên dữ liệu thật.
  • Bỏ human-in-the-loop "cho nhanh": đúng một lần agent gửi email sai hàng loạt là hối không kịp.
  • Không log: khi agent sai, không truy được nó nghĩ/làm gì.
  • Không test ca xấu: production toàn ca xấu (API timeout, dữ liệu thiếu).
  • Gộp quá nhiều tool/mục tiêu: agent phân tán; bắt đầu tối giản rồi mở rộng.
Agent đã chạy. Bài 8 — thứ tách biệt demo với sản phẩm thật: vận hành, giám sát, chi phí và an toàn.

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