Tokenizer 分词器

离线计算 DeepSeek 模型的 Token 用量——无需 API 调用,基于 Transformers.js。

@deepseek-kit/tokenizer 是一个独立的离线 Token 计数包。它内置了 DeepSeek 分词器词表,使用 Transformers.js 在本地进行文本编码——无需 API 密钥、无需网络请求、不产生 API 费用。适用于估算 Prompt 成本、校验上下文长度限制,以及在发送请求前监控 Token 用量。

安装

npm
pnpm
bun
yarn
npm i @deepseek-kit/tokenizer

基本用法

计算 Token 数

使用 countTokens() 获取文本的 Token 数量:

import { countTokens } from '@deepseek-kit/tokenizer'

const count = await countTokens('Hello, world!')
console.log(count)
// 4

这是估算一段文本发送到 DeepSeek API 时消耗 Token 数量最快的方式。

使用场景

估算 Prompt 成本

在发送请求前,先估算 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}`)

API 参考

countTokens()

计算文本中的 Token 数量。

function countTokens(text: string): Promise<number>
textrequiredstring
要计算 Token 数的输入文本。

返回 Promise<number> —— Token 总数。