autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
47 lines (46 loc) • 1.42 kB
JavaScript
/**
* token-utils — 统一 Token 估算工具
*
* 项目内所有 token 估算统一使用此模块,避免各处使用不同的字符/token 比率。
*
* 算法:CJK 字符按 ~2 chars/token,ASCII 字符按 ~4 chars/token。
* 这与主流 tokenizer (tiktoken / SentencePiece) 的行为一致:
* - GPT-4 tokenizer: 英文 ~4 chars/token, 中文 ~1.5 chars/token
* - Gemini (SentencePiece): 类似比率
* - 本实现取保守值, 宁多不少
*
* @module shared/token-utils
*/
/**
* 估算文本的 token 数量
*
* @param text 待估算的文本
* @returns 估算 token 数(向上取整)
*/
export function estimateTokens(text) {
if (!text) {
return 0;
}
let tokens = 0;
for (const ch of text) {
// CJK Unified Ideographs + 扩展区 + 常见符号区
if (ch.charCodeAt(0) > 0x2e80) {
tokens += 0.5; // ~2 chars per token for CJK
}
else {
tokens += 0.25; // ~4 chars per token for English/ASCII
}
}
return Math.ceil(tokens);
}
/**
* 快速估算 — 纯 ASCII 场景下的快速路径(不区分 CJK,统一按 3.5 chars/token)
*
* 适用于已知只含英文 / 混合语言但无需精确的场景(如 ContextWindow 内部压缩阈值)。
*/
export function estimateTokensFast(text) {
if (!text) {
return 0;
}
return Math.ceil(text.length / 3.5);
}