调用 LLM API 的费用一直是实际部署绕不开的问题。尤其是做批量处理、离线评测、数据集标注的场景,Token 消耗量上去以后,单条调用的开销很快就变成一笔不小的数目。
最近看到一个叫 batchwork 的开源项目,思路很直接:把零散的 API 请求整合成批处理任务,利用各大模型厂商的 Batch API 接口(通常有 50% 左右的折扣)来执行。相当于在本地架一层统一队列,把 Anthropic、OpenAI、Google Gemini 的异步批处理入口封装成一套 API。
写几条我觉得有意思的点:
批处理不是新概念,但统一封装是
各个厂商早就推出了各自的 Batch API:OpenAI 的 Batch、Anthropic 的 Message Batches、Google 的 Batch Prediction。问题是要用就得分别对接,每家接口风格、限速策略、回调方式都不一样。batchwork 用统一的 REST API 把这层差异抹平了,上层应用不管底层是哪个模型供应商,只管提交任务、轮询状态、取结果。
省的不只是 API 费用
批处理模式下,厂商给的折扣一般是 50% 左右,这一点 OpenAI 和 Anthropic 都很明确。但 batchwork 带来的好处不止是单价打折——异步队列允许你做请求合并、去重、缓存相似 prompt 的结果,减少重复计算。对于大批量评测或数据标注的场景,这部分优化累积下来比单纯的 API 折扣更可观。
技术底子不复杂
核心是 TypeScript 写的轻量服务,概念上就是任务队列 + 供应商适配层 + 结果持久化。支持 OpenAI、Anthropic、Google Gemini、AI21 等主流 API。部署也不重,一个 Docker 镜像或者 node 启动都可以。源码很干净,代码量不大,适合二次开发。
适合什么场景
- 需要定期跑大批量评测的团队
- 做数据标注/清洗,需要调用 LLM 打分
- 离线分析模型输出质量
- 在多个模型之间做横向对比测试
不过也要注意,批处理意味着延时——OpenAI 的 Batch 完成时间没有 SLA,可能是几分钟也可能是几小时。所以不适合在线推理,但离线场景很合适。
内容来源
batchwork GitHub 仓库:github.com/haydenbleasel/batchwork
OpenAI Batch API 文档:platform.openai.com/docs/guides/batch
Anthropic Message Batches 文档:docs.anthropic.com/en/docs/build-with-claude/message-batches