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 — An toàn hành động: guardrail, phê duyệt và idempotency

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

Agent nguy hiểm hơn chatbot vì nó hành động: gọi API, ghi dữ liệu, chi tiền. Ở quy mô production, một lỗi logic có thể lặp lại hàng nghìn lần trong vài phút. Bài này xây các lớp an toàn cho hành động: giới hạn vòng lặp, guardrail đầu vào/đầu ra, human-in-the-loop, và idempotency.

Chặn vòng lặp và hành động thất thoát

Agent tự lập kế hoạch có thể kẹt trong vòng lặp gọi tool vô tận. Luôn đặt trần: số bước tối đa, số lần gọi mỗi tool, tổng chi phí mỗi phiên.

MAX_STEPS = 8
for step in range(MAX_STEPS):
    action = agent.next_action(state)
    if action.type == "final":
        break
    guard = check_action(action)          # guardrail trước khi thực thi
    if not guard.allowed:
        log_block(action, guard.reason); break
    state = execute(action)
else:
    escalate("Đạt trần số bước, chuyển người xử lý")

Guardrail hai chiều

  • Đầu vào: lọc prompt injection, nội dung độc hại, dữ liệu ngoài phạm vi trước khi agent xử lý.
  • Đầu ra: kiểm tra trước khi trả lời/thực thi — không rò rỉ PII, không vượt quyền, hành động nằm trong danh sách cho phép (allowlist).
Quy tắc: allowlist tốt hơn blocklist. Liệt kê những hành động được phép an toàn hơn là cố đoán mọi hành động cần cấm.

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

Phân loại hành động theo mức rủi ro và chèn phê duyệt của người vào nhánh nguy hiểm:

Rủi roVí dụCơ chế
ThấpTra cứu, tóm tắtAgent tự làm
TrungGửi email cho kháchAgent làm, log đầy đủ, lấy mẫu kiểm tra
CaoHoàn tiền, xóa dữ liệuBắt buộc người phê duyệt trước khi thực thi

Idempotency: an toàn khi thử lại

Production đầy retry (mạng chập chờn, timeout). Nếu agent gửi lại một hành động ghi, bạn không muốn hoàn tiền hai lần. Gắn mỗi hành động ghi một idempotency key để hệ thống nhận ra và bỏ qua bản lặp.

key = f"refund:{order_id}:{amount}"
refund_api.create(order_id, amount, idempotency_key=key)
# gọi lại cùng key => API trả kết quả cũ, không hoàn tiền lần hai

Khung tư duy: bậc thang quyền cho agent

Cấp cho agent ít quyền nhất có thể (least privilege). Bắt đầu ở chế độ chỉ-đọc/đề xuất, chỉ mở quyền ghi cho từng hành động sau khi đã có guardrail, log và idempotency đầy đủ.

Các bước làm

  • Đặt trần bước/tool/chi phí cho mỗi phiên agent, có nhánh escalate.
  • Cài guardrail đầu vào và đầu ra, dùng allowlist cho hành động.
  • Phân loại hành động theo rủi ro và chèn phê duyệt người cho mức cao.
  • Thêm idempotency key cho mọi hành động ghi.
  • Chạy least privilege: mở quyền ghi dần, mỗi lần kèm đủ lớp an toàn.

Checklist an toàn hành động

  • [ ] Có trần số bước, số lần gọi tool và chi phí mỗi phiên.
  • [ ] Guardrail cả đầu vào lẫn đầu ra, hành động theo allowlist.
  • [ ] Hành động rủi ro cao bắt buộc người phê duyệt.
  • [ ] Mọi hành động ghi đều có idempotency key.
  • [ ] Agent chạy least privilege, quyền ghi mở dần có kiểm soát.

Sai lầm thường gặp

  • Không giới hạn vòng lặp. Agent kẹt lặp đốt tiền hoặc spam API đối tác.
  • Dựa vào blocklist. Luôn có kiểu tấn công mới lọt qua danh sách cấm.
  • Cho quyền ghi rộng từ đầu. Một lỗi nhân lên hàng nghìn lần trước khi ai kịp phản ứng.
  • Bỏ idempotency. Retry biến một hành động thành nhiều, gây trùng lặp tai hại.
Bài cuối: gộp mọi thứ thành nhịp vận hành hàng ngày — incident, on-call, cải tiến liên tục.

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