Dodaj APIsRouter jako niestandardowy endpoint w LibreChat.
Updated 2026-07-29
LibreChat traktuje niestandardowe endpointy kompatybilne z OpenAI jako pełnoprawną funkcję: jeden blok endpoints.custom w librechat.yaml z baseURL, apiKey i models.fetch ustawionym na true, a cały katalog pojawia się w selektorze modeli pod jednym kluczem.
Szybka odpowiedź: jeden blok w librechat.yaml.
Niestandardowe endpointy LibreChat są konfigurowane w librechat.yaml pod endpoints.custom, tablicy, w której każdy wpis to jeden dostawca. Trzy pola, które mają znaczenie, to name (etykieta w selektorze endpointów), apiKey (który interpoluje zmienne środowiskowe w formie ${VARIABLE}, więc klucz żyje w .env, a nigdy w YAML) oraz baseURL. Dla APIsRouter baseURL to https://api.apisrouter.com/v1, z dołączonym /v1, ponieważ LibreChat dokleja ścieżki tras, takie jak /chat/completions, do dowolnej podanej przez Ciebie bazy. Blok models decyduje, co pojawia się w rozwijanej liście modeli. Ustaw models.fetch na true, a LibreChat odpytuje listę /v1/models endpointu przy starcie, więc każdy identyfikator z katalogu staje się wybieralny bez utrzymywania ręcznie pisanej listy. models.default jest wciąż wymagane jako tablica i służy jako fallback pokazywany przed pobraniem albo zamiast niego. To udokumentowana konfiguracja upstream, nie łatka: struktura obiektu niestandardowego endpointu w dokumentacji LibreChat definiuje każdy klucz użyty tutaj.
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: trueJak LibreChat kieruje niestandardowe endpointy.
LibreChat (danny-avila na GitHubie, ok. 41 tys. gwiazdek) to najszerzej wdrażany, samodzielnie hostowany interfejs w stylu ChatGPT: wieloużytkownikowy, wielomodelowy, z wyszukiwaniem konwersacji, agentami, obsługą plików i kluczami per użytkownik. W przeciwieństwie do klientów z listą providerów zaszytą na stałe, jego tablica endpoints.custom akceptuje dowolną usługę kompatybilną z OpenAI, a kilku znanych dostawców w dokumentacji jest konfigurowanych dokładnie przez ten mechanizm. Gdy użytkownik wybiera model z niestandardowego endpointu, LibreChat wysyła standardowe żądanie /v1/chat/completions do baseURL tego endpointu, z polem model jako zwykłym stringiem. Nic w kliencie nie obchodzi, który dostawca wytrenował model; string jest przekazywany bez zmian. Gdy endpoint za baseURL obsługuje kilku dostawców, jeden wpis librechat.yaml umieszcza identyfikatory Claude, GPT, Gemini, DeepSeek i GLM w tej samej rozwijanej liście, a użytkownik przełącza dostawców w trakcie konwersacji dokładnie tak, jak przełączałby się między dwoma wariantami GPT. To spłaszcza typową wielodostawcową konfigurację LibreChat. Zamiast jednego niestandardowego wpisu na dostawcę, każdego z własnym kluczem w .env i własną powierzchnią rozliczeniową, jeden wpis z jednym kluczem obejmuje cały katalog, a administrator widzi użycie per model w jednym miejscu, zamiast uzgadniać kilka paneli.
Pełna konfiguracja: YAML, .env i mount Dockera.
Utwórz librechat.yaml w katalogu głównym projektu i umieść klucz w .env. Referencja ${APISROUTER_API_KEY} w YAML rozwiązuje się ze środowiska przy starcie, więc plik konfiguracyjny pozostaje bezpieczny do commitowania. Krok, który najczęściej umyka przy pierwszej konfiguracji, jest specyficzny dla Dockera: kontener nie widzi Twojego librechat.yaml, dopóki go nie zamontujesz. Dokumentacja każe utworzyć docker-compose.override.yml z bind mountem z ./librechat.yaml do /app/librechat.yaml, a następnie odtworzyć kontenery. Późniejsza edycja YAML również wymaga restartu, bo plik jest czytany przy starcie, a nie obserwowany na bieżąco. Kilka opcjonalnych pól warto ustawić na wpisie bramki. titleConvo włącza automatyczne tytuły konwersacji, a titleModel wybiera model, który je pisze; udokumentowaną wartością domyślną LibreChat dla titleModel jest gpt-3.5-turbo, identyfikator, którego endpoint spoza OpenAI może nie obsługiwać, więc ustaw go jawnie na szybki identyfikator z katalogu albo na specjalną wartość current_model. modelDisplayLabel kontroluje nazwę pokazywaną na wiadomościach asystenta. A apiKey akceptuje specjalną wartość user_provided, jeśli chcesz, żeby każdy użytkownik wklejał własny klucz zamiast współdzielić klucz serwera.
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"Dobór modeli do współdzielonego workspace'u czatu.
Ponieważ każdy model rozlicza się przez ten sam klucz, praktyczna pętla dla administratora to obserwowanie tygodnia użycia w konsoli, sprawdzenie, które modele faktycznie wybierają użytkownicy, i przycięcie models.default odpowiednio, przy zostawieniu fetch włączonego, żeby zaawansowani użytkownicy wciąż mieli dostęp do pełnej listy.
- Czat na co dzień chce silnego generalisty. claude-sonnet-4-6 i gpt-5.5 dźwigają długie konwersacje, dyskusje o plikach i przebiegi agenta bez niepokoju o model przy każdej wiadomości.
- Częste krótkie pytania to praca o dużej objętości. claude-haiku-4-5-20251001 i gemini-3.5-flash odpowiadają szybko i chronią wieloużytkownikowe wdrożenie przed koncentracją wydatków na jednorazowych turach.
- Generowanie tytułów uruchamia się przy każdej konwersacji. Wskaż titleModel na szybki identyfikator; płacenie flagowych stawek za napisanie sześciowyrazowych tytułów to najczęstsze ciche marnotrawstwo we wdrożeniu LibreChat.
- Zespoły wielojęzyczne powinny przetestować deepseek-v4-pro i glm-5.2 na swoim prawdziwym miksie językowym; wielodostawcowa rozwijana lista czyni to porównaniem wewnątrz aplikacji, a nie rekonfiguracją.
- models.fetch oznacza, że nowe modele z katalogu pojawiają się bez dotykania YAML, więc model dodany po stronie upstream jest wybieralny przy następnym odświeżeniu listy.
Płatność za użycie · poniżej cen oficjalnych
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Model | Cena oficjalna | Nasza cena |
|---|---|---|
| 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 |
Tryby awarii charakterystyczne dla LibreChat.
Cichy brak wczytania konfiguracji to klasyk i to prawie zawsze mount Dockera. Bez bind mounta docker-compose.override.yml kontener działa bez żadnego librechat.yaml, niestandardowy endpoint nigdy nie pojawia się w selektorze, a nic nie zgłasza błędu. Potwierdź, że plik istnieje wewnątrz kontenera, zanim zaczniesz debugować cokolwiek innego. apiKey, który dociera dosłownie jako ${APISROUTER_API_KEY}, oznacza, że zmiennej nie było w środowisku, z jakim wystartował serwer; interpolacja zachodzi przy starcie z .env, więc klucz dodany później wymaga restartu kontenera. Objawem jest 401 z bramki z bezsensownym tokenem bearer. baseURL bez /v1 produkuje błędy 404 przy każdym żądaniu, bo LibreChat dokleja /chat/completions do podanej bazy. Odwrotny błąd, wklejenie pełnego URL completions jako baseURL, należy do osobnej opcji directEndpoint i nie powinien być łączony ze zwykłym wpisem. Pusta rozwijana lista modeli przy wyłączonym fetch oznacza, że models.default jest brakujące albo puste; to wymagana tablica. Przy włączonym fetch pusta lista zwykle oznacza, że samo pobranie zawiodło, co wraca do klucza albo baseURL. A nieudane tytuły konwersacji przy poza tym działającym endpoincie to domyślna wartość titleModel wskazująca na identyfikator, którego bramka nie obsługuje; ustaw ją jawnie.
Kto kieruje LibreChat przez bramkę.
- Zespoły samodzielnie hostujące współdzielony workspace czatu, które chcą mieć Claude, GPT, Gemini i DeepSeek w jednej rozwijanej liście, bez utrzymywania po jednym wpisie endpoints.custom i jednym koncie u dostawcy na każdego z nich.
- Administratorzy prowadzący wieloużytkownikowe wdrożenia, którzy potrzebują jednej powierzchni użycia. Logi per klucz pokazują, których modeli faktycznie używa zespół, wycenionych, bez łączenia paneli od różnych dostawców.
- Operatorzy dający działom własne klucze: ten sam YAML, jeden klucz na grupę, a log użycia staje się raportem kosztów per zespół.
- Gospodarstwa domowe i małe grupy zastępujące kilka subskrypcji czatu jednym rozliczanym endpointem, płacące za zużyte tokeny, a nie za stanowiska.
- Deweloperzy bez dostępu do rozliczeń danego dostawcy. Dostęp oparty na doładowaniu, bez wymogu karty, usuwa zależność od rejestracji u każdego dostawcy.
Zweryfikuj endpoint i debuguj pierwszą wiadomość.
Potwierdź połowę dotyczącą bramki, zanim zaczniesz dotykać LibreChat: wylistuj modele swoim kluczem i potwierdź, że identyfikatory, które umieściłeś w models.default, się pojawiają. Jeśli to działa, każdy pozostały objaw leży po stronie LibreChat. Następnie uruchom stack i otwórz selektor endpointów. Samo pojawienie się wpisu APIsRouter dowodzi, że YAML się wczytał; wypełnienie się listy modeli dowodzi fetcha i klucza; pierwsza odpowiedź dowodzi ścieżki czatu. Przejdź przez te trzy rzeczy po kolei, a nie wszystkie naraz, bo każda ma osobny zestaw awarii, odpowiednio mount, zmienną środowiskową i baseURL. Gdy wiadomości już płyną, konsola APIsRouter pokazuje model per żądanie, liczbę tokenów i wydatki. Współdzielona instancja LibreChat to dokładnie ten rodzaj wdrożenia, w którym użycie po cichu koncentruje się na dwóch albo trzech modelach, a log użycia to sposób, żeby dowiedzieć się których, zanim zrobi to faktura.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Częste pytania
Gdzie skonfigurować niestandardowy endpoint kompatybilny z OpenAI w LibreChat?
W librechat.yaml pod endpoints.custom, tablicy wpisów dostawców z name, apiKey, baseURL i blokiem models. Przy instalacjach Docker plik musi być zamontowany bind mountem do kontenera przez docker-compose.override.yml, w przeciwnym razie jest po cichu ignorowany.
Czy baseURL powinno zawierać /v1?
Tak dla APIsRouter: https://api.apisrouter.com/v1. LibreChat dokleja ścieżki tras, takie jak /chat/completions, do podanej bazy, więc brakujące /v1 produkuje 404 przy każdym żądaniu.
Czy jeden endpoint LibreChat może obsługiwać razem modele Claude, GPT i DeepSeek?
Tak. LibreChat przekazuje wybrany identyfikator modelu jako zwykły string do baseURL endpointu. Gdy endpoint obsługuje wielu dostawców, jeden wpis endpoints.custom umieszcza wszystkie ich identyfikatory w tej samej rozwijanej liście, a models.fetch automatycznie utrzymuje tę listę aktualną.
Dlaczego mój niestandardowy endpoint brakuje w selektorze?
YAML się nie wczytał. Na Dockerze zwykłą przyczyną jest brakujący bind mount dla librechat.yaml; kontener działa bez pliku, a nic nie zgłasza błędu. Potwierdź, że plik istnieje wewnątrz kontenera, a następnie zrestartuj, bo konfiguracja jest czytana przy starcie.
Dlaczego tytuły konwersacji zawodzą, mimo że czat działa?
titleConvo używa titleModel, którego udokumentowaną wartością domyślną jest gpt-3.5-turbo, identyfikator, którego Twój endpoint może nie obsługiwać. Ustaw titleModel jawnie na szybki identyfikator z katalogu, taki jak claude-haiku-4-5-20251001, albo na specjalną wartość current_model.
Czy każdy użytkownik może przynieść własny klucz zamiast współdzielić klucz serwera?
Tak. Ustaw apiKey na specjalną wartość user_provided, a LibreChat poprosi każdego użytkownika o klucz, przechowywany per użytkownik. To dobrze pasuje do kluczy bramki, bo jeden klucz na użytkownika zamienia log użycia w widok kosztu per osoba.