官方接口按美元结算。想充值,你得有一张能过 3D 验证的海外信用卡,或者去买虚拟卡。虚拟卡开卡费、充值手续费、汇率加点叠在一起,实际支出比官网标价高出 8%~15%。更麻烦的是账单地址、IP 归属地和发卡国对不上时容易触发风控,账号一封,余额一起没。
OpenAI 单笔最低 5 美元起,Anthropic 类似,Google Cloud 还要先绑结算账号。对一个只想跑通几个 prompt 的人来说,为了验证一次请求先压 40 块进去,试错成本太高。小鱼API 最低 7 元起充,7 块钱就能把整条链路跑通,模型不合适随时换。
官方域名在国内大部分地区连不上,必须挂代理。代理有三个问题:线路不稳、流量费另算、高并发时经常断流。中转平台解决的就是这一段——接口在国内可直连,走 OpenAI 兼容协议,把 base_url 换掉,原有代码一行不用改,地址是 https://xyuapi.top/v1。
自己搭代理加海外卡加多账号轮换,光配环境就要半天,之后每个月还得处理一次卡被拒、号被封、代理掉线。个人开发者按小时算时薪,这套维护成本早就超过 API 账单本身了。把这段麻烦外包出去,钱花得少,省下来的是真正在做产品的时间。
官方把输入和输出分开计价,输入越长单价越贵(部分模型还有长上下文溢价档)。一次请求带 3 万字文档,输入就是 3 万 token 左右,按 3 万收费。RAG 检索增强、代码库分析、合同审查这些场景动不动几万 token 上下文,成本曲线是陡的。
输出 token 的单价通常是输入的 3~5 倍。一份 5 万字文档让模型写 3000 字总结,输入 5 万 token、输出约 4500 token,输出那部分按 ¥15/百万算就是 0.07 元,和输入的 0.15 元只差一半——而输出多长你控制不住,模型自己决定写多少。按次计费把输入和输出打包成一个价,这层不确定性也一并消掉了。
小鱼API 全系列走按次计费,一次对话请求不管塞多少 token,价格固定。发一个"你好"是 0.031 元,把 20 万字的合同全文丢给同一个模型,还是 0.031 元。这不是打折,是成本结构变了——按次计费直接把"输入长度"这个变量从账单里拿掉了。
假设每天处理 100 份 5 万字的技术文档,每份让模型输出 2000 字摘要。
差 5 到 6 倍,而且文档越长差距越大——按次的价是钉死的,按量的价跟着字数涨。
| 模型 | 单价(元/次) | 计费方式 |
|---|---|---|
| gemini-2.5-pro | 0.031 | 按次 |
| gemini-3-pro-preview | 0.05 | 按次 |
| gemini-3.1-pro-preview | 0.09 | 按次 |
| NanoBanana-Pro(生图) | 0.27 | 按次 |
| claude-sonnet-4-5-thinking | 0.09 | 按次 |
| claude-opus-4-5-thinking | 0.12 | 按次 |
| claude-sonnet-4-6-thinking | 0.2 | 按次 |
| claude-opus-4-6-thinking | 0.25 | 按次 |
| claude-sonnet-4-7-thinking | 0.2 | 按次 |
| claude-opus-4-7-thinking | 0.25 | 按次 |
| 模型 | 单价 | 计费方式 |
|---|---|---|
| grok-4.1 | 0.05 元/次 | 按次 |
| grok-4.5 | 0.09 元/次 | 按次 |
| grok-4.6 | 0.09 元/次 | 按次 |
| deepseek-v3.2-thinking | 0.049 元/次 | 按次 |
| deepseek-r1-thinking | 0.049 元/次 | 按次 |
| deepseek-v4-flash-thinking | 0.05 元/次 | 按次 |
| deepseek-v4-pro-thinking | 0.09 元/次 | 按次 |
| gpt-5.5 | 0.2 元/次 | 按次 |
| gpt-5.5-pro-thinking | 0.2 元/次 | 按次 |
| gpt-5.3-pro | 0.3 元/次 | 按次 |
| gpt-6-astra | 输入 ¥3/百万、输出 ¥15/百万 | 按量 |
| gpt-image-2-pro(生图) | 0.25 元/次 | 按次 |
| kimi-k2.5 | 0.09 元/次 | 按次 |
| kimi-k2.6 | 0.09 元/次 | 按次 |
按次计费没法直接对齐量价,但可以反着算。一次 0.09 元的请求,如果塞进 3 万字输入(约 4.5 万 token),等效单价约 2 元/百万 token;塞进 20 万字(约 30 万 token),等效单价掉到 0.3 元/百万 token。你塞得越多,单 token 成本越低,这跟官方的定价方向正好相反。
一天跑十几次的人,核心成本不是单价,是门槛。挑最低充值低的平台,充 7 块、20 块先跑,用两周看账单,比一上来买年费稳。这个档位下月开销基本在 5~15 元。
这个区间最划算。假设每天 150 次请求,混合用 gemini-2.5-pro(0.031)、deepseek-v3.2-thinking(0.049)、grok-4.1(0.05),平均单价 0.045 元,一天 6.75 元,一个月约 200 元。同样的量走官方按量计费,如果都是长上下文,轻松翻三倍以上。
到每天 500 次以上,按次计费的总价开始逼近包月。这个量级直接算无限卡套餐:月固定成本 ÷ 预计请求数 = 等效单次价。等效单次价低于 0.02 元时,套餐比按次划算。
每天固定跑几百上千次调用,请求量可预测,套餐把成本变成固定项,预算好做。批量内容生产、客服机器人、数据清洗流水线都属于这一类。
一次请求几万到几十万 token 的场景,无限卡加按次计费的组合基本没对手,因为官方那边这类请求的单价是按字数线性涨的。文档审阅、代码库问答、长视频字幕整理都属于这类,你塞得越多,省得越多。
每天 600 次请求,按次计费平均 0.06 元/次,月成本约 1080 元。无限卡套餐月费如果只到 300 元出头,等效单次价直接降到 0.017 元,这时候继续按次就是白花钱。反过来,每天 100 次(月约 180 元)却去买 300 元的套餐,等于每月扔 120 元。判断标准只有一个:把过去 30 天的真实请求数拉出来除一除,别用感觉估。
宣称"0.01 元一次调 claude-opus-4-5-thinking",基本可以判定有问题。自测方法:问模型自我认知、用固定难题比对输出质量(9.11 和 9.9 谁大、strawberry 里有几个 r)、看它是否支持模型独有能力(Claude 的 thinking 块、Gemini 的原生多模态)。同一个 prompt 连问 10 次,答案风格飘忽、知识截止时间前后矛盾,是换模型的典型特征。
低价平台常见现象:首字延迟正常,输出到一半突然变慢;或者输出被截断,max_tokens 被后台压到 512。测试办法是发一个"输出 3000 字"的请求,看实际返回长度和 finish_reason。返回 stop 但正文只有几百字,就是被砍了输出。
充值前看三件事:平台经营时长、有没有公开客服渠道、最低充值金额。只让充 500 起、客服只有机器人、域名注册不满三个月,这三个信号同时出现就别充。把风险敞口控制在几十块以内,是最实在的止损方式。
"注册送 100 美元额度"这类站点,绝大多数活不过三个月,或者用你的 prompt 做数据回收。淘宝上几块钱的"共享 key"更危险:你发的每一条内容都在别人手里,而且随时会被上游封停,用在生产环境上等于自建故障源。
决定选按量还是按次的,是你自己的三个数字:月请求数、平均上下文长度、模型分布。上下文平均在 2 万 token 以上的,按量计费必然吃亏,因为长上下文溢价全落你头上;平均在 500 token 以下的短对话,两种计费方式差距不大,这时候比单价就行。
import json
from collections import defaultdict
stat = defaultdict(lambda: {"calls": 0, "prompt": 0, "completion": 0, "cost": 0.0})
with open("api_cost.jsonl", encoding="utf-8") as f:
for line in f:
r = json.loads(line)
s = stat[r["model"]]
s["calls"] += 1
s["prompt"] += r["prompt_tokens"]
s["completion"] += r["completion_tokens"]
s["cost"] += r["cost"]
total = sum(v["cost"] for v in stat.values())
for m, v in sorted(stat.items(), key=lambda x: -x[1]["cost"]):
avg = v["prompt"] // max(v["calls"], 1)
print(f'{m:34s} {v["calls"]:>6} 次 均长 {avg:>6} tok ¥{v["cost"]:.2f} {v["cost"]/total*100:5.1f}%')
print(f"合计 ¥{total:.2f}")
跑一个月,你会看到两件事:钱集中在哪两三个模型上,以及平均上下文有多长。把花费最高的那个模型任务重跑一遍,换成语义上够用的便宜模型,账单马上掉一截。
多轮对话里每一轮都重拼完整历史,输入量会滚雪球。做法是:固定不变的 system prompt 和参考资料在第一轮给完,后续只追加增量;把"总结前 20 轮"当成一次独立请求,比每轮都带全量历史便宜得多。
按量计费时代,少写几个字就是少花钱;换成按次计费之后,塞多长都一个价,真正决定账单的是"一个任务要发几次请求"。Agent 类客户端会把一个需求拆成几十次调用,那就是几十次计费。测法很简单:跑一个任务前后各看一次余额差,除以这类任务的历史请求数,就知道自己平均一个任务要发几次请求。把没必要的工具轮次和重复问答砍掉,通常比换一个更便宜的模型见效更快。
from openai import OpenAI
client = OpenAI(
api_key="sk-你的小鱼API密钥",
base_url="https://xyuapi.top/v1", # 国内直连,OpenAI 兼容
)
doc = "……这里放 5 万字的合同全文……"
resp = client.chat.completions.create(
model="gemini-2.5-pro", # 0.031 元/次,塞多长都是这个价
messages=[
{"role": "system", "content": "你是合同审阅助手,输出不超过 300 字。"},
{"role": "user", "content": f"提炼这份合同的风险点:\n{doc}"},
],
)
print(resp.choices[0].message.content)
import json, time
PRICE = {"gemini-2.5-pro": 0.031, "claude-sonnet-4-5-thinking": 0.09,
"grok-4.1": 0.05, "deepseek-v3.2-thinking": 0.049}
def logged_call(model, messages):
t0 = time.time()
resp = client.chat.completions.create(model=model, messages=messages)
row = {
"ts": time.strftime("%Y-%m-%d %H:%M:%S"),
"model": model,
"prompt_tokens": resp.usage.prompt_tokens,
"completion_tokens": resp.usage.completion_tokens,
"cost": PRICE.get(model, 0),
"latency_s": round(time.time() - t0, 2),
}
with open("api_cost.jsonl", "a", encoding="utf-8") as f:
f.write(json.dumps(row, ensure_ascii=False) + "\n")
return resp
# 每周跑一次:把 jsonl 按 model 分组求和,就能看出钱花在哪个模型上
记账文件跑一个月,你会发现大部分开销集中在少数几类任务上,把这几类换成更便宜的模型,账单立刻降下来。这比任何"省钱攻略"都管用——因为它用的是你自己的数据。