引言:为什么 Agent 一上线,成本就开始"失控"?
很多团队在做 AI Agent 时,都会经历一个阶段:
text
Demo 阶段:成本几乎可以忽略
上线之后:账单开始爆炸
尤其是当你引入:
- ReAct Agent
- 多 Tool 调用
- Memory
- 长上下文
- 多轮对话
你会很快发现:
成本不是线性增长,而是指数级增长。
例如:
- 一次用户请求 → 5 次模型调用
- 每次调用 → 上千 token
- 再叠加 Memory → token 越来越长
最后变成:
text
一次请求消耗 5000~20000 tokens
如果你有 1000 个用户,这就是一个非常真实的成本问题。
所以这一篇,我们专门讲清楚:
- Agent 成本为什么容易失控
- Token 优化的核心方法
- 如何用 LangSmith 做成本监控
- 国产模型 vs OpenAI 成本对比
- 生产级成本控制策略
- 一个简单可用的成本计算器代码
一、为什么 Agent 成本容易失控?
先看几个最常见的"隐形成本黑洞"。
1. 长上下文(Memory + 历史对话)
text
第1轮:100 tokens
第5轮:500 tokens
第10轮:1500 tokens
因为每一轮都在叠加历史。
问题是:
模型每次都要重新读全部上下文。
2. ReAct 多轮调用
一个简单问题:
text
帮我查天气
在 Agent 里可能变成:
text
LLM → Tool → LLM
复杂一点:
text
LLM → Tool → LLM → Tool → LLM
每一步都在消耗 token。
3. 规划型 Agent(Plan-and-Execute)
例如:
text
先生成计划(10步)
→ 每一步再调用模型
这类 Agent 的特点是:
Token 消耗 ≈ 步骤数 × 每步上下文
4. 重复调用(循环 / Retry)
例如:
- Agent 死循环
- Tool 调用失败反复重试
这些都会导致:
成本 silently 爆炸
5. Prompt 写得太长
例如:
text
System Prompt:2000 tokens
Few-shot:3000 tokens
每次调用都带上。
二、核心优化思路:不是"省 token",而是"减少无效 token"
很多人会问:
怎么减少 token?
真正更准确的说法是:
减少无效 token。
也就是:
- 不必要的上下文
- 重复信息
- 不参与决策的信息
下面是最有效的几种方法。
三、优化方法 1:Prompt 压缩(最立竿见影)
问题
很多 Prompt 长这样:
text
你是一个非常专业的AI助手...
(几十行规则)
优化思路
- 删除重复规则
- 合并表达
- 用结构化代替自然语言
示例
优化前:
text
请一步一步思考,并且在思考完成之后再输出答案,同时要确保答案准确。
优化后:
text
先分析,再给结论。
节省 token 的同时,效果不变。
四、优化方法 2:Prompt Caching(高价值场景)
如果你的 Prompt 是固定的:
text
System Prompt + Few-shot 示例
那么每次重复发送是非常浪费的。
可以使用:
Prompt Caching
思路:
- 固定 Prompt 缓存
- 只发送用户输入
适合:
- RAG
- FAQ
- 标准问答
五、优化方法 3:减少 Memory 体积
这是 Agent 成本优化里最关键的一点。
方法 1:Window Memory
text
只保留最近 3~5 轮
方法 2:Summary Memory
text
把历史压缩成一句话
方法 3:结构化 Memory
text
用户偏好 → 单独存数据库
原则:
不要把所有历史都塞给模型
六、优化方法 4:减少不必要的 Tool 调用
很多 Agent 最大的问题是:
什么都想调 Tool
优化方法:
- 明确规则:什么时候必须调用 Tool
- 简单问题直接回答
- 加 Guardrails
例如:
text
如果问题是简单数学,不要调用外部 API
七、优化方法 5:并行 Tool 调用
如果多个 Tool 可以并行:
text
查天气 + 查航班 + 查酒店
不要:
text
顺序调用(3次 LLM)
而是:
text
并行执行 → 合并结果
可以显著减少:
- latency
- token 消耗
八、实时监控:用 LangSmith 看成本
LangSmith 不只是调试工具,它也是成本监控工具。
你可以看到:
- 每一步 token 使用
- 每一步 latency
- 每一步 cost
例如:
text
LLM Call #1: 1200 tokens
LLM Call #2: 1500 tokens
LLM Call #3: 1800 tokens
如果你看到:
text
token 越来越大
那基本可以确定:
Memory 或 Prompt 在膨胀
九、自定义 Token 统计(简单实用)
如果你想自己控制成本,可以写一个简单的统计器。
python
import tiktoken
# 以 GPT 模型为例
encoding = tiktoken.encoding_for_model("gpt-4o")
def count_tokens(text: str) -> int:
return len(encoding.encode(text))
text = "北京今天晴天,25度"
print(count_tokens(text))
你可以在每次调用前后统计:
- prompt tokens
- output tokens
十、简单成本计算器(可直接用)
python
# 价格示例(美元 / 1K tokens)
PRICES = {
"gpt-4o": {"input": 0.005, "output": 0.015},
"deepseek": {"input": 0.001, "output": 0.002},
}
def calc_cost(model, input_tokens, output_tokens):
price = PRICES[model]
cost = (input_tokens / 1000) * price["input"] + \
(output_tokens / 1000) * price["output"]
return cost
print(calc_cost("gpt-4o", 2000, 500))
你可以把它接到:
- Agent 调用日志
- LangSmith 数据
- 自己的监控系统
十一、国产模型 vs OpenAI 成本对比
1. OpenAI
优点:
- 能力强
- Tool Calling 稳定
缺点:
- 成本较高
- 国内访问复杂
2. DeepSeek
优点:
- 成本极低
- 推理能力强(reasoner)
适合:
- 大规模调用
- Agent 推理场景
3. 通义千问(Qwen)
优点:
- 国内生态完善
- 成本可控
适合:
- 企业应用
4. 选择建议
text
高精度 → OpenAI
高性价比 → DeepSeek
国内合规 → Qwen
十二、生产级成本控制技巧
1. 设置 Token 上限
python
max_tokens=500
防止异常爆炸。
2. Guardrails
限制:
- 不必要 Tool 调用
- 无意义循环
3. A/B 测试模型
例如:
text
GPT-4 → DeepSeek → Qwen
对比:
- 成本
- 准确率
4. 缓存结果
例如:
text
相同问题 → 直接返回
结语
一句话总结:
Agent 成本问题,本质上是"无效 token 太多"。
优化的核心不是省,而是:
- 不让模型做不必要的工作
- 不让上下文无限膨胀
- 不让 Agent 无意义循环
当你能做到这三点,成本自然就下来了。
而真正成熟的 Agent 系统,一定是:
功能、效果、成本三者平衡。