共计 1716 个字符,预计需要花费 5 分钟才能阅读完成。
背景介绍
Claude 上下文窗口 是模型处理单次请求时能够记忆的最大文本量,以 token 为单位计量。每个 token 可以简单理解为一个单词或汉字的一部分(比如英文单词平均 1.2 个 token,中文汉字约 2 个 token)。

- 窗口大小直接影响 API 调用:超过限制会导致请求直接被拒绝
- 不同模型版本窗口不同(如 Claude- 2 默认约 100K tokens)
- 完整对话中的提示词 + 用户输入 + 历史记录都会计入消耗
统计原理
每次 API 调用后会返回详细的 token 使用数据,主要包含:
- input_tokens:本次请求消耗的 token 数(含系统提示)
- output_tokens:模型响应消耗的 token 数
- total_tokens:input + output 总和
计算示例:
请求内容:"你好,请总结这篇文章"(5 tokens)系统提示:"你是一个助手"(6 tokens)模型响应:"好的,这是总结..."(20 tokens)实际统计:input_tokens = 5 + 6 = 11
output_tokens = 20
total_tokens = 31
代码实现
以下是 Python 示例,展示如何获取用量数据:
import anthropic
client = anthropic.Anthropic(api_key="your_api_key")
response = client.messages.create(
model="claude-3-opus-20240229",
max_tokens=1000,
messages=[{"role": "user", "content": "解释量子计算基础"}]
)
# 获取用量统计
print(f"输入 token 数: {response.usage.input_tokens}") # 用户提问 + 系统提示
print(f"输出 token 数: {response.usage.output_tokens}") # 模型回答
print(f"总 token 数: {response.usage.input_tokens + response.usage.output_tokens}")
关键参数说明:
– max_tokens:限制模型响应长度(直接影响 output_tokens)
– system提示词也会计入 input_tokens
优化策略
- 精简提示词:删除冗余描述(示例优化节省 15-30% token)
- 差:” 请用非常详细且专业的方式,分步骤解释 …”
-
好:” 分步解释:”
-
使用缩写回复:通过指令控制响应长度
messages=[{"role": "user", "content": "用 100 字内回答:如何优化 Claude token 使用?"}] -
分块处理长文本:将大文档拆分为多段(每段 <10K tokens)
-
复用对话历史:对于多轮对话,选择性携带关键上下文
-
启用流式响应:实时监控 token 消耗,及时终止不必要输出
避坑指南
错误 1 :忽视系统提示的 token 消耗
– 现象:实际 input_tokens 比用户输入多
– 解决:统计时包含 system 角色的内容
错误 2 :误用 max_tokens 参数
– 现象:output_tokens 超出预期
– 解决:设置max_tokens=min(需求值, 模型上限 -response.usage.input_tokens)
错误 3 :重复发送相同上下文
– 现象:相同内容多次计费
– 解决:使用 message_id 跟踪已处理内容
性能考量
通过测试不同参数组合发现:
- 温度参数(temperature):
- 高值 (>0.7) 导致输出更随机,平均增加 10-15% token
-
低值 (<0.3) 响应更确定,但可能需更多轮交互
-
响应格式要求:
- 要求 JSON 输出比自然语言多消耗约 5 -8% token
-
分点列表比段落节省 3 -5% token
-
多模态处理:
- 每张图片约消耗 1000+ tokens(取决于分辨率)
思考实践
- 如果你的应用场景平均 input_tokens 为 8K,如何设计自动分块处理逻辑?
- 当发现 output_tokens 持续超过 input_tokens 的 3 倍时,可能暴露什么问题?
实际测试中发现,通过优化提示词和响应格式,相同任务可减少 20-40% 的 token 消耗。建议定期审计历史请求的 usage 数据,建立用量基线作为优化参考。
