TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 780 subscribers
Post #1712 14
如何在 JavaScript 中跨主流 LLM 计数 Token

在使用 LLM API 时,Token 计数往往被忽视,导致成本失控。本文提供统一的计数方法,支持 OpenAI、Anthropic、Google、DeepSeek、Llama 等模型,并给出成本计算示例。

OpenAI
OpenAI 已开源 BPE tokenizer,可直接在客户端获取精确 Token 数。
```bash
npm install gpt-tokenizer
```
```js
import { encode } from 'gpt-tokenizer/encoding/cl100k_base';
const tokens = encode('Your system prompt goes here.').length;
console.log(tokens); // 6
```
- gpt-3.5-turbo、gpt-4、gpt-4-turbo、gpt-4.1 使用 cl100k_base。
- gpt-4o、gpt-4o-mini、o1、o3 使用 o200k_base。
请根据调用的模型选择对应编码,否则计数会偏差。

Anthropic / Google / DeepSeek
这些供应商未公开 JavaScript tokenizer。可选两种方案:
1. 调用计数端点(如 Anthropic 的 /messages/count_tokens),返回精确值,但会产生网络延迟。
2. 字符估算,使用已知字符/Token 比例。
```js
const CHARS_PER_TOKEN = { anthropic: 3.8, google: 4.0, deepseek: 3.5, llama: 3.8 };
function estimateTokens(text, provider) {
const cpt = CHARS_PER_TOKEN[provider] || 3.8;
return Math.max(1, Math.round(text.length / cpt));
}
```
估算值应标记为“估算”,避免误导。

统一计数函数
```js
import { encode as encodeCl100k } from 'gpt-tokenizer/encoding/cl100k_base';
import { encode as encodeO200k } from 'gpt-tokenizer/encoding/o200k_base';

function providerOf(model) { /* 根据模型名返回 provider */ }
function openaiEncoding(model) { /* 返回 'o200k' 或 'cl100k' */ }

export function countTokens(text, model) {
const provider = providerOf(model);
if (provider === 'openai') {
const enc = openaiEncoding(model) === 'o200k' ? encodeO200k : encodeCl100k;
return { count: enc(text).length, mode: 'exact' };
}
const cpt = { anthropic: 3.8, google: 4.0, deepseek: 3.5, llama: 3.8 }[provider] || 3.8;
return { count: Math.max(1, Math.round(text.length / cpt)), mode: 'estimate' };
}
```

Token → 费用
```js
const PRICE = {
'gpt-4o': { in: 2.50, out: 10.00 },
'gpt-4o-mini': { in: 0.15, out: 0.60 },
'claude-3-5-sonnet-latest': { in: 3.00, out: 15.00 },
'gemini-1.5-pro': { in: 1.25, out: 5.00 },
'deepseek-chat': { in: 0.14, out: 0.28 },
};
function costOf(inTokens, outTokens, model) {
const p = PRICE[model];
if (!p) return null;
return (inTokens / 1_000_000) * p.in + (outTokens / 1_000_000) * p.out;
}
```
示例:costOf(1000, 500, 'claude-3-5-sonnet-latest') 约 0.0089 美元。

工具推荐
- 在线计数器:tokensbill.com/tools/token-counter,支持多模型一次性查看月度成本,浏览器内完成,无数据外泄。
- 但建议将计数逻辑集成到自己的代码中,实时监控每次调用成本,避免隐藏高昂费用。

通过在代码中实现精确或估算计数,并结合公开价格表,即可在开发阶段及时发现成本异常,避免类似 $847/日的账单误差。


github.com/your-repo/token-counter

#开发者 #工具 #OpenAI #Anthropic #Google #DeepSeek #Llama #Token计数 #成本管理
@DevToolboxHub
More from @devtoolboxhub
  1. Sep 26, 2026Xeno Core:TypeScript 后端架构框架 Node.js 复杂系统的架构选型往往决定代码的长期命运。开发者常在两条路之间纠结:要么依赖重度使用实验性装饰器和反射(如…
  2. Sep 25, 2026用 SLO 给 AI Agent 的行为定个预算 Grafana Labs 提出把可靠性工程里的错误预算(error budget)思路用到 AI Agent 上。延迟、token…
  3. Sep 25, 2026Xcode 27.2 改用 JSON 项目格式 Xcode 27.2 用基于 JSON 的 project.xcproj 取代了沿用多年的 project.pbxproj。新建项目…
  4. Sep 25, 2026PostgreSQL 的 max_prepared_transactions 该不该开 prepared transaction 是脱离会话独立存在的两阶段提交事务。执行 PREP…
  5. Sep 24, 2026RPI 实战:用 Claude Code 子代理拆分研发流程 一个约十几个产品的小团队(helpdesk、MES、邮件托管、高校 AI 助手)在 monorepo 里日常使用 Cl…
  6. Sep 24, 2026云原生架构下的依赖模拟工具问题 当前主流依赖模拟工具并非针对云原生架构设计。这些工具诞生于服务有固定发布周期、上游依赖变更缓慢且明确、测试团队可清晰掌握依赖行为的时代,而云原生架构…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →