开源项目 llm-specs-api:聚合 127 家厂商 3214 个模型的免费 REST API
一个基于 Bun 的开源服务,将 127 家厂商 3214 个 LLM 的价格、上下文与能力数据封装为 REST API…
一个名为 llm-specs-api 的开源项目试图把「大模型价格表」这件事做成一个可直接调用的 REST API。该项目把覆盖 127 家厂商、共 3214 个模型的定价、上下文窗口与能力标志打包成一份 1.7 MB 的数据集,启动时一次性加载到内存,后续所有查询、过滤、排序、对比和成本估算都不依赖数据库。需要说明的是,官方托管实例在撰稿时尚未部署,目前需本地运行或自行部署。
数据规模与查询能力
数据集内置 127 家厂商、3214 个模型,以及 16 种 mode、153 个属性字段(其中 86 个与价格相关)。/v1/models 端点支持按 provider、mode、能力标志(37 个 supports_* 键)、上下文下限、价格上限进行过滤,并允许字段投影与分页。例如查询 Anthropic 的 chat 模型并按输入价格降序排列,可直接通过 query 参数完成。
模型详情可通过 /v1/models/{id} 查询,返回该模型所有适用费率,包括仅在阈值以上生效的费率、缓存读写费率以及上下文窗口与能力标志。对于路径中包含 / 或 : 的模型 ID(如 Bedrock 上的 us.anthropic.claude-3-5-haiku-20241022-v1:0),可通过 * 通配路由或 /v1/models/by-id 查询参数处理。
成本估算与审计
项目的核心差异化在于 /v1/estimate 端点:它不是只返回一个总价,而是给出一份「收据」。例如输入 19 万 token、输出 4000 token、缓存读 2 万 token、1 小时缓存写 8000 token 的请求,由于触发 200k 阈值,整次请求被按高于 200k 的费率重新计费,输出也被一并重算。返回结果逐行列出 rate_key、数量、单价与对应费率键,开发者可逐条核对,避免「黑盒总价」。
为保证精度,服务全程使用 Decimal 运算而非浮点数,因为数据中已存在 1.2999000000000001e-07 这类序列化噪声,且部分费率低至 1.3e-10。另外,258 个模型明确声明输出价格为 0,「免费」与「未知」在数据结构上必须可区分,未定价的用量会被归入 unpriced[],不会悄悄计入或稀释总价。
部署与可用性
项目要求 Bun 运行时,可通过 git clone 后 bun start 启动,也可直接拉取已发布镜像 ghcr.io/axium-lab/llm-specs-api:latest 运行,数据集已打包进镜像内。启动时实例会用 If-None-Match 向源端校验;命中 304 则传输 0 字节;源端不可用时则回退到本地副本并在 /health 中标注。
所有错误响应遵循 RFC 9457 的 application/problem+json 规范,使用稳定的 type slug(如 model-not-found、ambiguous-model、model-not-priced、limits-exceeded、invalid-query),便于调用方在代码中分支处理。
局限与适用场景
该项目本质上是一个数据聚合与查询工具,适合需要在多厂商、多模型间快速比价或核算单次调用成本的开发者与团队。但官方托管实例尚未上线,意味着现阶段所有用户都需要自行部署;此外,价格与能力数据高度依赖上游来源的更新频率,对于需要实时决策的生产系统,仍需关注数据时效性问题。
