
AI应用开发成本控制实战我们是如何把大模型API费用降下来的做AI应用开发前期最容易被忽略、后期最容易让人头疼的就是大模型API的费用账单。我接手某智能助手项目的时候产品功能刚上线一周日活用户还不到2000每天光是调用大模型API的费用就已经到了四位数。当时团队里没有人质疑功能本身但所有人都清楚一件事按这个烧钱速度产品还没跑通商业模式成本先把团队压垮了。这个项目本身是给企业内部客服团队用的一个智能工单分类与回复助手核心逻辑不复杂把用户的工单内容和历史处理记录拼接成提示词调用云端大模型生成分类标签和回复建议。听起来很简单但实际跑起来之后问题暴露得比预想中快得多——每一个环节都在悄悄烧钱重复请求没有缓存、所有请求都用最贵的模型、为了“保险起见”塞进去大量冗余历史记录、用户在等待期间反复重试同一请求。这篇文章会把我们团队在实际降本过程中踩过的坑、做过的实验、最终落地执行的方案全部整理出来。适合正在做AI应用开发、大模型集成的开发者参考也适合负责技术预算的Leader和管理者了解费用到底花在了哪里、还能从哪里省。不卖关子先说结论通过四个层面的优化组合我们把单次请求的平均成本降到原来的四分之一左右月度API费用整体下降了约68%。1. 成本失控前先搞清楚钱花在了哪里想控制成本第一步不是急着改代码而是先把API账单里每一项费用拆解开搞清楚每种消耗的真实占比。很多团队直接翻账单总金额然后对着最大的数字发愁这是错的账单总金额只能告诉你花了多少不能告诉你哪些钱不该花。1.1 从账单反推消耗链路以我们当时使用的云端大模型API为例计费维度主要有三个输入token数、输出token数、缓存命中的折扣价。部分厂商还会针对不同模型版本单独计价比如标准版和推理增强版的价格可能相差一倍以上。我们的排查方法是拉取最近一周的生产调用日志把每次调用的模型名、输入token数、输出token数、缓存命中状态、耗时记录下来然后跟账单做交叉比对。实际统计下来发现了一个非常扎眼的数据输入token的占比将近80%。也就是说每次请求我们都在把大量历史工单内容和服务规范文档一股脑塞给模型而模型真正需要用来做判断的核心信息可能只占其中很小一部分。这一步得出的核心结论是降本的主战场不在输出而在输入。因为输入token每次请求都会重复计费而输出token只要控制答案长度即可。方向定了后面所有优化动作都围绕“减少输入token”展开。1.2 建立成本基线与监测指标光靠感觉不够我们做了两件事来量化定义单次请求平均成本作为核心指标计算公式为(输入token数 × 输入单价 输出token数 × 输出单价) / 请求总数。按接口维度拆分成本分类接口、回复生成接口、摘要接口各占多少分别统计调用量、平均耗时、失败率。这里有一个建议给刚开始做成本治理的朋友不要只看总量也要按功能模块拆。同一个应用的不同接口调用频次不同、模型档位不同、输入构造方式也不同只有拆开了才能精准定位问题。我们当时发现分类接口调用量最大但单次成本可控而回复生成接口调用量不大但单次成本奇高因为每次生成的回复长度都不短模型档位也是顶配两个优化方向完全不同。结构化来看API费用通常由四个因素驱动调用量、模型单价、请求体大小、响应体大小。任何一个因素的微小变化乘以一天几万次的调用量都会被放大成显著的月度成本差异。这也是为什么某些看起来“没什么大不了”的冗余设计会在月底回款时给你一个措手不及。2. 第一板斧缓存层把重复请求挡在门外缓存是成本控制里性价比最高的一招几乎没有之一。对于客服工单助手这个场景用户提交的工单有相当大比例是重复或高度相似的比如“忘记密码”“如何退款”“发票怎么开”这些问题几乎天天被问。2.1 两套缓存方案对比市面上的做法主要有两种精确匹配缓存以完整请求体模型名提示词内容做哈希完全相同时直接返回缓存结果。语义相似度缓存使用向量数据库存储历史问题的向量表示新请求到来时先做相似度检索超过阈值就直接返回历史答案。精确匹配实现简单、零误判风险但对“换了个句式问同样问题”的情况完全无效。语义相似度缓存效果好但需要引入向量化和检索服务还需要设计阈值调得不好会误命中把错误的答案返回给用户。我们最终采用了分层策略先用语义向量做粗筛再用规则校验做兜底。对于命中相似度大于0.92的历史问题直接返回缓存答案对于0.85到0.92之间的模糊区间不直接返回缓存而是把缓存答案作为参考上下文让模型基于缓存答案快速适配当前问题。这样既保留了缓存的省钱优势又避免了误命中带来的质量风险。2.2 缓存命中率的实际效果上线缓存后我们做了两周的数据对比指标缓存前缓存后日API调用次数约5.2万次约3.1万次输入token日均消耗约8600万约4600万单次请求平均成本约0.026元约0.015元缓存命中率0%41.5%缓存命中率41.5%听起来不算惊人但在客服类场景这个数字已经比较理想。支撑这套缓存方案的基础设施也不复杂我们在应用层加了一层内存缓存配合一套本地向量检索服务整体部署成本可以忽略不计但每天省下的API费用非常可观。这里有一个关键细节要特别注意缓存命中结果必须包含对应的模型版本号与提示词模板版本号。因为业务规则和提示词模板会调整如果缓存键里没有版本信息可能会出现“模型提示词更新了但用户拿到的还是旧缓存答案”的问题。我们踩过这个坑某次更新分类规则后缓存没失效用户连续三天拿到旧规则的分类建议排查了好几个小时才找到原因。3. 第二板斧模型分级路由贵的模型用在刀刃上很多团队的默认做法是所有请求都调用能力最强的模型理由是“反正模型越强效果越好”。这话在原型验证阶段没错但产品上线后这句话会变成账单上的数字而且这个数字通常很惊人。3.1 给业务场景匹配不同模型档位我们的智能助手实际上有三类任务它们对模型能力的需求差异极大工单分类只要求从预设的二十个类别中选一个属于典型的分类任务中等能力模型已经可以做到95%以上的准确率用最强模型几乎没有任何收益提升。回复建议生成需要理解用户诉求、结合历史记录生成措辞得体且信息准确的回复对推理和语义理解要求最高用最强模型。情绪识别与紧急度判断只做二分类和等级打分属于轻量任务甚至可以不用大模型直接用规则引擎加关键词匹配实现。于是我们把任务按下图逻辑拆分出来构建了一个路由层请求进来之后先做任务分类判断属于哪种场景。对于工单分类和情绪识别调用小参数模型输出只需要一个短标签。对于回复建议生成才调用最强模型并且控制输出长度上限。这是一笔非常划算的买卖。小参数模型的单价通常是最强模型的三分之一到五分之一对于分类类任务质量差距通常在一个点以内但成本差距是几倍。3.2 动态兜底机制避免质量塌方模型分级之后团队里最大的担忧是如果分类请求恰好落在小模型的错误区间怎么办我们的应对策略是加一道“置信度兜底”逻辑小模型输出结果时会附带一个置信度分数业务代码里设定阈值低于阈值时自动升级到最强模型重新推理。实测下来升级率大概在5%到8%之间这部分额外成本完全在预算范围内但换来了整体效果的基本稳定。路由层本质上是把“算力资源”和“任务难度”做了一个映射。大部分业务的绝大多数请求其实并不需要动用最复杂的能力把算力留到真正需要的地方才是合理的资源调度。在实施分级路由前我建议先花一周时间统计一下各任务的实际调用占比。如果某个低价值任务占了80%的调用量那哪怕只把它降一个档位总成本也能肉眼可见地往下掉。4. 第三板斧提示词瘦身与上下文压缩提示词里的每一个字都会变成输入token被计费但很多工程师写提示词的习惯是“宁可多写不能漏掉”。这种思路放在对话质量上可能没错放在账单上就是灾难。4.1 输入数据的精简策略我们当时输入构造的构成是系统角色描述文字 当前工单内容 匹配到的历史相似工单5条每条含标题和正文和回复 企业内部服务规范文档若干片段 输出格式要求。粗算一下一次请求平均消耗输入token约4500个但真正影响模型判断的核心字段只有当前工单的标题和用户描述正文大约500到800个token。优化后的输入构造规则如下历史相似工单只带3条每条只保留“问题摘要一句话处理动作一句话”不再拼接完整正文和回复。服务规范文档只匹配与当前工单关键词相关的片段不再无脑把整篇文档塞入。系统角色描述从两百多字压缩到五句话保留核心要求砍掉所有的修饰性描述。第一轮压缩之后单次请求的平均输入token从4500降到了1800左右。降幅超过60%而线上测试效果几乎没有感知差异。4.2 把长文本切成“按需取用”的检索模块但只做提示词精简还不够面对需要参考大量资料的场景我们设计了一个“按需取用”的方案把产品帮助中心文档按段落分块做向量化索引。工单进来时先用当前用户的问题做一次相似度检索只取排名前三的片段加入提示词。如果检索结果为空或相似度低于阈值就在提示词中明确告知模型“未检索到相关文档请基于通用知识回答”。这个方案的本质是把“把整个资料库都交给模型”变成“把和当前问题相关的三小段交给模型”。对模型来说信息更聚焦生成质量反而更稳定因为它不再需要从一大段无关文本中自己找重点。4.3 输出格式的硬性约束还有一个细节容易被忽略输出token的计费单价通常高于输入token且输出长度直接决定响应延迟。如果不对输出做约束模型很容易生成一大段正确但冗余的回复。我们在提示词中增加了输出格式约束规则包括分类标签只输出一个词不多解释理由。回复建议控制在80字以内只给核心动作不写客套话。如果无法判断输出“无法确定”不强行编造。输出长度从平均300字降到了130字左右输出token消耗下降了一半以上同时响应速度也快了将近一倍。5. 进阶手段批量接口、流式模式与模型蒸馏基础三板斧做完之后我们已经省掉了一大半费用但还有几项进阶优化值得关注。这些手段不一定适用于所有场景但对于调用量大、业务需求明确的应用效果显著。5.1 批量接口与异步处理的改造部分云厂商提供批量接口允许一次调用提交多条独立请求价格比实时接口便宜不少但响应时间更长。我们把工单分类和情绪识别这两项对实时性要求不高、结果可以异步返回的任务切换到了批量接口。具体做法是每条工单进入系统后先写入待处理队列。每隔5分钟收集一批待处理请求统一调用批量接口。模型处理完成后回调通知系统获取结果后写入工单状态。切换后这两类接口的成本降低了约30%而用户端的感知几乎没有变化因为分类和情绪识别本来就不需要在前端同步等待结果。5.2 流式输出对成本的影响如果产品需要给用户“打字机效果”流式输出几乎是必然选择。但流式模式的计价逻辑和普通模式不同它按实际消耗的token结算所以并不会额外增加成本。真正需要注意的是超时重试问题客户端如果在流式过程中断线部分API会重复计费防重逻辑一定要做好。我们在流式模式下做了一个小优化设置“首个token超时时间”和“整体超时时间”一旦超过时限直接终止请求不做无限等待。这样既控制了资源占用也避免了用户反复操作导致重复计费。5.3 蒸馏小模型作为长期方案对于调用量非常大的固定任务长期来看最省钱的方案是训练一个专有小模型也就是业内常说的模型蒸馏。用云端大模型生成的标注数据训练一个参数量小得多的专用模型部署在自己的服务器上推理成本几乎可以忽略。我们在工单分类这个场景做了实验用云端大模型在一周内生成约5万条带标注的分类数据基于开源小模型底座微调训练。最终效果是准确率只比云端大模型低1.2个百分点但推理成本直接下降了95%。这个方案适合固定且高频的任务如果你的任务类型杂而且经常变化蒸馏的性价比需要谨慎评估。6. 实测结果一个月省下了68%的API费用优化方案全部上线运行一个月之后我们把各项数据做了一次完整复盘。这里贴一组实测数据供参考优化项优化前优化后单次请求平均输入token约4500约1300单次请求平均输出token约300约130日均API调用次数约5.2万约3.1万缓存拦截后最强模型调用占比100%约22%单次请求平均成本约0.026元约0.0098元月度API总费用约1.66万元约5300元月度费用下降幅度68%日均调用量虽然因为业务增长还在缓慢上升但单次成本被压到了原来的三分之一左右。更重要的是模型的响应速度和用户体验也同步变好了因为输入和输出token都少了推理时间自然缩短。这套优化方案并不依赖任何特殊资源或额外技术团队投入完全是在原有应用架构上逐步改造完成的。每一步都有明确的数据支撑没有靠直觉做决策这也是我想强调的成本控制不是拍脑袋砍预算而是把每一分钱花在哪里都算清楚。7. 常见问题排查与避坑清单优化过程中我们踩了很多坑这里整理成一份问题速查表你在实际做成本优化时大概率也会遇到其中一部分。7.1 问题速查表常见问题现象排查思路与解决方法缓存命中率一直上不去改了缓存逻辑但成本没降检查缓存键的设计确认是否包含模板版本信息尝试降低语义相似度阈值确认缓存数据是否有过期时间设置小模型输出质量不稳定某些分类明显不合理设置置信度阈值兜底低于阈值自动升级最强模型收集错误样本补充到小模型的训练集做增量微调提示词压缩后效果明显变差模型回答信息缺失或答非所问把删掉的字段逐个恢复做对比实验别一次性大改小步迭代观察效果批量接口回调丢失部分工单状态一直停留在处理中设计超时主动查询机制超过5分钟未收到回调就主动拉取结果对批量接口的完整生命周期加入监控账单金额和日志统计对不上月底账单比预估高不少检查是否有重试机制导致重复计费检查测试环境是否调用了生产接口检查低模型档位是否在某些异常路径被强行升级用户等待时间变长响应速度变慢如果是因为使用了批量接口前端需要给用户明确的异步等待反馈如果是因为模型档位下降考虑只对核心任务保留最强模型7.2 从实操中总结的几条避坑经验每做一次优化先跑一周灰度成本优化最容易翻车的地方是“省钱了但效果也降了”。建议每次改动先在一小部分流量中验证至少观察三天确认关键指标没有回落再全量放量。监控只看趋势不只看总量设置按小时的调用量和成本趋势图出现异常波动时能第一时间发现。我们曾遇到某天凌晨开始成本异常飙升查下来发现是某个定时任务被错误配置成了死循环不到半天时间烧掉了数万元。留意厂商定价调整和模型版本更新AI模型的价格和版本更新非常频繁同一模型可能在几个月内降价数十个百分点。定期核对账单单价和当前官网价必要时重新评估模型选型。Cost优化和性能优化往往是一回事减少输入输出token、降低请求量、缩短推理时间这些动作既省钱又提效两者不冲突。在给团队汇报时把“降本”和“提质”放在一起讲更容易获得支持。8. 写在实际操作之后我个人在实际操作中的体会是大模型API成本控制这件事最难的从来不是技术手段而是打破团队“默认用最强模型”的习惯。很多工程师在开发时习惯性地把能力冗余当作安全垫这种思维在产品快速迭代期没有问题但在成本敏感阶段必须扭转过来。我们最终把“任务分级缓存提示词精简模型路由”做成了平台的基础能力而不再是一个个零散的优化补丁。后续新接入的AI能力一律先回答三个问题再上线这个任务需要最强模型吗可以走缓存吗提示词里的每一段信息都有必要吗这三个问题挡住的费用比任何一次事后优化都多。如果你正在被大模型API账单困扰我的建议很直接先从统计调用日志和成本占比开始搞清楚钱花在了哪里再针对大头动手。不要一上来就追求搭建一套复杂的调度系统把基础的缓存和模型分级做好费用往下掉的速度会超出你的预期。