Product Management
Đăng nhập
ESC

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

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

Bài 5 — Phát hiện agent đi lạc và lặp vô hạn

Đã đọc 0/9 mục · còn khoảng 4 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.

Bài 5 — Phát hiện agent ĐI LẠC và LẶP VÔ HẠN

Hai lỗi làm agent "cháy tiền" và mất niềm tin nhanh nhất: đi lạc mục tiêu (goal drift) và lặp vô hạn (loop). Chúng thường không gây crash — agent vẫn chạy, vẫn tốn token, chỉ là chẳng đi tới đâu. Bài này dạy cách phát hiện tự động và chặn từ trong trace.

Loop: nhận diện và chặn

Dấu hiệu trong trace: cùng một tool_call với cùng tham số lặp lại; hoặc luân phiên A→B→A→B; hoặc số bước vượt ngưỡng mà chưa có final_answer.

Nguyên nhân gốc thường là: tool trả lỗi mà agent không hiểu → thử lại y hệt; hoặc agent không "nhớ" mình vừa làm gì (thiếu bước cập nhật state).

Cơ chế chặn loop (guardrails)

class LoopGuard:
    def __init__(self, max_steps=15, max_repeat=3):
        self.max_steps, self.max_repeat = max_steps, max_repeat
        self.steps = 0
        self.seen = {}   # (tool, args_hash) -> count

    def check(self, tool, args):
        self.steps += 1
        if self.steps > self.max_steps:
            raise AgentHalt("Vượt ngưỡng số bước")
        key = (tool, hash(frozenset(args.items())))
        self.seen[key] = self.seen.get(key, 0) + 1
        if self.seen[key] >= self.max_repeat:
            raise AgentHalt(f"Lặp tool {tool} với cùng tham số {self.max_repeat} lần")

Ba chốt chặn: giới hạn tổng số bước, giới hạn lặp cùng lời gọi, và ngân sách token/tiền. Khi chạm, dừng có kiểm soát và báo (không để chạy âm thầm).

Goal drift: nhận diện và đo

Dấu hiệu: hành động của agent không còn phục vụ mục tiêu ban đầu. Được giao "đặt lịch", nó đi "gửi email tóm tắt".

Cách phát hiện tự động:

  • Giữ mục tiêu gốc rõ ràng trong state (một câu goal cố định).
  • Chấm mức liên quan mỗi bước (LLM-judge nhị phân): "Hành động này có phục vụ goal không? 0/1". Nhiều 0 liên tiếp → đang lạc.
  • So tool đã dùng với tập tool hợp lệ cho nhiệm vụ đó — dùng tool ngoài phạm vi là tín hiệu lạc.
  • Kiểm ở bước cuối: final_answer có khớp goal không (thay vì lạc sang việc khác).
drift_signal = (liên_quan_trung_bình < 0.6) OR (dùng tool ngoài whitelist) OR (final không đạt goal)

Phân biệt loop "cứng" và loop "mềm"

  • Loop cứng: cùng tool + cùng tham số lặp lại. Dễ bắt bằng so khớp (như LoopGuard trên).
  • Loop mềm: agent quanh quẩn một vùng — đổi tham số chút xíu, hỏi lại người dùng cùng một câu theo cách khác, hoặc luân phiên hai tool mà không tiến triển. Bắt loop mềm cần thêm tín hiệu: số bước tăng nhưng tiến độ tới goal không đổi. Một cách thực dụng: sau mỗi k bước, hỏi LLM-judge "đã tiến gần goal hơn chưa? 0/1"; nhiều 0 liên tiếp dù vẫn tốn bước → loop mềm.

Các bước dựng "radar" phát hiện

  • Thêm LoopGuard vào vòng lặp agent (max_steps, max_repeat, budget).
  • Log mỗi bước kèm relevance (0/1) so với goal — batch chấm sau bằng LLM-judge để tiết kiệm.
  • Tính chỉ số vận hành: loop_rate, drift_rate, avg_steps, halt_rate.
  • Đặt cảnh báo (alert): nếu loop_rate hoặc avg_steps tăng vọt sau khi đổi prompt → chặn deploy.
  • Dựng "top offenders": liệt kê 10 ca tốn nhiều bước nhất để soi tay.

Khung tư duy: mọi vòng lặp agent cần "van an toàn"

Trước khi cho agent tự chạy, tự hỏi 3 câu:

  • Khi nào nó BUỘC phải dừng? (max steps/budget)
  • Làm sao biết nó đang lạc? (tín hiệu relevance/whitelist)
  • Nếu dừng giữa chừng, nó bàn giao lại thế nào? (báo người, trả trạng thái)

Sai lầm thường gặp

  • Không giới hạn số bước: Một loop = hóa đơn token tăng vọt trong vài phút.
  • Retry mù khi tool lỗi: Thử lại y hệt → loop. Phải đổi cách (đổi tham số, hỏi lại, hoặc bỏ cuộc có kiểm soát).
  • Chỉ nhìn output cuối để phán "đi lạc": Lạc xảy ra ở giữa; phải soi trajectory trong trace.
  • Đặt max_steps quá thấp: Nhiệm vụ dài chính đáng bị cắt oan. Cân theo loại nhiệm vụ.
  • Halt âm thầm: Dừng mà không log lý do → không cải thiện được.

Checklist kết bài

  • [ ] Có LoopGuard: max_steps + max_repeat + budget.
  • [ ] Mỗi bước log relevance so với goal.
  • [ ] Theo dõi loop_rate, drift_rate, avg_steps.
  • [ ] Halt luôn kèm lý do và bàn giao.
Bài sau: khóa hành vi bằng golden tests để chống hồi quy (regression).

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