一个网关支持多个 LLM 提供商,彻底解决每个项目重写 API wrapper 的痛点,降低集成成本。
每个侧项目的开始方式都一样。
项目还没开始,我就已经配置好了三个不同的服务。
在某个时刻,我想为什么不干脆把这个做成一个正式的 API 并公开托管呢?
这就是 Apiarium 的由来。
它们是很棒的项目。但我想要一些更有主见的东西:
我的目标不是运行生产 AI 基础设施的团队。而是想要一个 API 密钥和可预测账单的侧项目开发者。
Client
│
▼
Apiarium
├── /llm → OpenAI, Anthropic (more coming)
├── /image → gpt-image-1 (more coming)
├── /tts → OpenAI TTS, ElevenLabs (soon)
└── /transcribe → Whisper (more coming)
*More providers coming.
添加一个新的 provider 不会改变 API 契约。相同的端点,相同的认证,更多选项。
从客户端的角度来看,每个 provider 看起来完全一样:
# GPT-4o-mini
curl -X POST https://api.apiarium.dev/llm \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Hello"}]}'
# Switch to Claude — same endpoint, same auth
curl -X POST https://api.apiarium.dev/llm \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"claude-haiku","messages":[{"role":"user","content":"Hello"}]}'
信用额度而不是按模型计价。 按模型对四个 provider 进行令牌计价很混乱。我最终采用了信用制度:文本生成花费 1-20 个信用额度(取决于模型),图像花费 100 个,TTS 每 1,000 个字符花费 10 个。一个数字,始终可见。
规范化的错误格式。 OpenAI 和 Anthropic 返回完全不同的错误结构。来自 Apiarium 的每个错误看起来都一样,无论哪个 provider 导致了错误:
{
"error": "Rate limit exceeded. Try again in 30 seconds.",
"code": "rate_limit_exceeded",
"retry_after": 30
}
Provider 抽象。 每个 provider 适配器在发送回客户端之前都会返回相同的内部响应格式。这意味着添加新的 provider 主要是实现一个适配器,而不是改变整个 API。
如果我重新开始,我会先构建 provider 抽象,而不是逐个添加 provider。每个新模型都教会了我关于流处理、令牌计数或错误处理的另一个边界情况。提前为这些差异设计会为我节省时间。
几天前启动。还很早期,但基础设施是稳固的,每个端点都能工作。
我最感兴趣的是这是否解决了其他开发者的真实问题。如果你遇到过相同的设置成本或认为我在解决错误的问题,我真的想听听。
如果甚至只有一个开发者因为这个而停止复制粘贴另一个 ai-utils.js 文件,我就会把它称为成功。