LLM როუტერი
LLM როუტერი არის PRX-ის მოდელის შერჩევის ძრავა — 2,808 სტრიქონი Rust კოდი, რომელიც წყვეტს რომელი პროვაიდერი და მოდელი ამუშავებს ყოველ შემავალ მოთხოვნას. ის აბალანსებს ხარისხს, ხარჯს, დაყოვნებას და შესაძლებლობებს ოპტიმალური მარშრუტიზაციის გადაწყვეტილებების მისაღებად რეალურ დროში.
მარშრუტიზაციის ნაკადი
Section titled “მარშრუტიზაციის ნაკადი”შემავალი მოთხოვნა │ ├─ 1. განზრახვის კლასიფიკაცია │ მოთხოვნის კატეგორიზაცია (კოდი, ჩატი, ანალიზი, თარგმანი და ა.შ.) │ ├─ 2. მოდელის შერჩევა (ქულის მიმნიჭებელი) │ ყველა კანდიდატი მოდელის შეფასება და რანჟირება │ ├─ 3. საიმედოობის სარეზერვო │ თუ არჩეული მოდელი მიუწვდომელია, ჯაჭვში ჩამოსვლა │ ├─ 4. Automix │ იაფი მოდელით დაწყება; განახლება თუ საიმედოობა დაბალია │ └─ 5. შედეგის ჩაწერა შედეგის ლოგირება Elo განახლებებისა და მომავალი მარშრუტიზაციის გადაწყვეტილებებისთვისქულის ფორმულა
Section titled “ქულის ფორმულა”ყოველი კანდიდატი მოდელი იღებს კომპოზიტურ ქულას:
score = alpha * similarity + beta * capability + gamma * elo - delta * cost - epsilon * latency| ფაქტორი | წონა | წყარო |
|---|---|---|
similarity | alpha | KNN სემანტიკური მანძილი მოთხოვნასა და მოდელის საუკეთესო წარსულ მოთხოვნებს შორის |
capability | beta | სტატიკური შესაძლებლობების მატრიცა (კოდირება, მათემატიკა, მსჯელობა, მრავალენიანი, ხედვა და ა.შ.) |
elo | gamma | დინამიური Elo რეიტინგი, განახლებული ყოველი დასრულებული მოთხოვნის შემდეგ |
cost | delta | ტოკენზე ფასი (შეყვანა + გამოსავალი) |
latency | epsilon | მოცურავე საშუალო პასუხის დრო ამ მოდელისთვის |
წონები კონფიგურირებადია და შეიძლება მორგება არხის ან მომხმარებლის მიხედვით ხარისხის ან ხარჯის პრიორიტეტიზაციისთვის.
კომპონენტები
Section titled “კომპონენტები”განზრახვის კლასიფიკაცია
Section titled “განზრახვის კლასიფიკაცია”კლასიფიკატორი ასახავს ყოველ მოთხოვნას ერთ ან მეტ განზრახვის კატეგორიაში:
| განზრახვა | აღწერა | სასურველი შესაძლებლობები |
|---|---|---|
code | კოდის წერა, დებაგი ან მიმოხილვა | ძლიერი კოდირების ბენჩმარკები |
chat | ყოველდღიური საუბარი | დაბალი დაყოვნება, იაფი |
analysis | მონაცემთა ანალიზი, რთული მსჯელობა | მაღალი მსჯელობის შესაძლებლობა |
translation | ენის თარგმანი | მრავალენიანი ძალა |
vision | გამოსახულების გაგება | ხედვის მოდელი აუცილებელი |
math | მათემატიკური ამოცანების გადაჭრა | მათემატიკა/მსჯელობის ბენჩმარკები |
creative | წერა, ბრეინშტორმინგი | შემოქმედებითი თავისუფლება |
tool_use | აგენტური სამუშაო პროცესები ინსტრუმენტების გამოძახებით | ნეიტივი ინსტრუმენტების გამოძახება, ინსტრუქციების შესრულება |
კლასიფიკაცია სწრაფია — იყენებს საკვანძო სიტყვების ევრისტიკებს და მსუბუქ მოდელის გამოძახებას ორაზროვნების შემთხვევაში.
შესაძლებლობების შესაბამისობა
Section titled “შესაძლებლობების შესაბამისობა”ყოველ მოდელს აქვს სტატიკური შესაძლებლობების პროფილი, რომელიც აფასებს მას განზომილებებში:
claude-sonnet-4: coding=0.95 reasoning=0.93 creative=0.90 speed=0.80 cost=0.70gpt-4o: coding=0.90 reasoning=0.88 creative=0.85 speed=0.85 cost=0.75gemini-2.5-pro: coding=0.88 reasoning=0.90 creative=0.82 speed=0.82 cost=0.80llama3.1-70b: coding=0.75 reasoning=0.70 creative=0.72 speed=0.90 cost=0.95როუტერი ამრავლებს განზრახვასთან შესაბამის შესაძლებლობების ქულებს beta-ზე საბოლოო ქულის შესაძლებლობის კომპონენტის მისაღებად.
Elo რეიტინგი
Section titled “Elo რეიტინგი”ყოველი მოდელი ინახავს Elo რეიტინგს, რომელიც განახლდება ყოველი მოთხოვნის შემდეგ. როცა მოთხოვნა წარმატებულია (მომხმარებელი მიიღებს პასუხს, ხელახალი ცდა არ სჭირდება), მოდელი იძენს Elo-ს. როცა მოთხოვნა ჩავარდება ან ხელახლა ცდება სხვა მოდელზე, მოდელი კარგავს Elo-ს.
ეს ქმნის თვითკორექტირებად უკუკავშირის ციკლს: მოდელები, რომლებიც კარგად მუშაობენ პრაქტიკაში, იზრდებიან რანჟირებაში, მათი სტატიკური ბენჩმარკების მიუხედავად.
KNN სემანტიკური მარშრუტიზაცია
Section titled “KNN სემანტიკური მარშრუტიზაცია”როუტერი ინახავს წარსული მოთხოვნებისა და მათი შედეგების ემბედინგების ინდექსს. ყოველი ახალი მოთხოვნისთვის, ის პოულობს K უახლოეს წარსულ მოთხოვნას (ემბედინგის მსგავსებით) და ამოწმებს რომელმა მოდელებმა ყველაზე კარგად იმუშავეს მსგავს შეყვანებზე.
ეს განსაკუთრებით ღირებულია სპეციალიზებული დომენებისთვის — თუ კონკრეტული მოდელი თანმიმდევრულად კარგად ამუშავებს SQL კითხვებს თქვენს გარემოში, როუტერი სწავლობს მის პრეფერენციას SQL-თან დაკავშირებული მოთხოვნებისთვის.
Automix
Section titled “Automix”Automix არის ხარჯის ოპტიმიზაციის სტრატეგია:
- მოთხოვნის მარშრუტიზაცია იაფ მოდელზე ჯერ (მაგ., Haiku, GPT-4o-mini)
- პასუხის საიმედოობის შეფასება (მოდელის თვითშეფასებაზე, პასუხის თანმიმდევრულობაზე და გამოსავლის ხარისხის სიგნალებზე დაყრდნობით)
- თუ საიმედოობა ზღვარს ქვემოთაა, ხელახალი მარშრუტიზაცია პრემიუმ მოდელზე (მაგ., Opus, o3)
- პრემიუმ პასუხის დაბრუნება მომხმარებლისთვის
ეს დაზოგავს ხარჯებს მარტივ მოთხოვნებზე ხარისხის შენარჩუნებით რთულებზე. საიმედოობის ზღვარი რეგულირებადია.
მოთხოვნა ──→ იაფი მოდელი ──→ საიმედოობის შემოწმება │ ≥ ზღვარი → იაფი პასუხის დაბრუნება < ზღვარი → ხელახალი მარშრუტიზაცია პრემიუმ მოდელზე → პრემიუმ პასუხის დაბრუნებაისტორია
Section titled “ისტორია”როუტერი ლოგავს ყოველ მარშრუტიზაციის გადაწყვეტილებას და მის შედეგს:
- რომელი მოდელი შეირჩა და რატომ (ქულის დეტალიზაცია)
- მოთხოვნა წარმატებული იყო თუ ხელახლა ცდილია
- პასუხის დაყოვნება და ტოკენების რაოდენობა
- მომხმარებლის უკუკავშირის სიგნალები (თუ ხელმისაწვდომია)
ეს ისტორია აწვდის Elo სისტემას, KNN ინდექსს და უზრუნველყოფს მარშრუტიზაციის ქცევის დაკვირვებადობას.
ცივი სტარტის დაცვა
Section titled “ცივი სტარტის დაცვა”როცა PRX იწყება ახლიდან ისტორიის გარეშე, როუტერი ბრუნდება გონივრულ ნაგულისხმევებზე:
- Elo რეიტინგები ინიციალიზდება 1500-ზე ყველა მოდელისთვის
- KNN ინდექსი ცარიელია, ამიტომ
similarityნულს აძლევს ქულას - შესაძლებლობების შესაბამისობა და ხარჯი/დაყოვნება ხდება დომინანტური ფაქტორები
- კონფიგურირებადი
default_modelგამოიყენება ქულების თანაბრობისას
სისტემის ისტორიის დაგროვებისას, დინამიური კომპონენტები (Elo, KNN) თანდათან ცვლიან სტატიკურ ევრისტიკებს.
კონფიგურაცია
Section titled “კონფიგურაცია”[router]default_model = "anthropic/claude-sonnet-4-20250514"
# ქულის წონებიalpha = 0.25 # სემანტიკური მსგავსებაbeta = 0.30 # შესაძლებლობების შესაბამისობაgamma = 0.20 # Elo რეიტინგიdelta = 0.15 # ხარჯის ჯარიმაepsilon = 0.10 # დაყოვნების ჯარიმა
# Automixautomix_enabled = trueautomix_cheap_model = "anthropic/claude-haiku-4-20250414"automix_premium_model = "anthropic/claude-sonnet-4-20250514"automix_confidence_threshold = 0.7
# სარეზერვო ჯაჭვიfallback_chain = [ "anthropic/claude-sonnet-4-20250514", "openai/gpt-4o", "google/gemini-2.5-pro",]