Додайте APIsRouter як кастомний ендпоінт у LibreChat.

Updated 2026-07-29

LibreChat трактує кастомні OpenAI-сумісні ендпоінти як повноцінну функцію першого класу: один блок endpoints.custom у librechat.yaml з baseURL, apiKey і models.fetch, встановленим на true, і весь каталог з'являється в селекторі моделей під одним ключем.

Коротка відповідь: один блок у librechat.yaml.

Кастомні ендпоінти LibreChat налаштовуються в librechat.yaml під endpoints.custom — масивом, де кожен запис — один провайдер. Три поля, що мають значення: name (назва в селекторі ендпоінтів), apiKey (яке інтерполює змінні середовища у формі ${VARIABLE}, тож ключ живе в .env і ніколи в YAML) і baseURL. Для APIsRouter baseURL — це https://api.apisrouter.com/v1, з включеним /v1, оскільки LibreChat дописує шляхи маршрутів на кшталт /chat/completions до будь-якого base, який ви задаєте. Блок models вирішує, що з'являється у випадному списку моделей. Встановіть models.fetch на true, і LibreChat опитує список /v1/models ендпоінта під час завантаження, тож кожен ID каталогу стає доступним для вибору без підтримки рукописного списку. models.default усе одно обов'язковий як масив і слугує резервним варіантом, показаним до чи замість fetch. Це задокументована конфігурація вгору за течією, а не патч: структура об'єкта кастомного ендпоінта в документації LibreChat визначає кожен ключ, що використовується тут.

version: 1.2.1
endpoints:
  custom:
    - name: "APIsRouter"
      apiKey: "${APISROUTER_API_KEY}"
      baseURL: "https://api.apisrouter.com/v1"
      models:
        default: ["claude-sonnet-4-6"]
        fetch: true

Як LibreChat маршрутизує кастомні ендпоінти.

LibreChat (danny-avila на GitHub, приблизно 41 тис. зірок) — найбільш широко розгорнутий самостійно хостований інтерфейс у стилі ChatGPT: багатокористувацький, мультимодельний, з пошуком розмов, агентами, обробкою файлів і ключами для кожного користувача. На відміну від клієнтів, що жорстко прописують список провайдерів, його масив endpoints.custom приймає будь-який OpenAI-сумісний сервіс, і кілька відомих провайдерів у документації налаштовані саме через цей механізм. Коли користувач обирає модель з кастомного ендпоінта, LibreChat надсилає стандартний запит /v1/chat/completions на baseURL цього ендпоінта з полем model як звичайним рядком. Нічого в клієнті не хвилює, який постачальник натренував модель; рядок пересилається як є. Коли ендпоінт за baseURL обслуговує кількох постачальників, один запис librechat.yaml поміщає ID Claude, GPT, Gemini, DeepSeek і GLM в один випадний список, і користувач перемикає постачальників посеред розмови так само, як перемикав би між двома варіантами GPT. Це згортає типове мультипостачальницьке налаштування LibreChat. Замість одного кастомного запису на постачальника, кожен зі своїм ключем в .env і власною поверхнею білінгу, один запис з одним ключем покриває каталог, а адмін бачить використання за моделлю в одному місці, замість звірки кількох панелей.

Повне налаштування: YAML, .env і монтування Docker.

Створіть librechat.yaml в корені проєкту і покладіть ключ у .env. Посилання ${APISROUTER_API_KEY} у YAML розв'язується із середовища під час запуску, тож файл конфігурації лишається придатним для коміту. Крок, який пропускає більшість новачків у налаштуванні, специфічний для Docker: контейнер не бачить ваш librechat.yaml, доки ви його не змонтуєте. Документація велить створити docker-compose.override.yml з bind-монтуванням з ./librechat.yaml до /app/librechat.yaml, тоді перестворити контейнери. Редагування YAML після цього теж потребує перезапуску, оскільки файл зчитується під час запуску, а не відстежується. Кілька опційних полів варто встановити для запису шлюзу. titleConvo вмикає автоматичні назви розмов, а titleModel обирає модель, що їх пише; задокументоване значення за замовчуванням для titleModel у LibreChat — gpt-3.5-turbo, ID, який не-OpenAI ендпоінт може не обслуговувати, тож встановіть його явно на швидкий ID каталогу чи на спеціальне значення current_model. modelDisplayLabel контролює назву, показану на повідомленнях асистента. А apiKey приймає спеціальне значення user_provided, якщо ви хочете, щоб кожен користувач вставляв власний ключ замість спільного серверного.

version: 1.2.1
endpoints:
  custom:
    - name: "APIsRouter"
      apiKey: "${APISROUTER_API_KEY}"
      baseURL: "https://api.apisrouter.com/v1"
      models:
        default: ["claude-sonnet-4-6", "gpt-5.5", "deepseek-v4-pro"]
        fetch: true
      titleConvo: true
      titleModel: "claude-haiku-4-5-20251001"
      modelDisplayLabel: "APIsRouter"

Вибір моделей для спільного робочого простору чату.

Оскільки кожна модель оплачується через той самий ключ, практичний цикл для адміна — спостерігати за тижнем використання в консолі, бачити, які моделі насправді обирають користувачі, і підрізати models.default відповідно, залишаючи fetch увімкненим, щоб досвідчені користувачі все ще могли дістатись повного списку.

  • Щоденний чат хоче сильного узагальненого варіанта. claude-sonnet-4-6 і gpt-5.5 тягнуть довгі розмови, обговорення файлів і запуски агентів без тривоги за модель на кожне повідомлення.
  • Часті короткі питання — це обсягова робота. claude-haiku-4-5-20251001 і gemini-3.5-flash відповідають швидко і не дають розгортанню з багатьма користувачами концентрувати витрати на одноразових ходах.
  • Генерація назв спрацьовує на кожній розмові. Спрямуйте titleModel на швидкий ID; платити за передовими тарифами за написання назв на шість слів — найпоширеніша тиха трата в розгортанні LibreChat.
  • Багатомовним командам варто протестувати deepseek-v4-pro і glm-5.2 на своїй реальній суміші мов; мультипостачальницький випадний список робить це порівнянням всередині застосунку, а не переналаштуванням.
  • models.fetch означає, що нові моделі каталогу з'являються без торкання YAML, тож модель, додана вгору за течією, стає доступною для вибору наступного разу, коли список оновиться.

Оплата за фактом · нижче офіційних цін

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

МодельОфіційна цінаНаша ціна
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.00 per M
GPT-5.5$5.00 / $30.00 per M$4.00 / $24.00 per M
Gemini 3.5 Flash$1.50 / $9.00 per M$1.20 / $7.20 per M
DeepSeek V4 Pro$0.43 / $0.87 per M$0.40 / $0.90 per M

Специфічні для LibreChat режими збоїв.

Тиха незавантаженість конфігурації — класика, і майже завжди через монтування Docker. Без bind-монтування docker-compose.override.yml контейнер працює взагалі без librechat.yaml, кастомний ендпоінт ніколи не з'являється в селекторі, і нічого не видає помилку. Підтвердьте, що файл існує всередині контейнера, перш ніж налагоджувати щось інше. apiKey, що приходить буквально як ${APISROUTER_API_KEY}, означає, що змінної не було в середовищі, з яким запустився сервер; інтерполяція відбувається під час запуску з .env, тож ключ, доданий після, потребує перезапуску контейнера. Симптом — 401 від шлюзу з безглуздим bearer-токеном. baseURL без /v1 видає 404 на кожен запит, оскільки LibreChat дописує /chat/completions до заданого base. Зворотна помилка — вставлення повного URL completions як baseURL — належить окремій опції directEndpoint і не повинна поєднуватись зі звичайним записом. Порожній випадний список моделей з вимкненим fetch означає, що models.default відсутній чи порожній; це обов'язковий масив. З увімкненим fetch порожній випадний список зазвичай означає, що сам fetch провалився, що повертає до ключа чи baseURL. А невдалі назви розмов на в іншому робочому ендпоінті — це titleModel за замовчуванням, що вказує на ID, який шлюз не обслуговує; встановіть його явно.

Хто маршрутизує LibreChat через шлюз.

  • Команди, що самостійно хостять спільний робочий простір чату і хочуть мати Claude, GPT, Gemini і DeepSeek в одному випадному списку, не підтримуючи по одному запису endpoints.custom і одному акаунту постачальника на кожного.
  • Адміни, що керують багатокористувацькими розгортаннями і потребують однієї поверхні використання. Журнали за ключем показують, які моделі команда справді використовує, з ціною, без злиття панелей постачальників.
  • Оператори, що дають відділам власні ключі: та сама YAML, один ключ на групу, і журнал використання стає звітом про вартість для кожної команди.
  • Родини і малі групи, що замінюють кілька підписок на чат одним ендпоінтом з оплатою за використання, платячи за використані токени, а не за місця.
  • Розробники без доступу до білінгу певного постачальника. Доступ на основі поповнення без вимоги картки прибирає залежність від реєстрації в кожного провайдера.

Перевірте ендпоінт і налагодьте перше повідомлення.

Підтвердьте половину зі шлюзом, перш ніж торкатись LibreChat: перегляньте список моделей з вашим ключем і підтвердьте, що ID, які ви поклали в models.default, з'являються. Якщо це працює, кожен залишковий симптом — на боці LibreChat. Тоді запустіть стек і відкрийте селектор ендпоінтів. Сама поява запису APIsRouter доводить, що YAML завантажився; заповнення списку моделей доводить fetch і ключ; перша відповідь доводить шлях чату. Пройдіть ці три пункти по черзі, а не всі разом, оскільки кожен має окремий набір збоїв — монтування, змінну середовища і baseURL відповідно. Щойно повідомлення почнуть проходити, консоль APIsRouter показує модель на кожен запит, кількість токенів і витрати. Спільна інстанція LibreChat — це якраз той тип розгортання, де використання тихо концентрується на двох-трьох моделях, і журнал використання — спосіб дізнатись, на яких саме, раніше за рахунок.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

Поширені запитання

Де налаштувати кастомний OpenAI-сумісний ендпоінт у LibreChat?

У librechat.yaml під endpoints.custom — масив записів провайдерів з name, apiKey, baseURL і блоком models. У встановленнях Docker файл має бути bind-змонтований у контейнер через docker-compose.override.yml, інакше він тихо ігнорується.

Чи має baseURL включати /v1?

Так, для APIsRouter: https://api.apisrouter.com/v1. LibreChat дописує шляхи маршрутів на кшталт /chat/completions до заданого base, тож відсутній /v1 видає 404 на кожен запит.

Чи може один ендпоінт LibreChat обслуговувати моделі Claude, GPT і DeepSeek разом?

Так. LibreChat пересилає обраний ID моделі як звичайний рядок на baseURL ендпоінта. Коли ендпоінт обслуговує кількох постачальників, один запис endpoints.custom поміщає всі їхні ID в той самий випадний список, а models.fetch автоматично тримає цей список актуальним.

Чому мій кастомний ендпоінт відсутній у селекторі?

YAML не завантажився. У Docker зазвичай причина — відсутнє bind-монтування для librechat.yaml; контейнер працює без файлу, і нічого не видає помилку. Підтвердьте, що файл існує всередині контейнера, тоді перезапустіть, оскільки конфігурація зчитується під час запуску.

Чому назви розмов не працюють, коли чат працює?

titleConvo використовує titleModel, чиє задокументоване значення за замовчуванням — gpt-3.5-turbo, ID, який ваш ендпоінт може не обслуговувати. Встановіть titleModel явно на швидкий ID каталогу на кшталт claude-haiku-4-5-20251001, чи на спеціальне значення current_model.

Чи може кожен користувач приносити власний ключ замість спільного серверного?

Так. Встановіть apiKey на спеціальне значення user_provided, і LibreChat запитує ключ у кожного користувача, зберігаючи його для кожного окремо. Це добре підходить для ключів шлюзу, оскільки один ключ на користувача перетворює журнал використання на погляд на вартість для кожної людини.