我算了 6 个月 AI API 账单:GPT-4 到底有多贵?省钱的 8 个实用技巧
我算了 6 个月 AI API 账单GPT-4 到底有多贵省钱的 8 个实用技巧适合正在用或打算用 AI APIOpenAI、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¥98054%最贵但质量最好GPT-3.5-turbo¥42023%便宜简单任务用Claude-3¥28015%中文写作用Embedding¥955%向量化用DeepSeek¥553%最便宜部分替代 GPT-4关键发现GPT-4 占了 54% 的支出但只完成了 30% 的调用。它是单价高、用量少的模型。按用途拆分用途月均支出说明文章写作¥120长文生成token 消耗大代码审查¥45每天 5-10 次知识库问答¥35RAG 检索生成选题打分¥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.68 个省钱技巧技巧 1简单任务用便宜模型不是所有任务都需要 GPT-4。任务推荐模型理由文章写作/创意GPT-4 / Claude质量要求高代码审查GPT-4-turbo代码理解能力强选题打分GPT-3.5-turbo简单逻辑便宜够用文本分类GPT-3.5-turbo分类任务不需要最强模型Embeddingtext-embedding-3-small最便宜的 embedding 模型格式转换/提取GPT-3.5-turbo纯格式操作任何模型都能做效果把 70% 的调用从 GPT-4 换成 GPT-3.5-turbo月支出从 ¥450 降到 ¥290。技巧 2减少输出 token输出 token 是输入的 2 倍价格。减少输出能直接省钱。# 反面不控制输出长度responseclient.chat.completions.create(modelgpt-4,messages[{role:user,content:解释 Python 装饰器}]# 输出可能 1000 tokens)# 正面限制输出长度responseclient.chat.completions.create(modelgpt-4,messages[{role:user,content:用 200 字以内解释 Python 装饰器}],max_tokens300# 硬性限制# 输出最多 300 tokens)效果限制输出后单次调用成本降低 40-60%。技巧 3缓存重复请求很多请求是重复的——同一个问题问多次、同一个文档分析多次。importhashlibimportjsonfrompathlibimportPath CACHE_DIRPath(api_cache)CACHE_DIR.mkdir(exist_okTrue)defcached_call(messages,modelgpt-4,**kwargs):带缓存的 API 调用# 计算缓存 keycache_keyhashlib.md5(json.dumps({model:model,messages:messages},sort_keysTrue).encode()).hexdigest()cache_fileCACHE_DIR/f{cache_key}.json# 检查缓存ifcache_file.exists():returnjson.loads(cache_file.read_text(encodingutf-8))# 调用 APIresponseclient.chat.completions.create(modelmodel,messagesmessages,**kwargs)resultresponse.choices[0].message.content# 存入缓存cache_file.write_text(json.dumps(result,ensure_asciiFalse),encodingutf-8)returnresult效果缓存命中率约 30%特别是选题打分、格式转换等重复任务月支出减少约 25%。技巧 4压缩 promptprompt 里的 system message 和上下文也按输入 token 收费。压缩 prompt 直接省钱。# 反面冗长的 system messagesystem你是一个非常专业的技术写作助手擅长写各种类型的技术文章包括但不限于教程、评测、复盘、方法论等。你的写作风格是口语化的短句多不用模板句...500 字# 正面精简的 system messagesystem技术写作助手。风格口语化、短句、无模板句。效果system message 从 500 字压缩到 30 字每次调用省约 700 tokens约 ¥0.15。技巧 5用 streaming 减少等待成本虽然 streaming 不省钱token 数一样但能减少用户等待时间间接减少因为等太久而重新发送的浪费。streamclient.chat.completions.create(modelgpt-4,messages[{role:user,content:写一篇技术文章}],streamTrue)forchunkinstream:ifchunk.choices[0].delta.content:print(chunk.choices[0].delta.content,end,flushTrue)技巧 6批量处理OpenAI 有 Batch API批量请求价格是实时的 50%。# 批量提交请求24 小时内返回结果# 适合不急的任务文章批量生成、数据批量分析batch_filebatch_requests.jsonlwithopen(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_idbatch_file_id, endpoint/v1/chat/completions, ...)技巧 7本地模型替代简单任务用本地模型Ollama完全免费。# 本地模型免费local_clientOpenAI(base_urlhttp://localhost:11434/v1,api_keyollama)defsmart_call(prompt,task_typesimple):根据任务类型选择模型iftask_typesimple:# 简单任务用本地模型returnlocal_client.chat.completions.create(modelqwen2.5:14b,messages[{role:user,content:prompt}]).choices[0].message.contenteliftask_typecomplex:# 复杂任务用 GPT-4returnclient.chat.completions.create(modelgpt-4,messages[{role:user,content:prompt}]).choices[0].message.content技巧 8监控账单设预算上限importtimeclassBudgetMonitor:API 支出监控def__init__(self,monthly_budget300):self.monthly_budgetmonthly_budget# 元self.spent0defcheck(self,estimated_cost):检查是否超预算ifself.spentestimated_costself.monthly_budget:raiseException(f月度预算即将超支已花 ¥{self.spent:.2f}预算 ¥{self.monthly_budget})self.spentestimated_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_priceprices.get(model,(0.07,0.14))return(input_tokens*input_priceoutput_tokens*output_price)/1000# 使用monitorBudgetMonitor(monthly_budget300)costmonitor.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。坑 4Embedding 模型选错症状用了 text-embedding-3-large最贵的 embedding200 篇文章索引花了 ¥50。原因large 比 small 贵 5 倍但对中文的提升有限。解决用 text-embedding-3-small中文场景够用。坑 5忘记设 max_tokens症状一次调用输出了 4000 tokens花了 ¥1.7。原因没有设 max_tokensAI 自由发挥写了一大堆。解决每次都设 max_tokens根据任务预估合理上限。总结3 条核心经验按任务分级用模型。70% 的任务用 GPT-3.5-turbo 就够了只在创作和复杂推理时用 GPT-4。这一步能省 40% 费用。缓存是最容易落地的省钱技巧。代码量小、效果明显30% 的重复请求直接免费。监控账单比省钱更重要。设一个月度预算上限超了就告警避免月底看到账单才发现花了 ¥1000。你每个月花多少钱在 AI API 上有什么省钱经验评论区交流。