14 điểm bởi GN⁺ 2025-07-02 | 2 bình luận | Chia sẻ qua WhatsApp
  • Spegel là một trình duyệt chuyển đổi trang web HTML thành prompt cho LLM rồi hiển thị dưới dạng Markdown trong terminal
  • Dựa trên prompt của người dùng, nó có thể tùy biến và biến đổi trang theo thời gian thực, để chỉ hiển thị ngắn gọn những thông tin quan trọng
  • Cơ chế hoạt động cốt lõi là crawl HTML → xử lý bằng prompt LLM → chuyển đổi và xuất ra Markdown
  • Cung cấp UI terminal trực quan, nhẹ, dựa trên Textual, đồng thời view và prompt có thể được quản lý dễ dàng bằng file cấu hình và thay đổi theo thời gian thực
  • Khác với các trình duyệt terminal hiện có như Lynx, Links2, Browsh, nó được tối ưu đặc biệt cho việc cá nhân hóa và tối ưu nội dung bằng LLM
  • Có thể cài đặt đơn giản bằng pip install spegel, phù hợp cho nhiều thử nghiệm và mở rộng vì là mã nguồn mở

Tổng quan dự án và đặc điểm

  • Spegel là một dạng trình duyệt web chạy trong terminal, truyền HTML cho LLM để tái cấu trúc trang bằng prompt do người dùng định nghĩa
  • Kết quả đầu ra được chuyển thành Markdown và hiển thị trực quan trong UI terminal dựa trên Textual
  • Thiết kế tối giản, không hỗ trợ JS và chỉ xử lý yêu cầu GET
  • Hỗ trợ nhiều kiểu view chuyển đổi nhờ tùy biến prompt LLM (ví dụ: tóm tắt công thức nấu ăn, làm nổi bật các hành động chính)

Cá nhân hóa và ví dụ sử dụng

  • Prompt và view có thể được quản lý linh hoạt qua cấu hình người dùng (~/.spegel.toml)
  • Ví dụ:
    • Trích xuất chỉ nguyên liệu và các bước cốt lõi từ công thức nấu ăn
    • Chuyển phần giải thích phức tạp thành dạng đơn giản kiểu ELI5
    • Có thể đăng ký nhiều view cùng lúc để chuyển đổi nhanh khi cần

Cách hoạt động

  • Spegel lấy HTML và gửi cho LLM cùng với prompt trong file cấu hình
  • Kết quả từ LLM được chuyển thành Markdown rồi render trong terminal thông qua Textual
  • Prompt và view có thể được điều chỉnh theo thời gian thực ngay cả trong lúc duyệt
  • Kết quả được stream theo từng dòng, đồng thời có xử lý buffer để tránh lỗi định dạng Markdown

Điểm khác biệt so với các trình duyệt terminal hiện có

  • Lynx, Links2, Browsh chỉ hiển thị chính cấu trúc HTML trong terminal
  • Spegel chuyên về việc loại bỏ thông tin không cần thiết và cung cấp view tối ưu bằng biến đổi dựa trên LLM
  • Các website hiện đại phụ thuộc nhiều vào CSS·JS nên thường rối rắm trong môi trường terminal; Spegel trích xuất chỉ phần nội dung cốt lõi để cải thiện khả năng tập trung và truy cập

Cài đặt và cách dùng

  • Cài đặt đơn giản bằng pip:
    pip install spegel
  • Chạy:
    spegel <URL>
  • Cần tùy biến file cấu hình (~/.spegel.toml), ví dụ tham khảo trên GitHub
  • Mã nguồn và đóng góp: https://github.com/simedw/spegel

Lưu ý

  • Hiện vẫn đang ở giai đoạn Proof-of-Concept nên còn một số tính năng chưa hoàn thiện và phần triển khai còn thô
  • Chưa hỗ trợ yêu cầu POST; các ý tưởng mở rộng như nhập biểu mẫu vẫn đang được lên kế hoạch
  • Đây không hẳn là một công cụ thay thế trình duyệt terminal hiện có, mà mang tính thử nghiệm khám phá cá nhân hóa nội dung dựa trên LLM+TUI nhiều hơn

2 bình luận

 
GN⁺ 2025-07-02
Ý kiến trên Hacker News
  • Tôi nghĩ công nghệ này là một ý tưởng thực sự thú vị; dù nó sẽ không hoàn toàn thay thế trình duyệt, nhưng có vẻ nó có thể tạo ra một cách duyệt web hoàn toàn khác bằng cách kết hợp tìm kiếm xác định với prompt. Tôi cũng nghĩ nó sẽ hợp hơn nếu được cung cấp dưới dạng công cụ dòng lệnh.

    • Bước tiếp theo mà tôi hình dung là khả năng xử lý nhiều "tab" cùng lúc; ví dụ tab 1 là bài đưa tin của báo A, tab 2 là báo B, tab 3 là Wikipedia, rồi tóm tắt các tài liệu này và tạo liên kết tham chiếu. Tuy vậy, tôi vẫn nghi ngờ liệu có mô hình nào đủ ổn định để hỗ trợ workflow như thế không; ngay cả các mô hình SOTA mới nhất cũng cho cảm giác vẫn có giới hạn.

    • Tính năng như trên, tức là xem tổng hợp tin từ nhiều cơ quan báo chí, tóm tắt và cung cấp tham chiếu trong cùng một chỗ, về bản chất là điều Ground News đang làm. Tôi không liên quan gì tới họ, chỉ là đã thấy họ được nhắc tới như nhà tài trợ trong một video của Kurzgesagt. Tất nhiên UI có thể khác biệt rõ ràng.

    • Kể cả nếu hiển thị nhiều tab/view cùng lúc, tôi nghĩ chỉ nên làm trong cùng một source. Chẳng hạn một tab là cách biểu diễn gốc được tối ưu cho CLI, tab khác thì chỉ tập trung vào fact-checking (tìm căn cứ nội dung bằng Google, Brave). Kiểu thử nghiệm này có vẻ sẽ rất thú vị.

    • Có thể xem đây là một cấu trúc trong đó SEO spam do LLM tạo ra bằng tất cả sức lực, rồi lại được một LLM khác tóm tắt qua loa và nhả ra lần nữa. Đúng là một tương lai thật đáng kinh ngạc.

  • Việc ví dụ đầu tiên lại là trích riêng công thức từ một trang web công thức nổi tiếng khiến tôi thấy đây đúng là một cảnh rất kinh điển. Cá nhân tôi thấy dạng dự án như vậy là kiểu muốn giới thiệu ngay lập tức; cảm giác đây là một dự án cực kỳ sáng tạo.

    • Tôi lại thấy đây là một ví dụ khác của làn sóng LLM: diễn giải lại thứ vốn đã tồn tại rồi làm nó tệ hơn và phi xác định hơn nhiều. Các cấu trúc chuẩn như schema.org/Recipe vốn đã tồn tại sẵn.

    • Điều thú vị là trong quá trình trích xuất công thức, nội dung, nguyên liệu hay định lượng có thể bị biến đổi ngẫu nhiên. Tôi nghĩ đặc tính của LLM được bộc lộ rất rõ trong một “vi mô” như thế này, dù hoàn toàn không theo hướng mà đa số bình luận đang kỳ vọng.

    • Đã có tiện ích mở rộng trích riêng công thức theo cách xác định mà không cần LLM. Ví dụ tiện ích Recipe Filter trên Chrome sẽ nhận diện công thức trong trang và hiển thị bằng popup.

  • Tôi thích điểm là LLM đứng ở giữa để vượt qua xu hướng viết bài tối ưu SEO gần đây của Google và cả cấu trúc SEO nói chung. Việc loại bỏ toàn bộ phần thừa và chỉ giữ lại công thức là một trường hợp rất hợp với LLM. Tôi có linh cảm sau này sẽ có thêm nhiều trường hợp chủ động dùng LLM như một bộ lọc. Tất nhiên nếu có thể lấy ngay phần công thức từ HTML thì sẽ tốt hơn, nhưng cuộc chiến SEO đã quá khốc liệt nên điều đó gần như không còn khả thi trong thực tế.

    • Nếu LLM được dùng để loại bỏ mọi yếu tố không cần thiết, thì cũng cần nghĩ tới chuyện LLM có thể thay đổi công thức theo cách khó lường. Tôi không hiểu tại sao lại tin tưởng loại phần mềm xác suất này trong những môi trường không chấp nhận sai sót.

    • Tôi đã hình dung tương lai kiểu này từ vài năm trước. Các công cụ LLM tích hợp tìm kiếm đã tồn tại, và khả năng nối nhiều lượt tìm kiếm với nhau thực sự rất mạnh. Nhưng Spegel là một cách tiếp cận hoàn toàn khác. Tôi cho rằng ad blocker của tương lai sẽ là các LLM cục bộ nhỏ gọn và hiệu quả; ví dụ có thể sắp xếp timeline theo thứ tự thời gian, chỉnh lại UI, chỉ hiển thị một số mục nhất định, v.v. Thậm chí có thể tự động ẩn bình luận chất lượng thấp. Khi LLM hoạt động như proxy hay agent ở giữa thì tất cả những điều đó đều khả thi. Tôi có cảm giác xu hướng này sẽ khiến giới quảng cáo rất khó chịu.

    • Cũng cần nghĩ tới việc trong quá trình duyệt web, LLM có thể phải xử lý hàng triệu token mỗi phút, và chi phí tính toán vì thế sẽ rất lớn.

    • LLM tạo ra phần thừa, rồi LLM lại tiếp tục loại bỏ phần thừa đó; đúng là một vòng tuần hoàn vận hành trơn tru mà không hiểu lầm nhau.

  • Tôi nghĩ sẽ có tiềm năng nếu dùng một mô hình ít phức tạp hơn (thậm chí có thể là LSTM) để quét DOM, chọn đúng những phần cần thiết rồi thu thập thành cấu trúc dữ liệu để trình duyệt hiển thị trực tiếp. Có cảm giác hoàn toàn có thể tận dụng chuỗi công cụ dựa trên LLM của chính tác giả để tạo dữ liệu huấn luyện một cách dễ dàng.

    • Nhưng trên web hiện đại, nơi nội dung được render muộn bằng JS, việc chỉ duyệt DOM sẽ có giới hạn. Phải đợi JS tải xong và mọi request hoàn tất mới lấy được dữ liệu cần thiết; mà như vậy thì rốt cuộc cũng gần như đang chạy hẳn một renderer trình duyệt rồi.
  • Có vẻ nhiều người đang bỏ qua chuyện HTML chỉ là điểm khởi đầu. Nếu có thể biến đổi một webpage thành một view khác, thì thực ra cũng có thể biến đổi mọi loại đầu vào mà mô hình tiếp nhận được. PDF, file zip chứa ảnh, JSON cỡ lớn… bất cứ thứ gì cũng có thể được “view hóa”. Cuối cùng điều quan trọng không phải là đầu vào HTML mà là view đầu ra.

  • Đề xuất thêm tùy chọn -p cho spegel

    spegel -p "extract only the product reviews" > REVIEWS.md
    

    tức là tính năng chỉ trích xuất thông tin mong muốn dựa trên prompt.

  • Tôi nghĩ thay vì mỗi lần lại rewrite mới cho từng trang, nếu chuyển sang Markdown ngay trong một lần truy cập rồi chia sẻ các phiên bản sạch đó với nhau, có thể giảm được lượng tính toán xây dựng lại.

    • Vì mỗi người dùng có nhu cầu và kiến thức nền khác nhau, tôi nghĩ dù có tạo ra tài liệu dùng chung sạch đến đâu thì cuối cùng vẫn sẽ còn bước tinh chỉnh theo từng cá nhân. Tuy vậy, cache chống trùng lặp toàn cục như P2P cache (IPFS, v.v.) có thể giúp về bảo toàn dữ liệu, đảm bảo khả dụng và tiết kiệm tài nguyên.

    • Cache header là để máy chủ cho phía client biết dữ liệu có thể được cache trong bao lâu. Tôi nghĩ sẽ hay nếu phía client cũng có thêm một tầng cache tuân thủ các header đó.

    • Nếu mục tiêu là bố cục nhất quán, thì cũng có thể đưa kết quả Markdown của trang trước đó cho mô hình làm ví dụ kèm theo (one-shot example).

    • Dự án này có mục tiêu là một "view tùy biến theo prompt cá nhân", nên tôi nghĩ ít nhất có thể cache sẵn kết quả của prompt mặc định để dùng.

  • Tôi cảm thấy đây là một POC thực sự xuất sắc, và nó có nhiều điểm rất giống với extension Chrome “reader view” mà tôi dùng thường xuyên.
    liên kết extension reader view

  • Ý tưởng này cực kỳ hay và tôi nghĩ cũng có tiềm năng lớn về mặt accessibility.

    • Nhưng đúng như vậy, LLM vốn phi xác định, trong khi accessibility là lĩnh vực mà trên hết phải đảm bảo độ tin cậy và khả năng dự đoán, nên đó vẫn là vấn đề.
  • Có một video cũ trong đó AI agent nay đã “nghỉ hưu” của tôi trình diễn việc biến đổi webpage theo thời gian thực.
    Demo biến HN thành My Little Pony (video)
    Có thể xem kết quả từ khoảng giây thứ 37.
    Tôi cũng đã làm một extension Chrome mã nguồn mở, ai tò mò có thể xem ChromeGPT.

 
laeyoung 2025-07-04

spegel -p "extract only the product reviews" > REVIEWS.md

Nếu chỉ có tùy chọn này thôi thì tôi nghĩ ra được khá nhiều cách để dùng, nhưng có vẻ hiện vẫn chưa có.