CYBERSOFT
Đăng nhập

Kiến trúc AI test agent: vòng lặp Planner–Executor–Critic, ReAct và replay xác định

Chuyên nâng caoDịch vụ SaaSAI AgentNâng caoThực tếKinh nghiệm
🗓 1 tháng trước21 phút đọc·👁 1,612 lượt xem👤 422 người đọc

Mổ xẻ kiến trúc một AI test agent thật: vòng phản tư planner/executor/critic, mẫu ReAct, memory/state, không gian hành động bị chặn, điều kiện dừng, budget chi phí/thời gian, replay xác định và quan sát quyết định của agent.

1. AI test agent là gì và khi nào nên dùng

Một AI test agent là chương trình dùng mô hình ngôn ngữ lớn để tự lập kế hoạch, gọi công cụ và tự đánh giá nhằm hoàn thành một mục tiêu kiểm thử. Khác với script tuyến tính, agent quyết định bước tiếp theo dựa trên quan sát vừa thu được. Nó phù hợp khi việc kiểm thử cần khám phá: dò luồng chưa có kịch bản, sinh test case mới, hoặc điều tra một bug mơ hồ. Nó KHÔNG thay thế test hồi quy đã ổn định, vì test cố định luôn nhanh hơn và rẻ hơn agent.

Điểm mấu chốt của bài này là oracle-first: trước khi cho agent chạy, phải định nghĩa rõ tiêu chí đúng-sai (bất biến nghiệp vụ, decision table, trạng thái kỳ vọng). Nếu không có oracle, agent chỉ 'thấy giao diện chạy được' và dễ báo cáo thành công giả. Oracle là thứ neo agent về sự thật; nó cũng là điều kiện dừng và là thước đo cho eval sau này. Cả kiến trúc dưới đây đều xoay quanh việc kiểm chứng oracle chứ không phải hoàn thành thao tác.

  • Dùng agent: khám phá luồng mới, sinh nháp test, điều tra flaky.
  • Không dùng agent: smoke test, hồi quy đã ổn định, kiểm tra nhanh CI.
  • Luôn có người chốt oracle nghiệp vụ và duyệt output.
Quy tắc vàng: agent để KHÁM PHÁ và SINH, còn test cố định để BẢO VỆ. Đừng đặt agent vào đường CI chặn merge nếu chưa có eval harness (bài B).

2. Vòng lặp Planner – Executor – Critic

Kiến trúc phổ biến nhất chia agent thành ba vai. Planner nhận mục tiêu và bối cảnh, sinh ra một kế hoạch các bước. Executor thực thi từng bước bằng cách gọi công cụ (điều hướng, click, đọc trạng thái, gọi API). Critic quan sát kết quả, đối chiếu với oracle và quyết định: đã đạt, cần thử lại, hay cần lập kế hoạch mới. Ba vai này lặp cho đến khi thoả điều kiện dừng. Tách vai giúp mỗi phần có prompt và ràng buộc riêng, dễ kiểm thử và dễ thay thế.

Critic là mảnh dễ bị bỏ quên nhưng quan trọng nhất về chất lượng. Nếu critic chỉ hỏi 'trang có hiển thị không', agent sẽ trôi theo hallucination. Critic tốt phải kiểm chứng bất biến cụ thể: số dư sau chuyển tiền, tồn kho không âm, idempotency khi retry. Critic cũng phát hiện khi agent đi lạc (lặp vô ích, rời scope) để kích hoạt replan hoặc dừng. Hãy coi critic như một reviewer nghiêm khắc, không phải một cheerleader.

Vòng lặp Planner · Executor · Critic (reflection) PLANNER goal → kế hoạch bước EXECUTOR gọi tool (ReAct) CRITIC phản tư · chấm điểm reflection: chưa đạt oracle → lập kế hoạch lại (bounded) Termination đạt oracle · hết budget · max step · forbidden action → dừng an toàn Memory / State scratchpad · trace · seed cố định → deterministic replay
Vòng lặp Planner→Executor→Critic; critic phản tư đối chiếu oracle rồi replan trong giới hạn.
💡 Cho critic một schema chấm điểm cứng (JSON: {oracle_met:bool, evidence, next:'stop|retry|replan'}) thay vì văn tự do — dễ log, dễ eval, khó hallucination.

3. Mẫu ReAct: suy nghĩ – hành động – quan sát

ReAct (Reasoning + Acting) là cách executor xen kẽ suy luận và hành động. Mỗi vòng gồm ba phần: thought (agent nói lý do), action (một lời gọi tool có cấu trúc), observation (kết quả trả về từ tool). Việc buộc agent viết thought trước khi hành động giúp quyết định minh bạch và dễ debug. Quan trọng hơn, action phải là dữ liệu có cấu trúc (tên tool + tham số) chứ không phải văn xuôi, để lớp guardrail có thể kiểm tra và chặn trước khi thực thi.

Mỗi observation nên được tóm gọn và chuẩn hoá trước khi đưa lại vào ngữ cảnh, tránh nhồi cả trang HTML làm phình token và gây nhiễu. Với kiểm thử web, observation lý tưởng là cây accessibility (role/name) chứ không phải pixel, vì nó ổn định và ít nhiễu. Chuỗi thought-action-observation này chính là trace — nguồn dữ liệu để replay xác định và để quan sát quyết định ở các chương sau.

typescript
// ReAct step: agent luôn trả action CÓ CẤU TRÚC, không phải văn xuôi.
type Action =
  | { tool: "navigate"; url: string }
  | { tool: "click"; role: string; name: string }
  | { tool: "fill"; field: string; value: string }
  | { tool: "readState"; key: string }
  | { tool: "assert"; invariant: string; expected: unknown }
  | { tool: "finish"; verdict: "pass" | "fail"; evidence: string };

interface ReActStep {
  thought: string;      // vì sao chọn action này (bắt buộc)
  action: Action;       // guardrail sẽ validate trước khi chạy
}

// Vòng lặp executor
async function runStep(ctx: Ctx): Promise<Observation> {
  const step = await model.next<ReActStep>(ctx.history, ctx.tools);
  ctx.log({ type: "thought", text: step.thought });
  guardrail.assertAllowed(step.action);          // chặn action cấm/ngoài scope
  const obs = await tools.invoke(step.action);   // thực thi tool
  return normalizeObservation(obs);              // tóm gọn trước khi đưa lại ctx
}
⚠️ Không bao giờ để model tự sinh URL/SQL/shell rồi chạy trực tiếp. Action phải khớp một union type cố định; mọi thứ ngoài đó bị từ chối tại guardrail.

4. Memory và state: scratchpad, trace và seed

Agent cần bộ nhớ để không lặp lại và để nhớ mục tiêu. Có ba tầng: short-term (scratchpad của lượt hiện tại: kế hoạch, các bước đã làm), episodic (trace đầy đủ của một lần chạy, dùng để replay và điều tra), và long-term (kiến thức tái dùng: selector đã kiểm chứng, bug đã biết). Tách rõ ba tầng giúp kiểm soát token và giúp việc chạy lại có thể tái tạo chính xác. State của thế giới (dữ liệu app) phải được seed cố định để mỗi lần chạy bắt đầu từ cùng một điểm.

Điểm cần khắc cốt: mọi nguồn ngẫu nhiên phải kiểm soát được. Đó là seed sinh dữ liệu, thời gian (freeze clock), thứ tự dữ liệu, và cả nhiệt độ (temperature) của model khi cần tái tạo. Nếu bỏ sót một nguồn, cùng một input sẽ cho ra hành vi khác nhau và bạn mất khả năng replay. State và seed là nền tảng cho hai chương tiếp: điều kiện dừng và replay xác định.

🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 25% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!