Giới thiệu
tokencount là một công cụ CLI viết bằng Rust giúp bạn trả lời một câu hỏi đơn giản nhưng đầy thách thức: Có bao nhiêu token GPT đang ẩn giấu trong dự án này? Nếu bạn phát triển các tính năng AI, viết tài liệu có nhiều prompt, hoặc chỉ cần theo dõi các cửa sổ ngữ cảnh, công cụ này sẽ giúp bạn kiểm tra một cách dễ dàng và nhanh chóng.
Tại sao tôi xây dựng nó
Nhiều công cụ đếm token hiện tại chỉ có thể xử lý một tệp tại một thời điểm hoặc không tôn trọng thực tế của hệ thống tệp trong các dự án lớn. Tôi muốn có một công cụ có thể:
- Quét nhanh chóng một cơ sở mã (sử dụng các worker song song với Rayon và các quy tắc bỏ qua của hệ điều hành)
- Tôn trọng
.gitignoretheo mặc định và cho phép thêm các glob tùy chỉnh--exclude - Sử dụng cùng một ngôn ngữ như các mô hình OpenAI (
cl100k_base,o200k_base, v.v.) - Cung cấp một tóm tắt hữu ích ngay lập tức: số lượng mỗi tệp, tổng số, phần trăm và các tệp lớn nhất
- Hoạt động tốt với tự động hóa (chế độ xuất JSON và NDJSON)
Tính năng nổi bật
- Quét siêu nhanh – Sử dụng
ignore::WalkBuildervà Rayon cho I/O/token hóa đồng thời - Mặc định thông minh – chỉ quét
*.elmtrừ khi bạn thêm cờ--include-ext(tốt cho các kho có nhiều Elm) - Lọc linh hoạt – kết hợp
--include-ext,--exclude,--max-bytes, và--follow-symlinks - Nhiều định dạng đầu ra – bảng, mảng JSON với tóm tắt, hoặc luồng NDJSON cho các pipeline
- Thống kê phong phú – tổng số, trung bình mỗi tệp, và các phần trăm P50/P90/P99 để phát hiện nhanh các ngoại lệ
- Chế độ yên tĩnh/chi tiết – giữ cho nhật ký CI sạch sẽ hoặc bật cảnh báo chi tiết tại địa phương
Cài đặt
Để cài đặt tokencount, bạn chỉ cần sử dụng lệnh sau:
cargo install tokencount
Hướng dẫn nhanh
Dưới đây là một số lệnh cơ bản để bạn bắt đầu với tokencount:
# Mặc định: quét thư mục hiện tại, chỉ tệp *.elm, đầu ra bảng
tokencount
# Bao gồm Elm và TypeScript
tokencount ./frontend --include-ext elm --include-ext ts
# Hiển thị 10 tệp lớn nhất theo số lượng token
tokencount --top 10
# Tóm tắt có thể đọc cho CI
tokencount --format json > tokens.json
# Xuất các số liệu để xử lý thêm
tokencount --format ndjson
# Sắp xếp giảm dần theo số lượng token
tokencount --sort tokens
Mỗi lần chạy sẽ kết thúc với một phần chân như sau:
---
total files: 42
total tokens: 128730
average/file: 3065.00
p50: 812
p90: 7194
p99: 24403
Chỉ cần cần các tệp lớn nhất? Kết hợp --top N với --sort tokens hoặc sắp xếp theo đường dẫn mặc định.
Cách thức hoạt động
- Xử lý bỏ qua sử dụng thư viện
ignorevới.gitignore,.git/info/exclude, và các bỏ qua git toàn cầu tự động. Tôi thêm các thư mục rác phổ biến (node_modules,target,.git) để bạn không phải làm điều đó. - Token hóa dựa trên
tiktoken-rs, vì vậy bạn sẽ có cùng một số lượng như các mô hìnhcl100k_base/o200k_basecủa OpenAI. - Xử lý lỗi thân thiện theo mặc định—các tệp không phải UTF-8 hoặc các blob quá lớn sẽ bị bỏ qua kèm theo cảnh báo (hoặc im lặng với
--quiet). - Phần trăm sử dụng phương pháp xếp hạng gần nhất và giảm dần một cách tự nhiên khi có không tệp nào.
Lộ trình & phản hồi
Tôi đang khám phá:
- Nhiều định dạng mã hóa hơn (nếu bạn cần một token hóa khác, hãy mở một vấn đề)
- Đầu ra báo cáo HTML/Markdown tùy chọn
- Biểu đồ kích thước tệp tích hợp để bổ sung cho thống kê token
Bạn có thể tìm thấy repo và các vấn đề tại đây: github.com/CharlonTank/tokencount
Nếu bạn thử nghiệm với tokencount, tôi rất mong nhận được phản hồi về cách nó phù hợp với quy trình kỹ thuật prompt của bạn hoặc trong các pipeline CI—hãy liên hệ với tôi trên repo hoặc để lại một bình luận bên dưới.