我算了 6 个月 AI API 账单:GPT-4 到底有多贵?省钱的 8 个实用技巧

适合正在用或打算用 AI API(OpenAI、Claude、DeepSeek 等)的开发者和创业者。
本文基于 6 个月的真实账单数据,拆解成本结构,给出 8 个经过验证的省钱方法。

背景:AI API 比你想的贵

很多人觉得 AI API 不贵——“几块钱一次调用”。但当你把它集成到日常工作流中,每天调几十次,一个月下来账单会让你吃惊。

我记录了 6 个月的 AI API 支出,下面是真实数据。

6 个月账单拆解

月度支出趋势

月份 支出 调用次数 主要用途
第 1 月 ¥180 约 600 次 试用各种 API
第 2 月 ¥320 约 1200 次 开始集成到工作流
第 3 月 ¥450 约 1800 次 文章写作+代码助手
第 4 月 ¥380 约 1600 次 优化后下降
第 5 月 ¥290 约 2000 次 换模型+缓存
第 6 月 ¥210 约 2200 次 进一步优化

6 个月总支出:¥1,830

按模型拆分

模型 6 个月支出 占比 说明
GPT-4 ¥980 54% 最贵,但质量最好
GPT-3.5-turbo ¥420 23% 便宜,简单任务用
Claude-3 ¥280 15% 中文写作用
Embedding ¥95 5% 向量化用
DeepSeek ¥55 3% 最便宜,部分替代 GPT-4

关键发现:GPT-4 占了 54% 的支出,但只完成了 30% 的调用。它是"单价高、用量少"的模型。

按用途拆分

用途 月均支出 说明
文章写作 ¥120 长文生成,token 消耗大
代码审查 ¥45 每天 5-10 次
知识库问答 ¥35 RAG 检索+生成
选题打分 ¥20 短 prompt,消耗小
其他(调试/测试) ¥30 开发过程中的调试

Token 计费原理

省钱的前提是理解计费方式。

OpenAI 计费规则

模型 输入价格 输出价格 说明
GPT-4 ¥0.21/1K tokens ¥0.42/1K tokens 输出比输入贵 2 倍
GPT-4-turbo ¥0.07/1K tokens ¥0.14/1K tokens 比 GPT-4 便宜 3 倍
GPT-3.5-turbo ¥0.004/1K tokens ¥0.008/1K tokens 比 GPT-4 便宜 50 倍
Embedding ¥0.0001/1K tokens - 极便宜

Token 估算

1 个中文字 ≈ 1.5-2 个 token。

内容 大约 token 数 GPT-4 成本
一句话(20 字) 约 30 tokens ¥0.006
一段话(200 字) 约 300 tokens ¥0.06
一篇文章(3000 字) 约 4500 tokens ¥0.9
一个代码文件(500 行) 约 3000 tokens ¥0.6

8 个省钱技巧

技巧 1:简单任务用便宜模型

不是所有任务都需要 GPT-4。

任务 推荐模型 理由
文章写作/创意 GPT-4 / Claude 质量要求高
代码审查 GPT-4-turbo 代码理解能力强
选题打分 GPT-3.5-turbo 简单逻辑,便宜够用
文本分类 GPT-3.5-turbo 分类任务不需要最强模型
Embedding text-embedding-3-small 最便宜的 embedding 模型
格式转换/提取 GPT-3.5-turbo 纯格式操作,任何模型都能做

效果:把 70% 的调用从 GPT-4 换成 GPT-3.5-turbo,月支出从 ¥450 降到 ¥290。

技巧 2:减少输出 token

输出 token 是输入的 2 倍价格。减少输出能直接省钱。

# 反面:不控制输出长度
response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "解释 Python 装饰器"}]
    # 输出可能 1000+ tokens
)

# 正面:限制输出长度
response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "用 200 字以内解释 Python 装饰器"}],
    max_tokens=300  # 硬性限制
    # 输出最多 300 tokens
)

效果:限制输出后,单次调用成本降低 40-60%。

技巧 3:缓存重复请求

很多请求是重复的——同一个问题问多次、同一个文档分析多次。

import hashlib
import json
from pathlib import Path

CACHE_DIR = Path("api_cache")
CACHE_DIR.mkdir(exist_ok=True)

def cached_call(messages, model="gpt-4", **kwargs):
    """带缓存的 API 调用"""
    # 计算缓存 key
    cache_key = hashlib.md5(
        json.dumps({"model": model, "messages": messages}, sort_keys=True).encode()
    ).hexdigest()

    cache_file = CACHE_DIR / f"{cache_key}.json"

    # 检查缓存
    if cache_file.exists():
        return json.loads(cache_file.read_text(encoding="utf-8"))

    # 调用 API
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        **kwargs
    )

    result = response.choices[0].message.content

    # 存入缓存
    cache_file.write_text(json.dumps(result, ensure_ascii=False), encoding="utf-8")

    return result

效果:缓存命中率约 30%(特别是选题打分、格式转换等重复任务),月支出减少约 25%。

技巧 4:压缩 prompt

prompt 里的 system message 和上下文也按输入 token 收费。压缩 prompt 直接省钱。

# 反面:冗长的 system message
system = """你是一个非常专业的技术写作助手,擅长写各种类型的技术文章,包括但不限于教程、评测、复盘、方法论等。你的写作风格是口语化的,短句多,不用模板句...(500 字)"""

# 正面:精简的 system message
system = """技术写作助手。风格:口语化、短句、无模板句。"""

效果:system message 从 500 字压缩到 30 字,每次调用省约 700 tokens(约 ¥0.15)。

技巧 5:用 streaming 减少等待成本

虽然 streaming 不省钱(token 数一样),但能减少用户等待时间,间接减少"因为等太久而重新发送"的浪费。

stream = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "写一篇技术文章"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

技巧 6:批量处理

OpenAI 有 Batch API,批量请求价格是实时的 50%。

# 批量提交请求(24 小时内返回结果)
# 适合不急的任务:文章批量生成、数据批量分析
batch_file = "batch_requests.jsonl"

with open(batch_file, "w") as f:
    for task in tasks:
        f.write(json.dumps({
            "custom_id": task["id"],
            "method": "POST",
            "url": "/v1/chat/completions",
            "body": {
                "model": "gpt-3.5-turbo",
                "messages": task["messages"]
            }
        }) + "\n")

# 上传并创建批量任务
# client.batches.create(input_file_id=batch_file_id, endpoint="/v1/chat/completions", ...)

技巧 7:本地模型替代

简单任务用本地模型(Ollama),完全免费。

# 本地模型(免费)
local_client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

def smart_call(prompt, task_type="simple"):
    """根据任务类型选择模型"""
    if task_type == "simple":
        # 简单任务用本地模型
        return local_client.chat.completions.create(
            model="qwen2.5:14b",
            messages=[{"role": "user", "content": prompt}]
        ).choices[0].message.content
    elif task_type == "complex":
        # 复杂任务用 GPT-4
        return client.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        ).choices[0].message.content

技巧 8:监控账单,设预算上限

import time

class BudgetMonitor:
    """API 支出监控"""

    def __init__(self, monthly_budget=300):
        self.monthly_budget = monthly_budget  # 元
        self.spent = 0

    def check(self, estimated_cost):
        """检查是否超预算"""
        if self.spent + estimated_cost > self.monthly_budget:
            raise Exception(f"月度预算即将超支!已花 ¥{self.spent:.2f},预算 ¥{self.monthly_budget}")
        self.spent += estimated_cost

    def estimate_cost(self, model, input_tokens, output_tokens):
        """估算本次调用成本"""
        prices = {
            "gpt-4": (0.21, 0.42),
            "gpt-4-turbo": (0.07, 0.14),
            "gpt-3.5-turbo": (0.004, 0.008),
        }
        input_price, output_price = prices.get(model, (0.07, 0.14))
        return (input_tokens * input_price + output_tokens * output_price) / 1000

# 使用
monitor = BudgetMonitor(monthly_budget=300)
cost = monitor.estimate_cost("gpt-4", 500, 1000)
monitor.check(cost)

省钱效果汇总

技巧 月省金额 难度
简单任务换便宜模型 ¥120
限制输出长度 ¥50
缓存重复请求 ¥70 ⭐⭐
压缩 prompt ¥30
批量处理 ¥40 ⭐⭐
本地模型替代 ¥60 ⭐⭐⭐
监控预算 防超支
streaming 不省钱但省时间
合计 约 ¥370/月

踩坑记录

坑 1:缓存 key 设计不合理

症状:同样的问题因为多了个空格,缓存没命中。

原因:缓存 key 对输入的微小变化敏感。

解决:对 messages 做 normalize(去空格、排序)后再计算 hash。

坑 2:便宜模型质量不够

症状:用 GPT-3.5-turbo 写文章,质量明显下降。

原因:简单任务用便宜模型没问题,但创作类任务质量差距大。

解决:按任务类型分级,创作类用 GPT-4/Claude,格式类用 GPT-3.5。

坑 3:批量 API 有延迟

症状:Batch API 提交后要等 24 小时才返回结果。

原因:Batch API 是异步的,不保证实时性。

解决:急的任务用实时 API,不急的(如批量文章生成)用 Batch API。

坑 4:Embedding 模型选错

症状:用了 text-embedding-3-large(最贵的 embedding),200 篇文章索引花了 ¥50。

原因:large 比 small 贵 5 倍,但对中文的提升有限。

解决:用 text-embedding-3-small,中文场景够用。

坑 5:忘记设 max_tokens

症状:一次调用输出了 4000 tokens,花了 ¥1.7。

原因:没有设 max_tokens,AI 自由发挥写了一大堆。

解决:每次都设 max_tokens,根据任务预估合理上限。

总结

3 条核心经验:

  1. 按任务分级用模型。70% 的任务用 GPT-3.5-turbo 就够了,只在创作和复杂推理时用 GPT-4。这一步能省 40% 费用。

  2. 缓存是最容易落地的省钱技巧。代码量小、效果明显,30% 的重复请求直接免费。

  3. 监控账单比省钱更重要。设一个月度预算上限,超了就告警,避免"月底看到账单才发现花了 ¥1000"。


你每个月花多少钱在 AI API 上?有什么省钱经验?评论区交流。

更多推荐