@deepseek-kit/tokenizer 是一个独立的离线 Token 计数包。它内置了 DeepSeek 分词器词表,使用 Transformers.js 在本地进行文本编码——无需 API 密钥、无需网络请求、不产生 API 费用。适用于估算 Prompt 成本、校验上下文长度限制,以及在发送请求前监控 Token 用量。
npm i @deepseek-kit/tokenizer
pnpm i @deepseek-kit/tokenizer
bun add @deepseek-kit/tokenizer
yarn add @deepseek-kit/tokenizer
本包依赖 @huggingface/transformers(Transformers.js)。分词器词表文件已随包内置,运行时无需额外下载。
使用 countTokens() 获取文本的 Token 数量:
import { countTokens } from '@deepseek-kit/tokenizer'
const count = await countTokens('Hello, world!')
console.log(count)
// 4
这是估算一段文本发送到 DeepSeek API 时消耗 Token 数量最快的方式。
在发送请求前,先估算 Token 数量以计算大致成本:
import { countTokens } from '@deepseek-kit/tokenizer'
const prompt = '请解释 JavaScript 中 async/await 的工作原理。'
const tokenCount = await countTokens(prompt)
console.log(`Prompt Token 数: ${tokenCount}`)
DeepSeek 模型有最大上下文长度限制,在发送长文本前进行检查:
import { countTokens } from '@deepseek-kit/tokenizer'
const MAX_CONTEXT_TOKENS = 64000
async function validateContextLength(text: string) {
const count = await countTokens(text)
if (count > MAX_CONTEXT_TOKENS) {
throw new Error(`文本超过最大上下文长度(${count}/${MAX_CONTEXT_TOKENS} Token)`)
}
return count
}
跟踪多轮对话中 Token 的累积变化:
import { countTokens } from '@deepseek-kit/tokenizer'
const conversation: string[] = [
'用户: TypeScript 是什么?',
'助手: TypeScript 是 JavaScript 的类型化超集……',
'用户: 它和 JavaScript 有什么区别?',
]
const totalTokens = await Promise.all(conversation.map(countTokens))
const sum = totalTokens.reduce((acc, n) => acc + n, 0)
console.log(`对话 Token 数: ${sum}`)
计算文本中的 Token 数量。
function countTokens(text: string): Promise<number>
返回 Promise<number> —— Token 总数。