Skip to content

Tại sao Hệ thống HappyAgent lại được kiến trúc như hiện tại?

Tài liệu này giải mã toàn bộ logic kiến trúc của HappyAgent và lý do bắt buộc phải thiết kế hệ thống theo mô hình có vẻ "phức tạp" (Healer 2.0 + Stealth). Mục tiêu của Tool này không chỉ là một kịch bản thao tác web automation bình thường, mà là xây dựng một kiến trúc chống lại 2 hàng rào phòng thủ gắt gao nhất của nền tảng: (1) Tránh hệ thống phát hiện Bot (Anti-Bot Detection) & (2) Thay đổi giao diện liên tục (Dynamic UI / A/B Testing).


1. Tại sao dùng Stealth (CloakBrowser) thay cho Playwright thuần?

  • Vấn đề: TikTok áp dụng vân tay trình duyệt (Canvas/WebGL, Audio fingerprinting, WebRTC) và tự động nhận diện Automation (ví dụ phát hiện cờ navigator.webdriver=true). Thay proxy IP là không đủ. Nếu dùng Playwright thuần, chỉ sau vài ngày tài khoản shop sẽ bị block hoặc bắt xác minh CAPTCHA liên tục.
  • Giải pháp (Hardware Identity): Hệ thống quyết định thay thế core Playwright bằng CloakBrowser (bản Chromium được patch sâu từ tầng C++ để giả lập Device Fingerprint). Mỗi Profile được cấp phát một fingerprintSeed riêng tư vĩnh viễn. Chế độ này biến kịch bản automation thành một "con người thật" thao tác trên một "máy tính duy nhất", tuân thủ chặt các hành vi như di chuột bằng đường cong Bezier.

2. Tại sao gọi là "Kiến trúc 4 lớp" (Runner, Tracer, Healer, Orchestrator)? Bê hết vào 1 script có được không?

  • Vấn đề (Cost vs Tốc độ): Nếu gom AI Agent và logic chạy cùng nhịp (như các Web Agent truyền thống, load web -> chụp màn hình -> gửi Prompt -> nhận action), tốc độ chạy cực kì chậm (mất 10-20s mỗi click) và sẽ "đốt" toàn bộ chi phí API token dù cho giao diện không hề thay đổi.
  • Giải pháp (Separation of Concerns): Tách biệt hệ thống Operation (Vận hành) và Maintenance (Bảo trì tự động).
    • Runner (Node.js): Vẫn dùng danh sách Selector hard-coded (selectors.js). Nhờ vậy, thao tác tốn chưa tới 1s/bước, không tốn Token AI, cực kỳ kinh tế ở điều kiện bình thường (chiếm 99% thời gian).
    • Tracer & Orchestrator: Thời điểm duy nhất kịch bản bị "gãy" là khi giao diện bị đổi code CSS/Class. Khi đó nó lập tức Crashed và Tracer sẽ dump HTML / Screenshot của cảnh đó, cắt phần còn lại cho AI. Sự kết hợp này mang lại tốc độ tối đa cho vận hành và sự linh hoạt tối đa khi bảo trì.

3. Cụm Healer 2.0: Vai trò của Continuity Memory và Local "Test-Gate" là gì?

Thành phần này là trái tim của dự án, giữ toàn bộ kịch bản khỏi việc bị vỡ trận và tiêu hao chi phí vô tận.

  • Vấn đề "Loop of Death" (Vòng lặp vỡ trận): Khi AI nhận cấu trúc file HTML để tự tạo Selector mới, khả năng AI "ảo tưởng" (viết sai) là có thật.
    • Nếu mô hình là AI sửa mã -> Chạy lại kịch bản -> Lại văng lỗi ở đó -> Lại gọi AI -> Lại tốn tiền... Vòng lặp vô hạn này sẽ tiêu hủy hàng triệu token tài nguyên.
  • Giải pháp - Kiến trúc Healer 2.0:
    • Local Test-Gate (Vòng kiểm duyệt ẩn): AI xuất bản xong file selectors.js mới, Healer chưa duyệt ngay. Healer tự bật một headless browser tĩnh dạng Local (không dùng mạng Internet kết nối lại TikTok để tránh spam), và nhúng file HTML Snapshot vào để... chạy thử Selector AI vừa tạo.
      • Nếu kết quả count === 1: Selector cực kì chuẩn xác $\Rightarrow$ Cấp quyền (Pass).
      • Nếu kết quả count === 0 hoặc count > 1 $\Rightarrow$ Lệch tham chiếu, Reject.
    • Continuity Memory (Bộ nhớ liên tục): Các lần Test-Gate Reject đều sẽ được ghi chép vào healer_memory.json và chèn lại vào Prompt của Prompt thử lại tiếp theo. Thông điệp được gửi cho AI Agent là: "Tôi đã từ chối cách của bạn vì bạn dùng getByRole, hãy chuyển thuật toán khác". Điều này tạo ra một vòng lặp siêu kín (Zero-Defect), không bao giờ lặp lại sai lầm.

Tổng Kết

Sự phức tạp được thiết kế có tinh toán này giúp dự án giải quyết trọn vẹn 2 nỗi đau triền miên của Web Automation:

  1. Chống quét Bot: Thực thi mọi cấp độ Stealth.
  2. Zero Maintenance (0 giờ bảo trì UI): Thay vì Developer phải mò mẫm F12 Developer Tools ban đêm sửa script khi Tiktok thay đổi Code, tool sẽ Tự Crashed $\rightarrow$ Tự gọi AI $\rightarrow$ Test chéo AI $\rightarrow$ Ghi đè tự động $\rightarrow$ Chạy tiếp.

Mọi thứ đều xảy ra trong vài phút và Developer hoàn toàn giải phóng đôi tay.