03 / AI REPO RADAR
lexmount/moli
19.251 saoLicense: Apache-2.0Push gần nhất: Lên radar:
Trình duyệt headless viết bằng Rust, nhắm tới AI agent: tải và trích xuất trang web, tìm kiếm, tự động hóa qua CLI, CDP hoặc WebDriver.
Moli là gì và giải quyết vấn đề gì
Moli là một trình duyệt headless viết bằng Rust, được tác giả mô tả là sẵn sàng cho môi trường production và dành riêng cho AI agent. Điểm mấu chốt trong cách giới thiệu của README là thiết kế layout và rendering theo yêu cầu: dự án muốn kết hợp một runtime trình duyệt đầy đủ với mức tiêu thụ tài nguyên nhẹ. Tại thời điểm bản tin này được đăng, repo có 19251 sao; metadata của edition ghi giấy phép Apache-2.0, còn README cho phép chọn Apache-2.0 hoặc MIT.
Vấn đề mà README nhắm tới khá quen thuộc với người làm agent: phần lớn tác vụ tự động hóa trình duyệt thực chất cần cấu trúc của trang, chứ không cần một thế giới hình ảnh được vẽ liên tục. Trình duyệt thông thường luôn duy trì trạng thái layout và paint, kể cả khi agent chỉ muốn lấy văn bản hay chạy một đoạn JavaScript. Moli cố gắng bỏ phần việc thừa đó mà vẫn giữ các khả năng của một trình duyệt thật.
Theo README, Moli giúp agent tải và trích xuất trang web, tìm kiếm trên web và tự động hóa các tác vụ trình duyệt. Có thể dùng nó qua giao diện dòng lệnh, qua CDP, qua WebDriver Classic hoặc qua WebDriver BiDi. Dự án hỗ trợ Linux, macOS và Windows, nên người dùng không bị buộc vào một hệ điều hành cụ thể khi đưa vào pipeline của mình.
Cách hoạt động: layout và paint theo yêu cầu
Ý tưởng cốt lõi là coi DOM gốc và trạng thái style là nguồn sự thật duy nhất. Khi agent yêu cầu trích xuất HTML hoặc Markdown, truy vấn DOM, chạy JavaScript, hay kiểm tra mạng và storage, Moli đọc thẳng trạng thái runtime của trình duyệt và không kích hoạt layout hay paint. README trình bày điều này trong một bảng đối chiếu giữa loại yêu cầu của agent và việc Moli thực sự làm.
Khi agent cần biết hộp của một phần tử, hit-test theo tọa độ hoặc gửi input theo tọa độ, Moli chạy một lần tính layout và chỉ giữ lại cây layout đóng băng mới nhất. Với ảnh chụp màn hình, nó dựng lại từ DOM và style hiện tại, thay cây đóng băng, vẽ một khung hình mới rồi bỏ trạng thái paint sau khi dùng. Với screencast, mỗi lần thăm dò chỉ so sánh metadata về thế hệ trạng thái: nếu không đổi thì không phát khung hình nào, nếu đổi thì dựng và phát đúng một khung mới.
Về kiến trúc, README nhấn mạnh Moli là một lõi trình duyệt độc lập chứ không phải lớp bọc quanh Chromium. Nó dựa vào libcurl cho truyền tải mạng, html5ever để phân tích HTML, rusty_v8 cho JavaScript, Servo và Stylo cho selector, cascade và computed style, Taffy cùng Parley cho layout hộp và văn bản, cùng AnyRender, Vello CPU, usvg và hệ sinh thái ảnh của Rust cho phần render phần mềm. README cũng nói rõ hệ thống không có cây layout cập nhật tăng dần, đồ thị damage, display list được giữ lại, bộ ghép GPU hay cửa sổ cố định.
Các tính năng chính
README liệt kê một runtime web khá đầy đủ: phân tích HTML dạng streaming, DOM gốc, JavaScript trên V8, module, timer, microtask và sự kiện, iframe và worker, CSS cascade, Fetch, XHR và WebSocket, cookie, WebCrypto, cùng storage theo profile gồm localStorage, IndexedDB và OPFS. Nghĩa là các trang phụ thuộc nhiều vào JavaScript vẫn có thể được chạy trước khi trích xuất nội dung.
Về đầu ra, CLI trực tiếp tạo HTML, Markdown, JSON, cây văn bản ngữ nghĩa và cách tuần tự hóa có nhận biết frame, kèm các cơ chế chờ theo selector, script hoặc response và tính năng theo dõi mạng. README cũng nhắc tới một cây ngữ nghĩa gọn, thân thiện với mô hình, một lựa chọn hợp lý nếu bạn muốn đưa nội dung trang vào ngữ cảnh của LLM mà không tốn quá nhiều token cho phần markup thừa.
Một điểm đáng chú ý khác là binary tự động hóa thống nhất: CDP, WebDriver Classic và WebDriver BiDi dùng chung một kernel và một bộ lập lịch, cùng phục vụ trên một endpoint. Theo README, không cần cài riêng ChromeDriver, geckodriver hay một trình duyệt khác. Khi cần khả năng hình ảnh thật, thêm cờ layout sẽ bật dựng hộp đầy đủ, layout bằng Taffy, layout văn bản bằng Parley, hit-testing và input dựa trên layout, ảnh chụp viewport và các khung screencast render bằng CPU với tần suất thấp. Ngoài ra còn có tùy chọn vận hành như profile, cookie, HTTP cache, proxy, nhóm tài nguyên, giới hạn kết nối, timeout, chính sách mạng riêng tư, ghi đè user-agent và log chẩn đoán.
Cài đặt và dùng thử
README có mục khởi động nhanh với hai hướng. Hướng thứ nhất là đưa cho AI agent của bạn một đoạn prompt để agent tự lo việc cài đặt. Hướng thứ hai là cài đặt trực tiếp, với một cách cho Linux hoặc macOS và một cách riêng chạy trong PowerShell trên Windows. Bản README được dùng làm nguồn cho bài này không giữ lại nội dung chi tiết của các lệnh đó, nên bài này không trích lại chúng; bạn nên mở README gốc để lấy đúng lệnh.
Với dòng lệnh, README mô tả ba nhóm việc. Nhóm đầu là trích xuất trang: mặc định xuất Markdown theo chiến lược hoàn tất của Moli, hoặc trả về trực tiếp cây ngữ nghĩa gọn. Muốn đầu ra hình ảnh thì bật layout theo yêu cầu rồi ghi PNG của viewport, PNG toàn tài liệu hoặc PDF có phân trang. Nhóm thứ hai là xuất trang sau một tương tác tường minh bằng cách kết hợp cờ eval hoặc eval-file với cờ dump.
Về cờ eval kết hợp dump, README nêu hành vi khá cụ thể: biểu thức chạy sau khi trang sẵn sàng, promise được chờ, mọi điều hướng đang chờ sẽ được theo dõi trước khi xuất, giá trị trả về bị bỏ đi mà không tuần tự hóa, và một ngoại lệ sẽ làm lệnh thất bại mà không phát ra dump. Chỉ biểu thức bạn đưa vào mới thực hiện tương tác. Để xem toàn bộ tùy chọn như định dạng đầu ra, chờ tải trang hoặc phản hồi, profile, proxy, chính sách tài nguyên và theo dõi, README khuyên chạy lệnh fetch với cờ help. Nhóm thứ ba là khởi động máy chủ tự động hóa, phục vụ cả ba giao thức trên cùng một endpoint, và Playwright có thể kết nối thẳng qua CDP.
Dùng trong workflow AI agent như thế nào
README nói rõ các tình huống mà mô hình chi phí của Moli hợp nhất: crawling, agent dùng trình duyệt, pipeline truy xuất, môi trường đánh giá và các workload học tăng cường. Điểm chung của chúng là chạy rất nhiều phiên ngắn, trong đó chi phí mỗi phiên và lượng bộ nhớ quyết định số tác vụ chạy song song được. Một trình duyệt không phải liên tục duy trì trạng thái hình ảnh sẽ có lợi thế ở đúng những chỗ này.
Trong một agent thực tế, bạn có thể hình dung hai lớp. Lớp nhẹ dùng lệnh fetch để lấy Markdown hoặc cây ngữ nghĩa của trang rồi đưa vào ngữ cảnh mô hình. Lớp tương tác chạy máy chủ tự động hóa và để agent hoặc framework như Playwright điều khiển qua CDP. README cũng nhắc tới một sân chơi WebMCP với CLI để liệt kê và gọi các công cụ WebMCP gốc của bất kỳ trang nào, cùng các demo đặt chỗ, nhà hàng và pizza, hữu ích để thử cách agent gọi công cụ do trang cung cấp.
README cũng mô tả mối quan hệ với Lexmount: Moli là trình duyệt headless mã nguồn mở của Lexmount, còn Lexmount Browser là runtime đám mây được quản lý và mặt phẳng điều khiển xây quanh nó. README khẳng định bản mã nguồn mở dùng được đầy đủ mà không cần Lexmount Browser, nên bạn có thể tự vận hành mà không phụ thuộc dịch vụ thương mại.
Số liệu benchmark do tác giả công bố
Toàn bộ số liệu dưới đây do tác giả tự công bố trong README và chưa được kiểm chứng độc lập. Trong bài thử crawl hỗn hợp trên 192 URL công khai của các trang lớn ở Trung Quốc và quốc tế, một trang chỉ tính là thành công nếu có nội dung có nghĩa sau khi JavaScript chạy. Moli đạt 103 trang hữu ích, tỉ lệ 53.6%, thời gian trung vị 1.43 s và RSS trung vị 73 MiB. Chrome Headless đạt 101 trang, 52.6%, 1.43 s và 773 MiB. Lightpanda đạt 85 trang với 44.3%, còn Obscura đạt 57 trang với 29.7%.
Với một workload agent mẫu, README ghi Moli sẵn sàng CDP sau 34.85 ms so với 169.37 ms của Chromium, p50 của một episode hoạt động là 33.40 ms so với 57.13 ms, và PSS đỉnh là 102.46 MiB so với 348.82 MiB. Về WPT, trong tập chọn lọc dùng để kiểm chứng phạm vi agent-browser, một lần chạy đầy đủ đã vượt qua 1.612 million bài kiểm tra.
Trên Lexbench-Headless-Browser, bộ đầy đủ gồm 1,928 tác vụ bao phủ CDP thô, 13 công cụ tự động hóa được ghim phiên bản như Playwright, Puppeteer và Selenium, cùng ngữ nghĩa nền tảng web. Để so với Kitesurf, vốn chỉ có dạng endpoint từ xa, biểu đồ dùng 1,308 tác vụ so sánh được. Moli 0.1.1 vượt qua 1,071 tác vụ, tương ứng 81.88%, so với Kitesurf 62.08%, Lightpanda 53.29%, Obscura 44.88% và Chrome 99.85%. README lưu ý Kitesurf chạy với k=1, tác vụ không được phủ tính là không đạt, và điều kiện tái lập của dịch vụ từ xa khác với binary chạy cục bộ. Ở lần chạy 557 tác vụ chung, CPU trung vị mỗi tác vụ của Moli là 100.6 ms và bộ nhớ đỉnh trung vị là 92 MiB, còn Chrome là 687 ms và 697 MiB.
Giới hạn và điều cần lưu ý
README tự khoanh vùng phạm vi khá rõ. Trong các kịch bản agent-browser được định nghĩa trong tài liệu của dự án, Moli sẵn sàng cho production và vẫn đang được phát triển tích cực. Các ranh giới có chủ ý gồm: không có trình duyệt GUI, cửa sổ cố định, bộ ghép GPU hay kiến trúc paint nhiều khung được giữ lại; không theo đuổi độ giống Chrome đến từng điểm ảnh và không cung cấp Canvas, WebGL hay phát media độ trung thực cao.
Về chụp và in, cờ layout hỗ trợ ảnh chụp bằng phần mềm và PDF gốc qua CDP hoặc CLI với phông nhúng, nhưng không phải mọi chế độ chụp hay in của Chrome đều được triển khai. Bù lại, README cam kết các đường giao thức chưa hỗ trợ sẽ trả lỗi tường minh, và Moli không giả vờ rằng một hành động trình duyệt, sự kiện, quan sát mạng hay kết quả hình ảnh đã xảy ra. Đây là tính chất đáng giá cho agent, vì lỗi rõ ràng dễ xử lý hơn kết quả giả.
Các thao tác tốn kém đều phải bật tường minh. Mặc định chính sách layout giả lập hình học xác định với định dạng tương thích mà không layout hay paint thật. Cờ layout bật layout theo yêu cầu, cờ resource bật mọi nhóm tài nguyên hình ảnh và media tùy chọn, và có các cờ riêng cho ảnh, phông, âm thanh, video, media và text track. Việc lưu bền như thư mục profile, thư mục HTTP cache hay tệp cookie cũng chỉ bật khi workload cần. Cuối cùng, tỉ lệ thành công 53.6% trong bài crawl cho thấy gần một nửa số trang vẫn không cho nội dung hữu ích, nên hãy tự thử trên các trang đích của bạn trước khi tin vào con số chung.
Khi nào nên và không nên dùng
Moli hợp với bạn nếu workload của bạn thiên về lấy nội dung, truy vấn DOM, chạy JavaScript và kiểm tra mạng ở quy mô lớn, nơi bộ nhớ và độ trễ khởi động quan trọng. Những đội đã dùng Playwright cũng có thể thử thay phần trình duyệt phía sau bằng Moli vì README cho biết Playwright kết nối thẳng qua CDP. Nếu bạn muốn tự vận hành mà không dùng dịch vụ đám mây, README khẳng định bản mã nguồn mở dùng đầy đủ được.
Ngược lại, hãy cân nhắc kỹ nếu bạn cần độ giống Chrome tuyệt đối về hình ảnh, cần Canvas, WebGL hay phát media độ trung thực cao, hoặc cần đủ mọi chế độ chụp và in của Chrome. Với các trang có tường đăng nhập, trang thử thách chống bot hay ứng dụng chỉ có phần vỏ, README tính chúng là không thành công trong bài crawl của mình, nên đừng mặc định rằng chúng sẽ chạy tốt.
Tóm lại, Moli là một lựa chọn đáng theo dõi cho người xây agent cần trình duyệt nhẹ. Hãy đọc kỹ phần phạm vi dự án, tự chạy lại benchmark trên bộ trang của bạn, và nhớ rằng mọi con số ở trên là tuyên bố của tác giả. README không đề cập các vấn đề như bảo mật khi chạy mã trang không tin cậy hay lộ trình phiên bản, nên các chủ đề đó cần tự kiểm tra thêm.
Bài do AI viết tự động từ README và dữ liệu GitHub API của repo, có kiểm tra tự động nhưng không có người duyệt từng câu. Báo sai sót qua email.