共计 1375 个字符,预计需要花费 4 分钟才能阅读完成。
背景介绍
Claude API 的计费是基于 token 数量的,无论是输入的提示词还是 AI 生成的回复都会消耗 token。Token 是文本处理的基本单位,对于英文来说,1 个 token 大约相当于 4 个字符,而对于中文等复杂语言,1 个 token 可能只代表 1 - 2 个字符。这意味着:

- 提示词越长,消耗的 token 越多
- 生成的回复越长,消耗的 token 越多
- 上下文保留越多,消耗的 token 越多
对于预算有限的开发者来说,合理控制 token 使用量是降低成本的关键。
核心概念:Token 计算方式
- 输入 token 计算 :包括系统提示、用户提示和保留的对话历史
- 输出 token 计算 :仅计算 Claude 实际生成的文本部分
- 最大 token 限制 :单次请求的输入 + 输出 token 总数不能超过模型上限(如 claude- 2 为 100k)
新手常见 token 浪费场景
- 冗余提示词 :包含不必要的说明或重复指令
- 过长上下文 :保留无关的历史对话
- 过度生成 :设置过大的 max_tokens 值
- 无效格式 :使用 JSON 等结构化输出但未有效利用
优化方案
提示词精简技巧
- 删除无关的问候语和客套话
- 合并相似的指令
- 使用简洁直接的表达方式
- 避免在提示词中包含示例(除非绝对必要)
上下文管理策略
- 只保留最近相关的对话历史
- 对长文档进行分块处理
- 使用摘要替代完整历史
- 设置合理的对话轮次限制
输出长度控制方法
- 根据需求设置合理的 max_tokens
- 使用 ”stop_sequences” 提前终止生成
- 要求 AI 给出简洁回答
- 对长回答进行分步请求
代码示例
import anthropic
# 初始化客户端
client = anthropic.Anthropic(api_key="your_api_key")
# 非优化版本(token 消耗高)response = client.messages.create(
model="claude-2.1",
max_tokens=4000, # 设置过大
messages=[{"role": "user", "content": "请详细解释机器学习的概念,包括所有相关细节..."} # 提示词过于宽泛
]
)
# 优化版本(token 消耗低)response = client.messages.create(
model="claude-2.1",
max_tokens=500, # 根据需求调整
messages=[
{
"role": "user",
"content": "用 3 句话解释机器学习核心概念" # 明确简洁的提示
}
],
stop_sequences=["\n"], # 遇到换行就停止
temperature=0.7 # 适当降低随机性
)
性能考量
- 提示词精简 :可减少 10-30% 输入 token
- 上下文优化 :历史对话管理可节省 20-50%token
- 输出控制 :合理设置 max_tokens 可避免 50% 以上的不必要输出
避坑指南
- 不要忽略 system 提示的 token 消耗
- 避免在循环中重复发送相同上下文
- 不要为所有请求使用统一的 max_tokens 值
- 注意特殊字符和空格也会计入 token
实践检查清单
- [] 审核提示词,删除冗余内容
- [] 设置适当的 max_tokens
- [] 实现上下文摘要功能
- [] 添加 stop_sequences 控制
- [] 监控 API 使用的 token 数量
思考题
- 如何在不损失对话质量的前提下,进一步压缩历史对话的 token 使用?
- 对于需要长文生成的场景,怎样的分块策略最有效?
- 系统提示优化有哪些具体的方法?
正文完
发表至: 未分类
近一天内
