LLM 应用上线后,API 调用成本往往成为持续关注的焦点。与传统云服务不同,LLM 的计费逻辑(按 token 数量)让优化空间分布在提示词、代码逻辑和架构设计的多个层面。以下是七个值得检查的方向,按实施难度从低到高排列。
1. Prompt 瘦身:去掉无效指令
许多团队在迭代中不断往 system prompt 里加内容,却很少做减法。检查现有提示词:
- 重复的约束能否合并(如「用中文回答」「使用简体中文」可能同时存在)
- 示例(few-shot examples)是否都必要,能否用更短的表述达到同样效果
- 冗长的格式说明能否改用 JSON Schema 或结构化输出
假设一个客服场景的 system prompt 从 800 token 优化到 400 token,在百万次调用量级下节省的成本是可观的。
2. 上下文管理:只传必要的历史
对话型应用常见的问题是无限制地把全部历史消息传给 LLM。实际上:
- 多轮对话可以只保留最近 N 轮(如 5 轮)加上关键上下文摘要
- RAG 场景中,检索到的文档片段应该做相关性排序,只传 top-K 而非全部
- 长文档可以先用小模型做摘要或分块,再按需传递
这需要在代码层面实现滑动窗口或摘要逻辑,但改动通常不大。
3. 模型降级:为不同任务选择合适的模型
不是所有请求都需要最强的模型。可以按任务复杂度分层:
- 简单分类、实体提取:用各家的轻量档(命名上通常带 mini、Haiku、Flash 这类后缀)
- 需要推理或创作:用中间档
- 复杂多步推理:才用旗舰档
各家的具体型号更新很快,按档位而不是按型号来设计路由,换代时改配置就行,不用动逻辑。
实现方式可以是路由逻辑(根据用户输入特征判断),或者先用小模型尝试,失败再升级。关键是建立任务-模型的映射表并持续校准。
4. 缓存复用:相同请求不重复调用
如果你的应用有高频重复查询(如「今天天气」「某个产品的标准介绍」),可以在应用层做缓存:
- 完全相同的输入:直接返回缓存结果(Redis/内存缓存)
- 语义相似的输入:用 embedding 做相似度匹配,超过阈值返回缓存
- 部分 LLM 提供商支持 prompt caching(如 Anthropic),system prompt 部分可以在服务端缓存
注意缓存的时效性管理,避免返回过时内容。
5. 流式输出与提前终止
对于生成类任务,流式输出(stream=true)不仅改善用户体验,也能让你在检测到无效输出时提前中断:
- 如果前 50 token 已经偏离预期(如开始拒绝回答),可以停止生成
- 对于有明确长度上限的场景(如摘要),设置
max_tokens避免超长输出
这需要在客户端或中间层实现中断逻辑,但能避免为无用输出付费。
6. 批处理与异步化
如果业务允许延迟(如内容审核、数据标注),可以:
- 攒批后一次性调用(部分提供商对批量请求有折扣)
- 用异步任务队列(如 Celery、BullMQ)在低峰期处理
- 对非实时需求使用更便宜的 batch API(如 OpenAI Batch API)
这需要改造业务流程,但对成本敏感的后台任务值得投入。
7. 自建推理层或混合架构
当调用量达到一定规模(假设日均数百万 token),可以考虑:
- 对部分稳定任务自部署开源模型(如 Llama、Qwen),承担推理成本
- 用开源小模型做预处理(如意图识别、内容过滤),只把必要请求转给商业 API
- 使用 API 网关做统一调度和成本监控
这是架构级改造,需要评估自建的人力、GPU 成本与 API 费用的平衡点。
从检查清单到持续优化
上述七点可以作为季度性检查清单。建议建立成本监控看板(按模型、功能模块、用户分组统计),找出高消耗点再针对性优化。LLM 成本优化不是一次性工程,而是随业务增长持续迭代的过程。
如果你的团队需要在 LLM 应用开发或成本治理上获得支持,欢迎联系 Taylent Labs,我们在 AI 应用工程化和 API 网关方案上有丰富经验。