💰 成本控制与优化
🎯 Agent 成本的核心挑战
Agent 的成本模型与传统 API 服务有本质区别:每次用户请求可能触发多次 LLM 调用,每次调用消耗的 Token 数量取决于上下文长度和推理步骤数。如果不加控制,一个看似简单的用户问题可能消耗数十万 Token,单次请求成本高达数美元。
📊 Token 成本分析
理解 Token 消耗的构成是成本优化的第一步。Agent 的 Token 消耗通常分为以下几个部分:
| Token 来源 | 说明 | 典型占比 | 优化空间 |
|---|---|---|---|
| System Prompt | Agent 的系统指令和角色定义 | 5%~15% | 中 · 精简指令 |
| 对话历史 | 多轮对话的累积上下文 | 20%~60% | 高 · 上下文剪枝/摘要 |
| 工具定义 | function calling 的工具 Schema | 5%~10% | 中 · 按需加载工具 |
| 检索结果 | RAG 检索到的知识片段 | 10%~30% | 高 · 优化检索精度 |
| 推理步骤输出 | LLM 的思维链和工具调用决策 | 15%~35% | 中 · 限制思考步骤 |
主要模型 Token 价格参考 (2025年)
| 模型 | 输入价格 ($/M tokens) | 输出价格 ($/M tokens) | 性价比评级 |
|---|---|---|---|
| GPT-4o | $2.50 | $10.00 | ⭐⭐⭐ |
| GPT-4o-mini | $0.15 | $0.60 | ⭐⭐⭐⭐⭐ |
| Claude 3.5 Sonnet | $3.00 | $15.00 | ⭐⭐⭐ |
| Claude 3 Haiku | $0.25 | $1.25 | ⭐⭐⭐⭐ |
| DeepSeek-V3 | $0.27 | $1.10 | ⭐⭐⭐⭐⭐ |
| Gemini 2.0 Flash | $0.10 | $0.40 | ⭐⭐⭐⭐⭐ |
🔀 模型路由策略
不是所有任务都需要最强的模型。智能路由根据任务复杂度动态选择模型,在保证质量的前提下大幅降低成本。
📥 用户请求
→
🧠 复杂度评估器
→
简单任务
问候/FAQ/简单查询
→ GPT-4o-mini / Haiku
问候/FAQ/简单查询
→ GPT-4o-mini / Haiku
中等任务
信息整合/摘要/翻译
→ DeepSeek-V3 / Gemini
信息整合/摘要/翻译
→ DeepSeek-V3 / Gemini
复杂任务
多步推理/代码生成/规划
→ GPT-4o / Claude Sonnet
多步推理/代码生成/规划
→ GPT-4o / Claude Sonnet
路由策略实现方式
- 规则路由:基于关键词、用户角色、时间段等静态规则分配模型,实现简单但灵活性差
- 分类器路由:训练或使用 LLM 作为分类器,判断任务难度后路由,准确度高但有额外开销
- 级联路由:先用便宜模型尝试,结果不满足质量阈值时自动升级到更强模型
- 自适应路由:根据历史成功率、当前负载、成本预算动态调整路由策略
🗂️ 缓存策略
缓存是降低 LLM 调用成本最直接有效的手段。Agent 的缓存可以分为三个层次:
1. Prompt 缓存
对于重复使用的 System Prompt 和工具定义,利用 LLM 服务商的 Prompt Caching 机制,避免每次请求都全额计费。
- Anthropic Prompt Caching:缓存重复前缀,写入一次后可多次命中,命中部分按 10% 计费
- OpenAI Prompt Caching:自动缓存最近的 prompt 前缀,命中部分按 50% 计费
- 应用层缓存:在服务端缓存常用的 prompt 模板,减少序列化开销
2. 结果缓存
对于确定性或准确定性的请求(相同输入大概率返回相同结果),通过语义缓存或精确匹配缓存直接返回结果,完全跳过 LLM 调用。
- 精确匹配缓存:完全相同输入 → 直接返回缓存结果,命中率低但零成本
- 语义缓存:语义相似输入 → 复用缓存结果(需向量相似度阈值判断)
- 分层缓存:先精确匹配 → 再语义匹配 → 最后 LLM 调用
3. 工具结果缓存
工具调用(如搜索、数据库查询)的结果可以在一定时间内缓存,避免重复调用。特别是对于查询类工具,合理设置 TTL 可以大幅减少外部 API 调用次数。
- 为每个工具调用定义缓存策略(缓存键、TTL、失效条件)
- 搜索查询结果缓存 5~30 分钟;数据库查询缓存 1~5 分钟
- 修改类操作(写、删)不缓存,并主动失效相关读缓存
📦 批处理优化
对于非实时场景(如批量评估、离线分析、数据预处理),使用批处理 API 可以显著降低成本:
| 批处理方式 | 成本节省 | 延迟 | 适用场景 |
|---|---|---|---|
| OpenAI Batch API | 50% | 最长 24 小时 | 离线评估、数据集处理 |
| Anthropic Message Batches | 50% | 最长 24 小时 | 批量分析、内容审核 |
| 请求合并 | 10%~30% | 实时(秒级) | 多用户并发场景 |
| 并行工具调用 | 时间节约 | 减少等待 | 多工具并发执行 |
📊 成本优化方案对比
| 优化策略 | 成本节省 | 实现复杂度 | 质量影响 | 适用阶段 | 优先级 |
|---|---|---|---|---|---|
| Prompt 缓存 | 20%~40% | 低 | 无影响 | 立即可用 | 🔥 最高 |
| 结果缓存 | 30%~70% | 中 | 轻微(需调优) | 高频场景 | 🔥 高 |
| 模型路由 | 30%~60% | 中 | 可能有(简单任务) | 流量增长后 | 🔥 高 |
| 上下文剪枝 | 15%~40% | 中 | 轻微 | 长对话场景 | 🔥 高 |
| 工具缓存 | 10%~30% | 低 | 时效性损失 | 查询类工具 | 中 |
| 批处理 | 50% | 低 | 无影响(离线) | 离线场景 | 中 |
| 限制步骤数 | 20%~50% | 低 | 可能截断任务 | 所有场景 | 中 |
💡 优化路线图
- Week 1:接入可观测性(Token 用量仪表板)、启用 Prompt Caching
- Week 2-3:实现结果缓存(精确匹配 + 语义缓存)、定义模型路由规则
- Month 2:上线工具结果缓存、上下文窗口优化(剪枝 + 摘要)
- 持续优化:基于数据迭代路由策略、探索更便宜的模型替代方案