Mình làm website, mỗi lần làm xong một tính năng mới, hay sửa một tính năng bị lỗi, sẽ phải mở website, thao tác lại các bước để xem "chắc ăn" chưa. Nhiều khi việc sửa code thì dễ, nhanh nhưng việc test thủ công kiểu này thì lâu, nhất là những tính năng nằm trong sâu, phải đi qua nhiều bước mới vươn tới. Bởi vậy tìm cách kết hợp với agent AI cho nó gánh bớt.
Do mình chủ yếu làm việc bằng truy cập từ xa (xem bài "Làm việc từ xa bằng máy tính ở nhà"), dùng Terminal, nên hầu hết các giải pháp "dùng AI agent điều khiển trình duyệt" ngoài kia là không phù hợp với mình. Cụ thể:
-
Mình luôn dùng agent AI trên Terminal. Các agent trong VS Code, Zed mình không muốn đụng đến.
-
Khi làm việc kiểu truy cập từ xa thì trình duyệt và agent chạy trên hai máy khác nhau nên đa số giải pháp (agent tích hợp trong code editor) cũng không phù hợp.
-
Mình ưu tiên điều khiển trình duyệt chạy ở chế độ headless, vì chạy trên máy ở xa là trong môi trường SSH, không có display server, nên các ứng dụng có GUI cũng không chạy được.
Sau đó thì mình tìm được agent-browser đáp ứng được nhu cầu. agent-browser là một cầu nối giữa agent AI và trình duyệt chứ nó không phải là agent hay trình duyệt, nó giúp agent thực hiện một số công việc quen thuộc trên trình duyệt với lệnh đơn giản, không quá phức tạp.
Để cài đặt agent-browser, bạn vào https://agent-browser.dev/ và cài bằng package manager của NodeJS. Ví dụ mình ưa Bun thì cài bằng lệnh:
bun install -g agent-browser
Mặc dù agent-browser được viết bằng Rust, ta không nên cài bằng cách tải binary ở https://github.com/vercel-labs/agent-browser/releases, lý do là agent-browser cần một số file skill . Cài bằng package manger thì sẽ kèm theo các file skill luôn.
Trong website có đề cập thêm bước này:
agent-browser install
Mình thì không dùng lệnh này vì nó sẽ download một bản Chrome và cài trong $HOME, tốn ổ cứng. Thay vì vậy, mình dùng repo https://xtradeb.net/ và cài gói chromium-headless-shell:
sudo apt install chromium-headless-shell
À, về trình duyệt thì mình ưa Firefox hơn nên thường cũng không có sẵn Chrome / Chromium trong máy luôn.
Sau đó, để chỉ định agent-browser dùng bản Chromium headless này thì mình tạo file ~/.agent-browser/config.json với nội dung như sau:
{
"$schema": "https://agent-browser.dev/schema.json",
"executablePath": "/usr/bin/chromium-headless-shell"
}
Còn một lý do nữa khiến mình không muốn dùng Chrome do agent-browser tự cài là vì, trên Ubuntu, bản Chrome do agent-browser cài sẽ bị AppArmor chặn tính năng tạo sandbox.
Sau khi cài agent-browser và Chromium headless thì sao chép skill này https://github.com/vercel-labs/agent-browser/tree/main/skills/agent-browser vào thư mục dự án, ví dụ để ở ~.agents/skills/agent-browser~
Đây là hình ảnh agent-browser làm việc thực tế:

Đây là agent được lệnh truy cập vào URL khác, nhưng bị chặn lại bởi trang Login. Website mà mình xây dựng, yêu cầu login bằng OTP, gửi về email, nên mình viết thêm công cụ để giúp agent lấy được OTP, tự đăng nhập và đi tiếp.

Test tiếc xong xuôi thì nó báo cáo kết quả.
Thực ra, để agent làm được việc thì không phải cứ cài vào là xong. Mình cần phải viết một số công cụ cho agent dùng, như để sinh dữ liệu giả, để tra cứu dữ liệu nào đó. Và còn phải viết thêm skill. Ví dụ khi điều khiển trình duyệt mà bị chuyển hướng sang trang Login, làm sao agent biết được là trang này cần login bằng OTP, dùng lệnh gì để lấy OTP, cái đó là do skill đã được viết trước.
Agent trong hình bên trên là Goose, một agent nguồn mở, và model LLM hướng dẫn là MiniMax M3, cũng nguồn mở nốt (và rẻ, 1,2 USD cho 1 triệu token sinh ra). Bình thường mình hay dùng Crush hơn, cũng là một agent nguồn mở, nhưng hôm nay sau một lần cập nhật, Crush bị què nên mình lôi cầu thủ dự bị Goose ra đá. Nói chung là bạn không cần thứ gì đắt tiền để làm việc.