Quay lại blog

Tự động hóa AI Agent: bốn loại lỗi ở tầng môi trường trình duyệt

Khi hệ thống tự động hóa bằng Agent bắt đầu dừng hoặc lỗi lúc mở rộng quy mô, nguyên nhân thường không nằm ở mô hình hay script mà ở tầng môi trường trình duyệt. Bài viết phân tích bốn kiểu lỗi phổ biến, dấu hiệu quan sát được và cách xử lý ở góc độ kỹ thuật.

Dựng một Agent bằng LangChain, AutoGen hoặc CrewAI rồi cho nó thao tác website qua Playwright hay Puppeteer không quá khó. Khó ở chỗ làm sao để nó chạy liên tục và ổn định.

Khi mới đưa vào sử dụng, vấn đề thường chưa lộ rõ. Đến lúc số lượng tác vụ tăng lên, lỗi bắt đầu xuất hiện dày hơn: tác vụ bị website chặn, trạng thái đăng nhập của tài khoản bất ngờ hết hiệu lực, hoặc nhiều Agents chạy đồng thời và ảnh hưởng lẫn nhau. Phản xạ đầu tiên của nhiều người là quay lại kiểm tra code, nhưng cuối cùng lại phát hiện code không có vấn đề.

Nguyên nhân thường nằm ở tầng môi trường trình duyệt. Trong các dự án chạy với khối lượng lớn, kiểu lỗi thực tế chỉ xoay quanh một vài mẫu lặp lại. Nhận diện được chúng rồi thì việc xử lý không quá phức tạp.

AI Agent 自动化:浏览器环境层的四类失败的关键步骤与判断维度示意图

Chạy tác vụ khi môi trường chưa sẵn sàng

Nếu một môi trường trình duyệt vừa tạo đã được dùng ngay cho tác vụ đầu tiên, kết quả thường là không đăng nhập được, thành phần trang tải không đầy đủ hoặc xuất hiện bước xác minh ngay từ thao tác đầu. Lý do khá đơn giản: môi trường này chưa có lịch sử truy cập, chưa có cookie và cũng chưa có dấu vết duyệt web. Với nền tảng, đây giống như một thiết bị hoàn toàn xa lạ nên mức độ tin cậy tự nhiên thấp.

Dấu hiệu quan sát được là lỗi tập trung ở vài tác vụ đầu tiên sau khi tạo môi trường. Nếu chuyển chính tác vụ đó sang một môi trường đã được sử dụng trong một khoảng thời gian, nó thường chạy hoàn tất bình thường.

Cách làm phù hợp là biến trạng thái “môi trường đã sẵn sàng” thành một trạng thái rõ ràng, thay vì mặc định cho rằng môi trường dùng được ngay. Sau khi tạo, hãy để môi trường trải qua một giai đoạn duyệt web cường độ thấp và chỉ giao tác vụ thật khi trạng thái đã ổn định. Bộ lập lịch cần kiểm tra bước này trước khi phân phối tác vụ thay vì nhận môi trường là dùng ngay.

Nhiều tác vụ tranh chấp cùng một môi trường

Khi mức độ chạy song song tăng lên, biểu hiện dễ thấy nhất là số process tăng dần, bộ nhớ bị chiếm đầy và hệ thống chậm lại. Rắc rối hơn là kiểu lỗi kín: hai tác vụ lần lượt dùng chung cookie và local storage, trạng thái đăng nhập của A đẩy trạng thái của B ra, còn trong log thì chỉ thấy một tác vụ bất kỳ thỉnh thoảng thất bại. Điều này rất khó lần ra nguyên nhân.

Lúc này cần xem môi trường trình duyệt như một tài nguyên có thể cấp phát và thu hồi. Khi bắt đầu, mỗi tác vụ nhận một môi trường; khi kết thúc thì trả lại, duy trì quan hệ một-một giữa tác vụ và môi trường. Dữ liệu lưu trữ giữa các môi trường không nhìn thấy nhau, nên trạng thái đăng nhập của tác vụ này không tràn sang tác vụ khác. Khi mở rộng đến hàng chục Agents chạy song song, khác biệt giữa cách này và việc “tự mở hàng loạt process trình duyệt trong script” sẽ rất rõ.

Nếu kịch bản có nhiều tài khoản, mức độ cô lập cần chặt chẽ hơn nữa: mỗi tài khoản gắn cố định với một môi trường, và tham số fingerprint cũng như vùng lưu trữ không được chồng lấn với tài khoản khác. PurpleMark cung cấp chính lớp cô lập môi trường và điều phối tập trung này để duy trì quan hệ một-một ổn định giữa tài khoản và môi trường.

Phiên đăng nhập hết hạn nhưng không ai phát hiện

Đây là loại lỗi dễ bị bỏ qua nhất vì có thể không hề báo lỗi. Tác vụ vẫn tiếp tục chạy, log vẫn được ghi, nhưng dữ liệu trả về thực ra là trang đăng nhập hoặc dữ liệu trống. Chỉ đến khi kết quả đi vào pipeline dữ liệu thì vấn đề mới bị phát hiện, và việc điều tra phải lần ngược từ phía sau nên chi phí rất cao.

Cách xử lý là coi trạng thái đăng nhập như một điều kiện tiên quyết cần kiểm tra rõ ràng. Trước khi chạy tác vụ, hãy xác nhận phiên hiện tại còn hợp lệ. Nếu đã hết hạn, thực hiện đầy đủ quy trình đăng nhập thay vì để tác vụ tiếp tục với trạng thái không hợp lệ. Bản thân trạng thái cần nằm ở tầng môi trường: cookie, local storage và lịch sử duyệt web đều được giữ trong môi trường và có thể khôi phục đầy đủ khi khởi động lại, nhờ đó tác vụ theo tài khoản không phải khởi tạo lại mỗi lần.

Một kinh nghiệm thực tế: với tài khoản vận hành lâu dài, việc trạng thái đăng nhập thay đổi quá thường xuyên tự nó cũng có thể bị nền tảng xem là tín hiệu bất thường và kích hoạt xác minh bổ sung. Vì vậy nên tránh đăng nhập lại không cần thiết.

Bị chặn khiến cả lô tác vụ dừng lại

Một kiểu lỗi khác xuất hiện đột ngột theo từng loạt, khi rất nhiều tác vụ cùng lúc không trả được kết quả. Website không nhất thiết đưa ra thông báo từ chối rõ ràng; phổ biến hơn là trả về nội dung bị giảm chất lượng hoặc trang trắng. Agent vẫn tiếp tục xử lý dữ liệu vô nghĩa và chỉ đến khâu dữ liệu mới lộ ra vấn đề.

Trong tình huống này, việc đầu tiên là phân biệt hành vi bị chặn với lỗi thông thường. Nếu cùng một nhóm môi trường đồng loạt bất thường vào các thời điểm gần nhau, rất có khả năng vấn đề nằm ở tầng môi trường. Tiếp tục retry chỉ làm phạm vi ảnh hưởng lớn hơn, vì vậy nên dừng và cô lập nhóm môi trường đó trước rồi mới quay lại tìm nguyên nhân kích hoạt.

Ba hướng kích hoạt thường gặp gồm: nhiều môi trường dùng cấu hình fingerprint quá giống nhau, chẳng hạn WebGL, Canvas, danh sách font hoặc phiên bản engine gần như trùng khớp; IP đầu ra, múi giờ và ngôn ngữ không tương thích, ví dụ IP Mỹ nhưng dùng múi giờ châu Á; hoặc khoảng thời gian giữa các thao tác quá đều khiến chính nhịp độ trở thành đặc điểm. Hãy kiểm tra để các tham số nhất quán, kiểm soát nhịp thao tác và ghi log cả trạng thái môi trường lẫn kết quả tác vụ để nhìn thấy tín hiệu trước khi lỗi lan thành cả lô.

Tách riêng tầng này ra

Các dự án trưởng thành thường tách môi trường trình duyệt khỏi Agent và quản lý nó như một tầng độc lập: Agent chịu trách nhiệm lập kế hoạch và ra quyết định, tầng môi trường quản lý danh tính và trạng thái, còn tầng thực thi vẫn là Playwright hoặc Puppeteer. Sau khi tách, sẽ có nơi rõ ràng để quản lý việc danh tính có hợp lý hay không, trạng thái có khôi phục được không và các tác vụ có thực sự cô lập với nhau không.

Nhìn lại, bốn loại lỗi trên có một điểm chung: chúng không nằm trong mô hình và cũng không nằm trong logic của script. Mô hình và code dĩ nhiên vẫn cần tiếp tục tối ưu, nhưng yếu tố quyết định một hệ thống tự động hóa có thể chạy bền vững trong thời gian dài thường nằm ở tầng thấp hơn này.

Nội dung trên nhằm chia sẻ cho mục đích nghiên cứu kỹ thuật và thực hành phát triển. Các phương thức tự động hóa cần được sử dụng hợp pháp, tuân thủ điều khoản dịch vụ của nền tảng mục tiêu và các quy định pháp luật địa phương hiện hành.