大模型API涨价,程序员如何控制调用成本

大模型API涨价后,程序员控制调用成本的核心思路是:把每一次调用都当成花钱,先缓存、再降级、后压缩、最后监控。
这篇文章面向正在使用大模型API做开发、但账单开始失控的程序员,按可落地的顺序给出配置和代码片段,读完你能立刻在项目里减少不必要的调用。

先看清钱花在哪:用量审计与基线记录

控制成本的第一步不是改代码,而是知道自己每天花了多少、花在哪个接口。
建议在网关或业务层加一层日志,记录每次调用的模型名、输入token、输出token、耗时和调用场景。

如果项目已经接入网关(如One API、LiteLLM等),通常在后台的日志页面就能看到按模型和按key的用量统计。
没有网关的话,在代码里加几行日志即可:

import time, logging
logging.basicConfig(filename='llm_usage.log', level=logging.INFO)

def call_llm(model, prompt, resp):
    logging.info({
        'ts': int(time.time()),
        'model': model,
        'prompt_tokens': resp.usage.prompt_tokens,
        'completion_tokens': resp.usage.completion_tokens,
        'scene': 'chat'
    })

先跑三天,拿到基线数据。
没有基线,后面所有优化都无法验证效果。

缓存命中:让重复问题只花一次钱

很多业务场景里,用户问的问题是高度重复的。
比如客服FAQ、文档问答、代码解释,同一句话可能被问几十次。
这类场景直接用缓存挡住,成本能降一大截。

最简单的做法是用问题文本的hash做key,把模型返回存进Redis:

import hashlib, json, redis
r = redis.Redis(host='127.0.0.1', port=6379, db=0)

def cached_ask(prompt):
    key = 'llm:' + hashlib.md5(prompt.encode()).hexdigest()
    hit = r.get(key)
    if hit:
        return json.loads(hit)
    answer = call_llm(prompt)
    r.setex(key, 86400, json.dumps(answer))
    return answer

缓存过期时间根据业务调整:FAQ类可以设24小时,时效性内容设1小时以内。缓存命中率超过30%时,成本下降会非常明显。

模型路由:简单问题别用最贵的模型

不是所有请求都需要顶级模型。
把请求按复杂度分流,简单分类、抽取、改写用便宜的小模型,复杂推理和长文生成才走大模型。

可以在网关层配置路由规则,也可以在业务代码里判断:

LIGHT_TASKS = {'classify', 'extract', 'rewrite'}

def route(task_type, prompt):
    if task_type in LIGHT_TASKS:
        return call_llm(model='gpt-4o-mini', prompt=prompt)
    return call_llm(model='gpt-4o', prompt=prompt)

判断条件可以更细:输入token少于200且任务类型是分类或抽取,就走小模型;
需要多步推理或输出超过500token,才走大模型。多数业务里,60%以上的请求其实用不上最强模型。

Token压缩:把输入和输出都瘦下来

Token是计费的基本单位,输入和输出都算钱。
压缩分两个方向:输入侧精简提示词和历史上下文,输出侧限制max_tokens并去掉冗余格式。

输入侧常见的浪费是把整篇文档塞进prompt。
可以先做检索,只把最相关的2-3段拼进去。
历史对话也不要全量带上,保留最近3轮加摘要即可:

def build_prompt(history, question, max_history=3):
    recent = history[-max_history:]
    return '\n'.join([f"{m['role']}: {m['content']}" for m in recent]) + f"\nuser: {question}"

输出侧设置合理的max_tokens,并在提示词里要求模型直接给结果、不要解释过程。输入压缩30%、输出限制在必要长度,整体成本通常能再降20%-40%。

监控告警:别等账单来了才发现

成本控制需要持续监控。
建议设置日用量阈值,超过就告警。
可以在网关后台配置额度限制,也可以用脚本定时查询用量接口。

以LiteLLM为例,在config.yaml中设置预算:

budget_duration: 24h
max_budget: 20

同时每天记录一次各模型的token消耗,观察趋势。
如果某天用量突然翻倍,优先检查是不是缓存失效或路由规则被改。

常见疑问

缓存会不会导致回答过时?
会。所以缓存key要包含业务版本号或日期,时效性内容设置短过期时间,并在返回时标注“来自缓存”。

小模型回答质量不够怎么办?
先用小模型跑一批测试集,对比大模型结果。如果准确率差距在可接受范围内(比如分类任务差5%以内),就放心用。差距大的任务保留大模型。

涨价后已经上线的功能要不要砍?
不建议直接砍功能。先做用量审计,找出调用量最大但价值最低的场景,优先优化那部分。多数项目优化后能回到涨价前的成本水平。

控制大模型API调用成本不是一次性工作,而是持续的过程。
从用量审计开始,依次落地缓存、路由、压缩和监控,每一步都有明确的验证方式:缓存看命中率,路由看模型分布,压缩看平均token数,监控看日账单趋势。
按这个顺序执行,你就能在涨价环境下把成本控制在可预期范围内。

分享到:
上一篇
AI批量生成网站前端页面,搭配CMS使用
下一篇
本地部署大模型算力机器硬件选型指南
1
系统公告

关于香港云优质服务器IP地址更换的通知

尊敬的客户: 因原IP运营商大幅涨价,为避免成本转嫁至用户,我司决定更换IP服务商。本次更换后,您的续费价格将保持不变,且新IP网络质量与服务标准不受影响。新IP已分配至后台,即刻生效(更换的新IP都是香港原生IPv4)。 涉及 IP 段: 45.192.x.x 旧 IP 停用时间: 2026 年 12 月 1 日
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意