Směrování

Jak funguje router LLM?

Router přemění požadavek, který nepojmenovává žádný stroj, na odpověď jednoho koncového bodu. Čistá funkce filtruje kandidáty podle zásad a rezidence, hodnotí ty, které přežijí, a vybere nejvyšší skóre.

Jeden koncový bod dovnitř, jeden koncový bod vybrán

Modelový router přijme požadavek, který nepojmenovává žádný stroj, a vrátí odpověď toho, který byl vybrán pravidlem. Zde je záměrně malý: požadavek kompatibilní s OpenAI dorazí na jednu základní URL a čistá funkce – žádná databáze, žádné hodiny, žádná síť – rozhodne, který koncový bod na něj odpoví. Vstupy funkce jsou kandidátské koncové body načtené volajícím a aktuální čas, což umožňuje testovat každé pravidlo bez běžícího stacku.

Pole `model` rozhoduje, kolik možností má router. Odeslání `llmeu-auto` (nebo `llmeu/auto`, `auto`, `llmeu:auto`) mu předá celý pool. Pojmenování modelu tento model zafixuje: router pak vybírá mezi koncovými body tohoto jednoho modelu a nikdy jej nenahradí jiným, protože tichá substituce by z pole `model` v odpovědi udělala odhad. ID modelů jsou nejprve normalizována, takže ID s předponou poskytovatele nebo příponou data se přeloží na slug, který katalog zná.

Filtr běží před skóre, v pevném pořadí

Každý kandidátský koncový bod je testován proti zásadám a požadavku a každé odmítnutí je zaznamenáno s doslovným řetězcem důvodu. Pořadí je součástí smlouvy, protože první důvod, proč je koncový bod odmítnut, je ten, který vysvětluje trasu.

Koncový bod, jehož typ je `catalogue`, jde nejprve: nic na nasazení s ním neodpovídá, takže je odstraněn předtím, než se zváží jakékoli jiné pravidlo. Poté ty, jejichž stav není ani `up`, ani `degraded`. Poté třída suverenity, kontrolovaná jak proti organizačním zásadám, tak proti rezidenci, kterou požadavek pojmenoval. Poté region, když rezidence nebo zásady jeden zafixují. Poté model, který nemůže generovat text – model pro rozpoznávání řeči, vkládání nebo reranker je zde odmítnut, spíše než aby byl požádán o dokončení, které nemůže produkovat. Poté seznam zakázaných poskytovatelů, seznam povolených poskytovatelů, seznam zakázaných modelů a seznam povolených modelů, v tomto pořadí. Poté partnerské koncové body, zatímco je partnerský příznak vypnutý. Poté model bez modality vidění, pokud požadavek nese obrázek. Poté kontextové okno, pokud je dokumentované okno menší než vstup plus požadovaný výstup. A nakonec cena, proti stropu v zásadách nebo v požadavku.

Nic nepřežije tento filtr, když je pravidlo skutečně neuspokojitelné, a pak je odpověď 409 `no_endpoint_for_policy`. Zpráva je vlastní věta enginu o požadované rezidenci, následovaná „Residency is never relaxed silently.“ Není to přechodná chyba: stejný požadavek selže stejným způsobem znovu a cesta ven je pojmenovat rezidenci, kterou zásady povolují, nebo záměrně rozšířit zásady v konzoli.

Skóre a proč to není soutěž popularity

To, co přežije, je hodnoceno, nikoli řazeno podle velikosti nebo podle srovnávací tabulky. Shoda s úkolem má váhu pět, shoda s jazykem tři, úplnost dokumentace jedna a dokumentovaná třída suverenity až dva. Cena, zaznamenaná latence a zaznamenaná chybovost se odečítají: dva, dva a tři. Cena a latence jsou normalizovány napříč přeživší sadou, takže kandidáti jsou porovnáváni mezi sebou spíše než proti pevné stupnici, a kandidát bez zaznamenané latence je hodnocen na 500 milisekund.

Protože shoda s úkolem dominuje, stejný pool požadavků se směruje různě podle úkolu. Levný úkol preferuje modely s 9B parametry nebo méně a model 753B klesá na 0,15. Vyhledávání je rozhodováno zaznamenaným kontextovým oknem, takže model, který nese tag `rag`, ale nemůže pojmout kusy, nevyhraje. Požadavek na kódování preferuje slug specializovaný na kód, německý požadavek získává body za model, jehož seznam silných jazyků obsahuje němčinu, a vícejazyčný požadavek získává body, jakmile model deklaruje šest nebo více silných jazyků. Rozhodující jsou nižší cena, poté nižší zaznamenaná latence, poté stabilní identifikátor – takže stejný požadavek se směruje dvakrát stejným způsobem.

Pole zásad, která o tom rozhodují

Šest polí zásad dosahuje filtru: které třídy rezidence a regiony jsou povoleny, seznamy povolených a zakázaných poskytovatelů, seznamy povolených a zakázaných modelů, zda jsou partnerské koncové body vůbec způsobilé, a cenový strop na milion tokenů. Požadavek je může pouze zúžit. Žádost o `eu-owned` v rámci zásad, které povolují `eu-hosted`, zúží sadu; nikdy ji nemůže rozšířit. Cenový strop požadavku může pouze snížit strop zásad.

Tři další sloupce zásad jsou vynuceny o jednu vrstvu nad enginem, kolem stejného rozhodnutí: uchovávání, povolené datové třídy a denní rozpočet. Již vyčerpaný rozpočet způsobí selhání požadavku předtím, než je jakýkoli koncový bod ohodnocen, s `budget_exceeded`. Požadavek, který nepojmenovává žádnou rezidenci, dostane vlastní sadu zásad: `eu-hosted`, zatímco každá třída, kterou zásady připouštějí, je EU-hostovaná, a `any`, jakmile připustí cokoli jiného.

Přepnutí na záložní systém zůstává uvnitř rozhodnutí

Při 5xx nebo nedosažitelném backendu se zkusí další nejlepší kandidát, až tři pokusy, a každý pokus je zaznamenán. Chyba, kterou backend označí jako konečnou, se vůbec neopakuje. Seznam opakování je sestaven z již filtrovaného rozhodnutí, takže opakování se může přesunout na jiný koncový bod v rámci vašich zásad a nikdy mimo ně – přepnutí na záložní systém, které by uniklo filtru rezidence, by bylo chybou rezidence, což je třída defektů, které tento design má zabránit.

Co vám odpověď řekne

Odpověď přidává blok vedle standardních polí OpenAI: ID trasování, použitý model, jeho verze, poskytovatel, ID koncového bodu, region inference, třída suverenity, ID zásad, použité uchovávání, odhad nákladů a důvod trasy. Tento důvod je spíše věta než kód a pojmenovává region a třídu: automatické směrování pro kódovací úkol s rezidencí `eu-hosted`, vybraný slug a region, třída slovy, kolik koncových bodů bylo vyloučeno a zda byly povoleny partnerské koncové body. Stejná věta je doslovně zobrazena v konzoli a uložené trasování je dohledatelné podle jeho ID.

Jedna poznámka k pojmenování, protože slova se v výsledcích vyhledávání překrývají: směrování se v této oblasti používá pro několik různých věcí. Zde popsané je router v tomto repozitáři a každé pravidlo výše je čteno z kódu, který jej vynucuje – důvody odmítnutí jsou jeho doslovné řetězce, váhy jsou jeho bodovací funkce a výchozí hodnoty jsou výchozí hodnoty sloupců schématu databáze.

Často kladené otázky

Co se stane, když jako model odešlu llmeu-auto?

Router uchová každý koncový bod, který projde filtrem, a ohodnotí je. Odpověď uvádí, který z nich vyhrál: použitý model, oblast inference, třída suverenity, ID politiky a směrovací věta. V případě shody rozhoduje levnější, pak rychlejší, pak stabilní ID.

Může router odeslat můj požadavek mimo oblast, kterou jsem si vyžádal?

Ne. Rezidence je aplikována jako filtr před bodováním a seznam opakování pro selhávající backend je sestaven z již filtrovaného rozhodnutí, až do tří pokusů. Koncový bod mimo povolenou sadu není nikdy v porovnání.

Proč selhalo pojmenování konkrétního modelu namísto přesměrování jinam?

Pojmenovaný model je připnutý. Pokud žádný z jeho koncových bodů nepřežije, router uvede důvod: model_not_found, hosted_unavailable pro model pouze z katalogu, model_denied pro seznam politik, not_a_text_model pro řečový nebo embedding model.