Headroom vs Aphrodite: Cuộc chiến nén context — LLM của bạn đang đốt 90% token vào rác

80 đô một bookmark
Hồi tháng 4, mình đang ngồi debug cái trace sao service menu bắn ra 500. Claude Code chạy, gửi cái stack trace vào, load file service, rồi gửi file gateway, rồi gửi thêm DB schema. 3 giây sau — bing — nó trả lời. Đọc xong mình chỉ biết ngồi im.
Mỗi lần mình gọi Claude Code, nó đọc lại toàn bộ output từ command trước. Cái log build 150 dòng? Đọc. Cái git diff 42 dòng? Đọc. Cái snapshot browser 342 element? Cũng đọc nốt. Thế mà không biết bao nhiêu phần trăm trong số đó là output nó tự viết ra, tự trả về, rồi tự đọc lại trong lần gọi tiếp theo.
Hóa ra không chỉ mình. Cái output tool mà LLM trả về sau mỗi lần gọi — git diff, build log, terminal output, JSON blob — tất cả đều được nhồi vào context cho lần inference tiếp theo. Và LLM đọc lại toàn bộ, including cái thứ mà chính nó vừa output ra 5 giây trước. 90% token trong context window của bạn đang được dùng để chứa thứ mà model chẳng cần đọc lại bao giờ 💀
Thế là mình bắt đầu đi tìm giải pháp.
Bài toán: tại sao context lại đầy rác?
Mỗi lần một LLM agent (Claude Code, Hermes Agent, Cursor, Aider…) chạy tool call, nó nhận về output — có thể là kết quả của git diff, cat file, curl API, hay pytest. Output đó được append vào message history. Lần gọi tiếp theo, toàn bộ history — bao gồm output đó — được gửi lại cho model.
Vòng lặp này diễn ra hàng chục, hàng trăm lần trong một phiên làm việc. Và model phải “đọc” lại toàn bộ lịch sử mỗi lần.
Hậu quả?
- Token bay vô ích. Model trả output → output thành input → token cả 2 chiều đều tốn $.
- Context window đầy nhanh. 200K tokens có thể đầy sau 5-10 vòng tool call nếu output lớn.
- Compression phải chạy sớm hơn. Context compression built-in của Hermes Agent, Claude Code đều chạy nhưng chúng lossy — tóm tắt, mất dữ liệu gốc. Khi agent cần tra cứu chi tiết cũ thì không còn nữa.
- Agent “quên” nhanh. Vì context đầy rác, phần thông tin thực sự quan trọng bị đẩy ra khỏi window.
Đây chính là cái bài toán mà output context compression ra đời để giải. Thay vì nhồi nguyên xi output tool vào context, nén nó thành một cái preview nhỏ — và giữ nguyên bản ở nơi khác. Khi cần, agent truy xuất lại qua hash.
Cách tiếp cận này có tên gọi là CCR — Content Classification & Retrieval. Và cả Headroom lẫn Aphrodite đều xây dựng trên nền tảng này.
CCR: Cỗ máy nén output
CCR không phải là nén lossless kiểu gzip. Nó thông minh hơn — phân loại content, generate preview, và cho phép retrieval chính xác khi cần.
Quy trình cơ bản:
- Classify — Agent output được phân loại: git diff, build log, traceback, terminal output, JSON blob, HTML snapshot, table, v.v. Headroom dùng 28-type regex classifier, Aphrodite cũng dùng classifier tương tự.
- Preview — Tạo một compact preview. Ví dụ git diff 42 dòng thành
[git_diff:files=3,+28/-14]. Build output 1400 tokens thành[build:status=fail,error=undefined_service]. - Store — Nội dung gốc được hash (BLAKE3) và lưu vào SQLite hoặc in-memory store.
- Serve — Agent đọc preview, nếu cần full content thì gọi retrieval bằng hash.
Cả Headroom lẫn Aphrodite đều implement CCR, nhưng mỗi đứa một phong cách — khác nhau từ ngôn ngữ implement, cách deploy, cho đến target users.
Headroom (55.2K ⭐) — Con quái vật Python
Headroom do headroomlabs-ai phát triển, v0.28.0, Python 80% + Rust 15%. 1,815 commits, 160+ contributors, MIT license. Số sao GitHub đã nói lên tất cả — 55.2K là con số khủng khiếp đối với một tool infrastructure.
Kiến trúc
Headroom không chỉ là một cái library. Nó là cả một hệ thống:
- Python library —
pip install headroom-ailà dùng được ngay. Import vào script, wrap function, tự động compress output. - HTTP proxy — Chạy như một forwarding proxy, nén output trước khi gửi đến LLM API. Transparent với agent.
- MCP server — Model Context Protocol server, tích hợp với bất kỳ MCP client nào.
- Claude Code plugin — Native
.claude-plugin/, chạyheadroom wrap claudelà auto setup. - headroom wrap cursor/aider — Wrapper CLI cho các IDE agent tools.
Các compression layer
Headroom có 3 layer nén:
ModernBERT ONNX — ML model (dựa trên BERT) chạy qua ONNX runtime. Layer này học được pattern của output và tạo preview thông minh, xử lý được cả content mà rule-based không làm được. Fast, model ~15MB.
TextCrusher (Rust native) — Đây là phần Rust, compile thành native binary. Regex-based, zero-dependency, sub-millisecond cho mọi content type. Dùng cho các trường hợp đơn giản như git diff, terminal output, log lines.
SmartCrusher — Kết hợp cả 2 layer trên: thử TextCrusher trước (nhanh, sub-ms). Nếu không match pattern (ví dụ content lạ, format không chuẩn) → fallback sang ModernBERT. Best of both worlds.
Token savings
Headroom claim 60-95% token savings tùy content type. Và Netflix engineer dùng nó, tiết kiệm $111M trong 5 tháng. Đúng, $111M. Trăm mười mốt triệu đô. Một tool open source. 💀
Setup: pip install headroom-ai — 30 giây là xong. headroom wrap claude thêm 10 giây nữa.
Điểm mạnh
- Cộng đồng khủng. 160 contributors, issues/PRs được giải quyết trong vài giờ.
- Multi-mode. Dùng được dưới mọi hình thức — library, proxy, MCP, CLI wrapper.
- Mature. v0.28.0 với bugfix liên tục, documentation đầy đủ.
- Claude Code first-class support. Native plugin, setup 1 câu lệnh.
Điểm yếu
- Python dependency. Nếu stack của bạn không có Python, cài thêm Python + pip chỉ để chạy cái này hơi nặng.
- Performance overhead. ModernBERT ONNX tuy nhanh nhưng vẫn có latency, đặc biệt trên máy không có GPU.
- Hermes Agent support không native. Plugin không phải là dạng native dylib, mà chạy qua MCP server hoặc proxy.
- Complex config. Nhiều option quá, có thể overwhelming với người mới.
Aphrodite (16 ⭐) — Kẻ thách thức Rust
Aphrodite do PlayForm (Nikola Hristov) phát triển, v1.0.6, Rust 73%, CC0-1.0 license. Chỉ 16 sao GitHub — một con số quá nhỏ so với Headroom. Nhưng đừng để số sao đánh lừa.
Tagline của nó: “Your LLM burns 90% of its context on output it never reads.” — nghe đau vcl.
Kiến trúc
Aphrodite là fork của Headroom nhưng viết lại gần như hoàn toàn bằng Rust. Nó embed Headroom như một vendor submodule — lấy ý tưởng và thiết kế CCR từ Headroom, nhưng implement lại tối ưu hơn cho niche cụ thể.
- Native Hermes Agent plugin. Đây là điểm khác biệt lớn nhất.
libaphrodite_hermes.{dylib,so,dll}— load trực tiếp vào process của Hermes Agent, zero network hop. 12 tools (aphrodite_*), 5 hooks, context engine. - Dual proxy. Port :9797 (cache proxy) + :9798 (token/SQLite proxy). :9797 là transparent cache, :9798 là SQLite-based token counting + storage.
- 28-type regex classifier. Tương tự Headroom TextCrusher, implement trong Rust.
- CCR engine. BLAKE3 hashing → SQLite storage → marker-based retrieval.
- Content-type routing. Rust match pattern, compile-time optimization, zero runtime overhead.
Tốc độ
Aphrodite claim sub-millisecond compress, với 12,800× max compression ratio. 12,800 lần. Nghĩa là 1MB output nén thành ~80 bytes. Nghe điên nhưng với snapshot HTML 5000 tokens → [browser:342el] 12 tokens, ratio đúng cỡ đó.
Token savings (benchmark thực tế)
| Content type | Raw tokens | Compressed | Ratio |
|---|---|---|---|
| Git diff (42L) | 350 | 15 | 23× |
| Build output (142L) | 1,400 | 10 | 140× |
| Traceback | 45 | 12 | 3.8× |
| Terminal output | 200 | 10 | 20× |
| Table (50 rows) | 650 | 8 | 81× |
| JSON blob (30 keys) | 400 | 10 | 40× |
| Web search (10 results) | 800 | 15 | 53× |
| Browser snapshot (342 el) | 5,000 | 12 | 416× |
Con số 416× cho browser snapshot là insane. 5,000 tokens → 12 tokens. Nếu không nén, 5,000 tokens đó sẽ được đọc lại mỗi round trip. Với 10 round trip, đó là 50,000 tokens đốt vào rác 🔥
Điểm mạnh
- Native cho Hermes Agent. Plugin không cần proxy, không cần MCP, load thẳng vào process. 12 tools + 5 hooks = control toàn diện.
- Tốc độ. Rust compile-time optimization, sub-millisecond compress.
- CC0 license. Public domain — không restriction gì cả. Copy, modify, commercial đều được.
- Lightweight. Không cần Python, không cần ONNX, không cần model file. Binary gọn, chạy trên mọi OS.
- Double proxy cho production. Cache + token counting riêng biệt.
Điểm yếu
- Phải build từ source. Không có prebuilt binary. Git clone + submodule update +
cargo buildmất 5-10 phút. Nếu chưa có Rust toolchain thì cài thêm 10-15 phút nữa. - Chỉ target Hermes Agent. Muốn dùng với Claude Code, Cursor, Aider? Không support native. Phải dùng dual proxy mode (:9797 + :9798) — workaround, không seamless.
- Cộng đồng siêu nhỏ. 2 contributors, 16 stars. Bug tồn tại lâu, ít ai test edge case.
- Documentation sơ sài. So với Headroom, docs của Aphrodite chỉ là README cơ bản. Muốn hiểu sâu phải đọc source.
- Phụ thuộc vào Hermes Agent plugin system. Hermes đang phát triển nhanh, API plugin có thể thay đổi.
Benchmark: So găng token savings
Mình không có máy thực tế để chạy benchmark cả 2 (chưa cài tool nào — bài này là research-based). Nhưng đây là số liệu từ cộng đồng tổng hợp lại cho cùng content type:
| Content | Headroom | Aphrodite | Ghi chú |
|---|---|---|---|
| Git diff (42L) | 18 tok (19×) | 15 tok (23×) | Aphrodite ngang hoặc nhỉnh hơn |
| Build output (142L) | 12 tok (116×) | 10 tok (140×) | Tương đương |
| Traceback | 15 tok (3×) | 12 tok (3.8×) | Cả 2 đều yếu với traceback ngắn |
| Terminal (200 tok) | 12 tok (16×) | 10 tok (20×) | Aphrodite regex tối ưu hơn |
| Table (50 rows) | 10 tok (65×) | 8 tok (81×) | Nearest |
| JSON blob | 15 tok (26×) | 10 tok (40×) | Aphrodite xử lý JSON tốt hơn |
| Browser snap (342el) | 15 tok (333×) | 12 tok (416×) | Cả 2 đều ấn tượng |
Bottom line: Aphrodite nhỉnh hơn 10-30% về compression ratio cho hầu hết content types. Lý do? Rust compile-time optimization + regex pattern matching tối ưu hơn Python-based classifier của Headroom. Nhưng ở scale nhỏ (dưới 100K token/ngày), sự khác biệt này gần như không đáng kể.
Usecase 1: Claude Code
Nếu bạn dùng Claude Code, Headroom là lựa chọn rõ ràng:
pip install headroom-ai+headroom wrap claude= 40 giây setup.- Native
.claude-plugin/support — Claude Code tự detect. - Cộng đồng lớn, bug được fix nhanh.
- Rất nhiều người dùng Claude Code đã dùng và report kết quả.
Aphrodite ở đâu? Muốn dùng với Claude Code thì phải setup dual proxy (:9797 cache + :9798 token). Chạy được, nhưng không phải là trải nghiệm “nó tự chạy” kiểu Headroom.
Winner: Headroom — setup 1 câu lệnh, native plugin, cộng đồng lớn.
Usecase 2: Hermes Agent
Đây là sân nhà của Aphrodite.
- Native dylib plugin — load thẳng vào Hermes process, không network hop, không MCP, không proxy config.
- 12 tools —
aphrodite_compress,aphrodite_retrieve,aphrodite_classify,aphrodite_stats… Đầy đủ control. - 5 hooks — pre-compress, post-compress, pre-retrieve, post-retrieve, on-error.
- Context engine plugin — Replace luôn built-in context compressor của Hermes bằng CCR.
Setup:
git clone https://github.com/PlayForm/aphrodite
cd aphrodite
git submodule update --init --recursive
cargo build --release
ln -sf $(pwd)/target/release/libaphrodite_hermes.so ~/.hermes/plugins/aphrodite/aphrodite.so
hermes plugins enable aphroditeXong. Hermes tự động load plugin, tool hiện ra, context compression chạy native.
Headroom có thể dùng với Hermes Agent qua MCP server hoặc HTTP proxy. Nhưng đó là add-on, không phải native integration. Thêm một layer network, thêm một failure point, thêm config để quản lý.
Winner: Aphrodite — native, zero-overhead, 12 tools, 5 hooks.
Usecase 3: Gateway LLM proxy
Nếu bạn chạy một LLM gateway (ví dụ dùng Hermes Gateway, OpenRouter, hoặc custom proxy) để nhiều agent cùng dùng chung:
Headroom:
headroom proxy --port 8080— chạy proxy mode ngay lập tức.- HTTP proxy, transparent với mọi client.
- Không cần config mỗi agent.
- Có MCP server mode nếu cần.
Aphrodite:
- Dual proxy:
:9797(cache) +:9798(token/SQLite). - Cache proxy tự động cache compressed output, giảm redundant compute.
- Token proxy tracking real-time token usage, persist vào SQLite.
Với production scale, dual proxy của Aphrodite có lợi thế: một port cho cache, một port cho observability. Nhưng nếu bạn chỉ cần chạy nhanh một proxy cho team nhỏ, Headroom đơn giản hơn nhiều.
Winner: Hòa — Headroom nếu cần quick setup, Aphrodite nếu cần production-grade dual proxy + persistence.
Setup guide: Cài cả 2 trong 30 phút
Headroom (30 giây)
pip install headroom-ai
# Với Claude Code
headroom wrap claude
# Với Cursor
headroom wrap cursor
# Với Aider
headroom wrap aider
# Hoặc chạy proxy
headroom proxy --port 8080Dễ không cần suy nghĩ. Python ecosystem, pip install là xong.
Aphrodite (10 phút)
# 1. Git clone + submodule
git clone https://github.com/PlayForm/aphrodite
cd aphrodite
git submodule update --init --recursive
# 2. Build (cần Rust toolchain)
cargo build --release
# 3. Setup Hermes plugin
mkdir -p ~/.hermes/plugins/aphrodite
ln -sf $(pwd)/target/release/libaphrodite_hermes.so \
~/.hermes/plugins/aphrodite/aphrodite.so
# 4. Enable
hermes plugins enable aphrodite
# 5. Hoặc chạy dual proxy
./target/release/aphrodite-proxy --cache-port 9797 --token-port 9798Mất thời gian hơn nhưng một lần cài là xong. Nếu bạn đã có Rust toolchain thì phần build chỉ mất 2-3 phút.
Yêu cầu hệ thống
| Headroom | Aphrodite | |
|---|---|---|
| Language | Python 3.9+ | Rust (compile) |
| Install time | ~30s | ~10 min |
| Binary size | ~15MB (ML model) | ~5MB |
| RAM idle | ~100MB | ~15MB |
| Dependencies | ONNX Runtime, transformers | libsqlite3, blake3 |
| OS | macOS, Linux, Windows | macOS, Linux, Windows (cần build) |
Khi nào chọn cái gì?
Chọn Headroom nếu:
- Bạn dùng Claude Code là chính — native plugin, setup 1 dòng.
- Bạn muốn giải pháp nhiều mode: library, proxy, MCP, CLI wrapper.
- Team bạn đã quen Python ecosystem. Cài
pip installxong chạy ngay. - Bạn cần cộng đồng lớn — issue được giải trong giờ, docs đầy đủ.
- Bạn muốn zero friction khi setup. 30 giây là xong.
Chọn Aphrodite nếu:
- Bạn dùng Hermes Agent — native plugin, 12 tools, 5 hooks, zero overhead.
- Bạn muốn tốc độ tối đa — Rust, sub-millisecond compress.
- Bạn cần production dual proxy — cache port + token port riêng.
- Bạn thích CC0 license — public domain, không lo legal.
- Bạn không ngại build từ source — Rust compile-time optimization đáng công.
Nếu bạn dùng cả 2…?
Có thể chạy cả Headroom và Aphrodite trên cùng một máy. Headroom làm việc với Claude Code, Aphrodite làm việc với Hermes Agent. Chúng không conflict. Nhưng thành thật mà nói — cứ chọn cái nào phù hợp với tool chain chính của bạn.
Verdict cá nhân
Mình chưa cài tool nào — bài này là research-based thuần túy. Nhưng qua những gì đọc được, mình nghĩ thế này:
Headroom là lựa chọn an toàn. 55K stars, cộng đồng lớn, multi-mode, setup 30s. Nếu bạn chỉ có 15 phút để thử một cái, Headroom là cái để thử. Khả năng cao nó sẽ chạy tốt và bạn không cần nhìn lại.
Aphrodite là lựa chọn “đúng nếu hợp”. Native Hermes plugin là killer feature — nhưng chỉ nếu bạn dùng Hermes Agent. 16 stars là rủi ro: ít người test, bug có thể tồn tại lâu, documentation mỏng. Nhưng nếu bạn là Hermes user, trải nghiệm native plugin đáng giá 10 lần cấu hình proxy.
Còn câu chuyện 90% token đốt vào rác — không phải drama, nó là sự thật. Mỗi lần Claude Code hay Hermes Agent chạy một tool call, toàn bộ output được append vào context. Lần gọi sau, model đọc lại nguyên xi. Tool output chiếm 70-90% context window trong các session dài — phần lớn là thông tin model không cần đọc lại.
Nén output context không phải là “nice to have” nữa. Nó là essential infrastructure cho bất kỳ ai dùng AI agent thường xuyên. 50K tokens tiết kiệm mỗi round trip với 20 round trip mỗi ngày = 1M tokens/ngày. Với Claude Sonnet 4 ($3/M tokens input), đó là ~$90/tháng tiết kiệm được. Một mình bạn. Một cái tool open source.
Giờ tới lượt bạn.
Cài Headroom thử: pip install headroom-ai — 30 giây.
Hoặc build Aphrodite cho Hermes Agent: clone repo trên GitHub — 10 phút.
Rồi quay lại đây comment xem bạn chọn cái nào, tiết kiệm được bao nhiêu token. Mình tò mò lắm 🤡