Dobre wartości domyślne
GoModel kieruje się filozofią dobrych wartości domyślnych. Oznacza to, że ustawienia domyślne powinny wystarczyć, żeby z niego korzystać.Jak nadpisać ustawienia domyślne?
Konfiguracja przechodzi przez trzy warstwy. Każde ustawienie ma rozsądną wartość domyślną, więc możesz uruchomić serwer bez żadnej konfiguracji. GoModel automatycznie wykrywa providerów na podstawie dobrze znanych zmiennych środowiskowych.Metody konfiguracji
1. Zmienne środowiskowe
Najczęstszy sposób konfigurowania GoModel. Ustaw dowolną z poniższych zmiennych, żeby nadpisać wartości domyślne.Serwer
Body requestów może być skompresowane za pomocą
Content-Encoding: gzip (lub x-gzip)
albo zstd; SDK TypeSafe domyślnie kompresują zstd body o rozmiarze 1 KiB lub
większym. Gateway dekoduje je przed routingiem, więc guardrails, audyt i
providerzy widzą zwykłe body, a BODY_SIZE_LIMIT dotyczy zarówno rozmiaru
po kompresji, jak i po zdekodowaniu (413, gdy którykolwiek go przekracza). Inne kodowania
zwracają 415.
STREAM_STALL_TIMEOUT (server.stream_stall_timeout w YAML) chroni
gateway przed klientami, którzy otwierają odpowiedź streamingową i przestają ją czytać. Każdy
zapis do klienta dostaje nowy termin, więc timeout zadziała tylko wtedy, gdy socket
klienta pozostaje pełny przez cały ten czas, a nigdy wtedy, gdy wolny model po prostu nie ma nic do wysłania.
Gdy timeout zadziała, połączenie zostaje zamknięte, request do upstreamowego providera jest
anulowany, a wpis audytowy zapisuje client_stalled – również wtedy, gdy stream
został zaserwowany z cache’u odpowiedzi. Zwiększ tę wartość dla klientów, którzy w uzasadniony sposób
wstrzymują odczyt streamu na dłużej niż minutę; ustaw 0, żeby ją wyłączyć.
Adresy klientów za proxy
Każdy adres klienta raportowany przez GoModel – we wpisach audytowych, kluczach rate limitów, logach – to adres połączenia, które dotarło do gatewaya, więc za reverse proxy wszystkie wskazują na proxy. UstawSERVER_TRUSTED_PROXIES na sieci,
w których stoją Twoje własne proxy, a GoModel odczyta przekazany adres klienta.
Nic nie jest zaufane, dopóki tego nie wpiszesz – nawet loopback – a zmiana tych
ustawień wymaga restartu.
Wybieraj jedną podsieć, w której stoi Twoje proxy.
private pozwala każdemu prywatnemu
klientowi ustawić własny przekazany adres, co jest złym rozwiązaniem, gdy Twoi
klienci również korzystają z prywatnych adresów – domowy lab, którego klienci są w
192.168.1.0/24, a klaster działa w 10.42.0.0/16, powinien wpisać
wyłącznie 10.42.0.0/16.
Domyślnie GoModel odczytuje X-Forwarded-For, do którego każdy hop dopisuje adres,
który widział, i zapisuje najbliższy hop spoza Twoich zaufanych sieci:
ostatni adres zapisany przez Twoją własną infrastrukturę i zarazem najdalszy, którego klient
nie może nadpisać. Request spoza wpisanych sieci, łańcuch, którego nie da się
sparsować, oraz łańcuch złożony wyłącznie z zaufanych sieci – wszystkie zachowują adres
połączenia. W tym ostatnim przypadku każdy wpis to deklaracja, którą wewnętrzny klient mógłby
zmyślić.
Dwa ustawienia zmieniają sposób odczytu nagłówka:
SERVER_CLIENT_IP_HEADERwskazuje inny nagłówek. Każdy nagłówek inny niżX-Forwarded-Forzawiera pojedynczy adres i jest przyjmowany dosłownie, co jest właściwym odczytem za brzegiem sieci, który sam ustala adres klienta:SERVER_CLIENT_IP_HEADER=CF-Connecting-IPza Cloudflare lubX-Real-IPza nginx, który go ustawia. NagłówekForwardedz RFC 7239 nie jest obsługiwany.SERVER_TRUSTED_HOPSpobiera wpis zX-Forwarded-Forze stałej głębokości zamiast skanować łańcuch –1to wpis skrajnie prawy,2ten przed nim. Użyj go, gdy Twój brzeg sieci znajduje się na znanej głębokości, ale rotuje adresy, których nie możesz wyliczyć. Połączenie nadal musi pochodzić z zaufanej sieci, a łańcuch krótszy niż skonfigurowana głębokość powoduje powrót do adresu połączenia.
SERVER_TRUSTED_PROXIES; ustawione samodzielnie powodują błąd przy starcie,
a nie są ustawieniem, które po cichu nic nie robi.
Ustaw GOMODEL_DEMO_MODE=true dla publicznej lub współdzielonej instancji demonstracyjnej.
GoModel loguje ostrzeżenie przy starcie i co pięć minut, wyświetla stałe
ostrzeżenie na górze dashboardu i udostępnia DEMO_MODE=on w
odpowiedzi /admin/runtime/config z listy dozwolonych wartości. Tryb demo nie resetuje storage’u;
zaplanuj to osobno we wdrożeniu.
Tryb demo nie omija też uwierzytelniania. Tryb logowania przy starcie
managed_keys oznacza, że skonfigurowany storage nadal zawiera co najmniej jeden zarządzany
klucz API gatewaya, więc requesty wymagają bearer tokena nawet wtedy, gdy
GOMODEL_MASTER_KEY jest pusty. Wyłączone lub wygasłe zarządzane klucze utrzymują
włączone uwierzytelnianie jako zabezpieczenie typu fail closed. Usuń wszystkie zarządzane
klucze, żeby wrócić do trybu bez uwierzytelniania, albo skonfiguruj master key do odzyskiwania dostępu.
Wyłączanie master key
Master key to pojedyncze, globalne dane uwierzytelniające: kto go posiada, jest jednocześnie każdym użytkownikiem gatewaya. Gdy wydasz już zarządzane klucze API gatewaya, ustawMASTER_KEY_DISABLED=true (server.master_key_disabled w YAML), żeby go wycofać
i zostawić te klucze – razem z każdym używanym rozszerzeniem uwierzytelniania,
takim jak SSO – jako jedyną drogę dostępu. Ścieżki użytkownika, budżety, rate limity
i ślady audytowe przypisane do kluczy obowiązują wtedy dla każdego requestu, także w Admin API.
GET /v1/auth/verify ani wobec
/admin. Klucz pozostawiony w środowisku lub w config.yaml jest nieaktywny, a nie
powoduje błędu – dzięki temu przełącznik można bezpiecznie włączyć jeszcze przed jego usunięciem.
Wyłączenie to nie to samo co pozostawienie pustego GOMODEL_MASTER_KEY, które uruchamia
gateway bez uwierzytelniania i otwiera /admin/*, żeby dashboard mógł utworzyć
pierwszy zarządzany klucz. Jeśli nie skonfigurowano rozszerzenia uwierzytelniania,
/admin/* pozostaje otwarte nawet po utworzeniu zarządzanych kluczy, a GoModel loguje
ostrzeżenie bezpieczeństwa przy starcie, dopóki tak jest – ustaw więc master key lub go wyłącz,
gdy tylko wydasz pierwszy klucz z dostępem do dashboardu. Wyłączony master
key działa natomiast w trybie fail closed: każdy request
wymaga danych uwierzytelniających, a Admin API pozostaje dostępne tylko z takimi, które mają
dostęp do dashboardu. Wydaj je, zanim włączysz przełącznik – bez master key,
bez zarządzanego klucza i bez rozszerzenia uwierzytelniania gateway odrzuca każdy
request i loguje o tym ostrzeżenie przy starcie.
MCP Gateway
Pełny przewodnik po funkcji znajdziesz w MCP Gateway.Logowanie
Wyjście loggera w czasie działania. Trwały ślad audytowy API (body requestów/odpowiedzi, nagłówki) opisuje sekcja Logowanie audytowe poniżej.Cache
CACHE_REFRESH_INTERVAL określa też, jak często dashboard ponownie sprawdza
stan providerów („Last checked”), a PROVIDER_RECHECK_INTERVAL – jak
szybko provider, który uległ awarii, jest ponownie sprawdzany pod kątem powrotu do działania. Zobacz
Odporność na awarie.Storage
Storage jest współdzielony przez logowanie audytowe, śledzenie użycia i przyszłe funkcje, takie jak IAM.Storage mediów
Pliki multimedialne – audio i obrazy przechwytywane do logu audytowego, gdy włączone jestLOGGING_LOG_AUDIO_BODIES lub LOGGING_LOG_IMAGE_BODIES – są przechowywane
poza bazą danych. Ich metadane trafiają do opisanego wyżej backendu storage’u; tutaj
trafiają tylko same bajty, więc ich rozmiar nie jest ograniczany, a baza danych pozostaje
mała. Zobacz ADR-0013.
Ścieżka domyślna działa według tej samej reguły co SQLite:
./data/media, gdy obok procesu
istnieje katalog ./data, w przeciwnym razie systemowy katalog danych
użytkownika. W kontenerach zamontuj tam wolumen; przy kilku replikach użyj
współdzielonego montowania (EFS, montowanie S3 przez FUSE), żeby każda instancja mogła serwować każdy plik.
Pliki są przechowywane tak długo jak wpisy audytowe, które się do nich odwołują
(LOGGING_RETENTION_DAYS), i usuwane przez cogodzinne czyszczenie.
Logowanie audytowe
Wpisy audytowe zapisują adres klienta ustalony przez gateway. Za reverse
proxy jest to adres proxy, dopóki nie wpiszesz jego sieci do
SERVER_TRUSTED_PROXIES – zobacz adresy klientów za
proxy.
Podgląd na żywo w dashboardzie i trwałe logi audytowe to osobne funkcje.
Przy DASHBOARD_LIVE_LOGS_ENABLED=true i LOGGING_ENABLED=false requesty
mogą pojawiać się na żywo, ale nie są zapisywane w storage’u i znikają po odświeżeniu
strony. Gdy logowanie audytowe jest włączone, zapisy są asynchroniczne i może minąć do
LOGGING_FLUSH_INTERVAL sekund, zanim pojawią się w API zapisanych logów.
W PostgreSQL wyszukiwanie pełnotekstowe w logu audytowym korzysta z indeksu trigramowego z
dołączonego rozszerzenia
pg_trgm. GoModel instaluje rozszerzenie i buduje
indeks przy starcie, jeśli jego rola w bazie danych ma do tego uprawnienia; w przeciwnym razie wyszukiwanie
nadal działa, ale skanuje każdy wpis w wybranym zakresie dat. Żeby włączyć je przy
roli z ograniczonymi uprawnieniami, uruchom raz CREATE EXTENSION pg_trgm; jako superuser i
zrestartuj GoModel.LOGGING_LOG_REVISION_BODIES doprecyzowuje LOGGING_LOG_BODIES dla łańcucha
przepisywania requestów na wejściu – nie działa, jeśli logowanie body nie jest włączone. Gdy
oba są włączone, każdy rewriter, który zmienił request (na przykład kompresja tokenów w GoModel Pro),
i każdy guardrail promptu, który edytował prompt, zapisują
request w takiej postaci, w jakiej go zostawiły, obok oryginalnego body klienta we wpisie
audytowym, więc łańcuch edycji można prześledzić krok po kroku. LOGGING_LOG_GUARDRAIL_STEPS
steruje tym zapisem per krok (body requestów są kodowane poza ścieżką
requestu): wyłącz go, żeby zapisywać edycje łańcucha jako jedną rewizję zawierającą
request w przekazanej dalej postaci, bez snapshotów poszczególnych kroków.
Wyłączenie LOGGING_LOG_REVISION_BODIES zachowuje metadane rewizji (nazwę rewritera, rozmiary w bajtach, zaoszczędzone
tokeny, szczegóły zmiany), ale pomija dodatkowe kopie body, mniej więcej o połowę zmniejszając
rozmiar danych audytowych na każdy przepisany request.LOGGING_LOG_AUDIO_BODIES doprecyzowuje LOGGING_LOG_BODIES dla endpointów audio –
nie działa, jeśli logowanie body nie jest włączone. Gdy oba są włączone, /v1/audio/speech
zapisuje swoje wejście tekstowe i wygenerowane audio (base64, maksymalnie 8 MB), żeby
dashboard mógł je odtworzyć, a /v1/audio/transcriptions zapisuje przesłane
audio (base64, maksymalnie 8 MB, również do odtworzenia) wraz z metadanymi uploadu.
Domyślnie ma wartość false, bo payloady audio są
duże i szybko powiększają magazyn audytowy. Gdy logowanie body jest włączone, a to ustawienie wyłączone,
body audio (odpowiedź speech i upload do transkrypcji, który zachowuje swoje
metadane) są zapisywane jako lekki placeholder {__audio__, content_type, bytes, stored: false};
gdy logowanie body jest wyłączone, body audio nie jest zapisywane wcale.LOGGING_LOG_IMAGE_BODIES doprecyzowuje LOGGING_LOG_BODIES dla
Images API – nie działa, jeśli logowanie body nie jest
włączone. Gdy oba są włączone, wygenerowane obrazy (/v1/images/generations,
/v1/images/edits) oraz przesłane obrazy źródłowe do edycji i maski są zapisywane jako base64
(8 MB na wpis, obrazy ponad ten budżet stają się placeholderami), żeby
dashboard mógł je wyświetlić. LOGGING_LOG_IMAGE_BODIES_SCOPE zawęża to do
input (tylko uploady) lub output (tylko wyniki); domyślne all zapisuje
oba. Domyślnie ma wartość false, bo payloady obrazów są duże i szybko powiększają
magazyn audytowy. Gdy logowanie body jest włączone, a to ustawienie wyłączone, wpisy obrazów
zachowują wszystko poza pikselami: prompt i parametry, kopertę
odpowiedzi (usage, size, quality), hostowane URL-e i placeholder z rozmiarem
{role, content_type, bytes, stored: false} dla każdego obrazu.Śledzenie użycia tokenów
Budżety
Budżety korzystają ze śledzonych rekordów kosztów użycia. Jeśli śledzenie użycia jest wyłączone, GoModel startuje z wyłączonym zarządzaniem budżetami i loguje ostrzeżenie.SET_BUDGET_<PATH> obsługuje standardowe okresy hourly, daily, weekly
i monthly. Sufiks <PATH> jest zamieniany na małe litery; używaj podwójnych podkreślników
(__) między segmentami ścieżki, a pojedyncze podkreślniki pozostają wewnątrz segmentu.
Na przykład SET_BUDGET_TEAM__ALPHA__SERVICE="daily=10" konfiguruje
/team/alpha/service, a SET_BUDGET_TEAM_ALPHA="daily=10" konfiguruje
/team_alpha. To różni się od opisanych niżej zmiennych <SUFFIX> providerów, które
zamieniają podkreślniki na myślniki w nazwach providerów; SET_PROVIDER_BUDGET_<NAME>
stosuje konwencję providerów, więc SET_PROVIDER_BUDGET_OPENAI_PROD ogranicza
openai-prod.
SET_BUDGET_="monthly=500" oznacza zmienną środowiskową o dosłownej nazwie
SET_BUDGET_, która konfiguruje ścieżkę główną /. POSIX dopuszcza taką nazwę, ale
niektóre powłoki i orkiestratory, w tym niektóre walidatory Kubernetesa, mogą ją
odrzucić. Jeśli Twoje środowisko nie pozwala jej ustawić, użyj YAML lub dashboardu.
Uwaga dotycząca migracji: zarządzanie budżetami zależy od śledzenia użycia. Jeśli
USAGE_ENABLED=false, GoModel startuje z wyłączonymi budżetami i loguje ostrzeżenie,
nawet gdy BUDGETS_ENABLED=true. Ustaw zarówno USAGE_ENABLED=true, jak i
BUDGETS_ENABLED=true, żeby egzekwować budżety.
Przykłady YAML, okresy, dopasowywanie i egzekwowanie w workflowach opisuje strona
Budżety.
Metryki
Obsługa Prometheusa jest eksperymentalna. Szczegóły znajdziesz w
przewodniku po metrykach Prometheusa.
Admin
Logi na żywo w dashboardzie to kompaktowe podglądy dla stron Audit Logs i Usage.
Aktualizują wiersze, zanim zakończy się asynchroniczny zapis do bazy danych. Zapisane tabele audytu i
użycia pozostają źródłem prawdy; jeśli przeglądarka połączy się ponownie z kursorem
spoza okna odtwarzania, dashboard przeładuje dane przez standardowe REST API.
Klient HTTP
Te ustawienia sterują timeoutami upstreamowych requestów API do providerów LLM.
Stream, który milczy dłużej niż
HTTP_STREAM_IDLE_TIMEOUT, jest zamykany
z błędem providera 504, zamiast wisieć do HTTP_TIMEOUT. Czas oczekiwania
na pierwszy token się nie liczy, więc nie dotyczy to wolnych modeli reasoningowych.
Zwiększ tę wartość tylko dla providera, który w uzasadniony sposób robi kilkuminutowe przerwy w trakcie streamu.
Klucze API providerów
Ustaw je, żeby automatycznie rejestrować providerów. Konfiguracja YAML nie jest wymagana.
Większość providerów może korzystać z niestandardowego bazowego URL-a przez
<PROVIDER>_BASE_URL (na przykład OPENAI_BASE_URL). Chutes AI domyślnie używa https://llm.chutes.ai/v1; możesz to nadpisać przez CHUTES_BASE_URL. DeepSeek domyślnie używa https://api.deepseek.com; ustawiaj DEEPSEEK_BASE_URL tylko dla kompatybilnego proxy lub alternatywnego endpointu DeepSeek. OpenRouter domyślnie używa https://openrouter.ai/api/v1; możesz to nadpisać przez OPENROUTER_BASE_URL. Kilo AI domyślnie używa https://api.kilo.ai/api/gateway; możesz to nadpisać przez KILO_BASE_URL. Eden AI domyślnie używa https://api.edenai.run/v3; możesz to nadpisać przez EDENAI_BASE_URL. Z.ai domyślnie używa https://api.z.ai/api/paas/v4; ustaw ZAI_BASE_URL=https://api.z.ai/api/coding/paas/v4 dla endpointu GLM Coding Plan. SGLang domyślnie używa http://localhost:30000/v1, gdy ustawiono SGLANG_API_KEY, ale wdrożenia bez klucza powinny jawnie ustawić SGLANG_BASE_URL, żeby zarejestrować providera. vLLM działa tak samo, z adresem http://localhost:8000/v1. LLAMACPP_BASE_URL dla llama.cpp jest zawsze wymagany (domyślny port llama-server koliduje z portem 8080 samego GoModel, więc nie ma wartości domyślnej); LLAMACPP_API_KEY jest opcjonalny. llm-d nie ma uniwersalnego endpointu, więc LLMD_BASE_URL jest zawsze wymagany; LLMD_API_KEY jest opcjonalny. Azure używa AZURE_BASE_URL jako bazowego URL-a deploymentu i akceptuje opcjonalne nadpisanie AZURE_API_VERSION; w przeciwnym razie domyślnie używa 2024-10-21. Oracle wymaga ORACLE_BASE_URL, bo jego endpoint kompatybilny z OpenAI zależy od regionu.
Każdy typ providera akceptuje też rozdzieloną przecinkami listę skonfigurowanych modeli przez
<PROVIDER>_MODELS, na przykład OPENROUTER_MODELS, ORACLE_MODELS,
AZURE_MODELS, SGLANG_MODELS, VLLM_MODELS lub LLMD_MODELS. Domyślnie
CONFIGURED_PROVIDER_MODELS_MODE=fallback używa skonfigurowanych list tylko wtedy, gdy
upstreamowe /models zwraca błąd, nil lub pustą listę.
Provider kompatybilny z OpenAI bez endpointu /models (404 lub 405) jest obsługiwany
na podstawie skonfigurowanej listy i raportowany jako sprawny, co pasuje do serwerów z jednym API,
takich jak speech-to-text. Ustaw
CONFIGURED_PROVIDER_MODELS_MODE=allowlist, żeby udostępniać tylko skonfigurowane modele
providerów, które definiują listę, i pomijać ich upstreamowe wywołania /models. W YAML
providers.<name>.models dostarcza tę samą listę modeli dla nazwanych bloków
providerów.
GET /v1/models domyślnie zwraca identyfikatory z prefiksem providera (openai/gpt-5). Ustaw
UNQUALIFIED_MODEL_IDS_AT_MODELS_ENDPOINT=true (YAML:
models.unqualified_model_ids_at_models_endpoint), żeby zwracać same identyfikatory modeli
(gpt-5) – dla klientów, które sprawdzają żądany model względem
listy i znają tylko zwykłe nazwy. Zastrzeżenie: gdy dwóch providerów udostępnia ten sam
identyfikator modelu, na liście pojawia się tylko provider, do którego trafia request bez prefiksu (pierwszy
zarejestrowany). Przypnij nazwę do konkretnego providera za pomocą
modelu wirtualnego, na przykład
source: gpt-5 z target: azure/gpt-5.
Każdy model providera jest domyślnie dostępny. Ustaw
MODELS_ENABLED_BY_DEFAULT=false (YAML: models.enabled_by_default), żeby
wymagać jawnego wpisu zezwalającego w
modelach wirtualnych:
requesty o inne modele kończą się wtedy błędem 400 model_access_denied,
a modele nie pojawiają się w GET /v1/models. Żeby ukryć modele providerów w
GET /v1/models, zachowując możliwość routowania do nich, ustaw
KEEP_ONLY_ALIASES_AT_MODELS_ENDPOINT=true
(YAML: models.keep_only_aliases_at_models_endpoint); endpoint zwraca wtedy
tylko włączone przekierowania modeli wirtualnych.
Żeby zawęzić inwentarz providera bez wypisywania modeli jeden po drugim, użyj
<PROVIDER>_MODEL_FILTER_INCLUDE, <PROVIDER>_MODEL_FILTER_EXCLUDE i
<PROVIDER>_MODEL_FILTER_MAX_PRICE_PER_MTOK (YAML:
providers.<name>.model_filter). Zobacz
Filtrowanie modeli providera.
Dla OpenRoutera GoModel wysyła też domyślne nagłówki atrybucji, chyba że request już je ustawia. Nadpisz te wartości domyślne przez OPENROUTER_SITE_URL i OPENROUTER_APP_NAME.
2. Plik .env
GoModel przy starcie automatycznie wczytuje plik .env z katalogu roboczego. To wygodne przy lokalnym developmencie.
.env.template do .env i odkomentuj potrzebne wartości:
Prawdziwe zmienne środowiskowe zawsze nadpisują wartości z pliku
.env. Plik
.env jest wczytywany tylko wtedy, gdy istnieje – jego brak nie jest błędem.3. Plik konfiguracyjny (YAML)
Przy bardziej złożonych konfiguracjach możesz użyć opcjonalnego pliku konfiguracyjnego YAML. GoModel szuka go w dwóch lokalizacjach (w tej kolejności):config/config.yamlconfig.yaml
${VAR} i ${VAR:-default}:
${file:/run/secrets/openai} lub ${env:OPENAI_API_KEY}.
Konfiguracja providerów
Automatyczne wykrywanie ze zmiennych środowiskowych
Najprostszy sposób dodawania providerów. GoModel sprawdza dobrze znane zmienne środowiskowe z kluczami API i automatycznie rejestruje providerów:<PROVIDER>_* bez sufiksu mają pierwszeństwo przed providerem z config.yaml nazwanym
tak jak typ (openai). Provider, któremu zmieniłeś nazwę (alpha: {type: openai}), przejmuje
tylko te pola, które zostawił puste; jego jawne api_key lub base_url zostaje zachowane, a
zignorowane zmienne są logowane jako ostrzeżenie przy starcie. Gdy kilku providerów o zmienionych nazwach
ma ten sam typ, zmienne bez sufiksu są ignorowane z tym samym ostrzeżeniem.
Używaj zmiennych z sufiksem, żeby zarejestrować więcej niż jedną instancję tego samego typu
providera bez YAML. GoModel zamienia sufiks na małe litery i zamienia
podkreślniki na myślniki w nazwie skonfigurowanego providera:
<PROVIDER>_<SUFFIX>_API_KEY, <PROVIDER>_<SUFFIX>_BASE_URL i
<PROVIDER>_<SUFFIX>_MODELS. Azure obsługuje też
<PROVIDER>_<SUFFIX>_API_VERSION. Azure i Oracle nadal wymagają
wartości BASE_URL z sufiksem, bo ich endpointy zależą od deploymentu lub
regionu.
Google Vertex AI używa prefiksu VERTEX_* i stosuje tę samą
regułę zamiany sufiksu na nazwę co pozostali providerzy:
Bloki providerów w YAML
Gdy potrzebujesz większej kontroli (własne nazwy, odporność na awarie per provider lub większe ustrukturyzowane ustawienia), użyj pliku YAML:models: działa w każdym bloku providera. W trybie fallback to zabezpieczenie
na wypadek, gdy upstreamowe /models jest niedostępne lub puste. W trybie allowlist staje się
udostępnianym inwentarzem tego providera i pomija upstreamowe /models. Wymaganą politykę OCI
i przetestowaną konfigurację dla Oracle GenAI znajdziesz w przewodniku po Oracle
GenAI.Ollama (modele lokalne)
Ollama nie wymaga klucza API. Ustaw bazowy URL, żeby ją włączyć:vLLM
vLLM korzysta ze swojego API/v1 kompatybilnego z OpenAI. W Dockerze ustaw VLLM_BASE_URL, żeby
zarejestrować serwer vLLM bez klucza:
vllm serve ... --api-key token-abc123,
ustaw również:
vllm i vllm-test. Używaj YAML tylko wtedy, gdy
generowane nazwy providerów nie wystarczają lub potrzebujesz większego, ustrukturyzowanego bloku.
Uwagi o zachowaniu providerów
Domyślne max_tokens dla Anthropic
Anthropic wymaga max_tokens w każdym requeście /v1/messages. Jeśli klient
go pominie, GoModel wstawia wartość zastępczą, żeby request mimo to się powiódł. OpenAI i
Gemini traktują to pole jako opcjonalne i GoModel nie wstawia dla nich wartości
domyślnej.
Zwiększ ją dla nowszych modeli, które rutynowo generują dłuższe odpowiedzi (Sonnet 4.6,
Opus 4.7). Jawne ustawienie
max_tokens w requeście zawsze ma pierwszeństwo przed
wartością domyślną ze zmiennej środowiskowej. Nieprawidłowe lub niedodatnie wartości powodują powrót do 4096.