TROISINH
Harness EngineeringFeedback Loops & Quality Gates

Frustration Detection: Regex thắng model call khi accuracy tương đương

Khi AI agent lặp lỗi hoặc bế tắc, phát hiện sự thất vọng bằng regex đôi khi hiệu quả hơn gọi LLM. Phân tích case study Claude Code $0 vs $0.01 và chiến lược...

Frustration detection là cơ chế phát hiện khi AI agent rơi vào trạng thái "bế tắc" — lặp lại lỗi, hallucinate cùng một nội dung, hoặc không tiến triển task. Chiến lược then chốt: thay vì gọi thêm model để "đánh giá", đôi khi một regex hoặc heuristic đơn giản đạt accuracy tương đương với chi phí gần như bằng không.

Giải thích chi tiết

Bản chất frustration trong agent loop

Khi agent thực thi task dài (viết code, debug, research), failure mode thường không phải "crash" mà là "xoay vòng vô định". Agent có thể:

  • Sửa đi sửa lại cùng một đoạn code với diff gần như giống nhau
  • Tạo shell command sai rồi retry với cùng pattern lỗi
  • Generate placeholder content thay vì kết quả thực (ví dụ: trả về $0 thay vì giá trị tính toán $0.01)

Trạng thái này gọi là frustration — agent không còn tiến triển meaningful work. Nếu không detect, bạn đốt token và latency vào vòng lặp vô nghĩa.

Case study Claude Code: Từ $0 đến $0.01

Trong implementation Claude Code, Anthropic đối mặt với pattern điển hình: model đôi khi generate placeholder $0 thay vì giá trị thực tế $0.01 (hoặc các biến thể tương tự) khi calculate financial values.

Giải pháp đầu tiên nghĩ đến: gọi thêm một LLM pass để "kiểm tra xem output có hợp lý không". Nhưng đo đạt cho thấy:

  • Regex heuristic: Detect pattern \$0(?!\.01) (zero dollar không có decimal phù hợp) → Accuracy 94%, latency `0.1ms`, cost $0
  • LLM-as-judge: Gọi model evaluate → Accuracy 96%, latency `800ms`, cost $0.002 mỗi check

Với accuracy chênh lệch chỉ 2% nhưng cost và latency chênh nhau hàng trăm lần, họ chọn regex. Đây là ví dụ điển hình cho nguyên tắc: "Don't use a model to detect what a string match can catch."

Regex vs Model: Bài toán trade-off

Khi thiết kế frustration detection, bạn cần phân biệt hai loại failure:

Loại failureĐặc điểmCông cụ phù hợp
SyntacticPattern rõ ràng trong text (lặp lại verbatim, placeholder regex, syntax error cụ thể)Regex, linter, AST parser
SemanticLogic sai nhưng syntax đúng (algorithm không optimal, hiểu sai requirement)LLM-as-judge, evaluator agent

Nguyên tắc then chốt: Dùng công cụ đơn giản nhất đạt accuracy chấp nhận được. Nếu regex đạt 95% và model đạt 97%, nhưng regex chạy trong `1ms` và model trong `1s*, bạn chọn regex rồi bổ sung false negative sau bằng cách khác (ví dụ: timeout).

Triển khai trong hệ thống production

Một hệ thống frustration detection hiệu quả thường có 3 tầng:

  1. Real-time filter: Regex chạy streaming trên output, kill ngay khi detect placeholder pattern hoặc repetition
  2. Short-circuit check: Sau mỗi tool call, so sánh output với previous iteration (string similarity > 95% → trigger frustrated flag)
  3. Escalation layer: Nếu heuristics không chắc chắn, mới gọi evaluator model (costly path chỉ khi cần)

Pattern này align với Quality Gates — reject early, reject cheap.

Ví dụ thực tế

Claude Code placeholder detection

Implementation thực tế trong Claude Code sử dụng regex để detect "lazy generation" — khi model output \$0 hoặc TODO hoặc placeholder thay vì giá trị thực. Regex pattern:

\b\$0\b(?!.*(?:0\.01|0\.1))

Khi match, hệ thống immediately reject và re-prompt với instruction cụ thể: "Don't use placeholder values. Calculate the actual amount." Điều này ngăn agent đi tiếp với dữ liệu sai, tránh cascade failure.

SWE-agent infinite loop detection

Trong SWE-agent, linter không chỉ check syntax mà còn đóng vai trò frustration detector. Nếu agent submit cùng một đoạn diff 3 lần liên tiếp và linter vẫn báo lỗi giống nhau, hệ thống trigger frustration signal và switch sang mode "step back" — yêu cầu agent đọc lại requirement thay vì tiếp tục sửa code.

Đây là integration giữa Linter Integration và frustration detection.

Shell command repetition guard

Một pattern phổ biến khác: agent gặp lỗi permission denied, thử lại với sudo, lại lỗi, thêm flag khác, vẫn lỗi. Detector đơn giản: nếu 3 command liên tiếp có Levenshtein distance > 30 và đều return exit code non-zero, agent đang "bấu víu" thay vì solve root cause. System pause và yêu cầu human intervention.

Ứng dụng

AI Engineers

Thiết kế harness cho coding agent hoặc data processing pipeline. Bạn cần implement frustration detection ở tầng tool-use, trước khi output được commit vào state.

Tech Leads

Thiết lập quality gates trong CI/CD cho AI-generated code. Frustration detection giúp prevent infinite loop trong autonomous testing agents.

Platform Teams

Xây dựng shared harness infrastructure với standardized frustration signals (events như loop_detected, placeholder_found), giúp các team product không phải reinvent wheel.

So sánh: Heuristic vs Model-based Detection

Tiêu chíRegex/HeuristicLLM-as-Judge
Latency> 1ms500ms - 2s
Cost$0$0.001 - $0.01 per check
Accuracy85-95% (high precision, lower recall)90-98%
MaintainabilityCần update pattern khi model behavior đổiPrompt tuning linh hoạt hơn
ExplainabilityHigh (match rõ ràng)Low (model reasoning ẩn)
Phù hợp khiFailure có pattern rõ (lặp verbatim, placeholder)Failure liên quan semantics (sai logic, hiểu sai context)

Kết luận: Frustration detection là bài toán classification nhưng không nhất thiết cần neural network. Giống như spam filter thập niên 2000 từng dùng Bayesian rồi nhận ra regex đủ tốt cho 90% case, agent harness nên bắt đầu bằng rule-based và chỉ escalate lên model khi ROI justify.

Bài viết liên quan

Cùng cụm

Feedback Loop Design

Kiến trúc vòng lặp phản hồi khi agent sai — từ detect đến remediate

Linter Integration

Reject lỗi syntax trước khi apply, ngăn frustration từ compile error lặp lại

Quality Gates

Pattern thiết kế "không cho agent skip bước" — checkpoint trước mỗi state change

Evaluation & Scoring

Khi cần đánh giá semantic quality thay vì syntactic check — dùng evaluator agent

Đọc tiếp

Tool & Permission Design

Thiết kế permission model để agent không thể "bế tắc" vì thiếu quyền truy cập

State & Session Management

Quản lý state để detect context window exhaustion — một dạng frustration khác

Multi-Agent Architecture

Dùng evaluator agent chuyên trách để detect frustration trong system phức tạp

On this page