Product Management
Đăng nhập
ESC

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

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

Bài 6 — Chuỗi tool phức tạp & vòng lặp agent

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

Agent thực sự hiếm khi giải quyết xong việc trong một tool call. Nó chọn tool → nhận kết quả → suy nghĩ → chọn tool tiếp → ... cho đến khi đủ dữ liệu để trả lời. Đây là agent loop (vòng lặp agent), trái tim của mọi hệ thống agentic.

Giải phẫu agent loop

1. Gửi tin nhắn + danh sách tool cho model
2. Model trả về: hoặc câu trả lời cuối, hoặc (các) tool call
3. Nếu là tool call: thực thi → thêm kết quả vào lịch sử hội thoại
4. Quay lại bước 1 với lịch sử đã cập nhật
5. Lặp cho đến khi model trả câu trả lời cuối (hoặc chạm giới hạn vòng lặp)

Điểm cốt lõi: bạn phải duy trì lịch sử hội thoại đầy đủ — mỗi lượt gồm: tin nhắn model (chứa tool call) VÀ tin nhắn kết quả tool. Thiếu một mắt xích, model mất ngữ cảnh.

Ví dụ chuỗi phụ thuộc: hoàn tiền đơn hàng

Yêu cầu: "Hoàn tiền đơn hàng gần nhất của khách hàng có email an@example.com".

Bước 1: find_customer(email="an@example.com") -> customer_id=42
Bước 2: get_latest_order(customer_id=42) -> order_id=987, amount=500000, status="delivered"
Bước 3: check_refund_policy(order_id=987) -> eligible=true
Bước 4: create_refund(order_id=987, amount=500000) -> refund_id=R-100
Bước 5: model trả: "Đã hoàn 500.000đ cho đơn 987."

Mỗi bước dùng output bước trước. Không thể song song. Model tự điều phối chuỗi này nếu bạn cung cấp đủ tool và mô tả tốt.

Các bước xây dựng vòng lặp bền vững

  • Vòng while với biến đếm và max_iterations (ví dụ 10) để chống lặp vô tận.
  • Sau mỗi tool call, append cả tool call lẫn kết quả vào messages.
  • Kiểm tra điều kiện dừng: model không còn gọi tool → xong.
  • Xử lý lỗi tool ngay trong loop: trả lỗi về cho model để nó thử cách khác thay vì crash.
  • Giới hạn ngân sách: đếm token/thời gian, dừng khi vượt ngưỡng.
  • State machine cho flow nhạy cảm: với chuỗi có bước không thể đảo (đã hoàn tiền), dùng máy trạng thái để tránh lặp lại hành động.
messages = [system, user]
for _ in range(MAX_ITER):
    resp = model.call(messages, tools=TOOLS)
    if not resp.tool_calls:
        return resp.content          # điều kiện dừng
    messages.append(resp.message)     # lưu tool call
    for tc in resp.tool_calls:
        result = safe_execute(tc)      # bọc try/except
        messages.append(tool_result(tc.id, result))
raise MaxIterationsExceeded()

Khung tư duy: ReAct (Reason + Act)

Mỗi vòng lặp là một chu kỳ "suy luận rồi hành động": model nghĩ cần gì → hành động (gọi tool) → quan sát kết quả → nghĩ tiếp. Thiết kế tool và prompt để khuyến khích model nêu lý do trước khi hành động sẽ tăng độ tin cậy của chuỗi.

Checklist agent loop production

  • [ ] Có max_iterations chống lặp vô tận?
  • [ ] Lịch sử lưu ĐỦ cả tool call lẫn tool result?
  • [ ] Lỗi tool được trả về model, không crash loop?
  • [ ] Có giới hạn token/thời gian/chi phí?
  • [ ] Hành động không thể hoàn tác (thanh toán) có chốt chặn idempotency?
  • [ ] Có log từng bước để truy vết khi sự cố?

Sai lầm thường gặp

  • Quên append tool result vào lịch sử. Model gọi tool nhưng không thấy kết quả, sẽ gọi lại mãi hoặc bịa kết quả.
  • Không giới hạn vòng lặp. Một model lú có thể gọi tool vô hạn, đốt sạch chi phí.
  • Crash khi tool lỗi. Nên trả lỗi về model để nó thích ứng, thay vì ném exception ra ngoài.
  • Thiếu idempotency cho hành động ghi. Nếu loop chạy lại bước create_refund, khách bị hoàn tiền hai lần. Dùng khóa idempotency.
  • Song song hóa chuỗi phụ thuộc. Cố gọi create_refund trước khi có order_id là công thức gây lỗi.
Bạn đã có agent chạy được. Bài 7 bàn về vận hành: quan sát, chi phí, độ trễ và bảo mật khi lên production.

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