版权与内容来源声明
本文为原创整理。文中涉及官方文档、开源仓库、论文与公开报道的内容,均在附表 A 中标注来源;引用官方原文保持原样,不作改写。文中命令、版本号与界面截图以本文成文时的实测/核验结果为准,标注「待验证」的部分请以你本地环境实际输出为判断依据。本文不推荐任何不合规的软件获取方式,也不对任何收益结果作承诺。转载请注明出处。
摘要:2026 年 10 月,OpenAI 与 Anthropic 的批量档(Batch)都写在官方文档与价格页上——同一模型、一律按标准档的一半计价,代价是最长等 24 小时才取结果。本文不讨论「该不该用批量」,而是把一笔账摊开:同样每天 200 万输入 + 40 万输出 token,换调用方式能省多少、换价位档又能省多少、只有一部分流量能批处理时这笔账还剩多少。
一、先把事实钉死:批量档一律按标准档的一半计价
批量档不是某个 SDK 的优化技巧,它是官方明码标价的另一个档位:同一个模型、半价、异步返回。先把这条规则钉死,后面的账才有基准。
OpenAI 在《Batch API》指南里的原话是:
send asynchronous groups of requests with 50% lower costs, a separate pool of significantly higher rate limits, and a clear 24-hour turnaround time
翻成人话:把请求打包异步提交,成本降一半,走单独的、明显更高的速率池,并且有一个明确的 24 小时回结果窗口。同一页还有一句更具体的:
Each batch completes within 24 hours (and often more quickly)
Anthropic 的《Batch processing》给出的口径一致:
cutting costs by 50% and increasing throughput
它的价格页写得更直白:
Save 50% with batch processing.
两边都把「省一半」落在官方文档和价格页上,不是社区经验。这就是本文这笔账的起点。
1.1 半价来自「换档」,不是「换模型」
最容易混的一步:批量档的五折,是同一个模型从 Standard 档切到 Batch 档拿到的,不是换了一个更便宜的模型。
这两件事经常被合并成一句「批处理省钱」,但它们根本不是一笔账:
- 换档省的是调用方式的钱:模型没变、输出质量不变,代价是等最长 24 小时;
- 换模型省的是能力档位的钱:单价能差两个数量级,代价是可能答不好。
本文按成本账的方式把第二笔账放到第三章单独算,第一章先把第一笔账的价格钉死。
1.2 单价表:同一模型的两档价
| 模型 | 档位 | 输入 | 缓存写 | 缓存读 | 输出 |
|---|---|---|---|---|---|
| gpt-6-luna | 标准 | 0.10 | 0.125 | 0.01 | 0.50 |
| gpt-6-luna | 批量 | 0.05 | 0.0625 | 0.005 | 0.25 |
| gpt-6.1-sol | 标准 | 2.00 | 2.50 | 0.10 | 10.00 |
| gpt-6.1-sol | 批量 | 1.00 | 1.25 | 0.05 | 5.00 |
| gpt-6-astra | 标准 | 10.00 | 12.50 | 1.00 | 50.00 |
| gpt-6-astra | 批量 | 5.00 | 6.25 | 0.50 | 25.00 |
口径:本表只列 OpenAI 价格页上 gpt-6-luna / gpt-6.1-sol / gpt-6-astra 三个模型的标准档与批量档单价,单位为美元/百万 token,四个数值列依次是输入、缓存写、缓存读、输出。不含Flex / Fast / Ultrafast 三档,不含Anthropic 各家模型,不含任何中转或私有部署的加价。价格取数日2026-10-11;价格会变,用前请回官方价格页重核。
读表一句话:同一行里,批量档的四个数字恰好都是标准档的一半。这不是巧合,是「一律按标准档一半计价」这条规则的直接结果。
Anthropic 侧同为半价。其价格页写Save 50% with batch processing.,Sonnet 5.5 标准档为输入 2 / 缓存写 2.50 / 缓存读 0.10 / 输出 10(美元每百万 token),Haiku 5.5(≤100K)为输入 0.10 / 输出 0.50,批量档同样打折一半。价格取数日同为 2026-10-11。
1.3 本文的算账口径
后面所有金额统一按这套口径算,方便你直接套到自己的业务上:
- 场景固定为每天 200 万输入 token + 40 万输出 token,一个月按 30 天;
- 只算 token 单价,不含网络、存储、调度、失败重试等额外开销;
- 所有价格取数日2026-10-11,取自官方价格页;价格会变,用前请回官方价格页重核。
二、省钱的是调用方式,但真正的差额在价位档
结论先给:换调用方式最多把账单砍一半(2 倍),换价位档差的是 100 倍的绝对值。先把「调用方式」这一笔算清楚。
2.1 场景算账表:同步 / 批量 / 批量 + 缓存
固定用同一档模型(gpt-6.1-sol),只改调用方式,得到下面这张表:
| 调用方式 | 每天 | 每月 | 相对同步 |
|---|---|---|---|
| 同步(Standard) | 8.00 美元 | 240.00 美元 | 基准 |
| 批量(Batch) | 4.00 美元 | 120.00 美元 | 50.0% |
| 批量 + 前缀缓存(70% 前缀、复用 8 次/天) | 2.88 美元 | 86.40 美元 | 相对批量再降 28.0% |
口径:输入按 200 万 token/天、输出按 40 万 token/天,30 天;「批量 + 缓存」一栏假设 70% 的输入是稳定复用的前缀、每天复用 8 次,其中缓存写入按输入价的 1.25 倍计、缓存读取按输入价的 0.1 倍(批量档为 0.05 倍)。不含网络与存储费用;表内金额为按官方 token 单价推算的模型值,不是真实账单。价格取数日2026-10-11,用前请回官方价格页重核。
读表:同步到批量,账单直接腰斩;再叠上前缀缓存,能在批量档上再降 28%。
2.2 缓存能叠加,但只能叠加在「重复前缀」上
Anthropic 的《Batch processing》明确写了这两项折扣可以叠加:
The pricing discounts from prompt caching and Message Batches can stack
OpenAI 侧同样给缓存输入单独的折扣——见 1.2 单价表的「缓存读」一列,它只有输入价的 0.1 倍。
但别把这条读成「缓存万能」。缓存读的折扣只对稳定复用的前缀有效。一段每次请求都不同的上下文,写进去一次、只读一次,反而比直接用普通输入更贵。这一条是第五章的坑之一,先记着。
2.3 调用方式这笔账已经见底
同一模型下,调用方式能榨出的空间就是这里:半价,加缓存再降一点。再往下想省,靠的就不是调用方式,而是换档。下一章把同一种活平移到三个价位档,看差距会跳到多大。
三、三张表:同一种活摊到三个价位档
同一个脚本能吐出三张表,前两张上一章已经用过;把同一份活平移到三个价位档,差价会从 2 倍直接跳到 100 倍。
3.1 价位档表:三个模型、同一份活
| 模型 | 档位 | 每天 | 每月 |
|---|---|---|---|
| gpt-6-luna | 批量 | 0.20 美元 | 6.00 美元 |
| gpt-6.1-sol | 批量 | 4.00 美元 | 120.00 美元 |
| gpt-6-astra | 批量 | 20.00 美元 | 600.00 美元 |
口径:三者用完全相同的输入输出量(每天 200 万输入 + 40 万输出 token,30 天)与相同的调用方式(批量档),只改模型档位;金额为按官方 token 单价推算的模型值,不含缓存复用,不含网络与存储。价格取数日2026-10-11,用前请回官方价格页重核。
读表:同一种活,最贵档是最便宜档的 100 倍。gpt-6-astra 每天 20.00 美元,gpt-6-luna 每天 0.20 美元——批量档省下的那 2 倍,在这 100 倍面前几乎可以忽略。
3.2 把这段账跑一遍
🧪 实测环境:Python 3.13.12 / macOS / 标准库(无第三方依赖)
# -*- coding: utf-8 -*-"""实验03:批量推理(Batch)到底省多少——按官方价目表算账 价格来源:developers.openai.com/api/docs/pricing(取数日 2026-10-11),单位 美元 / 100 万 token 列顺序:(输入, 缓存读, 缓存写, 输出) """STD={"gpt-6-luna":(0.10,0.01,0.125,0.50),"gpt-6.1-sol":(2.00,0.10,2.50,10.00),"gpt-6-astra":(10.00,1.00,12.50,50.00),}BATCH={"gpt-6-luna":(0.05,0.005,0.0625,0.25),"gpt-6.1-sol":(1.00,0.05,1.25,5.00),"gpt-6-astra":(5.00,0.50,6.25,25.00),}IN_M=2.0# 每天输入 200 万 tokenOUT_M=0.4# 每天输出 40 万 tokenDAYS=30CACHE_SHARE=0.7# 可缓存前缀占比REUSE=8# 同一前缀一天被复用多少次(写 1 次、读 REUSE-1 次)defcost(table,model,in_m,out_m,cache_share=0.0,reuse=1):inp,cr,cw,out=table[model]fresh=in_m*(1-cache_share)cached=in_m*cache_shareifreuse<=1:cached_cost=cached*inp# 只用一次,缓存无意义,按普通输入价else:cached_cost=cached*(cw+(reuse-1)*cr)/reusereturnfresh*inp+cached_cost+out_m*outprint("口径:每天 %.1f 百万输入 + %.1f 百万输出,一个月按 %d 天;价格取数日 2026-10-11"%(IN_M,OUT_M,DAYS))print()print("=== 表1:只换调用方式(gpt-6.1-sol,无缓存复用)===")base=cost(STD,"gpt-6.1-sol",IN_M,OUT_M)fortag,cin[("同步(Standard)",cost(STD,"gpt-6.1-sol",IN_M,OUT_M)),("批量(Batch)",cost(BATCH,"gpt-6.1-sol",IN_M,OUT_M))]:print(" %-16s 每天 %8.2f 美元 每月 %9.2f 美元 相对同步 %5.1f%%"%(tag,c,c*DAYS,100.0*c/base))print()print("=== 表2:批量 + 前缀缓存(gpt-6.1-sol,前缀复用 %d 次/天)===")b0=cost(BATCH,"gpt-6.1-sol",IN_M,OUT_M,0.0)b1=cost(BATCH,"gpt-6.1-sol",IN_M,OUT_M,CACHE_SHARE,REUSE)print(" 批量、不用缓存 每天 %8.2f 美元 每月 %9.2f"%(b0,b0*DAYS))print(" 批量 + 缓存 %.0f%% 每天 %8.2f 美元 每月 %9.2f 相对批量再降 %5.1f%%"%(CACHE_SHARE*100,b1,b1*DAYS,100.0*(1-b1/b0)))print()print("=== 表3:同一种活,三个价位档(都用批量)===")formodelin["gpt-6-luna","gpt-6.1-sol","gpt-6-astra"]:c=cost(BATCH,model,IN_M,OUT_M)print(" %-14s 每天 %8.2f 美元 每月 %9.2f 美元"%(model,c,c*DAYS))print()print("=== 盈亏平衡:只有 p 比例流量可批处理时(批处理有 24 小时窗口,实时流量用不了)===")forpin[1.0,0.5,0.2,0.1,0.05]:mix=p*b0+(1-p)*baseprint(" 可批处理占比 %4.0f%% -> 每天 %8.2f 美元(相对全同步 %5.1f%%,每天省 %7.2f 美元)"%(p*100,mix,100.0*mix/base,base-mix))输出(原样贴出):
口径:每天 2.0 百万输入 + 0.4 百万输出,一个月按 30 天;价格取数日 2026-10-11 === 表1:只换调用方式(gpt-6.1-sol,无缓存复用)=== 同步(Standard) 每天 8.00 美元 每月 240.00 美元 相对同步 100.0% 批量(Batch) 每天 4.00 美元 每月 120.00 美元 相对同步 50.0% === 表2:批量 + 前缀缓存(gpt-6.1-sol,前缀复用 %d 次/天)=== 批量、不用缓存 每天 4.00 美元 每月 120.00 批量 + 缓存 70% 每天 2.88 美元 每月 86.40 相对批量再降 28.0% === 表3:同一种活,三个价位档(都用批量)=== gpt-6-luna 每天 0.20 美元 每月 6.00 美元 gpt-6.1-sol 每天 4.00 美元 每月 120.00 美元 gpt-6-astra 每天 20.00 美元 每月 600.00 美元 === 盈亏平衡:只有 p 比例流量可批处理时(批处理有 24 小时窗口,实时流量用不了)=== 可批处理占比 全部 -> 每天 4.00 美元(相对全同步 50.0%,每天省 4.00 美元) 可批处理占比 50% -> 每天 6.00 美元(相对全同步 75.0%,每天省 2.00 美元) 可批处理占比 20% -> 每天 7.20 美元(相对全同步 90.0%,每天省 0.80 美元) 可批处理占比 10% -> 每天 7.60 美元(相对全同步 95.0%,每天省 0.40 美元) 可批处理占比 5% -> 每天 7.80 美元(相对全同步 97.5%,每天省 0.20 美元)3.3 读表:顺序应该是「先换档,再批处理」
上面这段输出里有两条能直接抄的结论:
- 表1:同步 8.00 → 批量 4.00,调用方式值 2 倍;
- 表3:luna 0.20 → sol 4.00 → astra 20.00,价位档值 100 倍。
所以选型顺序是固定的:先用「够用的最便宜档」,再谈批处理。一个原本跑在 astra 同步档上的任务,先降到 luna 批量档,省下的钱比「把 astra 从同步改成批量」多得多——前者是 100 倍的空间,后者只有 2 倍。
四、只有一部分流量能批处理时,这笔账怎么算
批量档的代价是「最长等 24 小时」。真实业务里能等 24 小时的流量往往只是一部分,所以真正的省额要按可批处理占比折算,而不是按总账单乘一半。
4.1 盈亏平衡表:可批处理占比从高到低五档
| 可批处理占比 | 每天 | 相对全同步 | 每天省 |
|---|---|---|---|
| 全部 | 4.00 美元 | 50.0% | 4.00 美元 |
| 50% | 6.00 美元 | 75.0% | 2.00 美元 |
| 20% | 7.20 美元 | 90.0% | 0.80 美元 |
| 10% | 7.60 美元 | 95.0% | 0.40 美元 |
| 5% | 7.80 美元 | 97.5% | 0.20 美元 |
口径:假设每天 200 万输入 + 40 万输出 token,其中比例为 p 的流量走批量档(单价减半)、其余走同步档,模型统一取 gpt-6.1-sol,不含缓存复用;「相对全同步」是相对全部走同步档的 8.00 美元/天。金额为按官方 token 单价推算的模型值,不是真实账单。价格取数日2026-10-11,用前请回官方价格页重核。
4.2 为什么是「占比」而不是「总量」在决定省多少
批处理省的是每一笔可批请求上的一半单价,不是总账单的一半。全同步每天是 8.00 美元,只要有一部分请求必须实时返回、进不了批量档,它就仍按全价计费——省额被这一部分稀释。
看表里的斜率:占比掉到 50%,每天省额从 4.00 掉到 2.00;再掉到 20%,只剩 0.80。省额和占比是成比例缩小的,它不会因为你总用量大就自动变多。
4.3 判据:可批处理占比低于两成时,先别急着上批量
读表:占比掉到 20%,每天只省 0.80 美元;掉到 5%,每天省 0.20 美元。到这个区间,批量档带来的收益已经很薄,而你要为此付出「接入异步队列 + 处理 24 小时窗口 + 落地结果存储」的工程成本。
可执行的判断是:先把自己业务里「等 24 小时也不影响」的流量量出来。这个占比稳定低于两成,就把批量档往后放;高于五成,再认真评估接入。
本节的资料:把批量推理与前缀缓存的官方文档、按量计费的核对清单整理进了资料包,另外也放了 LangChain + LangGraph 的实战视频和一份大模型学习路线图。放在资料包里,扫码即可获取:
五、三个容易踩的坑:窗口、缓存写入、结果取回期限
半价的账算完,还有三个坑会让实际结果和账单对不上。它们不影响「半价」这个事实,但会决定你这笔账能不能真省下来。
5.1 坑一:窗口只能设 24 小时,别把批量当实时
OpenAI 指南里写得很清楚:For now, the completion window can only be set to 24h.也就是说,这个等待窗口目前不能调短。Anthropic 侧给的是「大多数批在 1 小时内完成」:
most batches completing within 1 hour
注意措辞:「大多数」不等于「全部」,「1 小时」也不是承诺。把批量档写进任何要求实时返回的链路,都会在高峰期翻车。批量只适合离线任务、日报、批量标注、夜间跑批这类场景。
5.2 坑二:缓存写入不是免费的
这是第二章那笔「批量 + 缓存省 28%」隐藏的前提。看回同一脚本的最后一段:
🧪 实测环境:Python 3.13.12 / macOS / 标准库(无第三方依赖)
print()print("=== 缓存写入不是免费的:写入按 1.25x 输入价,读取按 0.1x(批量档 0.05x)===")formodelin["gpt-6.1-sol"]:fortag,tbin[("Standard",STD),("Batch",BATCH)]:i,cr,cw,o=tb[model]# 不用缓存:每次调用都按输入价 i 付;用缓存:首调 cw,之后每次 cr# 设调用 m 次,缓存回本条件:cw + (m-1)*cr < m*i -> m > (cw-cr)/(i-cr)breakeven=(cw-cr)/(i-cr)print(" %-10s %-9s 输入 %.2f / 缓存写 %.2f / 缓存读 %.2f -> 调用次数超过 %.2f 次即回本(即第 2 次起就赚)"%(model,tag,i,cw,cr,breakeven))=== 缓存写入不是免费的:写入按 1.25x 输入价,读取按 0.1x(批量档 0.05x)=== gpt-6.1-sol Standard 输入 2.00 / 缓存写 2.50 / 缓存读 0.10 -> 调用次数超过 1.26 次即回本(即第 2 次起就赚) gpt-6.1-sol Batch 输入 1.00 / 缓存写 1.25 / 缓存读 0.05 -> 调用次数超过 1.26 次即回本(即第 2 次起就赚)读法:缓存写一次要付输入价的 1.25 倍。如果同一段前缀只被读一次,写了就是纯亏;只有复用从第 2 次起,缓存才开始赚。所以「批量 + 缓存」能不能成立,取决于你有没有稳定复用的前缀,而不是取决于你想不想省。
5.3 坑三:结果取回期限
OpenAI 指南说明输入以.jsonl提交、Each batch completes within 24 hours;Anthropic 的《Batch processing》则给出批量任务的容量上限:
A Message Batch is limited to either 100,000 Message requests or 256 MB in size, whichever is reached first.
也就是一个批最多 10 万条请求、或 256 MB,先到先算。
结果在服务器上会保留多久、过期后还能不能取回——本文没有核到这两家可引用的官方原文,不写具体天数。实践上的做法是固定的:批量任务一旦返回,就立刻把结果落库,不要把它当长期存储。按条数上限拆批时,也顺手把「每批不超过 10 万条 / 256 MB」写进提交逻辑,避免整批被拒。
收口成一句话:批量档省的是调用方式(2 倍),价位档差的是绝对值(最高 100 倍);可批处理占比低于两成时,收益已经很薄。先把档位降到位,再决定要不要为这 24 小时的等待买单。
本篇涉及的官方价格页与 API 文档:把批量推理、缓存复用与按量计费的官方材料整理进了资料包,配合视频课对照看更省事。放在资料包里,扫码即可获取:
附表 A:本文引用事实与出处对照表
| 事实 | 出处 | 本文位置 |
|---|---|---|
| 「send asynchronous groups of requests with 50% lower costs, a separate pool of significantly higher rate limits, and a clear 24-hour turnaround time」 | OpenAI《Batch API》;https://developers.openai.com/api/docs/guides/batch | 第 1 章 |
「Each batch completes within 24 hours (and often more quickly)」;「For now, the completion window can only be set to 24h.」;批量请求输入为.jsonl | 同上 | 第 1、5 章 |
| OpenAI 价格页提供 Standard / Batch / Flex / Fast / Ultrafast 五档;gpt-6-luna 标准短上下文 输入 0.10 / 缓存读 0.01 / 缓存写 0.125 / 输出 0.50,批量档 0.05 / 0.005 / 0.0625 / 0.25(美元每百万 token) | OpenAI 价格页;https://developers.openai.com/api/docs/pricing;取数日 2026-10-11 | 第 1 章 |
| 「cutting costs by 50% and increasing throughput」;「most batches completing within 1 hour」;「A Message Batch is limited to either 100,000 Message requests or 256 MB in size, whichever is reached first.」;「The pricing discounts from prompt caching and Message Batches can stack」 | Anthropic《Batch processing》;https://platform.claude.com/docs/en/build-with-claude/batch-processing | 第 1、2、5 章 |
| 「Save 50% with batch processing.」;Sonnet 5.5 输入 2 / 缓存写 2.50 / 缓存读 0.10 / 输出 10;Haiku 5.5(≤100K)输入 0.10 / 输出 0.50(美元每百万 token) | Anthropic 价格页;https://claude.com/pricing;取数日 2026-10-11 | 第 1 章 |
| 同步 / 批量 / 批量 + 缓存的每天与每月金额;三个价位档每天 0.20 / 4.00 / 20.00 美元;可批处理占比从高到低五档的省额;缓存回本次数 1.26 | 本文实测,脚本work/exp1011/exp03_batch_cost.py | 第 3、4、5 章 |
表下口径:附表 A 中的价格与参数均取自官方文档与价格页,取数日 2026-10-11;厂商价格与 API 参数会过期,用前请回官方原始页面重核。实测部分的金额为按官方 token 单价推算的模型值,用来说明成本的倍数关系,不代表任何真实账单。
写在最后:这篇用到的资料
写这篇文章时,把相关的官方文档和源码又翻了一遍,顺手也整理了几份配套的东西:
- 大模型学习路线图:从零基础到能自己动手做 Agent,按阶段说明每一步该学什么、哪些可以先跳过
- 《LangChain + LangGraph + MCP 智能体开发实战》视频课:7 个模块,从私有化部署、Embedding+RAG 到 MCP+Agent 全流程
- AI 大模型知识库(在线可查):Agent Skills 从入门到落地、Claude Skills 完全指南等专题,按目录浏览即可
- 640 套 AI 大模型行业报告 + 经典 PDF 书籍:看行业落地案例和别人怎么做的时候用得上
- 大模型零基础到精通教学视频:跟着敲一遍,比只读文档快得多
资料是我自己整理的,放在下面这个码上,扫码即可获取:
添加时备注「AI」,优先通过。
资料按「先路线、再动手、最后查漏」的顺序整理好了,建议先看学习路线那一份,照着它挑一条适合自己当前基础的路径再往下看。