AI API 别花冤枉钱:3招省下一半调用成本
上个月我帮一个创业团队做了 API 成本审计。他们的 Claude 3.5 Sonnet 月账单是 4200 块,GPT-4o 是 3800 块,加起来快 8000 了。
我翻了他们的调用日志,发现三个问题:
- 每次对话都把完整上下文发过去,包括 50 条历史消息
- 同一个查询重复调用了三次(前端重试没做幂等)
- 该用 4o-mini 的场景全用的 4o
优化完一个月后,账单降到 3200。省了 60%。
今天这篇,把这套方法拆解给你看。
第一招:算清楚你在花多少钱
很多人不知道自己的 prompt 到底消耗了多少 token。你问了一句"帮我写个 Python 函数",看起来不长,但加上 system prompt、上下文、输出,可能已经 2000 token 了。
Token 是什么? 简单理解就是 API 计费的单位。英文大约 1 个 token = 0.75 个单词,中文大约 1 个 token = 0.3-0.5 个字。
用 navbox 的 AI Token 计算器 可以快速估算你的 prompt 消耗多少 token。输入文本,它告诉你 GPT-4、Claude 3.5、Gemini Pro 各消耗多少。
比如这段文字:
你是一个资深 Python 工程师,请帮我写一个快速排序的实现,要求有类型注解和单元测试,代码要符合 PEP 8 规范。
这段 prompt 约 60 字,GPT-4o 消耗约 35 token,Claude 3.5 Sonnet 消耗约 42 token。看着不多?但你一天调用 500 次,就是 21000 token。按 Claude 3.5 的价格 $3/百万 input token 算,一天 0.06 美元,一个月 1.8 美元——单次确实便宜。
但如果你的 prompt 很长呢?比如你把整个项目的代码库摘要塞进去做上下文,那一次可能就是 10 万 token。10 万次调用就是 10 亿美元级别的 token 消耗。开玩笑的,但成本确实会飙升。
关键公式:
单次成本 = input_tokens × input_price + output_tokens × output_price
日成本 = 单次成本 × 日均调用次数
用 AI API 成本计算器 可以自动帮你算,选模型、填 token 数量,直接出结果。
第二招:砍掉冗余上下文
这是省钱的大头。
很多开发者有个习惯:每次调用 API 都把完整的对话历史传进去。对话越长,token 消耗越大。
举个例子。你在做一个聊天机器人,用户问了 20 个问题。每次回复都把这 20 轮对话全部发给模型,上下文窗口越来越大。到第 20 轮时,一次调用可能消耗 8000 token,而第一轮只用了 200 token。
怎么优化?三步走:
步骤 1:压缩历史
不是所有历史对话都需要保留。把早期的、不相关的对话删掉。保留最近 3-5 轮的上下文就够了。
具体做法:在代码里维护一个消息队列,超过 5 条就弹出最早的几条。如果用户提到了之前的某个关键点,可以用一句话摘要代替原始对话。
步骤 2:用更小的模型处理简单任务
不是每个问题都需要 GPT-4o 或 Claude 3.5 Opus。
- 分类、关键词提取 → 用 4o-mini 或 Claude Haiku
- 简单问答 → 用 Gemini Flash
- 复杂推理、长文写作 → 才用顶级模型
这样可以把 60% 的请求成本降到原来的 1/5 到 1/10。
步骤 3:缓存重复查询
如果你的应用经常收到相同或相似的问题,做好缓存。
比如用户问"Python 怎么读取 JSON 文件",第一次调用 API 生成回答并缓存。第二次同样的问题直接从缓存返回,不调用 API。
Redis 缓存是个好选择。key 用问题的哈希值,value 存回答和 token 用量。
第三招:优化 Prompt 写法
好的 prompt 不仅效果好,还能省 token。
精简 System Prompt
很多人写 system prompt 喜欢写一大段话。其实模型只需要关键信息。
❌ 啰嗦版:
你是一个经验丰富、知识渊博的程序员助手。你擅长各种编程语言,包括 Python、JavaScript、Go、Rust 等。你的回答应该准确、简洁、有帮助。请在回答中提供代码示例,并确保代码是可以运行的。
✅ 精简版:
你是程序员助手。回答要简洁,提供可运行代码。
两段意思一样,但第二段少了 60% 的 token。
用结构化指令替代长描述
❌ 长描述:
请先分析用户的需求,然后给出解决方案,最后提供一个代码示例。代码要有注释,并且要解释每一步的作用。
✅ 结构化:
按以下格式回答:
- 分析:简述需求
- 方案:列出步骤
- 代码:带注释的可运行代码
批量处理
如果一个 prompt 需要处理多条数据,尽量合并成一次调用。
比如你要给 10 篇文章分类,不要调 10 次 API。把它们打包成一个 prompt:“请对以下 10 篇文章分别分类:[文章列表]"。一次调用搞定,省了 9 次的固定开销。
实战:一个真实的优化案例
我有个朋友在做 AI 客服系统。初期方案:
- 每轮对话传全部历史(平均 15 轮)
- 全部用 GPT-4o
- 无缓存
- 日均调用 3000 次
月账单:约 6500 元。
优化后:
- 只传最近 3 轮对话
- 简单问题用 4o-mini(占比 70%),复杂问题用 GPT-4o(占比 30%)
- Redis 缓存命中率达 40%
- 日均有效调用降到 1800 次
月账单:约 1800 元。
省了 72%。
总结
省钱的核心就三件事:
- 算得清 — 用 Token 计算器搞清楚每次调用花了多少
- 砍冗余 — 压缩上下文、用小模型、加缓存
- 写好 prompt — 精简指令、结构化输出、批量处理
不需要什么高级技术,就是简单的工程优化。但效果立竿见影。
你现在用的 AI API 月花费是多少?在评论区聊聊你的省钱经验。