13 дек. 2025 г.Anthony.Kim

Caret Router: Почему мы перешли с LiteLLM на any-llm

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

Caret Router

При проектировании LLM-роутера в Caret, самым важным для нас была "простота, которую мы можем контролировать." Модели продолжают множиться, поставщики меняются, и требования растут — и мы не раз убеждались, что если роутер тоже становится тяжелым, операционная сложность в конечном итоге съедает скорость разработки продукта.

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

Это не "сравнительный обзор", а запись о том, почему мы переключились — и что стало возможным после переключения.


1. LiteLLM Был Слишком Сложным, и Caret Не Нужны Были Многие Его Функции

Caret Router, LiteLLM vs any-llm

LiteLLM ближе к AI Gateway / Proxy Server, чем к простому SDK. Multi-tenancy, виртуальные ключи, управление организацией, контроль бюджета, логирование, оповещения, интеграция с базами данных… В "корпоративных средах" это, несомненно, мощные преимущества.

Проблема в том, что роутеру Caret не нужен был такой набор функций.

  • Изменение роутера повлекло за собой DB, настройку worker-ов и операционные параметры
  • Нам пришлось поддерживать структуру, которая включала функции, которые мы не использовали
  • В конце концов, "управление роутером" становится важнее, чем "маршрутизация LLM"

В результате LiteLLM стал тяжелым выбором для Caret не потому, что ему не хватало функций, а потому, что их было слишком много.


2. any-llm Был Лаконичным и Легко Расширяемым

Caret Router, any-llm

Самая большая причина, по которой мы выбрали any-llm, проста.

"Роутер должен быть тонким."

any-llm - это, по сути, библиотека, ориентированная на чистый API interface.

  • Он не заставляет вас использовать proxy server
  • Он фокусируется на абстрагировании вызовов моделей
  • Структура проста, поэтому ее легко понять на уровне кода

Речь идет не только о том, чтобы быть "легким" — это означает, что мы можем естественно встроить его в нашу сервисную архитектуру.

Для нас, желающих, чтобы роутер был внутренним компонентом платформы Caret, а не отдельным сервисом, это было решающим фактором.


3. Мы Могли Расширить То, Что any-llm Не Предоставляет, Так, Как Это Подходит Caret

Caret Router, Extension

Одной из самых сложных частей использования LiteLLM было "встраивание Caret в структуру, которая уже была определена."

После перехода на any-llm наш подход полностью изменился.

Роутер маршрутизирует — все остальное строим мы.

Caret Router, Sequence

В результате мы смогли добавить функции, которых нет в any-llm, но которые необходимы для Caret — по-своему.

  • Управление профилями
  • Биллинг / платежи
  • Управление API-ключами
  • Управление кредитами
  • Социальный вход и аутентификация

Эти функции не должны навязываться на уровне роутера; они должны были естественно интегрироваться с бизнес-логикой Caret.

Благодаря простой API-структуре any-llm, такое расширение стало намного проще.


4. Поскольку any-llm Предоставляет Только API, Мы Могли Построить UI Совершенно Свободно

Caret Router, UI

LiteLLM ближе к "платформе, которая включает в себя admin UI." Но у Caret уже есть своя собственная UX и философия дизайна.

any-llm вообще не навязывает никакого UI.

  • Предоставляет только API
  • Сервис полностью определяет UI/UX

Это позволило нам разработать:

  • UI, соответствующий пользовательским потокам Caret
  • Экраны, где кредиты, платежи и управление ключами естественно связаны
  • Опыт, в котором функции LLM ощущаются как "инструменты"

без ограничений.

Вместо того, чтобы роутер определял UX, продукт оборачивает роутер.


5. any-llm Также Облегчает Улучшение Производительности с Помощью Go В Дальнейшем

Caret Router, Performance

В долгосрочной перспективе Caret заботится о производительности и экономической эффективности. В частности, уровень роутера - это то место, где трафик имеет тенденцию концентрироваться.

Поскольку структура any-llm проста:

  • Он не привязан к конкретному языку/среде выполнения
  • Перестроить его на Go — или заменить части компонентами Go позже — это реальный вариант

Это было бы более сложным решением, если бы мы были связаны с дизайном, который предполагает тяжелый proxy server. С any-llm-based структурой мы можем сохранить нашу стратегию производительности гибкой.


6. Мы Сделаем Его Open-Source, Как Только Он Будет Очищен

Caret Router, Open Source

По мере того, как мы переходили с LiteLLM на any-llm и добавляли специфические для Caret функции самостоятельно, стало ясно одно.

Эта структура слишком хороша, чтобы держать ее при себе.

Поэтому в настоящее время мы очищаем код, и как только он будет готов, мы выпустим его как open source.

  • Архитектура маршрутизации на основе any-llm
  • Паттерны расширения, которые мы фактически используем в Caret
  • Операционные знания, полученные в результате его запуска

Мы ищем разработчиков, которые хотят думать и строить вместе. Вместо "готового фреймворка" мы надеемся, что он станет основой, которую мы будем развивать вместе.


В Заключение

Этот переход не говорит о том, что "LiteLLM плох". LiteLLM по-прежнему является отличным инструментом и хорошо подходит для многих команд.

Но для Caret нам было нужно:

  • Более тонкий роутер
  • Больше свободы для расширения
  • Более четкое разделение обязанностей

И any-llm был вариантом, который соответствовал этим потребностям.

К чему приведет этот выбор, станет яснее в процессе текущих операций и open-source процесса.

Мы скоро дадим коду говорить за себя.

Другие статьи