智能体每跑一轮都在花钱,不控制成本的智能体就是一台烧钱机器。
智能体的运行成本主要来自模型API调用费用。一个设计不当的智能体,完成一个简单任务可能调用十几次模型,每次都带大量上下文,成本迅速累积。对于面向用户的智能体应用,成本控制直接决定了商业模式的可持续性。
智能体的单次任务成本由以下部分组成:
| 成本项 | 计算方式 | 占比(典型) |
|---|---|---|
| 输入Token | 系统提示词+上下文×调用次数 | 40-60% |
| 输出Token | 模型生成内容×调用次数 | 20-30% |
| 工具调用 | 外部API调用费用 | 10-20% |
| 向量检索 | embedding+查询费用 | 5-10% |
| 基础设施 | 服务器、数据库等 | 5-10% |
最大头是输入Token,因为每一轮对话都要把系统提示词和历史消息重新发给模型。这意味着对话越长,单轮成本越高。
系统提示词在每次调用中都会发送,是成本的基本盘。优化方法:
一份500字的精简提示词和一份2000字的冗长提示词,在大规模调用下成本差异巨大。
对话历史是输入Token增长的主要来源:
第1轮: 系统提示词(500) + 用户消息(100) = 600 tokens
第5轮: 系统提示词(500) + 历史(1000) + 用户消息(100) = 1600 tokens
第10轮: 系统提示词(500) + 历史(2500) + 用户消息(100) = 3100 tokens
到第10轮,历史消息占了80%的输入。管理策略:
工具返回的数据经常远超需要。比如查询用户列表,API返回了完整的用户信息,但智能体只需要名字和ID。在工具函数中对返回结果做裁剪:
def search_users(keyword):
results = db.search(keyword)
# 只返回智能体需要的字段
return [{"id": r.id, "name": r.name} for r in results[:10]]
不是所有环节都需要最强模型:
| 环节 | 推荐模型级别 | 理由 |
|---|---|---|
| 意图识别 | 轻量模型 | 简单分类,不需要强推理 |
| 工具选择 | 中等模型 | 需要一定推理但不过于复杂 |
| 内容生成 | 强力模型 | 质量要求高 |
| 结果总结 | 中等模型 | 信息压缩,中等能力够用 |
| 格式校验 | 轻量模型/规则 | 可用代码替代模型 |
用轻量模型做简单环节,强力模型只用在刀刃上,整体成本可以降低50%以上。
对于相同输入,利用模型的缓存机制避免重复计算:
每次模型调用都有固定开销(延迟和成本)。减少往返的方法:
为每次任务设置最大调用次数,超过上限强制终止:
max_calls = 10
call_count = 0
while call_count < max_calls:
response = model.chat(messages)
call_count += 1
if response.is_final:
break
else:
return "任务超时,请缩小问题范围后重试。"
这既是成本控制,也是防止智能体陷入死循环的安全措施。
如果智能体面向用户服务,可以考虑成本分摊:
不同复杂度的任务消耗不同额度:
让用户感知到"复杂任务更贵",引导合理使用。
上线后持续监控成本:
建议设置成本告警:当单日成本超过阈值时自动通知,防止异常消耗。
成本控制是一个持续优化的过程。随着用户使用模式的变化和模型价格的调整,策略也需要定期复盘和调整。核心原则是:在不损害用户体验的前提下,把每一分钱花在刀刃上。