我算了 6 个月 AI API 账单:GPT-4 到底有多贵?省钱的 8 个实用技巧
我算了 6 个月 AI API 账单:GPT-4 到底有多贵?省钱的 8 个实用技巧
适合正在用或打算用 AI API(OpenAI、Claude、DeepSeek 等)的开发者和创业者。
本文基于 6 个月的真实账单数据,拆解成本结构,给出 8 个经过验证的省钱方法。
背景:AI API 比你想的贵
很多人觉得 AI API 不贵——“几块钱一次调用”。但当你把它集成到日常工作流中,每天调几十次,一个月下来账单会让你吃惊。
我记录了 6 个月的 AI API 支出,下面是真实数据。
6 个月账单拆解
月度支出趋势
| 月份 | 支出 | 调用次数 | 主要用途 |
|---|---|---|---|
| 第 1 月 | ¥180 | 约 600 次 | 试用各种 API |
| 第 2 月 | ¥320 | 约 1200 次 | 开始集成到工作流 |
| 第 3 月 | ¥450 | 约 1800 次 | 文章写作+代码助手 |
| 第 4 月 | ¥380 | 约 1600 次 | 优化后下降 |
| 第 5 月 | ¥290 | 约 2000 次 | 换模型+缓存 |
| 第 6 月 | ¥210 | 约 2200 次 | 进一步优化 |
6 个月总支出:¥1,830
按模型拆分
| 模型 | 6 个月支出 | 占比 | 说明 |
|---|---|---|---|
| GPT-4 | ¥980 | 54% | 最贵,但质量最好 |
| GPT-3.5-turbo | ¥420 | 23% | 便宜,简单任务用 |
| Claude-3 | ¥280 | 15% | 中文写作用 |
| Embedding | ¥95 | 5% | 向量化用 |
| DeepSeek | ¥55 | 3% | 最便宜,部分替代 GPT-4 |
关键发现:GPT-4 占了 54% 的支出,但只完成了 30% 的调用。它是"单价高、用量少"的模型。
按用途拆分
| 用途 | 月均支出 | 说明 |
|---|---|---|
| 文章写作 | ¥120 | 长文生成,token 消耗大 |
| 代码审查 | ¥45 | 每天 5-10 次 |
| 知识库问答 | ¥35 | RAG 检索+生成 |
| 选题打分 | ¥20 | 短 prompt,消耗小 |
| 其他(调试/测试) | ¥30 | 开发过程中的调试 |
Token 计费原理
省钱的前提是理解计费方式。
OpenAI 计费规则
| 模型 | 输入价格 | 输出价格 | 说明 |
|---|---|---|---|
| GPT-4 | ¥0.21/1K tokens | ¥0.42/1K tokens | 输出比输入贵 2 倍 |
| GPT-4-turbo | ¥0.07/1K tokens | ¥0.14/1K tokens | 比 GPT-4 便宜 3 倍 |
| GPT-3.5-turbo | ¥0.004/1K tokens | ¥0.008/1K tokens | 比 GPT-4 便宜 50 倍 |
| Embedding | ¥0.0001/1K tokens | - | 极便宜 |
Token 估算
1 个中文字 ≈ 1.5-2 个 token。
| 内容 | 大约 token 数 | GPT-4 成本 |
|---|---|---|
| 一句话(20 字) | 约 30 tokens | ¥0.006 |
| 一段话(200 字) | 约 300 tokens | ¥0.06 |
| 一篇文章(3000 字) | 约 4500 tokens | ¥0.9 |
| 一个代码文件(500 行) | 约 3000 tokens | ¥0.6 |
8 个省钱技巧
技巧 1:简单任务用便宜模型
不是所有任务都需要 GPT-4。
| 任务 | 推荐模型 | 理由 |
|---|---|---|
| 文章写作/创意 | GPT-4 / Claude | 质量要求高 |
| 代码审查 | GPT-4-turbo | 代码理解能力强 |
| 选题打分 | GPT-3.5-turbo | 简单逻辑,便宜够用 |
| 文本分类 | GPT-3.5-turbo | 分类任务不需要最强模型 |
| Embedding | text-embedding-3-small | 最便宜的 embedding 模型 |
| 格式转换/提取 | GPT-3.5-turbo | 纯格式操作,任何模型都能做 |
效果:把 70% 的调用从 GPT-4 换成 GPT-3.5-turbo,月支出从 ¥450 降到 ¥290。
技巧 2:减少输出 token
输出 token 是输入的 2 倍价格。减少输出能直接省钱。
# 反面:不控制输出长度response=client.chat.completions.create(model="gpt-4",messages=[{"role":"user","content":"解释 Python 装饰器"}]# 输出可能 1000+ tokens)# 正面:限制输出长度response=client.chat.completions.create(model="gpt-4",messages=[{"role":"user","content":"用 200 字以内解释 Python 装饰器"}],max_tokens=300# 硬性限制# 输出最多 300 tokens)效果:限制输出后,单次调用成本降低 40-60%。
技巧 3:缓存重复请求
很多请求是重复的——同一个问题问多次、同一个文档分析多次。
importhashlibimportjsonfrompathlibimportPath CACHE_DIR=Path("api_cache")CACHE_DIR.mkdir(exist_ok=True)defcached_call(messages,model="gpt-4",**kwargs):"""带缓存的 API 调用"""# 计算缓存 keycache_key=hashlib.md5(json.dumps({"model":model,"messages":messages},sort_keys=True).encode()).hexdigest()cache_file=CACHE_DIR/f"{cache_key}.json"# 检查缓存ifcache_file.exists():returnjson.loads(cache_file.read_text(encoding="utf-8"))# 调用 APIresponse=client.chat.completions.create(model=model,messages=messages,**kwargs)result=response.choices[0].message.content# 存入缓存cache_file.write_text(json.dumps(result,ensure_ascii=False),encoding="utf-8")returnresult效果:缓存命中率约 30%(特别是选题打分、格式转换等重复任务),月支出减少约 25%。
技巧 4:压缩 prompt
prompt 里的 system message 和上下文也按输入 token 收费。压缩 prompt 直接省钱。
# 反面:冗长的 system messagesystem="""你是一个非常专业的技术写作助手,擅长写各种类型的技术文章,包括但不限于教程、评测、复盘、方法论等。你的写作风格是口语化的,短句多,不用模板句...(500 字)"""# 正面:精简的 system messagesystem="""技术写作助手。风格:口语化、短句、无模板句。"""效果:system message 从 500 字压缩到 30 字,每次调用省约 700 tokens(约 ¥0.15)。
技巧 5:用 streaming 减少等待成本
虽然 streaming 不省钱(token 数一样),但能减少用户等待时间,间接减少"因为等太久而重新发送"的浪费。
stream=client.chat.completions.create(model="gpt-4",messages=[{"role":"user","content":"写一篇技术文章"}],stream=True)forchunkinstream:ifchunk.choices[0].delta.content:print(chunk.choices[0].delta.content,end="",flush=True)技巧 6:批量处理
OpenAI 有 Batch API,批量请求价格是实时的 50%。
# 批量提交请求(24 小时内返回结果)# 适合不急的任务:文章批量生成、数据批量分析batch_file="batch_requests.jsonl"withopen(batch_file,"w")asf:fortaskintasks:f.write(json.dumps({"custom_id":task["id"],"method":"POST","url":"/v1/chat/completions","body":{"model":"gpt-3.5-turbo","messages":task["messages"]}})+"\n")# 上传并创建批量任务# client.batches.create(input_file_id=batch_file_id, endpoint="/v1/chat/completions", ...)技巧 7:本地模型替代
简单任务用本地模型(Ollama),完全免费。
# 本地模型(免费)local_client=OpenAI(base_url="http://localhost:11434/v1",api_key="ollama")defsmart_call(prompt,task_type="simple"):"""根据任务类型选择模型"""iftask_type=="simple":# 简单任务用本地模型returnlocal_client.chat.completions.create(model="qwen2.5:14b",messages=[{"role":"user","content":prompt}]).choices[0].message.contenteliftask_type=="complex":# 复杂任务用 GPT-4returnclient.chat.completions.create(model="gpt-4",messages=[{"role":"user","content":prompt}]).choices[0].message.content技巧 8:监控账单,设预算上限
importtimeclassBudgetMonitor:"""API 支出监控"""def__init__(self,monthly_budget=300):self.monthly_budget=monthly_budget# 元self.spent=0defcheck(self,estimated_cost):"""检查是否超预算"""ifself.spent+estimated_cost>self.monthly_budget:raiseException(f"月度预算即将超支!已花 ¥{self.spent:.2f},预算 ¥{self.monthly_budget}")self.spent+=estimated_costdefestimate_cost(self,model,input_tokens,output_tokens):"""估算本次调用成本"""prices={"gpt-4":(0.21,0.42),"gpt-4-turbo":(0.07,0.14),"gpt-3.5-turbo":(0.004,0.008),}input_price,output_price=prices.get(model,(0.07,0.14))return(input_tokens*input_price+output_tokens*output_price)/1000# 使用monitor=BudgetMonitor(monthly_budget=300)cost=monitor.estimate_cost("gpt-4",500,1000)monitor.check(cost)省钱效果汇总
| 技巧 | 月省金额 | 难度 |
|---|---|---|
| 简单任务换便宜模型 | ¥120 | ⭐ |
| 限制输出长度 | ¥50 | ⭐ |
| 缓存重复请求 | ¥70 | ⭐⭐ |
| 压缩 prompt | ¥30 | ⭐ |
| 批量处理 | ¥40 | ⭐⭐ |
| 本地模型替代 | ¥60 | ⭐⭐⭐ |
| 监控预算 | 防超支 | ⭐ |
| streaming | 不省钱但省时间 | ⭐ |
| 合计 | 约 ¥370/月 |
踩坑记录
坑 1:缓存 key 设计不合理
症状:同样的问题因为多了个空格,缓存没命中。
原因:缓存 key 对输入的微小变化敏感。
解决:对 messages 做 normalize(去空格、排序)后再计算 hash。
坑 2:便宜模型质量不够
症状:用 GPT-3.5-turbo 写文章,质量明显下降。
原因:简单任务用便宜模型没问题,但创作类任务质量差距大。
解决:按任务类型分级,创作类用 GPT-4/Claude,格式类用 GPT-3.5。
坑 3:批量 API 有延迟
症状:Batch API 提交后要等 24 小时才返回结果。
原因:Batch API 是异步的,不保证实时性。
解决:急的任务用实时 API,不急的(如批量文章生成)用 Batch API。
坑 4:Embedding 模型选错
症状:用了 text-embedding-3-large(最贵的 embedding),200 篇文章索引花了 ¥50。
原因:large 比 small 贵 5 倍,但对中文的提升有限。
解决:用 text-embedding-3-small,中文场景够用。
坑 5:忘记设 max_tokens
症状:一次调用输出了 4000 tokens,花了 ¥1.7。
原因:没有设 max_tokens,AI 自由发挥写了一大堆。
解决:每次都设 max_tokens,根据任务预估合理上限。
总结
3 条核心经验:
按任务分级用模型。70% 的任务用 GPT-3.5-turbo 就够了,只在创作和复杂推理时用 GPT-4。这一步能省 40% 费用。
缓存是最容易落地的省钱技巧。代码量小、效果明显,30% 的重复请求直接免费。
监控账单比省钱更重要。设一个月度预算上限,超了就告警,避免"月底看到账单才发现花了 ¥1000"。
你每个月花多少钱在 AI API 上?有什么省钱经验?评论区交流。
