LibreChat: свой ChatGPT-клон с RouterAI через Custom Endpoints
LibreChat — это бесплатный open-source веб-интерфейс в стиле ChatGPT (лицензия MIT, около 46 тыс. звёзд на GitHub), который вы разворачиваете на своём сервере. Внутри: чаты с историей, агенты, поддержка MCP-серверов, Skills (повторно используемые инструкции для агентов), загрузка файлов и мультипользовательский режим с регистрацией и ролями. Своих моделей LibreChat не запускает: он отправляет запросы провайдерам, которых вы настроили, поэтому видеокарта не нужна. Любой OpenAI-совместимый API подключается как Custom Endpoint без прокси, и RouterAI подходит ему без доработок: один ключ и один Base URL открывают сотни моделей (Claude, GPT, Gemini, DeepSeek и другие), работа идёт из России без VPN, а оплата — в рублях.
В статье поднимем LibreChat в Docker, опишем RouterAI в файле librechat.yaml, выберем модели, подключим Claude по нативному Anthropic API и разберём типичные ошибки.
Требования
- Git и Docker с плагином Compose. Для всего набора контейнеров (LibreChat, MongoDB, Meilisearch, RAG API) выделите Docker хотя бы 2 ГБ памяти.
- Аккаунт на RouterAI с положительным балансом.
- API-ключ из раздела «Ключи API»: он начинается с
sk-or-...и показывается один раз. - Свободный порт 3080 (иначе смените его в
docker-compose.override.yml).
Установка
По официальной инструкции LibreChat ставится так:
git clone https://github.com/LibreChat-AI/LibreChat.git
cd LibreChat
cp .env.example .env
docker compose up -d
Первый запуск скачивает образы и занимает несколько минут. Затем откройте http://localhost:3080 и нажмите «Зарегистрироваться». Паролей по умолчанию нет: первая зарегистрированная учётная запись становится администратором.

Язык интерфейса зависит от языка браузера: на скриншотах он русский, в документации названия на английском.
Подключение к RouterAI
Настройка состоит из трёх файлов в корне проекта (там же, где docker-compose.yml).
-
Ключ в
.env. Добавьте строку (вместо заглушки подставьте свой ключ):ROUTERAI_API_KEY=sk-xxxxxxxxxxxxxxxxИмя переменной любое, но оно должно совпадать с тем, что вы укажете в
apiKey. Не называйте переменнуюOPENROUTER_API_KEYилиOPENAI_API_KEY: это имена, зарезервированные LibreChat под встроенные endpoint'ы. -
Монтирование конфига. Скопируйте пример override-файла и раскомментируйте блок с
librechat.yaml:cp docker-compose.override.yml.example docker-compose.override.ymlservices: api: volumes: - type: bind source: ./librechat.yaml target: /app/librechat.yaml -
Описание endpoint в
librechat.yaml. Создайте файл (или скопируйтеlibrechat.example.yaml) и добавьте RouterAI вendpoints.custom:version: 1.3.17 cache: true endpoints: custom: - name: 'RouterAI' apiKey: '${ROUTERAI_API_KEY}' baseURL: 'https://routerai.ru/api/v1' models: default: - 'anthropic/claude-sonnet-5.5' - 'anthropic/claude-haiku-5.5' - 'openai/gpt-5.5' - 'google/gemini-3.1-pro-preview' - 'deepseek/deepseek-v4-flash' fetch: true titleConvo: true titleModel: 'anthropic/claude-haiku-5.5' modelDisplayLabel: 'RouterAI'
Что означают поля (по справочнику):
| Поле | Назначение |
|---|---|
name |
Имя endpoint в селекторе; должно быть уникальным |
apiKey |
Ключ; лучше ссылка ${ROUTERAI_API_KEY} на переменную из .env
|
baseURL |
https://routerai.ru/api/v1: LibreChat сам добавляет /chat/completions
|
models.default |
Модели, которые показываются всегда и используются, если загрузка каталога не удалась |
models.fetch |
true — подтянуть список моделей из /models RouterAI |
titleConvo, titleModel
|
Автоназвания чатов и модель для них; current_model берёт модель текущего чата |
modelDisplayLabel |
Подпись над ответами модели |
Перезапустите контейнеры, чтобы LibreChat прочитал конфиг:
docker compose down && docker compose up -d
После перезапуска в селекторе моделей нового чата появится endpoint RouterAI, а справа от него откроется список моделей, подтянутый из каталога.

Claude через Anthropic Messages API
RouterAI отвечает и по нативному Anthropic API. Для него в LibreChat есть отдельный тип: provider: 'anthropic'. Базовый адрес здесь — https://routerai.ru/api (SDK сам добавит /v1/messages), а модели нужно перечислить явно: автозагрузка по /models для этого провайдера не используется.
- name: 'RouterAI Claude'
provider: 'anthropic'
apiKey: '${ROUTERAI_API_KEY}'
baseURL: 'https://routerai.ru/api'
models:
default:
- 'anthropic/claude-sonnet-5.5'
- 'anthropic/claude-haiku-5.5'
fetch: false
titleConvo: true
titleModel: 'anthropic/claude-haiku-5.5'
Блок добавляется в тот же список custom рядом с первым. Для обычного чата достаточно OpenAI-совместимого endpoint'а; нативный вариант нужен, если вам важны возможности именно Anthropic API.
Выбор модели
С fetch: true в селекторе окажется весь каталог RouterAI, включая модели для картинок, видео и эмбеддингов. Если нужен короткий список, поставьте fetch: false — тогда будут только модели из default. Все id берите в каталоге моделей: он обновляется чаще, чем статьи.
| Модель | Для чего |
|---|---|
anthropic/claude-sonnet-5.5 |
основная модель: тексты, код, анализ документов, работа агентов |
anthropic/claude-haiku-5.5 |
быстрые недорогие ответы, названия чатов (titleModel) |
openai/gpt-5.5 |
сложные рассуждения и многошаговые задачи |
google/gemini-3.1-pro-preview |
длинный контекст (около 1 млн токенов): большие документы |
deepseek/deepseek-v4-flash |
недорогой вариант для обычного чата и суммаризации |
Цены за токены различаются в десятки раз, актуальные значения смотрите в каталоге. Для повседневных чатов разумно оставить по умолчанию недорогую модель, а дорогие выбирать под конкретную задачу.
LibreChat умеет больше обычного чата. Подключённые MCP-серверы доступны прямо в чате при выборе модели с поддержкой инструментов. В конструкторе агентов можно собрать ассистента с инструкциями, инструментами и Skills (файлами SKILL.md с повторно используемыми процедурами), а в поле Model выбрать нужного провайдера и модель.
Проверка подключения
- Откройте
http://localhost:3080и войдите в свою учётную запись. - В селекторе вверху выберите endpoint RouterAI и модель, например
anthropic/claude-sonnet-5.5. - Отправьте сообщение: «Объясни одним предложением, что такое LibreChat». Над ответом будет подпись из
modelDisplayLabel.

Проверить ключ отдельно от интерфейса можно из командной строки:
curl -s https://routerai.ru/api/v1/models -H "Authorization: Bearer sk-xxxxxxxxxxxxxxxx" | head -c 300
Ответ с JSON-списком моделей означает, что ключ рабочий. Сам запрос к модели выглядит так:
curl -s https://routerai.ru/api/v1/chat/completions \
-H "Authorization: Bearer sk-xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"model":"anthropic/claude-haiku-5.5","messages":[{"role":"user","content":"Привет"}]}'
Безопасность и расходы
-
Закройте регистрацию. Создав нужные учётные записи, поставьте в
.envALLOW_REGISTRATION=falseи перезапустите LibreChat, иначе любой, кто откроет сайт, сможет зарегистрироваться и тратить ваш баланс. Если регистрация нужна, ограничьте домены почты черезregistration.allowedDomainsвlibrechat.yaml. -
Ключ в
.env, а не в YAML. Файлlibrechat.yamlчасто попадает в репозитории; ссылка${ROUTERAI_API_KEY}держит ключ вне конфига. РежимapiKey: 'user_provided'позволяет каждому пользователю вводить в интерфейсе свой ключ: тогда расходы идут с его аккаунта RouterAI. -
Лимиты сообщений. В
.envестьLIMIT_MESSAGE_USERиMESSAGE_USER_MAX(число сообщений на пользователя),LIMIT_MESSAGE_IPиLIMIT_CONCURRENT_MESSAGES(ограничения по IP и числу параллельных запросов). -
Внутренние кредиты. Блок
balanceвlibrechat.yaml(enabled,startBalance) заводит каждому пользователю лимит в кредитах LibreChat. Это отдельный счётчик внутри приложения: реальные списания всё равно идут с баланса RouterAI. -
Список моделей. Короткий
defaultсfetch: falseне даёт пользователям выбирать дорогие модели случайно.
Решение проблем
Endpoint RouterAI не появился в селекторе. LibreChat молча отбрасывает блок, в котором нет name, baseURL, apiKey или models (в models нужен fetch: true или непустой default). Проверьте отступы (блок лежит внутри списка endpoints.custom), опечатки в именах полей и уникальность name, затем перезапустите контейнеры. Лог — docker compose logs api.
Правки librechat.yaml не применяются. Убедитесь, что файл смонтирован в docker-compose.override.yml и после правки выполнен docker compose down && docker compose up -d. Если ошибка в схеме, сервер завершится с кодом 1: смотрите docker compose logs api.
Ошибка Missing API Key for RouterAI или 401. Переменной ROUTERAI_API_KEY нет в .env либо ключ скопирован с пробелом или переносом строки. Создайте новый ключ в личном кабинете, обновите .env и перезапустите.
Контейнер api падает при старте с ошибкой про credentials. В версии 0.8.8 LibreChat отказывается стартовать со слабыми или шаблонными секретами. Задайте в .env свои значения: CREDS_KEY (64 hex-символа, openssl rand -hex 32), CREDS_IV (32 hex-символа, openssl rand -hex 16), JWT_SECRET и JWT_REFRESH_SECRET (openssl rand -hex 32).
В списке нет нужной модели или ответ не приходит. Проверьте, что id точно совпадает с каталогом (например, anthropic/claude-sonnet-5.5), и повторите запрос с другой моделью, чтобы отделить проблему модели от проблемы подключения. Убедитесь, что на балансе RouterAI есть средства.
Что дальше
- Подберите модели в каталоге RouterAI.
- Похожие самостоятельно разворачиваемые интерфейсы и конструкторы: Open WebUI, Dify и n8n с блоком AI Agent подключаются к RouterAI по тому же адресу.
- Документация LibreChat: Custom Endpoints, руководство по librechat.yaml и репозиторий на GitHub.