最近大模型井喷式发展,无论是 GPT-5.6、Claude 3.5 还是国产 DeepSeek、Qwen,都在推动 AI 应用爆发。而 **Token** 作为大模型的核心计费单位,直接影响着你的开发成本和 API 调用效率。本文将从零开始,带你彻底搞懂 Token 的方方面面。

g)

---

## 📖 一、Token 到底是什么?

Token(令牌)是大语言模型处理文本的最小单位。简单来说,当你在和 ChatGPT 对话时,你的每句话都会被模型**切分成一个个 Token** 再进行计算。

### 怎么理解 Token?

**1 Token ≈ 1.5 个中文字 ≈ 0.75 个英文单词**

例如「今天天气真不错」这句话,会被切分成大约 4-6 个 Token:

`

"今天" → [11621]

"天气" → [3169]  

"真" → [1915]

"不错" → [8028, 748]

`

> 💡 **核心概念:** 你的每一次 API 调用,输入(Prompt)和输出(Completion)**都会消耗 Token**,且输出 Token 的计费通常比输入更贵。

### Tokenization 流程

下图展示了文本如何被模型处理成 Token ID 序列:

    A[原始文本输入<br/>「今天天气真不错」] --> B[Step 1: 字符编码<br/>UTF-8 Bytes → Unicode]

    B --> C[Step 2: BPE 分词<br/>Byte Pair Encoding]

    C --> D[Step 3: 词汇表匹配<br/>查找词汇表映射]

    D --> E[Token ID 序列输出<br/>[11621, 3169, ...]]

`

---

## 📊 二、主流模型 Token 定价对比

不同模型的 Token 价格差异巨大,选择适合的模型能大幅降低成本。

### 关键发现

| 模型 | 输入价格(/1M Tokens) | 输出价格(/1M Tokens) | 综合均价 |

|------|:---:|:---:|:---:|

| **GPT-4o** | .50 | .00 | **.38** |

| **GPT-4o-mini** | .15 | .60 | **.26** 🏆 |

| **Claude 3.5 Sonnet** | .00 | .00 | **.00** |

| **Claude 3 Haiku** | .25 | .25 | **.50** |

| **DeepSeek-V2** | .14 | .28 | **.18** 🏆 |

| **Qwen2.5-72B** | .90 | .90 | **.90** |

| **GLM-4-Plus** | .50 | .00 | **.88** |

| **ERNIE-4.0** | .80 | .20 | **.90** |

> 💡 **省钱建议**:日常开发、简单任务优先选 **GPT-4o-mini** 或 **DeepSeek-V2**,复杂推理再上旗舰模型。

---

## 💰 三、不同场景的 Token 消耗估算

知道价格还不够,还得知道**你的需求要用多少 Token**!

### 典型场景 Token 消耗

| 场景 | 输入 Token | 输出 Token | 估算成本(GPT-4o) |

|------|:---:|:---:|:---:|

| 短对话回复 | ~200 | ~100 | ≈.0015 |

| 文章翻译(500字) | ~800 | ~800 | ≈.01 |

| 代码调试 | ~2000 | ~1500 | ≈.02 |

| 长文总结(5000字) | ~6000 | ~1000 | ≈.025 |

| 文档翻译(2000字) | ~3000 | ~3000 | ≈.045 |

| 代码审查(大型PR) | ~8000 | ~4000 | ≈.08 |

---

## 🛠 四、Token 计算利器

### 4.1 使用 OpenAI 官方 tiktoken

`python

# 安装:pip install tiktoken

import tiktoken

# 获取编码器

enc = tiktoken.encoding_for_model("gpt-4o")

# 或使用:enc = tiktoken.get_encoding("cl100k_base")

text = "Hello, how are you today?"

tokens = enc.encode(text)

print(f"文本: {text}")

print(f"Token 数量: {len(tokens)}")

print(f"Token ID 列表: {tokens}")

# 解码还原

decoded = enc.decode(tokens)

print(f"解码还原: {decoded}")

# 实用函数:计算消息列表的 Token 数

def num_tokens_from_messages(messages, model="gpt-4o"):

    encoding = tiktoken.encoding_for_model(model)

    num_tokens = 0

    for message in messages:

        num_tokens += 4  # 每条消息的开销

        for key, value in message.items():

            num_tokens += len(encoding.encode(value))

            if key == "role":

                num_tokens += 1  # role 标记

    num_tokens += 2  # 回复标记

    return num_tokens

`

### 4.2 在线 Token 计算器

如果你不想写代码,可以直接用在线工具:

- **OpenAI Tokenizer**:platform.openai.com/tokenizer

- **Tiktokenizer**:tiktokenizer.vercel.app

- **计算工具**:many models token counter

---

## 🎯 五、Token 节省技巧(实战干货)

这是本文的**核心部分**!掌握这些技巧,你的 API 成本能下降 30-75%!

![chart_token_savings.png](outputs/chart_token_savings.png)

### 5.1 精简 Prompt(省 25%)

**❌ 差:**

`

你是一个智能的AI助手,你的任务是帮助用户回答问题...

你知识渊博,可以回答各种问题...

请根据以下内容回答...

`

**✅ 好:**

`

回答用户问题,基于以下内容:

[内容]

`

### 5.2 结构化提示(省 35%)

使用模板化结构,避免冗余描述:

`python

# 使用系统提示词缓存结构

system_prompt = {

    "role": "system",

    "content": """角色:技术支持专家

风格:简洁、专业

格式:Markdown

限制:控制在200字以内"""

}

user_prompt = {

    "role": "user",

    "content": f"问题:{user_question}"

}

`

### 5.3 限制输出长度(省 40%)

`python

response = client.chat.completions.create(

    model="gpt-4o-mini",

    messages=messages,

    max_tokens=500,  # 务必设置!防止无限输出

    temperature=0.3   # 低 temperature 可减少重复 Token

)

`

### 5.4 缓存系统消息(省 50%)

在多次对话中复用 System Prompt,只传递变化的 User Message:

`python

# 初始化时设置

system_prompt = "你是专业的代码审查助手..."

# 后续每次对话

messages = [

    {"role": "system", "content": system_prompt},  # 可以重复使用

    {"role": "user", "content": new_code_batch}

]

`

### 5.5 流式输出 + Early Stopping(省 60%)

`python

import json

def smart_stream(prompt, stop_keywords):

    response = client.chat.completions.create(

        model="gpt-4o-mini",

        messages=[{"role": "user", "content": prompt}],

        stream=True  # 启用流式

    )

    

    collected = []

    for chunk in response:

        if chunk.choices[0].delta.content:

            content = chunk.choices[0].delta.content

            collected.append(content)

            

            # 检测停止关键词

            text = "".join(collected)

            for keyword in stop_keywords:

                if keyword in text:

                    return text[:text.index(keyword)]

    return "".join(collected)

# 使用示例:让 GPT 写代码,检测到结束标记就提前停止

result = smart_stream("写一个 Python 快排", ["`"])

`

### 5.6 组合优化(省 75%)

同时应用以上所有策略,**成本直接降至原来的 1/4**!对于一个原本消耗 10,000 Token 的任务:

- **优化前**:10,000 Token → 成本 .025

- **优化后**:2,500 Token → 成本 **.006**

---

## ⚡ 六、开发实战:Token 管理最佳实践

### 6.1 预检 Token 数量

`python

def is_within_budget(messages, max_tokens=4000):

    """检查消息是否在预算内"""

    total = num_tokens_from_messages(messages)

    if total > max_tokens:

        return False, total

    return True, total

# 使用

ok, count = is_within_budget(messages)

if not ok:

    print(f"超预算了!当前 {count} Token,需要 {4000}")

    # 执行简化策略

    messages = truncate_context(messages)

`

### 6.2 成本追踪

`python

class TokenTracker:

    def __init__(self, model="gpt-4o-mini"):

        self.model = model

        self.total_input = 0

        self.total_output = 0

        self.prices = {

            "gpt-4o": (2.50, 10.00),

            "gpt-4o-mini": (0.15, 0.60),

            "claude-3-sonnet": (3.00, 15.00),

            "deepseek-chat": (0.14, 0.28)

        }

    

    def add_usage(self, input_tokens, output_tokens):

        self.total_input += input_tokens

        self.total_output += output_tokens

    

    def get_cost(self):

        price_in, price_out = self.prices.get(self.model, (0, 0))

        cost = (self.total_input / 1_000_000 * price_in +

                self.total_output / 1_000_000 * price_out)

        return round(cost, 4)

    

    def summary(self):

        return f"模型: {self.model} | 输入: {self.total_input:,} | 输出: {self.total_output:,} | 总成本: \"

# 使用

tracker = TokenTracker("gpt-4o-mini")

tracker.add_usage(input_tokens=500, output_tokens=200)

print(tracker.summary())

`

---

## 📝 七、常见问题 FAQ

### Q1:Token 和字数怎么换算?

- 英文:1 Token ≈ 0.75 个单词

- 中文:1 Token ≈ 1.5 个中文字

- 实际比例因内容而异

### Q2:为什么同样的文本 Token 数会不同?

不同模型的词汇表不同,Token 切分逻辑也有差异。建议**以实际模型的 Tokenizer 为准**。

### Q3:如何估算项目成本?

`

每月成本 = (月均输入 Token × 输入单价 + 月均输出 Token × 输出单价) / 1,000,000

`

假设日均 10,000 次调用,每次约 2,000 Token(输入)+ 500 Token(输出):

- GPT-4o:≈ ,125/月

- GPT-4o-mini:≈ .5/月(省 94%!)

### Q4:Token 不够用怎么办?

1. 升级模型上下文窗口(如 GPT-4o-128k)

2. 优化 Prompt(本文第五章技巧)

3. 分块处理长文本

4. 使用 RAG 替代全量输入

---

## 🔮 未来展望

随着模型不断发展,Token 策略也在进化:

- **更长上下文**:128K → 200K → 无限上下文

- **价格下降**:模型价格以每年 5-10 倍速度下降

- **更智能的 Token 管理**:动态上下文压缩技术日益成熟

但无论技术如何发展,**掌握 Token 的底层原理和优化技巧**,始终是每个 AI 开发者必备的核心能力。

---

## 🏆 总结

本文从 Token 基础概念出发,逐步深入到:

1. ✅ **理解什么是 Token** 以及切分原理

2. ✅ **主流模型价格对比**,帮你选择性价比最高的模型

3. ✅ **场景化 Token 消耗估算**,精确控制成本

4. ✅ **6 大 Token 节省技巧**,最多省 75% 成本

5. ✅ **实战代码示例**,开箱即用

> **觉得有用的话,欢迎点赞、收藏、转发!** 有疑问可以在评论区留言交流~

>

> **关注我**,持续分享 AI 开发实用技巧 🚀

---

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐