TROISINH
Harness EngineeringFeedback Loops & Quality Gates

Quality Gates: Không cho agent skip bước

Quality Gates là checkpoint cứng buộc AI agent phải validate output trước khi ghi vào hệ thống. Khám phá pattern SWE-agent linter reject và Claude Code frust...

Định nghĩa

Quality Gates là các checkpoint bắt buộc trong workflow của AI agent, nơi mọi output — từ code snippet đến tool call — phải vượt qua bộ validate xác định trước khi được phép tác động vào environment. Khác với "gợi ý" hay "đánh giá", gates là rào cản vật lý: agent không thể bypass dù prompt có yêu cầu "bỏ qua lỗi" hay "tin tôi đi".

Giải thích chi tiết

Tại sao agent "skip bước" dù được dặn kỹ?

Agent LLM có xu hướng "cắt góc" khi chịu áp lực từ context window đầy hay prompt mang tính ép buộc. Trong paper về SWE-agent, nhóm Princeton chỉ ra rằng: khi agent cảm thấy "gấp" (ví dụ: user liên tục đẩy prompt "làm nhanh lên"), model sẽ tự động bỏ qua các bước kiểm thử hay linting để "submit sớm". Đây không phải lỗi logic — đây là hành vi optimization bias của LLM.

Quality Gates tồn tại để vô hiệu hóa bias này. Dù agent quyết định "skip", gate vật lý sẽ reject và buộc agent phải quay lại sửa lỗi — theo đúng triết lý của Hashimoto: "Mỗi khi agent mắc lỗi, bạn xây dựng giải pháp để nó KHÔNG BAO GIỜ mắc lỗi đó nữa".

Kiến trúc gate: Pre-action vs Post-action

Pre-action Gates kiểm tra trước khi tool thực thi. Ví dụ: agent muốn gọi git apply để patch code. Gate sẽ chạy linter hoặc syntax checker trên diff trước — nếu fail, tool call bị block ngay, agent nhận về error message và phải sinh lại patch.

Post-action Gates kiểm tra sau khi tác động xong nhưng trước khi commit state. Ví dụ: agent vừa sửa file xong, gate chạy test suite. Nếu test fail, file bị revert về trạng thái trước, agent buộc phải retry.

Sự khác biệt quan trọng: Pre-action bảo vệ environment khỏi corruption; Post-action bảo vệ output quality. Trong hệ thống production, bạn cần cả hai lớp — "defense in depth".

Cơ chế Fail-Fast và Friction Design

Quality Gates áp dụng nguyên tắc fail-fast: phát hiện lỗi càng sớm, chi phí sửa càng rẻ. Paper về Claude Code của Anthropic tiết lộ một pattern tinh tế: họ dùng regex-based gate để phát hiện "frustration patterns" (ví dụ: confusion giữa $0$0.01) trước khi gọi expensive model call cho bước tiếp theo.

Chi phí regex: dưới 1 ms. Chi phí model call sai: 2-3 giây + token wasted. Gate ở đây không chỉ validate correctness mà còn optimize cost — một dạng "circuit breaker" cho AI workflow.

Gate Composition: Hard vs Soft

Hard Gates là binary: pass/fail. Ví dụ: syntax error = absolute block. Không có "hơi lỗi" hay "lỗi nhỏ".

Soft Gates cho phép confidence threshold. Ví dụ: evaluator agent chấm điểm output từ 0-100. Nếu dưới 70, trigger retry; trên 90, auto-approve; 70-90, đưa lên human-in-the-loop.

Trong Level 2 Harness Engineering, khuyến nghị dùng Hard Gates cho các bước irreversible (ghi database, deploy production) và Soft Gates cho các bước exploratory (research, draft generation).

Ví dụ thực tế

SWE-agent: Linter Gate trước git apply

Trong implementation gốc của SWE-agent, mỗi khi agent sinh ra edit_file command để sửa code, hệ thống không apply ngay vào repo. Thay vào đó, gate chạy flake8py_compile trên proposed diff:

Nếu linter exit code != 0: 
  → Reject edit
  → Trả về stderr cho agent 
  → Agent phải regenerate với context lỗi

Kết quả: agent không thể "lén" đẩy code syntax error vào codebase dù nó "nghĩ" mình đúng. Đây là pattern Linter Integration áp dụng như một hard pre-action gate.

Claude Code: Regex Gate phát hiện Frustration

Anthropic mô tả trong nội bộ blog: khi agent xử lý task financial (ví dụ: tính toán tiền tệ), họ phát hiện model thường nhầm lẫn giữa $0$0.01 trong các bước intermediate. Thay vì gọi model khác để verify (tốn token), họ xây dựng regex gate:

  • Pattern detect: \$0(?!\.) — bắt các trường hợp viết $0 thiếu decimal
  • Gate chạy trên raw output trước khi parse thành tool arguments
  • Nếu match: reject ngay, buộc agent output lại với format "{amount:.2f}"

Accuracy tương đương model-based validation nhưng latency giảm 90%. Pattern này được gọi là Frustration Detection — dùng hard rule thắng soft model call khi reliability ngang nhau.

Anthropic Evaluator: Visual Regression với Playwright

Trong bài báo về Computer Use agent, Anthropic triển khai Evaluator Agent như một quality gate độc lập. Workflow:

  1. Main agent thực hiện task UI (ví dụ: đặt vé máy bay)
  2. Sau mỗi action series, Playwright capture screenshot
  3. Evaluator gate (một model instance khác) chạy visual regression check: "Có dialog error không?", "URL có đúng trang confirmation không?"
  4. Nếu evaluator return is_error: true, main agent bị rollback về checkpoint trước series action đó

Đây là pattern Multi-Agent Quality Gate: gate không phải static code mà là agent riêng biệt, chuyên trách validation, không share context với main agent để tránh "groupthink".

Ứng dụng

Sinh viên & Researcher

Khi xây dựng agent tự động crawl data và ghi vào CSV, thêm Schema Gate trước khi append row: kiểm tra type match (string vs numeric), null check, encoding UTF-8. Tránh trường hợp agent hallucinate ra cột không tồn tại làm hỏng file dataset.

AI Engineer & Developer

Trong CI/CD pipeline cho AI-generated code, tích hợp Test Gate vào harness: mọi PR do agent tạo ra phải pass unit test + type check trước khi được phép tạo pull request trên GitHub. Đây là cách triển khai Linter Integration như một quality gate bắt buộc.

Doanh nghiệp & Fintech

Với agent xử lý giao dịch tài chính, xây dựng Dual-Approval Gate: mọi lệnh chuyển tiền trên $10,000 phải qua gate kiểm tra regex (format account number) + gate thứ hai kiểm tra risk scoring model. Fail gate nào = hard stop, gọi human operator.

So sánh

Đặc điểmQuality GatesEvaluation & ScoringSimple Validation
Thời điểmReal-time, inline workflowOffline, batch hoặc post-hocReal-time nhưng đơn giản
Tính bắt buộcHard block, agent phải retryChỉ đo lường, không blockCó thể bypass bằng exception
Chi phíThấp (regex/linter) đến Trung bình (evaluator agent)Cao (thường cần model call riêng)Thấp nhất
Mục đíchNgăn lỗi lan truyền xuống bước sauĐánh giá quality tổng thểCheck format cơ bản
Ví dụLinter reject, Playwright screenshotLLM-as-a-judge rating 1-10JSON schema validation

Kết luận: Validation là "kiểm tra xem có đúng không"; Evaluation là "chấm điểm xem có tốt không"; Quality Gates là "không cho qua nếu không đạt". Gates là enforcement mechanism, không chỉ là measurement.

Bài viết liên quan

Cùng cụm

Feedback Loop: Khi agent sai, hệ thống phản hồi thế nào?

Hiểu cấu trúc loop để agent học từ gate rejection và tự điều chỉnh behavior

Linter Integration: Reject lỗi trước khi apply

Triển khai cụ thể syntax gate cho code agent với pylint, flake8, tsc

Evaluation & Scoring: Đánh giá output của agent

Khi cần đánh giá qualitative thay vì binary pass/fail — LLM-as-a-judge pattern

Frustration Detection: Regex thắng model call

Pattern Claude Code: dùng regex gate để phát hiện lỗi pattern mà không tốn token

Đọc tiếp

State & Session Management

Gate rejection ảnh hưởng thế nào đến state persistence và checkpoint recovery

Multi-Agent Architecture

Triển khai Evaluator Agent như một gate độc lập trong kiến trúc multi-agent

On this page