13 дек. 2025 г.Anthony.Kim
Caret Router: Почему мы перешли с LiteLLM на any-llm
LiteLLM был мощным, но для Caret это был излишне тяжелый и сложный роутер. any-llm, с его лаконичным, API-ориентированным дизайном, позволил нам расширить только те функции, которые действительно нужны Caret. Это позволило нам построить UX и операционную структуру, нативные для Caret, а также подготовило нас к будущим улучшениям производительности.

При проектировании LLM-роутера в Caret, самым важным для нас была "простота, которую мы можем контролировать." Модели продолжают множиться, поставщики меняются, и требования растут — и мы не раз убеждались, что если роутер тоже становится тяжелым, операционная сложность в конечном итоге съедает скорость разработки продукта.
Мы некоторое время использовали LiteLLM. Функционально, это отличный и очень хорошо построенный инструмент. Но со временем стало ясно, что некоторые его части не соответствуют тому, куда движется Caret или как мы работаем в production. Поэтому мы переключили наш роутер с LiteLLM → any-llm.
Это не "сравнительный обзор", а запись о том, почему мы переключились — и что стало возможным после переключения.
1. LiteLLM Был Слишком Сложным, и Caret Не Нужны Были Многие Его Функции

LiteLLM ближе к AI Gateway / Proxy Server, чем к простому SDK. Multi-tenancy, виртуальные ключи, управление организацией, контроль бюджета, логирование, оповещения, интеграция с базами данных… В "корпоративных средах" это, несомненно, мощные преимущества.
Проблема в том, что роутеру Caret не нужен был такой набор функций.
- Изменение роутера повлекло за собой DB, настройку worker-ов и операционные параметры
- Нам пришлось поддерживать структуру, которая включала функции, которые мы не использовали
- В конце концов, "управление роутером" становится важнее, чем "маршрутизация LLM"
В результате LiteLLM стал тяжелым выбором для Caret не потому, что ему не хватало функций, а потому, что их было слишком много.
2. any-llm Был Лаконичным и Легко Расширяемым

Самая большая причина, по которой мы выбрали any-llm, проста.
"Роутер должен быть тонким."
any-llm - это, по сути, библиотека, ориентированная на чистый API interface.
- Он не заставляет вас использовать proxy server
- Он фокусируется на абстрагировании вызовов моделей
- Структура проста, поэтому ее легко понять на уровне кода
Речь идет не только о том, чтобы быть "легким" — это означает, что мы можем естественно встроить его в нашу сервисную архитектуру.
Для нас, желающих, чтобы роутер был внутренним компонентом платформы Caret, а не отдельным сервисом, это было решающим фактором.
3. Мы Могли Расширить То, Что any-llm Не Предоставляет, Так, Как Это Подходит Caret

Одной из самых сложных частей использования LiteLLM было "встраивание Caret в структуру, которая уже была определена."
После перехода на any-llm наш подход полностью изменился.
Роутер маршрутизирует — все остальное строим мы.

В результате мы смогли добавить функции, которых нет в any-llm, но которые необходимы для Caret — по-своему.
- Управление профилями
- Биллинг / платежи
- Управление API-ключами
- Управление кредитами
- Социальный вход и аутентификация
Эти функции не должны навязываться на уровне роутера; они должны были естественно интегрироваться с бизнес-логикой Caret.
Благодаря простой API-структуре any-llm, такое расширение стало намного проще.
4. Поскольку any-llm Предоставляет Только API, Мы Могли Построить UI Совершенно Свободно

LiteLLM ближе к "платформе, которая включает в себя admin UI." Но у Caret уже есть своя собственная UX и философия дизайна.
any-llm вообще не навязывает никакого UI.
- Предоставляет только API
- Сервис полностью определяет UI/UX
Это позволило нам разработать:
- UI, соответствующий пользовательским потокам Caret
- Экраны, где кредиты, платежи и управление ключами естественно связаны
- Опыт, в котором функции LLM ощущаются как "инструменты"
— без ограничений.
Вместо того, чтобы роутер определял UX, продукт оборачивает роутер.
5. any-llm Также Облегчает Улучшение Производительности с Помощью Go В Дальнейшем

В долгосрочной перспективе Caret заботится о производительности и экономической эффективности. В частности, уровень роутера - это то место, где трафик имеет тенденцию концентрироваться.
Поскольку структура any-llm проста:
- Он не привязан к конкретному языку/среде выполнения
- Перестроить его на Go — или заменить части компонентами Go позже — это реальный вариант
Это было бы более сложным решением, если бы мы были связаны с дизайном, который предполагает тяжелый proxy server. С any-llm-based структурой мы можем сохранить нашу стратегию производительности гибкой.
6. Мы Сделаем Его Open-Source, Как Только Он Будет Очищен

По мере того, как мы переходили с LiteLLM на any-llm и добавляли специфические для Caret функции самостоятельно, стало ясно одно.
Эта структура слишком хороша, чтобы держать ее при себе.
Поэтому в настоящее время мы очищаем код, и как только он будет готов, мы выпустим его как open source.
- Архитектура маршрутизации на основе any-llm
- Паттерны расширения, которые мы фактически используем в Caret
- Операционные знания, полученные в результате его запуска
Мы ищем разработчиков, которые хотят думать и строить вместе. Вместо "готового фреймворка" мы надеемся, что он станет основой, которую мы будем развивать вместе.
В Заключение
Этот переход не говорит о том, что "LiteLLM плох". LiteLLM по-прежнему является отличным инструментом и хорошо подходит для многих команд.
Но для Caret нам было нужно:
- Более тонкий роутер
- Больше свободы для расширения
- Более четкое разделение обязанностей
И any-llm был вариантом, который соответствовал этим потребностям.
К чему приведет этот выбор, станет яснее в процессе текущих операций и open-source процесса.
Мы скоро дадим коду говорить за себя.
Другие статьи

Type next instructions while AI is streaming, cancel with a single ESC press. Also includes Gemini 3.1 Pro Support, Direct VSIX Download, CLI sub-agent execution, and v0.4.7 infinite loading fix.

Careti v0.4.7 добавляет модель Z.AI GLM-4.7, систему команд, совместимую с Claude Code, улучшения SmartEditEngine и улучшения интерфейса.
