Przegląd
Inteligentny routing składa się z dwóch licencjonowanych rozszerzeń, które współpracują z modelami wirtualnymi z Core:- Smart tier routing odpowiada na pytanie: na jaki poziom jakości zasługuje ten
request? Klasyfikuje skonfigurowany alias modelu do poziomu
easylubhardprzed wyborem providera, więc krótki czat trafia do taniego modelu, a praca wymagająca intensywnego rozumowania, kodu lub narzędzi – do mocnego. - Adaptive routing odpowiada na pytanie: który provider w ramach tego poziomu? Wybiera cel upstream z puli modelu wirtualnego na podstawie obserwowanych opóźnień, błędów, okresów cooldownu i skonfigurowanego celu kosztowego lub opóźnieniowego.
model: "normal" jest przepisywany na normal-easy lub
normal-hard, a jeśli którykolwiek z nich jest modelem wirtualnym ze strategią adaptive,
selektor wybiera dla niego najlepszego providera.
Smart tier routing
Skonfiguruj alias z poziomami, używając zwykłych nazw modeli GoModel. Celami poziomów mogą być konkretne modele lub modele wirtualne:PRO_SMART_ROUTING_ROUTES; każda inna
nazwa modelu przechodzi bez zmian. Bez skonfigurowanych tras funkcja jest
bezczynna, a logi startowe wyświetlają podpowiedź.
Jak oceniany jest request
Klasyfikacja jest deterministyczna, działa w procesie i nie wywołuje żadnego modelu. Request, który jawnie prosi o reasoning (reasoning_effort medium lub
wyższy albo blok thinking Anthropic), trafia od razu do poziomu hard.
W przeciwnym razie request zbiera punkty, a wynik równy lub wyższy od
PRO_SMART_ROUTING_THRESHOLD (domyślnie 4) wybiera poziom hard:
Przy wartościach domyślnych sam krótki fragment kodu (3) pozostaje na poziomie easy, a
kod plus 2k znaków kontekstu (4) eskaluje. Obniż próg, aby wysyłać
więcej ruchu na poziom hard, lub podnieś go, aby chronić tani poziom.
Przypinanie sesji
Wybrany poziom jest przypinany per kierowany alias i wykryta sesja (zobacz Utrzymywanie sesji). Przypięcie działa tylko w górę: rozmowa może przejść z easy na hard, gdy przypięcie jest aktywne, ale nigdy nie zostaje po cichu zdegradowana, więc kolejna wiadomość w rodzaju „thanks!” nie może przerzucić trudnej rozmowy na tani poziom ani unieważnić prompt cache jej providera. Przypięcie wygasa poPRO_SMART_ROUTING_SESSION_TTL bezczynności.
Konfiguracja smart tier routing
Nadpisywanie i podgląd decyzji
WyślijX-GoModel-Smart-Routing: off, aby pominąć klasyfikację dla jednego requestu,
lub X-GoModel-Tier: easy albo X-GoModel-Tier: hard, aby wymusić jego poziom bez
zmiany przypięcia sesji.
Każda kierowana odpowiedź raportuje decyzję:
gomodel_pro_smartroute_; histogram wyników służy do strojenia
progu na podstawie rzeczywistego ruchu.
Adaptive routing
Adaptive routing zastępuje strategieround_robin i cost z Core
selektorem uwzględniającym stan zdrowia celów. Jest rejestrowany raz przy starcie dla całego
gatewaya, ale używają go tylko modele wirtualne skonfigurowane ze strategy: adaptive
– każdy inny model wirtualny zachowuje swoją strategię.
adaptive pojawia się na liście strategii modelu wirtualnego
tylko wtedy, gdy działa build Pro z uprawnieniem routing. W buildzie
open source model wirtualny ze strategy: adaptive wraca do
round-robin.
Jak wybierany jest cel
Wybór działa metodą power-of-two-choices: losowane są dwa kandydaty proporcjonalnie do ich wag, a wygrywa ten z mniejszym chwilowym obciążeniem (szacowane opóźnienie × requesty w toku). Wagi są przeliczane dla każdego requestu na podstawie stanu w procesie – na ścieżce requestu nie ma zewnętrznego magazynu.- Opóźnienie – każdy cel utrzymuje szacunek opóźnienia peak-EWMA (czas do pierwszego bajtu dla streamów), zasilany przez każdą próbę do upstreamu, w tym retry i failovery.
- Cooldowny –
429uruchamia cooldown o długościPRO_ROUTING_COOLDOWN_BASE, który podwaja się przy każdym kolejnym wyzwoleniu aż doPRO_ROUTING_COOLDOWN_MAX;401,403i404od razu dostają maksymalny cooldown; powtarzające się błędy 5xx lub sieciowe uruchamiają cooldown po trzech z rzędu. Cele w cooldownie są pomijane, dopóki dostępny jest jakikolwiek inny cel. - Minimalna waga – każdy cel poza cooldownem zachowuje co najmniej
PRO_ROUTING_MIN_WEIGHT_FRACTIONwagi najcięższego kandydata, więc wolny lub dochodzący do siebie cel nadal otrzymuje strużkę ruchu, a jego powrót do sprawności jest potwierdzany na prawdziwych requestach. - Ciepły prompt cache – provider, który ostatnio obsłużył wykrytą sesję,
dostaje wzmocnienie
PRO_ROUTING_WARM_CACHE_WEIGHTna czasPRO_ROUTING_WARM_CACHE_TTL, więc rozmowa pozostaje przy tych samych danych uwierzytelniających, endpoincie i regionie, dopóki jej prompt cache jest prawdopodobnie ciepły. Cel w cooldownie traci to wzmocnienie.
Konfiguracja adaptive routing
Utrzymywanie sesji i stan zdrowia
Przy włączonym utrzymywaniu sesji (domyślnie) gateway przekazuje selektorowi cel, który już obsługuje daną sesję, i pozwala mu decydować, request po requeście, czy sesja go zachowa – zawsze, gdy dostępny jest więcej niż jeden cel. (Przy jednym dostępnym celu nie ma wyboru, więc selektor jest pomijany). Przypięcie trwa, dopóki cel jest zdrowy – przeniesienie sesji przekreśla prompt cache providera, który przypięcie ma chronić, więc nawet znacznie tańsza lub znacznie szybsza alternatywa go nie przejmie. Przypięcie jest zwalniane tylko wtedy, gdy jego cel wchodzi w cooldown, a sesja zostaje wtedy przypięta do celu wybranego przez selektor. To jedyna ocena, której gateway nie może dokonać samodzielnie: cel, który zwraca429 lub przekracza timeouty, nadal jest skonfigurowanym, obsługiwanym przez katalog
celem, więc przechodzi każdą kontrolę stosowaną przez przypięcie w Core. Bez selektora
na ścieżce sesja agenta – jedno id sesji, tysiące requestów – przypina się
przy pierwszym requeście i jedzie na zawodnym celu przez cały czas życia przypięcia,
co widać jedynie jako opóźnienia i zmarnowane wydatki w upstreamie, bo failover nadal
zwraca klientowi 200.
gomodel_pro_routing_session_affinity_total{outcome} zlicza przypięcia honored
i przypięcia released z powodu cooldownu, więc to zachowanie jest widoczne w Prometheusie,
a nie tylko na fakturze od providera.
Metryki Prometheus używają prefiksu gomodel_pro_routing_ (wybory,
odrzucenia, wyniki, cooldowny, powinowactwo sesji i gauge szacowanego
opóźnienia). Stan oceny jest per węzeł; repliki uczą się niezależnie i niczego
nie współdzielą.