Token AI và số từ: đo yêu cầu trước khi ước lượng chi phí
Token là đơn vị do tokenizer cụ thể tạo ra, không phải lượng từ hay ký tự cố định. Đếm văn bản chính xác cần tokenizer và thiết lập phù hợp. Với API đầy đủ, tính cả cấu trúc thông điệp và công cụ, rồi so ước lượng với usage nhà cung cấp trả.
Trong hướng dẫn này
Bộ đếm từ hữu ích cho độ dài bài viết nhưng không cho biết đáng tin rằng request AI vừa context hay tốn bao nhiêu. Cùng văn bản thấy được có thể chia khác giữa tokenizers. Một request thường có nhiều thứ ngoài phần dán trong một message.
Quy trình tách đo raw text, đo request và usage tính phí. Có ví dụ đếm ngoại tuyến cùng bảng điền kết quả thật. Không bịa số token chính xác cho model chưa chạy; phải lưu danh tính và thiết lập mới tái lập so sánh được.
Tách từ, ký tự Unicode và token
Một từ có thể thành một token, nhiều mảnh nhỏ hoặc phần chứa dấu câu và khoảng trắng. Hugging Face giải thích cách theo từ, ký tự và subword. Ngôn ngữ, cách viết, code, whitespace và từ vựng tokenizer đều ảnh hưởng cách chia.
Đếm Unicode trả lời câu hỏi khác. Có ký tự dùng nhiều code units hoặc bytes, một biểu tượng nhìn thấy có thể gồm nhiều code points. Không đại lượng nào có quy đổi phổ quát sang token. Tỷ lệ ký tự/token chỉ là heuristic thô cho mẫu nêu rõ, không phải quy luật mọi ngôn ngữ.
| Nhiệm vụ | Phép đo hữu ích | Giới hạn |
|---|---|---|
| Kiểm tra độ dài bài | Từ hoặc ký tự Unicode | Không xác định token của model |
| Đo raw file bằng tokenizer cụ thể | Token IDs của tokenizer và settings đó | Có thể thiếu format chat và overhead |
| Ước lượng request API có cấu trúc | Cách đếm hỗ trợ hoặc định dạng chính xác | Có thể khác usage cuối |
| Đối chiếu usage tính tiền | Usage thật và định nghĩa tính phí hiện tại | Không là estimate request nhà cung cấp khác |
Đếm mẫu cục bộ với tokenizer đã biết
Với định dạng Hugging Face tokenizers, nạp tokenizer.json cục bộ đúng và encode tệp UTF-8. Ghi model/tokenizer ID, revision tệp, phiên bản package và có special tokens không. Ví dụ dùng API tokenizers 0.23.2, tắt padding/truncation và đếm raw text không thêm special tokens.
Lấy tệp tokenizer từ phân phối chính thức của model định dùng. Ví dụ không tải model, không gửi text lên server và không dựng toàn bộ định dạng chat API lưu trữ. Count chỉ có ý nghĩa khi tokenizer cùng thiết lập khớp câu hỏi đang đo; chạy được mã chưa có nghĩa đúng hóa đơn.
# Example environment: tokenizers==0.23.2
from pathlib import Path
from importlib.metadata import version
from tokenizers import Tokenizer
# Use the matching tokenizer.json already saved locally.
tokenizer = Tokenizer.from_file("tokenizer.json")
tokenizer.no_padding()
tokenizer.no_truncation()
text = Path("sample.txt").read_text(encoding="utf-8")
encoded = tokenizer.encode(text, add_special_tokens=False)
print("tokenizers version:", version("tokenizers"))
print("raw-text tokens:", len(encoded.ids))
# Record tokenizer identity/revision separately.
# This is not a complete chat-request or billing count.Tính toàn bộ request khi lập context
Request chat có thể gồm hướng dẫn hệ thống, hội thoại trước, đoạn truy xuất, định nghĩa công cụ và format ngoài message mới. Chat template thêm control tokens quanh roles và ranh giới message. Chỉ đếm đoạn cuối dễ đánh giá input thấp hơn thật.
Với dịch vụ lưu trữ, dùng chức năng đếm được tài liệu hỗ trợ cho loại input của bạn khi có. Tài liệu Claude mô tả structured input counting và trường hợp cần usage thực. Tôn trọng giới hạn estimate, nhất là tools, images và documents; không mặc định mọi đầu vào chỉ là text.
Đừng dán credentials hoặc nội dung khách nhạy cảm vào counter lạ. Tokenizer cục bộ giúp raw text tại máy; endpoint nhà cung cấp nhận request được gửi. Chọn luồng phù hợp dữ liệu trước khi đo và phân biệt phần xử lý tại máy với phần truyền đi.
Lập bảng so có thể tái lập
Chọn mẫu đại diện: tin hỗ trợ, code, bảng và đoạn ở từng ngôn ngữ ứng dụng. Giữ nguyên bytes đầu vào để không vô tình đổi newline, dấu câu hay spaces giữa lần chạy. Mẫu đã đổi không thể dùng để quy mọi khác biệt cho tokenizer.
Ghi ID và revision, special-token setting, raw count, full-request estimate nếu có. Để giá trị chưa đo trống thay vì điền tỷ lệ đoán. Hai tokenizer cho số khác là kết quả trên các mẫu này, không phải xếp hạng chất lượng ngôn ngữ của model.
| Mẫu thử | Tokenizer và revision | Số raw-text token | Số request đầy đủ hoặc estimate |
|---|---|---|---|
| Thông điệp hỗ trợ | Ghi identifier chính xác | Đo tại máy | Đo theo request format được hỗ trợ |
| Đoạn mã | Ghi identifier chính xác | Đo tại máy | Đo theo request format được hỗ trợ |
| Đoạn ngôn ngữ thứ hai | Ghi identifier chính xác | Đo tại máy | Đo theo request format được hỗ trợ |
Chừa output trước khi thêm input
Ví dụ giả định loại request của model có context kết hợp 32,000 token. Chừa 4,000 cho output và 2,000 làm buffer thì còn 26,000 input đã đo. Hướng dẫn, lịch sử và tools dùng 8,000, còn 18,000 cho nội dung truy xuất.
Đó là số giả định rõ ràng, không phải thông số model hiện hành. Nhà cung cấp có thể định nghĩa context, output, reasoning và tools khác nhau. Đọc hợp đồng hiện tại rồi đưa số thực vào công cụ context budget. Vừa giới hạn không bảo đảm mọi đoạn input đều hữu ích.
Hypothetical planning budget:
32,000 combined context
− 4,000 output reserve
− 2,000 planning buffer
= 26,000 input budget
26,000 − 8,000 instructions/history/tools
= 18,000 available for retrieved contentSo estimate với usage và chi phí thực
Sau thử nghiệm thật nhỏ, lưu usage fields trả về và so estimate của đúng request đó. Tách cached input, output, reasoning và các mục tính phí được công bố. Estimate thiếu tool definition không thể sửa chỉ bằng đổi tỷ lệ từ/token.
Dùng công cụ chi phí với token đã đo và giá hiện tại bạn cung cấp. Tách input/output, giữ đơn vị như giá mỗi triệu token. Bảng chi phí tốt tính lại được từ usage và rates đã nêu, không dựa vào một phép quy đổi từ chung cho mọi model.
Câu hỏi thường gặp
Một token luôn bằng bốn ký tự sao?
Không. Đó chỉ có thể là heuristic thô cho một số text và tokenizers. Ngôn ngữ, code, dấu câu, whitespace và thiết kế tokenizer ảnh hưởng kết quả.
Vì sao count cục bộ khác usage API?
Request có format, hướng dẫn, lịch sử, tools và input types không có trong raw sample; tokenizer hoặc special-token settings cũng có thể khác. So cùng request đầy đủ và định nghĩa nhà cung cấp.
Counter từ ở đây tính chính xác token model được không?
Không. Nó báo từ và ký tự Unicode. Dùng tokenizer khớp hoặc cách đếm được hỗ trợ, rồi đưa input đã đo vào công cụ chi phí cùng context.
Nguồn & định nghĩa
- Hugging Face LLM Course: Tokenizers
- Claude Platform: Token counting
- Hugging Face tokenizers 0.23.2: published Python package and API examples
- Hugging Face Transformers: Chat templates
Ngày kiểm tra phương pháp: