引言:Tokenizer 革命 —— 为什么 2026 年你必须关心分词器
2026 年 4 月 20 日,Anthropic 发布 Claude Opus 4.7,这不仅仅是一次模型能力升级,更是一个分水岭事件:Claude 系列首次更换了 tokenizer。
Simon Willison 第一时间实测发现,Opus 4.7 的 token 计数相比 4.6 出现了系统性膨胀:
- 纯文本场景:1.46× 的 token 增长
- 高分辨率图像场景:3.01× 的 token 增长
- 大型 PDF 文档场景:1.08× 的 token 增长
在 Opus 4.7 与 4.6 定价相同(输入 $5/百万 token,输出 $25/百万 token)的前提下,实际使用成本上升了约 40%。这不是小数目 —— 对企业级 AI 应用而言,这意味着月度 API 支出可能从 $5,000 暴涨到 $7,000。
与此同时,Moonshot AI 的 Kimi 2.6 也登上 OpenRouter,以其独特的 HTML/JS 生成能力引发关注。2026 年 Q2,LLM 市场正在经历一个多模型并存、token 经济学变得复杂的新阶段。
本文将从三个维度深度解析:
- Tokenizer 变化的技术原理与成本影响
- 如何构建自动化 token 计数器进行模型间横向对比
- 2026 年主流模型选型实战指南(含 Python 完整实现)
阅读收获:
- 理解 BPE tokenizer 的工作原理及其对成本和性能的影响
- 掌握 Claude Opus 4.7 vs 4.6 vs Sonnet 4.6 vs Haiku 4.5 的 token 效率对比
- 通过 Python 代码构建自己的多模型 token 计数器
- 获得一份 2026 年 Q2 主流 LLM 选型决策框架
一、Tokenizer 技术深度解析:从 BPE 到 Claude 新分词器
要理解 Opus 4.7 的成本变化,首先要理解 tokenizer(分词器) 在 LLM 中的核心作用。
1.1 什么是 Tokenizer?
LLM 不直接处理文字,而是将文本切分为 token(词元),每个 token 映射到一个整数 ID,再输入到模型中。Token 的数量直接影响:
- 推理成本:API 按 token 数量计费
- 上下文窗口占用:token 越多,可容纳的内容越少
- 推理速度:token 越多,生成越慢
1.2 BPE(Byte-Pair Encoding)分词器的工作原理
主流 LLM(包括 Claude 系列)使用 BPE 分词算法。其核心思想是:从字符级别开始,迭代合并最高频的相邻符号对。
以下是 BPE 分词器的 Python 实现:
from collections import Counter
from typing import Dict, List, Tuple
class BPETokenizer:
"""简化版 BPE Tokenizer 实现"""
def __init__(self, merges: int = 1000):
self.merges = merges
self.vocab: Dict[str, int] = {}
self.merge_rules: List[Tuple[str, str]] = []
def get_stats(self, word_freq: Dict[str, int]) -> Dict[Tuple[str, str], int]:
"""统计相邻符号对的频率"""
pairs = Counter()
for word, freq in word_freq.items():
symbols = word.split()
for i in range(len(symbols) - 1):
pairs[(symbols[i], symbols[i + 1])] += freq
return pairs
def merge_vocab(self, pair: Tuple[str, str],
word_freq: Dict[str, int]) -> Dict[str, int]:
"""合并最高频的符号对"""
bigram = ' '.join(pair)
replacement = ''.join(pair)
new_vocab = {}
for word in word_freq:
new_word = word.replace(bigram, replacement)
new_vocab[new_word] = word_freq[word]
return new_vocab
def train(self, corpus: List[str]) -> Dict[str, int]:
"""训练 BPE 分词器"""
# 初始化:将每个字符视为独立 token
word_freq: Dict[str, int] = Counter(corpus)
word_freq = {
' '.join(list(word)) + ' </w>': freq
for word, freq in word_freq.items()
}
for _ in range(self.merges):
pairs = self.get_stats(word_freq)
if not pairs:
break
best_pair = max(pairs, key=pairs.get)
word_freq = self.merge_vocab(best_pair, word_freq)
self.merge_rules.append(best_pair)
# 构建最终词汇表
for word in word_freq:
for token in word.split():
self.vocab[token] = len(self.vocab)
return self.vocab
def encode(self, text: str) -> List[int]:
"""将文本编码为 token IDs"""
word = ' '.join(list(text)) + ' </w>'
for a, b in self.merge_rules:
word = word.replace(f'{a} {b}', f'{a}{b}')
return [self.vocab.get(t, 0) for t in word.split()]
# === 使用示例 ===
corpus = ["hello", "world", "helloworld", "hellohello", "worldwide"]
tokenizer = BPETokenizer(merges=50)
vocab = tokenizer.train(corpus)
tokens = tokenizer.encode("hello world")
print(f"Token IDs: {tokens}")
print(f"Vocabulary size: {len(vocab)}")二、Claude Opus 4.7 Tokenizer 变化实测
2.1 变化幅度实测数据
Simon Willison 用他的 Claude Token Counter 工具 进行了多场景实测:
| 测试场景 | Opus 4.6 Token 数 | Opus 4.7 Token 数 | 增长倍数 |
|---|---|---|---|
| 纯文本(系统 Prompt) | ~基准值 | ~1.46× | 1.46× |
| 高分辨率图片 3456×2234 | ~基准值 | ~3.01× | 3.01× |
| 低分辨率图片 682×318 | 310 | 314 | 1.01× |
| 30 页 PDF(15MB) | 56,482 | 60,934 | 1.08× |
关键发现:
- 图片 token 暴增是分辨率驱动的:低分辨率图片几乎不变,高分辨率图片暴增 3 倍。这是因为 Opus 4.7 支持最高 2,576 像素的长边(约 375 万像素),而旧版只支持 ~800 万像素总量的较低分辨率。
- 文本 token 增加 46%:这意味着同样一段 prompt,在 Opus 4.7 下消耗更多 token。
- PDF 文档影响最小:仅 8% 增长,说明新 token 器对结构化文本更友好。
2.2 成本影响计算
假设你的应用每月处理 1,000 万个输入 token 和 200 万个输出 token:
| 模型 | 输入成本 | 输出成本 | 月度总成本 |
|---|---|---|---|
| Opus 4.6 | $50 | $50 | $100 |
| Opus 4.7 | $73 (1.46×) | $73 (假设 1.46×) | $146 |
| 增幅 | +46% | +46% | +46% |
对于月支出 $10,000 的企业应用,这意味着 额外 $4,600/月 的成本。
三、构建多模型 Token 计数器(Python 实战)
要做出明智的模型选择,你需要在自己的业务场景下实测 token 消耗。Anthropic 提供了官方的 token counting API,我们可以用它构建一个多模型对比工具。
3.1 使用 Anthropic Token Counting API
以下是完整的 Python 实现,支持同时对比多个 Claude 模型的 token 消耗:
import anthropic
from typing import Dict, List
from dataclasses import dataclass
import json
@dataclass
class TokenCount:
"""单个模型的 token 计数结果"""
model: str
input_tokens: int
cache_creation_tokens: int = 0
cache_read_tokens: int = 0
def count_tokens_multi_model(
text: str,
models: List[str],
api_key: str
) -> Dict[str, TokenCount]:
"""
对比多个 Claude 模型的 token 消耗
Args:
text: 要计数的文本
models: Claude 模型 ID 列表
api_key: Anthropic API Key
Returns:
模型 -> TokenCount 的映射
"""
client = anthropic.Anthropic(api_key=api_key)
results = {}
for model_id in models:
response = client.messages.count_tokens(
model=model_id,
messages=[{"role": "user", "content": text}],
)
results[model_id] = TokenCount(
model=model_id,
input_tokens=response.input_tokens,
)
return results
def compare_and_report(
text: str,
api_key: str,
models: List[str] = None
) -> str:
"""生成 token 对比报告"""
if models is None:
models = [
"claude-opus-4-7-20260416",
"claude-opus-4-6-20251022",
"claude-sonnet-4-6-20251022",
"claude-haiku-4-5-20251022",
]
results = count_tokens_multi_model(text, models, api_key)
# 以第一个模型为基准计算相对倍数
baseline = list(results.values())[0].input_tokens
report_lines = [
"📊 Token 对比报告",
"=" * 50,
f"输入文本长度: {len(text)} 字符",
f"输入文本 token 估算: {baseline} (以 Opus 4.7 为基准)",
"",
f"{'模型':<35} {'Token 数':>10} {'相对倍数':>10}",
"-" * 55,
]
for model_id, count in results.items():
ratio = count.input_tokens / baseline if baseline else 0
report_lines.append(
f"{model_id:<35} {count.input_tokens:>10,} {ratio:>10.2f}×"
)
return "\n".join(report_lines)
# === 使用示例 ===
if __name__ == "__main__":
import os
# 测试文本:一个典型的系统 prompt
test_prompt = """
You are an expert software engineer.
Review the following code and provide:
1. Bug analysis
2. Performance suggestions
3. Security vulnerabilities
4. Refactored code
""" * 50
# 需要先设置环境变量 ANTHROPIC_API_KEY
api_key = os.environ.get("ANTHROPIC_API_KEY", "your-api-key")
report = compare_and_report(test_prompt, api_key)
print(report)import openai
from typing import Dict, List
import tiktoken
class MultiModelTokenAnalyzer:
"""多模型 Token 分析器 —— 支持 OpenAI 和 Anthropic 模型"""
# 模型到 tiktoken 编码的映射
ENCODING_MAP = {
"gpt-4o": "o200k_base",
"gpt-4o-mini": "o200k_base",
"gpt-4-turbo": "cl100k_base",
"gpt-3.5-turbo": "cl100k_base",
"o1": "o200k_base",
"o3": "o200k_base",
"o3-mini": "o200k_base",
}
def __init__(self, openai_key: str, anthropic_key: str):
self.openai_client = openai.OpenAI(api_key=openai_key)
self.anthropic_client = openai.Anthropic(api_key=anthropic_key)
def count_tiktoken(self, text: str, model: str) -> int:
"""使用 tiktoken 库估算 OpenAI 模型 token 数"""
encoding_name = self.ENCODING_MAP.get(model, "cl100k_base")
enc = tiktoken.get_encoding(encoding_name)
return len(enc.encode(text))
def analyze_prompt_efficiency(
self,
prompt: str,
models_to_compare: List[str]
) -> Dict:
"""分析多个模型对同一 prompt 的 token 效率"""
results = {}
for model in models_to_compare:
if model.startswith("gpt") or model.startswith("o"):
tokens = self.count_tiktoken(prompt, model)
cost_per_m = self._get_openai_price(model)
else:
# Anthropic 模型需要 API 调用
tokens = None # 需要 API 调用
cost_per_m = self._get_anthropic_price(model)
results[model] = {
"tokens": tokens,
"estimated_cost_per_1k": round(
(cost_per_m / 1_000_000) * 1000, 4
) if cost_per_m else None,
}
return results
def _get_openai_price(self, model: str) -> float:
"""2026 年 Q2 OpenAI 模型价格(输入 $/M token)"""
prices = {
"gpt-4o": 2.50,
"gpt-4o-mini": 0.15,
"gpt-4-turbo": 10.00,
"o1": 15.00,
"o3": 10.00,
"o3-mini": 1.10,
}
return prices.get(model, 0)
def _get_anthropic_price(self, model: str) -> float:
"""2026 年 Q2 Anthropic 模型价格(输入 $/M token)"""
prices = {
"claude-opus-4-7": 5.00,
"claude-opus-4-6": 5.00,
"claude-sonnet-4-6": 3.00,
"claude-haiku-4-5": 0.25,
}
return prices.get(model, 0)
# === 使用示例 ===
if __name__ == "__main__":
analyzer = MultiModelTokenAnalyzer(
openai_key="sk-...",
anthropic_key="sk-ant-..."
)
test_prompt = "Analyze this Python code for bugs..." * 100
results = analyzer.analyze_prompt_efficiency(
test_prompt,
models_to_compare=[
"gpt-4o",
"gpt-4o-mini",
"o3-mini",
"claude-opus-4-7",
"claude-sonnet-4-6",
]
)
print(f"{'模型':<25} {'估算 Token':>12} {'$/1K tokens':>14}")
print("-" * 51)
for model, data in results.items():
tokens = data["tokens"] or "N/A"
cost = data["estimated_cost_per_1k"] or "N/A"
print(f"{model:<25} {str(tokens):>12} {str(cost):>14}")四、2026 年 Q2 主流模型选型决策矩阵
了解了 token 经济学后,我们来构建一个实用的模型选型框架。不同场景下,最优模型选择截然不同。
4.1 全面对比表
| 维度 | Claude Opus 4.7 | Claude Opus 4.6 | Claude Sonnet 4.6 | Claude Haiku 4.5 | GPT-4o | o3-mini |
|---|---|---|---|---|---|---|
| 输入价格 ($/M) | $5.00 | $5.00 | $3.00 | $0.25 | $2.50 | $1.10 |
| 输出价格 ($/M) | $25.00 | $25.00 | $15.00 | $1.25 | $10.00 | $4.40 |
| 实际输入成本* | $7.30 | $5.00 | $3.00 | $0.25 | $2.50 | $1.10 |
| 上下文窗口 | 200K | 200K | 200K | 200K | 128K | 200K |
| 图像支持 | 最高 2576px | 最高 1024px | ✅ | ❌ | ✅ | ❌ |
| 推理速度 | 中等 | 中等 | 快 | 最快 | 中等 | 极快 |
| 代码能力 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 推理/数学 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 长文档理解 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
*Opus 4.7 按 1.46× token 膨胀率计算实际成本
4.2 选型决策树
五、实战:智能路由系统 —— 自动选择最优模型
理解了各模型的成本-能力权衡后,我们可以构建一个智能路由系统:根据请求特征自动选择最合适的模型,在质量和成本之间找到最佳平衡。
5.1 智能路由实现
以下是一个完整的 Python 实现,支持根据请求类型、长度、复杂度自动路由:
from enum import Enum
from dataclasses import dataclass
from typing import Dict, Optional, Callable
import re
class RequestType(Enum):
CODE = "code"
REASONING = "reasoning"
SUMMARIZATION = "summarization"
CREATIVE = "creative"
EXTRACTION = "extraction"
VISION = "vision"
@dataclass
class ModelProfile:
"""模型画像"""
id: str
price_per_m_input: float
price_per_m_output: float
token_multiplier: float # 相对基准的 token 膨胀率
context_window: int
max_image_resolution: int # 0 = 不支持图像
strengths: list # 擅长领域
@property
def effective_input_price(self) -> float:
return self.price_per_m_input * self.token_multiplier
@dataclass
class Request:
"""AI 请求"""
content: str
type: RequestType
has_image: bool = False
image_resolution: int = 0
max_budget_usd: Optional[float] = None
latency_sensitivity: str = "normal" # low/normal/high
# === 模型注册 ===
MODELS = {
"opus-4.7": ModelProfile(
id="claude-opus-4-7-20260416",
price_per_m_input=5.00,
price_per_m_output=25.00,
token_multiplier=1.46,
context_window=200_000,
max_image_resolution=2576,
strengths=["code", "reasoning", "vision", "long_context"],
),
"opus-4.6": ModelProfile(
id="claude-opus-4-6-20251022",
price_per_m_input=5.00,
price_per_m_output=25.00,
token_multiplier=1.00,
context_window=200_000,
max_image_resolution=1024,
strengths=["code", "reasoning", "long_context"],
),
"sonnet-4.6": ModelProfile(
id="claude-sonnet-4-6-20251022",
price_per_m_input=3.00,
price_per_m_output=15.00,
token_multiplier=1.00,
context_window=200_000,
max_image_resolution=1024,
strengths=["code", "general"],
),
"haiku-4.5": ModelProfile(
id="claude-haiku-4-5-20251022",
price_per_m_input=0.25,
price_per_m_output=1.25,
token_multiplier=1.00,
context_window=200_000,
max_image_resolution=0,
strengths=["speed", "batch", "extraction"],
),
"o3-mini": ModelProfile(
id="o3-mini-2025-01-31",
price_per_m_input=1.10,
price_per_m_output=4.40,
token_multiplier=1.00,
context_window=200_000,
max_image_resolution=0,
strengths=["reasoning", "math", "code"],
),
}
class SmartRouter:
"""智能模型路由器"""
def __init__(self, default_model: str = "sonnet-4.6"):
self.default_model = default_model
self.rules: list = []
def classify_request(self, request: Request) -> RequestType:
"""根据内容自动分类请求类型"""
text = request.content.lower()
code_patterns = [
r'\bdef\b', r'\bclass\b', r'\bfunction\b',
r'\bimport\b', r'\bconst\b', # triple-backtick pattern
r'\bfix.*bug\b', r'\brefactor\b',
]
reasoning_patterns = [
r'\bsolve\b', r'\bcalculate\b', r'\bprove\b',
r'\banalyze.*step\b', r'\blogic\b',
r'\bthink.*carefully\b',
]
for pattern in code_patterns:
if re.search(pattern, text):
return RequestType.CODE
for pattern in reasoning_patterns:
if re.search(pattern, text):
return RequestType.REASONING
return RequestType.CREATIVE
def estimate_cost(
self,
model: ModelProfile,
request: Request
) -> float:
"""估算请求成本"""
# 粗略估算:1 token ≈ 4 字符(英文)或 1.5 字符(中文)
char_count = len(request.content)
estimated_input_tokens = char_count // 2 # 中英文混合取中间值
# 输出通常为输入的 1-3 倍,取 2 倍估算
estimated_output_tokens = estimated_input_tokens * 2
input_cost = (estimated_input_tokens / 1_000_000) * model.effective_input_price
output_cost = (estimated_output_tokens / 1_000_000) * model.price_per_m_output
return input_cost + output_cost
def route(self, request: Request) -> str:
"""路由到最优模型"""
# 自动分类(如果未指定)
if request.type == RequestType.CREATIVE and not request.has_image:
request.type = self.classify_request(request)
candidates = list(MODELS.values())
best_model = None
best_score = float('-inf')
for model in candidates:
score = self._score_model(model, request)
if score > best_score:
best_score = score
best_model = model
return best_model.id
def _score_model(
self,
model: ModelProfile,
request: Request
) -> float:
"""为模型打分(越高越好)"""
score = 0.0
# 1. 能力匹配度(权重 40%)
type_match = request.type.value in model.strengths
if type_match:
score += 40
# 2. 图像支持(权重 20%)
if request.has_image:
if model.max_image_resolution >= request.image_resolution:
score += 20
else:
score -= 100 # 不支持的模型直接排除
# 3. 上下文窗口(权重 10%)
estimated_tokens = len(request.content) // 2
if estimated_tokens > model.context_window:
score -= 100 # 超出上下文窗口
elif estimated_tokens > model.context_window * 0.8:
score += 5 # 接近上限,勉强可用
else:
score += 10
# 4. 成本效率(权重 20%)
cost = self.estimate_cost(model, request)
if request.max_budget_usd and cost > request.max_budget_usd:
score -= 100
else:
score += 20 / max(cost * 1000, 0.001) # 成本越低分数越高
# 5. 延迟敏感度(权重 10%)
if request.latency_sensitivity == "high":
if "speed" in model.strengths:
score += 10
elif "batch" not in model.strengths:
score -= 5
return score
# === 使用示例 ===
if __name__ == "__main__":
router = SmartRouter()
# 测试场景 1:代码审查
code_request = Request(
content="def bubble_sort(arr):\n for i in range(len(arr)):\n for j in range(len(arr)-1):\n if arr[j] > arr[j+1]:\n arr[j], arr[j+1] = arr[j+1], arr[j]\n return arr\n\n请审查这段代码的问题并优化",
type=RequestType.CODE,
)
print(f"代码审查 -> {router.route(code_request)}")
# 测试场景 2:数学推理(预算敏感)
math_request = Request(
content="证明费马小定理:如果 p 是质数且 a 不是 p 的倍数,则 a^(p-1) ≡ 1 (mod p)",
type=RequestType.REASONING,
max_budget_usd=0.01,
)
print(f"数学推理 -> {router.route(math_request)}")
# 测试场景 3:高分辨率图像分析
vision_request = Request(
content="分析这张图片中的物体",
type=RequestType.VISION,
has_image=True,
image_resolution=2048,
)
print(f"图像分析 -> {router.route(vision_request)}")六、Kimi 2.6 与多模型竞争格局
除了 Claude 系列的 tokenizer 变革,2026 年 Q2 的多模型竞争格局也在快速演变。
6.1 Kimi 2.6 值得关注的能力
Moonshot AI 的 Kimi 2.6 已上线 OpenRouter,Simon Willison 实测发现其一个独特能力:生成包含 HTML + JavaScript UI 的完整可交互输出。
在 pelican riding bicycle 测试中,Kimi 2.6 不仅生成了动画代码,还构建了一个完整的交互式 HTML 页面,让用户可以控制动画参数。这展示了 Kimi 2.6 在前端代码生成和交互式设计方面的优势。
6.2 2026 年 Q2 模型格局总览
七、最佳实践建议
基于以上分析,给出 2026 年 Q2 的模型使用最佳实践:
7.1 成本控制策略
默认使用 Sonnet 4.6:在大多数场景下,Sonnet 4.6 提供了最佳的性价比。只有在 Opus 4.7 的推理能力确实是必需时才升级。
批量处理用 Haiku 4.5:对于摘要、分类、提取等任务,Haiku 4.5 的成本仅为 Opus 的 1/29,速度还快 3-5 倍。
注意 Opus 4.7 的 token 膨胀:如果必须使用 Opus 4.7,考虑以下策略来降低 token 消耗:
- 压缩 prompt(去除冗余描述)
- 使用 system prompt 缓存(cached tokens 成本更低)
- 图像预处理到适当分辨率(不需要 2576px 时不要传大图)
7.2 质量-成本平衡架构
"""
生产环境建议:多级降级策略
在实际生产中,建议实现多级降级机制:
1. 优先尝试最便宜的模型
2. 如果结果不满足阈值,自动升级到更强的模型
3. 记录每次升级的决策,用于持续优化路由规则
"""
from typing import Any, Optional
import logging
logger = logging.getLogger(__name__)
class FallbackChain:
"""多级降级模型链"""
def __init__(self, models: list, quality_threshold: float = 0.7):
"""
Args:
models: 按成本从低到高排列的模型列表
quality_threshold: 质量阈值(低于此值触发升级)
"""
self.models = models
self.quality_threshold = quality_threshold
def execute_with_fallback(
self,
prompt: str,
quality_checker: Callable[[str], float]
) -> tuple[str, str]:
"""
执行请求,必要时自动升级模型
Returns:
(使用的模型 ID, 结果内容)
"""
for model in self.models:
logger.info(f"尝试使用模型: {model.id}")
result = self._call_model(model, prompt)
quality = quality_checker(result)
logger.info(
f"模型 {model.id} 质量得分: {quality:.2f} "
f"(阈值: {self.quality_threshold})"
)
if quality >= self.quality_threshold:
logger.info(f"✅ {model.id} 满足质量要求")
return model.id, result
else:
logger.warning(
f"❌ {model.id} 质量不足,升级到下一个模型"
)
logger.error("所有模型均不满足质量要求")
return self.models[-1].id, result
def _call_model(self, model: ModelProfile, prompt: str) -> str:
"""调用模型的占位实现"""
# 实际实现中调用对应的 API
pass
# 使用示例:代码生成场景的降级链
code_generation_chain = FallbackChain(
models=[
MODELS["haiku-4.5"], # 先试最便宜的
MODELS["sonnet-4.6"], # 不够好则升级
MODELS["opus-4.7"], # 最后用最强大的
],
quality_threshold=0.8, # 代码质量要求较高
)总结与展望
Claude Opus 4.7 的 tokenizer 变化是 2026 年 LLM 领域最值得关注的技术变革之一。它提醒我们:
- 模型升级 ≠ 成本不变:即使标价相同,tokenizer 变化可能导致实际成本上升 40%+。
- 实测是关键:不同场景下的 token 膨胀率差异巨大(1.01× ~ 3.01×),必须在自己的业务场景下实测。
- 智能路由是必修课:多模型并存时代,自动选择最优模型不是锦上添花,而是降本增效的基础设施。
- Tokenizer 将成为新的竞争维度:更高效的 token = 更低的成本 = 更强的竞争力。未来各家模型都会在这一维度持续优化。
建议每个使用 LLM API 的团队都建立自己的 token 监控系统,持续追踪各模型在自己业务场景下的实际成本和效果。
成本警告:如果你当前在使用 Opus 4.7 处理高分辨率图像,实际 token 消耗可能比预期高 3 倍!请立即检查你的 API 账单,并考虑是否需要预处理图像分辨率。