Tôi đã tạo một công cụ proxy giúp biết được Claude Code gửi `Claude.md` lên máy chủ theo dạng nào và gửi nguyên bản skill lên máy chủ ra sao.
(github.com/kangraemin)Trong lúc làm việc với Claude Code, tôi chợt tò mò không biết máy chủ Claude nhận biết các dữ liệu như tệp CLAUDE.md, skill, rules / memory theo cách nào.
Vì vậy tôi đã tự tạo một proxy MITM và làm ra một công cụ có thể xem lưu lượng truy cập.
Nguyên lý là khi chạy Claude Code, thay đổi baseURL để chụp và hiển thị giao tiếp HTTP phát sinh bên trong Claude Code.
Đây là những điều có thể biết được nhờ công cụ này.
Chỉ một câu hello cũng kéo theo 12KB
- Đây là tình huống khi vừa mở Claude Code lên và gửi
hello. content[0]là danh sách skill khoảng ~2KB,content[1]làCLAUDE.mdkhoảng ~10KB, vàcontent[2]là văn bảnhellothực sự được gửi đi.- Tức là nếu
CLAUDE.mddài 500 dòng thì toàn bộ sẽ được gửi nguyên vẹn trong mỗi request, và đó là lý do cần giữCLAUDE.mdthật gọn.
Càng tích lũy hội thoại thì mỗi request càng phình to như quả cầu tuyết
- Toàn bộ
messages[]được gửi lại trong mỗi request. — lượt 1 là 15KB, 10 lượt là 200KB, 30 lượt là hơn 1MB - Thậm chí cả những gì Claude đã trả lời cũng được đưa vào request message.
- Điều đó cho thấy nếu không định kỳ dùng
/clearcho context window thì sẽ vừa lãng phí token, vừa khiến ngữ cảnh phía trước luôn bị kéo theo ngữ cảnh phía sau, có thể làm giảm hiệu năng.
Công cụ MCP chỉ được tải khi cần
- Ban đầu chỉ có N công cụ built-in được tải (khác nhau tùy phiên bản Claude), và khi cần dùng MCP tool thì máy chủ sẽ gọi
ToolSearchđể tìm công cụ cần sử dụng. - Sau đó, ở mỗi lần gọi, công cụ đã tìm được phía trên sẽ được thêm vào để gọi.
- Tức là do MCP Tool được tải động, những công cụ MCP chưa dùng đến thực tế không gây tiêu tốn token lớn.
Sub-agent chạy trong context được cô lập hoàn toàn
- Sub-agent giống như mở một phiên hoàn toàn mới, không có bất kỳ lịch sử hội thoại nào của agent cha.
- Trong Inspector, bạn có thể trực tiếp so sánh hai lần gọi của parent/sub-agent đặt cạnh nhau.
Một ảnh đính kèm có thể làm tăng thêm hàng trăm KB
- Khi đính kèm ảnh chụp màn hình, nó sẽ được mã hóa base64 và chèn inline vào phần thân JSON.
- Có thể kiểm tra theo thời gian thực việc ảnh làm request tăng kích thước đến mức nào.
Bạn có thể cài đặt bằng lệnh dưới đây.
brew install --cask kangraemin/tap/claude-inspector && sleep 2 && open -a "Claude Inspector"
GitHub: https://github.com/kangraemin/claude-inspector
Hiện tại công cụ này mới chỉ hỗ trợ macOS và vẫn là phiên bản đầu, nên nếu có đề xuất cải tiến tôi sẽ tích cực tiếp nhận.
Hy vọng bạn dùng thử và thấy hữu ích cho việc tìm hiểu, xin cảm ơn!
4 bình luận
Trong bài suspiciously precise floats, or,
how I got Claude's real limits, có phân tích rằng khác với chi phí API, ở gói đăng ký thì không có chi phí đọc cache. Có vẻ khi phiên làm việc càng dài thì sai số giữa chi phí được tính toán và chi phí thực tế cũng sẽ khá lớn.
Ồ .... đây đúng là bài viết mà tôi hoàn toàn không biết ... tôi sẽ thử kiểm tra xem sao! Cảm ơn bạn
https://github.com/badlogic/lemmy/tree/main/apps/claude-trace
Tôi đã dùng cái này để xem prompt và những công cụ nào đã được sử dụng, có lẽ tôi cũng nên thử bản anh làm.
Cảm ơn anh đã chia sẻ. :+1:
Ngoài ra, sau khi gửi yêu cầu, bạn có thể xem lượng token đã dùng cho request đó ngay trong response!
Mô hình: claude-sonnet-4-6
Kích thước yêu cầu: 68.9 KB
"usage": {
"input_tokens": 3,
"cache_creation_input_tokens": 12394,
"cache_read_input_tokens": 6499,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 12394
},
"output_tokens": 74,
"service_tier": "standard",
"inference_geo": "not_available"
}
Ngoài ra, mình cũng đã áp dụng bảng giá theo từng mô hình để tính luôn chi phí cho mỗi request, mong mọi người dùng nhiều nhé haha
Đọc cache: 6.5K tok × $0.3/MTok = $0.0019
Ghi cache: 12.4K tok × $3.75/MTok = $0.0465
Đầu vào không cache: 3 tok × $3/MTok = $0.0000
Đầu ra: 74 tok × $15/MTok = $0.0011
Tổng cộng: $0.0495
Tỷ lệ trúng cache: 34%