1. Agent Token 成本为什么是 2026 年的核心痛点?
据 InformationWeek 2026 年 3 月报道,企业级 AI Agent 的持续运营成本已达 3,200--13,000/月,其中 Token 消耗占比高达 60%--80%。随着 Agent 从 demo 走向生产,Token 成本正在成为制约规模化部署的最大障碍。
1.1 Agent 为什么比 Chatbot 贵这么多?
用户请求
Agent 规划
消耗 ~2K tokens
工具调用 1
消耗 ~3K tokens
工具调用 2
消耗 ~3K tokens
工具调用 3
消耗 ~3K tokens
结果汇总
消耗 ~2K tokens
总计: ~13K tokens
单次对话仅 ~2K
一个典型 Agent 工作流的 Token 消耗构成:
| 消耗环节 | 占比 | 特征 |
|---|---|---|
| System Prompt(每次重复发送) | 30%--40% | 固定成本,随调用次数线性增长 |
| 工具描述(Tool Definitions) | 15%--25% | 工具越多,描述越长 |
| 对话历史(Context Window) | 20%--30% | 多轮对话累积增长 |
| 实际输出(Agent 响应) | 10%--20% | 唯一产生价值的部分 |
核心洞察 :Agent 80%+ 的 Token 消耗是重复的、可优化的。
2. 策略一:Prompt Caching------砍掉 60%--90% 输入成本
2.1 原理
Prompt Caching 的核心思想:对请求中不变的前缀部分进行缓存,后续请求只需发送变化的部分。
无 Caching
请求 1: System Prompt + Tools + Query 1
全量计费
请求 2: System Prompt + Tools + Query 2
全量计费
请求 3: System Prompt + Tools + Query 3
全量计费
有 Caching
请求 1: System Prompt + Tools + Query 1
全量计费(写入缓存)
请求 2: 缓存命中 + Query 2
仅 Query 2 计费
请求 3: 缓存命中 + Query 3
仅 Query 3 计费
2.2 各平台 Prompt Caching 实现对比
| 平台 | 实现方式 | 缓存 Token 折扣 | 缓存有效期 | 最小缓存长度 |
|---|---|---|---|---|
| Anthropic | 手动标记 cache_control |
90% off(仅收 10%) | 5 分钟 | 1,024 tokens |
| OpenAI | 自动缓存(prefix matching) | 50% off | 5--10 分钟 | 1,024 tokens |
| Google Gemini | Context Caching API | 75% off | 自定义(最长 1 小时) | 32,768 tokens |
| 智谱 GLM | 自动缓存 | ~50% off | 约 5 分钟 | ~1,024 tokens |
2.3 Anthropic Prompt Caching 代码示例
python
import anthropic
client = anthropic.Anthropic()
# 定义需要缓存的长 System Prompt 和工具描述
SYSTEM_PROMPT = """你是一个代码审查助手...
(此处省略 2000+ tokens 的详细指令)
"""
TOOL_DEFINITIONS = [
{
"name": "read_file",
"description": "读取指定路径的文件内容...",
"input_schema": {"type": "object", "properties": {"path": {"type": "string"}}}
},
# ... 更多工具定义
]
def call_agent_with_caching(user_query: str):
"""使用 Prompt Caching 调用 Agent"""
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system=[
{
"type": "text",
"text": SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"} # 标记缓存
}
],
tools=TOOL_DEFINITIONS, # 工具定义也会被缓存
messages=[{"role": "user", "content": user_query}]
)
# 查看缓存命中情况
usage = response.usage
print(f"缓存写入: {usage.cache_creation_input_tokens} tokens")
print(f"缓存命中: {usage.cache_read_input_tokens} tokens")
print(f"未缓存输入: {usage.input_tokens} tokens")
return response
# 第一次调用:写入缓存
result1 = call_agent_with_caching("审查这段代码的安全性")
# 缓存写入: 2500 tokens, 缓存命中: 0, 未缓存输入: 15
# 第二次调用:命中缓存,90% 折扣
result2 = call_agent_with_caching("检查这个函数的性能问题")
# 缓存写入: 0, 缓存命中: 2500 tokens, 未缓存输入: 18
2.4 成本节省计算
python
def calculate_caching_savings(
system_prompt_tokens: int,
tool_def_tokens: int,
avg_query_tokens: int,
num_calls_per_session: int,
price_per_1k_input: float = 0.003, # Claude Sonnet 输入价格
cache_discount: float = 0.9 # Anthropic 90% 折扣
) -> dict:
"""计算 Prompt Caching 节省的成本"""
cached_tokens = system_prompt_tokens + tool_def_tokens
# 无缓存:每次全量计费
cost_no_cache = (
num_calls_per_session * (cached_tokens + avg_query_tokens)
* price_per_1k_input / 1000
)
# 有缓存:第一次全量 + 写入费,后续命中缓存
cache_write_premium = 1.25 # Anthropic 缓存写入溢价 25%
cost_with_cache = (
# 第一次调用(写入缓存)
(cached_tokens * cache_write_premium + avg_query_tokens)
* price_per_1k_input / 1000
# 后续调用(命中缓存)
+ (num_calls_per_session - 1)
* (cached_tokens * (1 - cache_discount) + avg_query_tokens)
* price_per_1k_input / 1000
)
savings = cost_no_cache - cost_with_cache
savings_pct = savings / cost_no_cache * 100
return {
"无缓存成本": f"${cost_no_cache:.4f}",
"有缓存成本": f"${cost_with_cache:.4f}",
"节省金额": f"${savings:.4f}",
"节省比例": f"{savings_pct:.1f}%"
}
# 典型 Agent 场景:2500 token 系统提示 + 500 token 工具描述,每轮 10 次调用
result = calculate_caching_savings(
system_prompt_tokens=2500,
tool_def_tokens=500,
avg_query_tokens=100,
num_calls_per_session=10
)
for k, v in result.items():
print(f"{k}: {v}")
# 无缓存成本: $0.0930
# 有缓存成本: $0.0150
# 节省金额: $0.0780
# 节省比例: 83.9%
3. 策略二:Token-Efficient Tools------砍掉 14%--70% 输出成本
3.1 什么是 Token-Efficient Tools?
Anthropic 在 Claude 4 中推出的原生特性:让模型在工具调用时使用更紧凑的输出格式,减少冗余 JSON 结构和解释性文本。
| 场景 | Token 节省 | 说明 |
|---|---|---|
| 简单工具调用(1--2 参数) | 14% | JSON 结构压缩 |
| 复杂工具调用(5+ 参数) | 30%--50% | 省略冗余字段名和解释 |
| 多工具链式调用 | 50%--70% | 累积效果显著 |
3.2 启用方式
python
# Claude 4 Token-Efficient Tools
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
# 在 headers 中启用
extra_headers={
"anthropic-beta": "token-efficient-tools-2025-02-19"
},
tools=TOOL_DEFINITIONS,
messages=[{"role": "user", "content": "查询并汇总最近的销售数据"}]
)
启用后对 API 调用方式完全透明,无需修改工具定义或处理逻辑。
4. 策略三:智能模型路由------用对模型省 60%--80%
4.1 核心思想
不是所有 Agent 步骤都需要最强模型。通过按任务复杂度路由到不同模型,可以大幅降低成本。
简单任务
分类/提取/格式化
中等任务
摘要/分析/一般编码
复杂任务
推理/规划/高难度编码
Agent 请求
任务复杂度评估
轻量模型
GPT-4.1-mini / Claude Haiku
$0.25/1M tokens
中等模型
GPT-4.1 / Claude Sonnet
$2-3/1M tokens
旗舰模型
Claude Opus / o3
$10-15/1M tokens
4.2 路由策略实现
python
from enum import Enum
from typing import Optional
class TaskComplexity(Enum):
SIMPLE = "simple" # 分类、提取、格式转换
MEDIUM = "medium" # 摘要、分析、一般编码
COMPLEX = "complex" # 推理、规划、高难度编码
class ModelRouter:
"""Agent 智能模型路由器"""
MODEL_MAP = {
TaskComplexity.SIMPLE: {
"model": "gpt-4.1-mini",
"cost_per_1m_input": 0.40,
"cost_per_1m_output": 1.60,
},
TaskComplexity.MEDIUM: {
"model": "claude-sonnet-4-20250514",
"cost_per_1m_input": 3.00,
"cost_per_1m_output": 15.00,
},
TaskComplexity.COMPLEX: {
"model": "claude-opus-4-20250918",
"cost_per_1m_input": 15.00,
"cost_per_1m_output": 75.00,
},
}
# 关键词路由规则
SIMPLE_KEYWORDS = [
"classify", "extract", "format", "convert", "parse",
"分类", "提取", "格式化", "转换", "解析"
]
COMPLEX_KEYWORDS = [
"reason", "plan", "architect", "debug complex", "optimize",
"推理", "规划", "架构设计", "复杂调试", "性能优化"
]
@classmethod
def route(cls, task_description: str,
tool_name: Optional[str] = None) -> dict:
"""根据任务描述和工具名称路由到合适的模型"""
desc_lower = task_description.lower()
# 规则 1:基于关键词
if any(kw in desc_lower for kw in cls.COMPLEX_KEYWORDS):
complexity = TaskComplexity.COMPLEX
elif any(kw in desc_lower for kw in cls.SIMPLE_KEYWORDS):
complexity = TaskComplexity.SIMPLE
else:
complexity = TaskComplexity.MEDIUM
# 规则 2:特定工具强制路由
if tool_name in ["code_search", "file_read"]:
complexity = TaskComplexity.SIMPLE
elif tool_name in ["code_refactor", "architecture_review"]:
complexity = TaskComplexity.COMPLEX
return cls.MODEL_MAP[complexity]
# 使用示例
route_result = ModelRouter.route("提取这段文本中的所有邮箱地址")
print(f"路由到: {route_result['model']}")
# 路由到: gpt-4.1-mini(成本仅为 Opus 的 1/37)
route_result = ModelRouter.route("设计一个分布式缓存的架构方案")
print(f"路由到: {route_result['model']}")
# 路由到: claude-opus-4-20250918(复杂任务使用旗舰模型)
4.3 路由效果估算
一个典型 Agent 工作流中,各复杂度任务的分布:
| 任务复杂度 | 占比 | 无路由(全用旗舰) | 有路由 | 节省 |
|---|---|---|---|---|
| 简单任务 | 50% | $15/1M tokens | $0.40/1M tokens | 97% |
| 中等任务 | 35% | $15/1M tokens | $3/1M tokens | 80% |
| 复杂任务 | 15% | $15/1M tokens | $15/1M tokens | 0% |
| 加权平均 | 100% | $15/1M | $3.50/1M | 76.7% |
5. 三策略组合:实战成本对比
5.1 组合效果计算
python
def calculate_combined_savings(
monthly_input_tokens_m: float = 50, # 月输入 token(百万)
monthly_output_tokens_m: float = 10, # 月输出 token(百万)
base_input_price: float = 15.0, # 旗舰模型输入价格 $/1M
base_output_price: float = 75.0, # 旗舰模型输出价格 $/1M
) -> dict:
"""计算三策略组合的月度成本节省"""
# 基线成本(全用旗舰模型,无优化)
baseline_cost = (
monthly_input_tokens_m * base_input_price
+ monthly_output_tokens_m * base_output_price
)
# 策略 1: Prompt Caching(输入成本 -70%)
caching_input_saving = 0.70
# 策略 2: Token-Efficient Tools(输出成本 -40%)
efficient_tools_output_saving = 0.40
# 策略 3: 模型路由(加权成本 -77%)
routing_saving = 0.77
# 组合效果(非简单相乘,考虑重叠)
optimized_input_cost = (
monthly_input_tokens_m
* base_input_price
* (1 - caching_input_saving)
* (1 - routing_saving)
)
optimized_output_cost = (
monthly_output_tokens_m
* base_output_price
* (1 - efficient_tools_output_saving)
* (1 - routing_saving)
)
optimized_cost = optimized_input_cost + optimized_output_cost
total_saving = baseline_cost - optimized_cost
saving_pct = total_saving / baseline_cost * 100
return {
"月基线成本": f"${baseline_cost:,.0f}",
"优化后月成本": f"${optimized_cost:,.0f}",
"月节省金额": f"${total_saving:,.0f}",
"节省比例": f"{saving_pct:.1f}%",
"年节省金额": f"${total_saving * 12:,.0f}"
}
result = calculate_combined_savings()
for k, v in result.items():
print(f"{k}: {v}")
# 月基线成本: $1,500
# 优化后月成本: $155
# 月节省金额: $1,345
# 节省比例: 89.7%
# 年节省金额: $16,140
5.2 分层成本优化总览
| 优化策略 | 作用环节 | 节省比例 | 实施难度 | 推荐优先级 |
|---|---|---|---|---|
| Prompt Caching | 输入 Token | 60%--90% | ⭐(几行代码) | P0 --- 立即实施 |
| Token-Efficient Tools | 输出 Token | 14%--70% | ⭐(一个 header) | P0 --- 立即实施 |
| 智能模型路由 | 整体成本 | 60%--80% | ⭐⭐⭐ | P1 --- 本周实施 |
| Context 压缩 | 输入 Token | 30%--50% | ⭐⭐ | P2 --- 按需实施 |
| 输出长度限制 | 输出 Token | 20%--40% | ⭐ | P2 --- 按需实施 |
6. OpenClaw 生态下的 Token 成本优化
对于使用 OpenClaw(开源 Claude Code 替代方案)的团队,Token 成本优化有额外考量:
6.1 OpenClaw 多模型配置
OpenClaw 支持通过配置文件切换不同模型,可以实现手动模型路由:
json
// openclaw-config.json
{
"models": {
"default": "claude-sonnet-4-20250514",
"fast": "gpt-4.1-mini",
"powerful": "claude-opus-4-20250918"
},
"routing": {
"file_read": "fast",
"code_search": "fast",
"code_edit": "default",
"architecture_review": "powerful"
}
}
6.2 GLM Coding Plan 作为低成本替代
结合智谱 GLM-5.1 的 Coding Plan(¥49--469/月包月制),可以将部分 Agent 工作流迁移到 GLM 上,进一步降低 Token 计费成本:
| 方案 | 月费 / Token 成本 | 适用场景 |
|---|---|---|
| Claude Sonnet 按量付费 | 3/1M input + 15/1M output | 低频/突发使用 |
| GLM Coding Plan Lite | ¥49/月(包月) | 个人开发者日常编码 |
| GLM Coding Plan Pro | ¥149/月(包月) | 中等频率 Agent 工作流 |
| APIYI 等第三方平台 | ~50% off 官方价格 | 批量 API 调用 |
7. 成本监控与告警
优化不是一次性的,需要持续监控:
python
import time
from dataclasses import dataclass, field
from typing import List
@dataclass
class TokenUsageTracker:
"""Token 用量追踪器"""
records: List[dict] = field(default_factory=list)
daily_budget_usd: float = 10.0
def record(self, model: str, input_tokens: int,
output_tokens: int, cached_tokens: int = 0):
"""记录一次 API 调用的 Token 用量"""
self.records.append({
"timestamp": time.time(),
"model": model,
"input_tokens": input_tokens,
"output_tokens": output_tokens,
"cached_tokens": cached_tokens,
})
# 检查是否超预算
daily_cost = self.get_daily_cost()
if daily_cost > self.daily_budget_usd * 0.8:
print(f"⚠️ 警告: 今日成本已达 ${daily_cost:.2f},"
f"预算 ${self.daily_budget_usd:.2f} 的 "
f"{daily_cost/self.daily_budget_usd*100:.0f}%")
def get_daily_cost(self) -> float:
"""计算今日总成本"""
today_start = time.time() - 86400
today_records = [
r for r in self.records if r["timestamp"] > today_start
]
# 简化计算,实际需要按模型分别计价
total = sum(
(r["input_tokens"] * 3 + r["output_tokens"] * 15) / 1_000_000
for r in today_records
)
return total
def get_cache_hit_rate(self) -> float:
"""计算缓存命中率"""
total_input = sum(r["input_tokens"] for r in self.records)
total_cached = sum(r["cached_tokens"] for r in self.records)
if total_input == 0:
return 0.0
return total_cached / (total_input + total_cached) * 100
# 使用示例
tracker = TokenUsageTracker(daily_budget_usd=10.0)
tracker.record("claude-sonnet-4", 3000, 500, cached_tokens=2500)
print(f"缓存命中率: {tracker.get_cache_hit_rate():.1f}%")
8. 小结与行动建议
Agent Token 成本优化是 2026 年 AI 工程化的核心挑战。通过 Prompt Caching + Token-Efficient Tools + 智能模型路由 的三策略组合,可以实现 70%--80% 的成本降低,将 Agent 从"烧钱实验"变为"可持续生产力工具"。
你的下一步行动:
- 今天就做 (5 分钟):在你的 Agent 代码中加上
cache_control标记,开启 Prompt Caching - 今天就做 (1 分钟):加上
anthropic-beta: token-efficient-tools-2025-02-19header - 本周实施:梳理你的 Agent 工作流中各步骤的复杂度,实现基础模型路由
- 持续监控:部署 Token 用量追踪,设置日/周预算告警
- 评估替代模型:在非关键路径上尝试 GLM-5.1 或 GPT-4.1-mini 作为低成本替代
如果这篇成本优化指南帮你省下了真金白银:
👍 点赞收藏,这可能是你今年 ROI 最高的一次技术阅读
💬 你的 Agent 月 Token 花费是多少?用了哪些降本策略?评论区交流实战经验!
🔔 关注我,每天更新 AI 工程实战干货,下一篇将深入分析各大模型 API 的隐藏计费陷阱!