LLM API 调用的成本优化实战:从月烧 3000 到 300 的经验总结

2026 年模型能力够了,但成本控制不好,一个月 API 费用能跑到几千甚至上万。

这篇文章总结几个经过验证的成本优化策略。

你的钱花在哪了

一个月调用了 1000 万 token(中等规模应用),不同模型的费用:

Claude Opus 4.8:  ¥600/月
GPT-5.5:         ¥450/月
豆包 2.1 Pro:    ¥60/月
DeepSeek-V4:     ¥20/月(仅 ¥2/1M token)

但真正的问题是:很多 token 是被浪费的。

浪费在哪里

1. System Prompt 太长

很多人把整套文档塞进 System Prompt。每次对话都带着 2000 token 的 system 消息,一天 1000 次调用就是 200 万 token 打水漂。

优化:

# ❌ 浪费
system_prompt = "你是一个 AI 助手。以下是 2000 字的公司规则..."

# ✅ 按需注入
system_prompt = "你是一个 AI 助手。"
# 只在需要时才注入规则
if task == "customer_support":
    system_prompt += rules.get("customer_rules", "")

2. 没有缓存重复请求

用户的提问有很多是重复的或相似的。相同的 prompt = 相同的答案,缓存下来下次直接用。

import hashlib
import functools

@functools.lru_cache(maxsize=500)
def cached_llm_call(prompt_hash: str):
    """缓存 LLM 调用结果。"""
    # prompt_hash 是原始 prompt 的 MD5 值
    pass

def call_llm_with_cache(prompt: str):
    h = hashlib.md5(prompt.encode()).hexdigest()
    cached = redis.get(f"llm:{h}")
    if cached:
        return cached.decode()  # 缓存命中,零成本
    result = call_llm_api(prompt)
    redis.setex(f"llm:{h}", 3600, result)  # 缓存 1 小时
    return result

一个月 1000 万 token 调用量中,通常 20-30% 是重复或相似的请求。加缓存可以省下 200-300 万 token。

3. 用错模型浪费 Token

每个请求都发给最贵的模型。翻译一句"Hello"用 Claude Opus,和用 DeepSeek 效果一样但贵 30 倍。

4. 上下文太长了没截断

对话持续进行,历史消息越积越多。第 50 轮对话的消息列表可能有 2 万 token。加滑动窗口截断:

def trim_history(messages, max_tokens=4000):
    """只保留最近的消息,保证不超过 max_tokens。"""
    total = 0
    trimmed = []
    for m in reversed(messages):
        tokens = len(m["content"]) // 2  # 粗略估算
        if total + tokens > max_tokens:
            break
        total += tokens
        trimmed.append(m)
    return list(reversed(trimmed))

优化后的成本对比

优化前:月 1000 万 token,全用 Claude Opus = ¥600/月

优化后:

缓存命中(节省 30%):   3,000K token
路由到 DeepSeek(60%): 4,200K token × ¥2  = ¥8.4
路由到豆包(25%):      1,750K token × ¥6  = ¥10.5
路由到 Claude(15%):   1,050K token × ¥60 = ¥63

总计:¥82/月
节省:86%

成本优化的优先级

第一优先:加缓存(节省 20-30%,零成本)
第二优先:截断上下文(节省 20-40%)
第三优先:多模型路由(节省 50-80%)
第四优先:压缩 System Prompt(节省 10-20%)

监控 API 成本

每月的 API 花销应该能追踪:

def track_cost(provider, model, tokens_used):
    """记录每次调用的成本。"""
    prices = {
        ("deepseek", "deepseek-chat"): 2,      # ¥/1M input
        ("doubao", "doubao-2.1-pro"): 6,
        ("claude", "claude-opus-4-8"): 60,
    }
    price = prices.get((provider, model), 10)
    cost = tokens_used / 1_000_000 * price

    # 写入统计
    with get_db() as conn:
        conn.execute(
            "INSERT INTO llm_costs (provider, model, tokens, cost, created_at) VALUES (?,?,?,?,?)",
            (provider, model, tokens_used, cost, int(time.time()))
        )
        conn.commit()

周报/月报看一眼,就知道钱花在哪了。

总结

LLM 成本控制的核心不是"少用",而是"用对"。

缓存重复请求 → 省 30%
截断长上下文 → 省 30%
多模型路由  → 省 50%
System Prompt → 省 10%

加在一起能省 80-90%

你的 API 成本大概多少?用了什么优化手段?
本文由 Zyentor(智元界)原创发布