TL;DR
One API — это open-source решение для консолидации доступа к различным LLM API (OpenAI, Claude, Gemini и другим) через единый endpoint. Система предоставляет key management, rate limiting и унифицированный API contract, развертывается как single binary или Docker-контейнер.
Введение: Проблема мультипровайдерности в LLM-разработке
Современные senior фронтенд-девелоперы сталкиваются с необходимостью интеграции нескольких LLM-провайдеров в своих приложениях. Каждый provider имеет:
- Собственные API specifications
- Разные authentication механизмы
- Unique rate limits и pricing models
One API решает эти проблемы, предлагая абстракцию в виде API gateway с единой точкой входа. Это особенно актуально для:
- A/B тестирования разных моделей
- Fallback стратегий при rate limiting
- Централизованного мониторинга и биллинга
Основная архитектура
Система построена по принципу lightweight proxy с плагинной архитектурой для поддержки новых провайдеров:
// Пример конфигурации провайдеров в TypeScript-интерфейсе
interface ProviderConfig {
name: 'openai' | 'anthropic' | 'google';
apiKey: string;
endpoint?: string;
rateLimit?: {
rpm: number;
tpm: number;
};
}
Key features:
- Unified API contract: Все провайдеры доступны через POST /v1/chat/completions
- JWT-based authentication: Единая auth схема для всех upstream-провайдеров
- Priority routing: Динамический выбор провайдера на основе настроек
Практическое развертывание
Для Docker-деплоя достаточно:
docker run -d \
-p 3000:3000 \
-e SQLITE_PATH=/data/oneapi.db \
-v ./data:/data \
justsong/one-api
Конфигурация через environment variables:
REDIS_URLдля кэшированияSQLITE_PATHилиDATABASE_URLдля persistent storageROOT_TOKENдля admin-доступа
Интеграция с фронтендом
Пример использования с React + TypeScript:
import { create } from 'one-api-client';
const client = create({
baseURL: 'https://your-one-api-instance.com',
apiKey: 'your-jwt-token',
});
const ChatComponent = () => {
const [response, setResponse] = useState('');
const handleSubmit = async (prompt: string) => {
const res = await client.createChatCompletion({
model: 'gpt-4', // Может быть claude-2 или gemini-pro
messages: [{ role: 'user', content: prompt }],
});
setResponse(res.choices[0].message.content);
};
return <>{/* UI implementation */}</>;
};
Advanced Features
-
Каналы (Channels):
channels: - name: "primary-gpt4" provider: "openai" models: ["gpt-4"] priority: 10 - name: "fallback-claude" provider: "anthropic" models: ["claude-2"] priority: 5 -
Балансировка нагрузки:
- Weighted round-robin
- Least connections
- Latency-based
-
Аналитика:
SELECT provider, model, COUNT(*) as requests, AVG(response_time) as avg_latency FROM request_logs GROUP BY provider, model;
Заключение
One API предлагает production-ready решение для:
- Упрощения мультипровайдерных LLM-архитектур
- Централизованного управления квотами
- Постепенной миграции между моделями
Для senior разработчиков система особенно ценна возможностью реализации сложных routing policies без изменения client-side кода. Проект активно развивается, с еженедельными обновлениями и поддержкой новых провайдеров.
Рекомендуемая next steps:
- Настроить мониторинг через Prometheus exporter
- Реализовать canary-деплой новых моделей
- Интегрировать с существующим SSO (Keycloak/Auth0)
Попробуй сам: DigitalOcean — $200 кредитов для новых пользователей.
Источник: https://github.com/songquanpeng/one-api