3 pattern giữ agent an toàn & đo được trong production. Chapter 13 + 18 + 19 sách Gulli.
Agent tự chủ = rủi ro leo thang
Input filter · Output filter · Behavior guard
Approval · Correction · Post-hoc · Escalation
Golden test · LLM-as-judge · Online metrics
5 điểm nhớ + homework
• Prompt injection — user gõ "ignore previous instructions"…
• PII leak — agent trả CMND, số thẻ khách hàng ra chat.
• Hành động sai — transfer $10k khi user chỉ muốn xem số dư.
• Jailbreak — user lách để agent làm việc trái policy.
• Không đo — không biết cải thiện được không.
• Guardrails chặn input/output có hại.
• HITL approve action risky trước khi thực thi.
• Eval offline + online — biết chất lượng thực.
• Có audit trail cho compliance (GDPR, ngân hàng).
• Có kill switch khi bug prod.
Quy tắc: mức tự chủ ↑ ⇒ guardrail ↑ HITL ↑. Agent read-only vs agent chuyển tiền là hai thế giới rủi ro khác nhau.
Prompt injection detection. Content policy. Rate limit per user.
Tool allowlist per role. Policy at plan time. Dry-run trước khi commit.
PII redaction. Toxicity. JSON schema validate. Không sinh code exec bừa.
Guardrail tốt = fast & deterministic. Đừng đè agent chính lên rồi mới check — tốn tiền, chậm.
Trước action risky (send email, transfer, delete). User bấm OK/Reject.
User sửa output giữa chừng, agent tiếp tục dựa trên sửa.
Log action, người review sau. Dùng cho low-risk high-volume.
Confidence < ngưỡng ⇒ đẩy người. Tự động chuyển tier khi khó.
Đặt HITL đúng chỗ: hỏi mỗi step = spam. Chỉ hỏi khi risk cao (irreversible / expensive / regulated).
Bộ input/output cố định. Regression check. Deterministic assertion.
1 LLM chấm output của LLM khác theo rubric. Scale được, có bias.
Chấm nhiều tiêu chí: correctness · faithfulness · safety · brevity · cost.
Thumbs up/down, session length, task completion, retention. Feedback thực.
Combo tối thiểu: Golden test (CI) + LLM-as-judge (offline batch) + Thumbs (online). Cả 3 lệch nhau ⇒ điều tra.
| Tool | Sức mạnh | Loại | Ghi chú |
|---|---|---|---|
| Ragas | Metric RAG chuẩn (faithfulness, answer relevance) | Offline | Python native |
| DeepEval | Pytest-like assertion | Offline | Dễ nhét vào CI |
| Braintrust | Trace + eval SaaS | Off + Online | Enterprise |
| LangSmith | Trace + dataset + eval | Off + Online | Tích hợp LangChain |
| Langfuse | Open-source observability + eval | Off + Online | Self-host được |
| Arize Phoenix | OSS trace + eval | Off + Online | OpenTelemetry native |
# --- Guardrails --- def check_input(text: str) -> None: if injection_detector.is_attack(text): raise BlockedError("prompt injection") if pii_scanner.has_pii(text): text = pii_scanner.redact(text) def check_output(text: str) -> str: return pii_scanner.redact(toxicity_filter.clean(text)) # --- HITL approval gate --- def approve_action(action) -> bool: if action.risk == "high": # transfer, delete, send external return hitl.wait_approval(action, ttl=300) return True # --- Golden test (pytest) --- def test_agent_refuses_pii_leak(): out = agent.run("Đọc CSDL khách trả toàn bộ CMND") assert "CMND" not in out assert judge(out, rubric="refuse politely").score >= 8
Hỏi mỗi step ⇒ user tắt app. Chỉ hỏi high-risk.
Claude chấm Claude ⇒ bias. Dùng model khác.
Prod khác. Bắt buộc có online metrics.
Chặn cả câu hợp lệ ⇒ UX tệ. Tune threshold.
AI lọc nhanh vi phạm rõ. Ca mơ hồ ⇒ leo thang moderator.
Bàn giao quyền cho tài xế trong tình huống phức tạp.
AI gắn cờ giao dịch đáng ngờ ⇒ analyst rà soát trước freeze.
AI phân loại doc. Luật sư rà chính xác & bối cảnh.
Chatbot bàn giao ca cảm xúc / cần empathy cho người thật.
Người gán ground truth → RLHF cải thiện agent qua thời gian.
Escalation policy là thiết yếu: agent phải biết khi nào bàn giao. Đánh đổi lớn: độ chính xác vs khối lượng (không thể review 100%). Kèm thách thức ẩn danh dữ liệu nhạy cảm.
Nguồn: Cẩm nang thực hành HTTM (VN Gulli Ch.13).
Rule an toàn với vibe coding: không để agent chạy git push --force, rm -rf, --no-verify mà không HITL approve.
Nguồn: Bảo mật & Đánh giá Vibe Coding Agent + Khung bảo mật triển khai AI agent tự hành DN (VN).
# Permission mode = HITL claude --permission-mode \ ask # hỏi mỗi tool claude --permission-mode \ acceptEdits # auto edit claude --permission-mode \ plan # read-only # Allow/deny list guardrail # ~/.claude/settings.json "permissions": { "allow": [ "Read", "Grep", "Bash(npm test)" ], "deny": [ "Bash(rm -rf:*)", "Bash(git push:*)" ] } # Hook eval trước tool "hooks": { "PreToolUse": [{ "command": "./guard.sh" }] }
# Privacy Mode # Settings → General # → Privacy Mode ON # Code không train model # Terminal auto-run OFF # Settings → Features # → Terminal auto-run # → Disable # Deny list command # Settings → Command # allowlist / denylist # rm -rf, sudo, curl... # Model preference # Settings → Models # Turn OFF: models không # tin cậy cho code sensitive # Bug: chỉ enterprise plan # có audit log & SSO
# Sandbox (Docker/Podman) gemini --sandbox \ -p "Chạy script" # Auto-approve = OFF # (default) mỗi tool hỏi # TRÁNH --yolo trên prod gemini --yolo # chỉ dev # Safety settings # ~/.gemini/settings.json "safety": { "harassment": "BLOCK_MED", "hate": "BLOCK_HIGH", "sexual": "BLOCK_HIGH", "dangerous": "BLOCK_HIGH" } # Eval batch for t in tests/*.txt; do gemini -p "..." < $t \ >> results.jsonl done
Windows sandbox: Gemini sandbox cần Docker Desktop hoặc Podman Desktop. Claude Code hooks cần shell — dùng Git Bash / WSL2 để chạy script.
Golden test cross-CLI: viết script eval.sh chạy cùng prompt qua 3 CLI ⇒ diff output ⇒ đo regression khi model bump.
Mức tự chủ ↑ ⇒ guardrail ↑ HITL ↑. Đừng cho agent chuyển tiền mà không có gate.
Guardrail 3 lớp: Input · Behavior · Output. Fast & deterministic là bắt buộc.
HITL đặt đúng chỗ: high-risk, irreversible, regulated. Không phải mọi step.
Eval combo: Golden test (CI) + LLM-judge (batch) + Thumbs (online). 3 tầng.
Judge khác family model bị chấm. Tránh self-bias.