GPT Tokenizer 使用指南

发布于:2025-07-13 ⋅ 阅读:(19) ⋅ 点赞:(0)

GPT Tokenizer 使用指南

gpt-tokenizer 是一个用于计算文本 token 数量的 JavaScript 库,支持 GPT-3、GPT-4 和 ChatGPT 使用的 token 编码方式(基于 CL100k 基础)。

安装

npm install gpt-tokenizer
# 或
yarn add gpt-tokenizer

基本使用

1. 计算文本的 token 数量

import GPTTokenizer from 'gpt-tokenizer';

const tokenizer = GPTTokenizer.getTokenizer('gpt-4'); // 也支持 'gpt-3.5-turbo'

const text = "这是一个测试句子。";
const tokenCount = tokenizer.countTokens(text);

console.log(`Token 数量: ${tokenCount}`);

2. 编码文本为 token

const encoded = tokenizer.encode(text);
console.log(encoded); // 输出 token ID 数组

3. 解码 token 为文本

const decoded = tokenizer.decode(encoded);
console.log(decoded); // 输出原始文本

高级功能

1. 统计聊天对话的 token 数量

const conversation = [
  { role: 'system', content: '你是一个有帮助的助手。' },
  { role: 'user', content: '今天的天气怎么样?' }
];

const totalTokens = tokenizer.countChatTokens(conversation);
console.log(`对话 token 总数: ${totalTokens}`);

2. 检查 token 限制

const MAX_TOKENS = 4096; // GPT-4 的限制
const isWithinLimit = tokenizer.isWithinTokenLimit(text, MAX_TOKENS);

if (isWithinLimit) {
  console.log('文本在 token 限制范围内');
} else {
  console.log('文本超过了 token 限制');
}

3. 截断文本以符合 token 限制

const truncatedText = tokenizer.truncate(text, MAX_TOKENS);
console.log(truncatedText);

不同模型的 tokenizer

// 支持以下模型类型:
// - 'gpt-4', 'gpt-3.5-turbo' (默认使用 CL100k 基础)
// - 'text-davinci-003', 'code-davinci-002' (使用 p50k_base)
// - 'text-embedding-ada-002' (使用 cl100k_base)

const davinciTokenizer = GPTTokenizer.getTokenizer('text-davinci-003');
const embeddingTokenizer = GPTTokenizer.getTokenizer('text-embedding-ada-002');

注意事项

  1. 不同模型的 tokenizer 不同:确保为你的模型选择正确的 tokenizer 类型
  2. 非英语文本:中文等非英语文本通常会产生更多 token
  3. 精确性:这个库是 OpenAI 官方 tokenizer 的近似实现,可能有微小差异
  4. 性能:对于大量文本处理,考虑分批处理

实际应用示例

监控 API 调用的 token 使用

async function callChatGPT(messages) {
  const tokenCount = tokenizer.countChatTokens(messages);
  console.log(`发送请求,token 使用量: ${tokenCount}`);
  
  if (tokenCount > 4000) {
    console.warn('警告:接近 token 限制');
  }
  
  // 实际 API 调用代码...
}

构建聊天应用时限制历史记录

function trimConversation(conversation, maxTokens = 4000) {
  let totalTokens = 0;
  const trimmedConversation = [];
  
  // 从最新消息开始反向遍历
  for (let i = conversation.length - 1; i >= 0; i--) {
    const msgTokens = tokenizer.countChatTokens([conversation[i]]);
    
    if (totalTokens + msgTokens > maxTokens) {
      break;
    }
    
    trimmedConversation.unshift(conversation[i]);
    totalTokens += msgTokens;
  }
  
  return trimmedConversation;
}

这个库对于优化 GPT API 使用成本、避免超出 token 限制错误非常有用,特别是在处理长文本或复杂聊天场景时。


网站公告

今日签到

点亮在社区的每一天
去签到