API调用,看着一次几分钱,积少成多。上个月有个用户找我,月账单从500飙到8000,一查代码里有个循环每次请求都带着完整的历史记录,单次token从200涨到2000,量没变,钱翻了四倍。
心疼归心疼,但这钱能省。方法还不少。
Token到底怎么算钱的
先搞清楚计费逻辑。大模型的费用 = 输入token数 × 输入单价 + 输出token数 × 输出单价。
输入是你发给它的prompt,输出是它给你的回答。注意,输出单价通常是输入单价的2到4倍。也就是说,你让AI多说一个字,花的钱比你多说一个字贵好几倍。
一个中文字大概占1到2个token,英文单词平均1.3个token左右。具体数字不用背,各个平台的控制台都有token计数器,调用之前先粘进去看一眼,心里有数。
裁剪你的prompt
这是最立竿见影的省钱手段。很多人写system prompt习惯堆砌,一堆废话占几百个token,每次请求都带着跑。
我见过一个system prompt写了800多字,里面有一半是"你是一个友好的助手,你需要注意语气,你应该..."这种虚词。压缩成"你是个友好助手",少了400个token。每天调用一万次,一天省400万token输入,按输入单价算,一个月省出一顿饭钱。
精简原则:去掉所有修饰性描述,只保留角色定位和硬性约束。能用三个字说清楚的别用十个字。
管理好你的对话历史
聊天场景里,为了维持上下文,通常会把历史对话全部塞进messages数组。但用户聊了50轮之后,历史记录可能已经膨胀到5000个token。
有个取巧的办法:只保留最近5到10轮对话。再往前的对话,每轮用AI生成一个20字的摘要,把摘要作为"历史背景"放进去,而不是保留原始对话全文。
比如原始对话是"用户问Python怎么读文件,AI回答了open函数的用法",压缩成"已讲解Python文件读取"。20个token替代了200个token,上下文信息不丢,成本直线下降。
实测下来,30轮对话的历史,用摘要方式替代,单次请求的输入token能砍掉60%以上。
缓存——被严重低估的省钱神器
很多场景下,用户问的问题高度重复。比如客服系统里,"你们退货流程是什么"每天被问几百次。每次都让大模型重新算一遍,钱花得冤枉。
DeepSeek和智谱都支持语义缓存。你把常见的"问题-答案"对存进缓存池,下次有人问同样意思的问题,直接从缓存里返回答案,不经过大模型推理。
缓存命中一次,省的是完整的输入+输出token费用。命中率做到30%,整体成本直接打七折。
我帮一个电商客户配了缓存,他们退货政策相关问题的重复率超过60%,这部分的API调用成本下降了75%。花一小时配缓存,省的钱够买两箱美式。
选择合适尺寸的模型
别有大用大。你做个简单的分类任务,用DeepSeek的7B小模型就够了,别上V3这种大块头。处理中文情感分析,智谱的GLM-4-Flash比GLM-4便宜一大截,效果差不了多少。
我自己的判断标准:如果任务只是提取信息、分类、简单问答,用小参数模型。需要推理、创作、代码生成,才上大模型。用大模型跑简单的活,等于开着卡车去买菜,油费比菜钱还多。
有个窍门:先用小模型跑一遍,如果返回的结果置信度低(比如分类概率低于0.8),再丢给大模型兜底。这种级联策略,能让大模型的调用次数减少一半以上。
输出长度别大方
max_tokens这个参数,很多人设成4096甚至8192。实际大部分回答用不到这么多。
先想清楚你期望AI回答多长。翻译任务,200个token顶天了。代码生成,按行数估算,一般不超过1000个token。设成2048就够用,设8192完全是给浪费留余地。
我习惯先设1024跑测试,如果发现回答经常被截断,再往上加。从小往大调,比从大往小调省钱。
批量处理合并请求
如果你有一堆独立的任务要处理,别一个一个发请求。比如要翻译100条短句,每条单独调用,会产生100次请求的开销(网络延迟、连接建立等)。
改成把这些句子打包成一条prompt:"翻译以下100句中文为英文,按序号输出",一次请求全部搞定。输入token多了一点,但输出token因为批量输出反而更紧凑,总费用能省20%到30%。
监控是省钱的眼睛
控制台里的调用统计不是摆设。每周花十分钟看三样东西:单次请求的平均token数、高频调用的接口、异常高消耗的时段。
发现某个时段消耗异常高,去查是不是有定时任务在跑。发现某个用户单次请求token数远超平均水平,可能他的prompt写得太啰嗦,提醒他优化一下。
我自己有个习惯:给每个Key设置每日消耗告警,阈值为日均消耗的1.5倍。哪天触发了告警,说明出了变化,及时排查比月底看账单傻眼强得多。
省钱的本质不是少用,而是用好。同样的任务,花更少的token完成,这才是本事。该花的钱别省,该省的钱别花,账单自然好看。