Краткий ответ: маршрутизируйте запросы в вашем приложении, затем используйте один ключ CometAPI и OpenAI-совместимый базовый URL https://api.cometapi.com/v1, чтобы вызывать выбранную модель. Отправляйте повторяющиеся, легко проверяемые задачи в недорогой уровень; чувствительные к задержкам взаимодействия с клиентами — в быстрый уровень; неоднозначные или высокорисковые задачи — в уровень высокой точности. Держите ярлыки как внутреннюю политику — а не как универсальный рейтинг моделей — и измеряйте каждый уровень на одном и том же тестовом наборе.
В этом руководстве описано построение такого трехуровневого маршрутизатора с компактным примером на Python, ограниченным фолбэком и моделью стоимости, учитывающей повторы и отклоненные ответы. В примере используются текущие идентификаторы моделей из каталога CometAPI, но логика маршрутизации вынесена отдельно, чтобы можно было менять модели без переписывания приложения.
Что такое маршрутизация LLM?
Маршрутизация LLM — это процесс отправки каждого запроса в модель или сервисный уровень, который лучше всего соответствует его задаче, целевым метрикам задержки, требованиям к качеству и бюджету.
Как маршрутизировать запросы LLM по типу задачи?
По состоянию на 20 августа 2026 года следующие идентификаторы моделей и ценовые поля каталога доступны через публичный CometAPI Models API. Приведенные ниже ориентировочные потребительские ставки применяют текущее значение ratio из каталога к базовым ценам на вход и выход, согласно CometAPI pricing guide. Перед вводом в эксплуатацию подтвердите итоговый тариф для вашего аккаунта.
| Маршрут | Применение | Пример модели | Оценка USD / 1 млн токенов | Первый фолбэк |
|---|---|---|---|---|
| Недорогой | Тегирование, извлечение, дедупликация | deepseek-v4-flash | $0.176 вход / $0.528 выход | Быстрый |
| Быстрый | Ответы клиентам, резюме, живые ассистенты | gemini-3.7-flash | $0.60 вход / $3.00 выход | Недорогой, затем высокая точность |
| Высокая точность | Проверка политик, сложные рассуждения, важные черновики | claude-opus-5 | $4.00 вход / $20.00 выход | Быстрый |
«Быстрый» означает, что маршрут имеет целевой показатель задержки; «высокая точность» — что у него более строгая цель по качеству. Ни один ярлык не доказывает, что конкретная модель всегда самая быстрая или самая точная. Измерьте p50 и p95 задержки, долю успешных задач и стоимость за принятый ответ на вашем трафике, прежде чем закреплять соответствие.
Как настроить CometAPI для маршрутизатора LLM?
Вам нужен ключ CometAPI, Python 3.10 или новее и пакет OpenAI для Python. Храните ключ на сервере, а не в исходном коде.
pip install openaiexport COMETAPI_KEY="your-key-here"
В примере используется POST /v1/chat/completions. CometAPI документирует это как общий интерфейс для нескольких провайдеров, но поведение параметров все же может отличаться по моделям. Перед добавлением специфичных для провайдера полей проверьте текущую запись модели и Chat Completions reference.
Что нужно, чтобы построить маршрутизатор LLM?
Сопоставьте стабильные задачи с уровнями сервиса. Не просите другую LLM классифицировать каждый запрос, если простых сигналов приложения достаточно. Тег поддержки — предсказуемо «дешевая» работа; живой ответ — чувствителен к задержке; проверка политики требует самого строгого контроля качества.
Валидируйте выход. Успешный HTTP-статус не означает, что результат пригоден. Передайте маршрутизатору валидатор, специфичный для задачи. Для классификации проверьте допустимую метку; для ответа клиенту — длину и запрещенные утверждения; для структурированного процесса — соответствие JSON-схеме.
Ограниченно используйте фолбэк. Пробуйте следующий допустимый маршрут после таймаута, 408, 429, временных 5xx или ограниченного сбоя по контролю качества. Не используйте другую модель, чтобы скрыть некорректный вход, неверный ключ или неподдерживаемые параметры.
Как построить маршрутизатор LLM на Python?
import osimport timefrom openai import APIError, OpenAIclient = OpenAI( api_key=os.environ["COMETAPI_KEY"], base_url="https://api.cometapi.com/v1", max_retries=0, timeout=20,)MODELS = { "cheap": "deepseek-v4-flash", "fast": "gemini-3.7-flash", "accurate": "claude-opus-5",}# Put the preferred tier first; later tiers are fallbacks.ROUTES = { "tag": ["cheap", "fast", "accurate"], "reply": ["fast", "cheap", "accurate"], "policy_review": ["accurate", "fast", "cheap"],}def retryable(error): status = getattr(error, "status_code", None) return status is None or status in {408, 429} or (status and status >= 500)def route(task, prompt, validate=lambda text: True): attempts = [] for tier in ROUTES.get(task, ROUTES["reply"]): model = MODELS[tier] started = time.perf_counter() try: response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": prompt}], max_tokens=400, ) text = response.choices[0].message.content or "" attempts.append({ "tier": tier, "model": model, "latency_ms": round((time.perf_counter() - started) * 1000), "accepted": validate(text), }) if attempts[-1]["accepted"]: return { "text": text, "route": tier, "model": model, "usage": response.usage.model_dump() if response.usage else None, "attempts": attempts, } except APIError as error: attempts.append({"tier": tier, "model": model, "status": error.status_code}) if not retryable(error): raise raise RuntimeError(f"No route passed: {attempts}")if __name__ == "__main__": result = route( "reply", "Reply to a customer asking when their refund will arrive. Do not promise a date.", validate=lambda text: 30 <= len(text) <= 600 and "guarantee" not in text.lower(), ) print(result)
Как ограничить число повторных попыток перед переключением на фолбэк?
Держите повторы SDK равными нулю и оберните каждый вызов модели явным лимитом. Приведенный ниже помощник повторяет только повторяемые сбои API один раз, затем выбрасывает исключение, чтобы внешний маршрут перешел к следующему разрешенному уровню.
MAX_ATTEMPTS_PER_MODEL = 2def call_model(model, prompt): for attempt in range(1, MAX_ATTEMPTS_PER_MODEL + 1): try: return client.chat.completions.create( model=model, messages=[{"role": "user", "content": prompt}], max_tokens=400, ) except APIError as error: if not retryable(error) or attempt == MAX_ATTEMPTS_PER_MODEL: raise time.sleep(min(0.5 * (2 ** (attempt - 1)), 2.0))
В route() замените прямой вызов client.chat.completions.create(...) на call_model(model, prompt). При трех уровнях один запрос завершится максимум после шести вызовов провайдера; сбои валидации все равно поднимаются на уровень выше по одному разу на уровень, вместо повторной генерации того же результата.
Запустите командой python3 llm_task_router.py. Чтобы позже сменить провайдеров или поколения моделей, обновите MODELS; политика задач и контракт ответа остаются в одном месте.
В примере используются только параметры, общие для выбранных моделей. Добавляйте специфичные для модели настройки токенов через адаптерный слой после проверки совместимости моделей.
Как тестировать политику маршрутизации LLM?
Сначала убедитесь, что детерминированная политика выбирает ожидаемый первичный уровень. Это ожидания маршрутизации, а не результаты производительности провайдеров:
| Тестовый запрос | Значение задачи | Ожидаемый основной маршрут |
|---|---|---|
| Присвоить одну категорию поддержки | tag | Недорогой |
| Подготовить ответ клиенту | reply | Быстрый |
| Проверить неоднозначную политику возврата | policy_review | Высокая точность |
Успешный живой смоук-тест возвращает ответ, а также выбранный уровень, ID модели, использование токенов и все попытки. Фактические значения токенов и задержек будут различаться:
{ "text": "...", "route": "fast", "model": "gemini-3.7-flash", "usage": { "prompt_tokens": "measured value", "completion_tokens": "measured value" }, "attempts": [ { "tier": "fast", "model": "gemini-3.7-flash", "latency_ms": "measured value", "accepted": true } ]}
Для реального сравнения прогоните один и тот же размеченный набор запросов через все три модели. Запишите долю успешных задач, p50 и p95 задержки, долю ошибок, входные и выходные токены, долю фолбэков и долю ручных проверок. Обычно важнее метрика «стоимость за принятый результат», а не стоимость одного API-вызова.
Сколько стоит маршрутизация с несколькими моделями?
Используйте одну форму нагрузки для честного сравнения. Предположим 1 млн суммарных токенов: 800 000 входных и 200 000 выходных. Используя ставки из каталога по состоянию на 20 августа 2026 года:
| Маршрут | Расчет | Оценочная стоимость |
|---|---|---|
| Недорогой | 0.8 × $0.176 + 0.2 × $0.528 | $0.25 |
| Быстрый | 0.8 × $0.60 + 0.2 × $3.00 | $1.08 |
| Высокая точность | 0.8 × $4.00 + 0.2 × $20.00 | $7.20 |
Если трафик: 60% — недорогой, 30% — быстрый и 10% — высокая точность, то ориентировочная смешанная стоимость токенов составляет около $1.19 на 1 млн токенов. Отправка той же смеси полностью в маршрут высокой точности обойдется примерно в $7.20 при этих предположениях. Это ценовой расчет, а не доказательство того, что смешанная политика удовлетворит вашей цели по качеству.
Повторы и отклонения меняют результат. Одноразовая доля повторов 5% поднимает оценку $1.19 примерно до $1.25. Если недорогой вывод не проходит валидацию и весь запрос повторяется на уровне высокой точности, учитывайте оба вызова. Отслеживайте принятые результаты, чтобы «дешевая» модель не скрывала стоимость ревью или регенераций.
Каковы самые частые сбои при маршрутизации LLM?
| Сигнал | Что делать |
|---|---|
| 400 или недопустимый запрос | Исправьте полезную нагрузку. Не делайте фолбэк. |
| 401 | Перечитайте или смените API-ключ. Не повторяйте попытку. |
| 403 | Проверьте доступ к модели и неподдерживаемые поля. |
| 429 | Уменьшите нагрузку с джиттером, снизьте конкурренцию, затем используйте одобренный фолбэк, если политика позволяет. |
| Временные 5xx или таймаут | Попробуйте следующий совместимый маршрут и сохраните ID запроса. |
| Сбой по качеству | Эскалируйте один раз, запишите причину и остановитесь после заданной цепочки маршрутов. |
Руководство по ошибкам и повторным попыткам рекомендует повторять при лимитах скорости и временных сбоях платформы с экспоненциальной паузой, тогда как некорректные запросы и ошибки аутентификации следует исправлять. Руководство по фолбэку также требует, чтобы фолбэк оставался упорядоченным и явным.
Маршрутизация в приложении vs. CometAPI Auto: что выбрать?
Используйте маршрутизацию в приложении, когда важны контроль и воспроизводимость. Держите решение в вашем коде, когда задачи стабильны и вам нужны фиксированные идентификаторы моделей, бюджеты по уровням, пользовательские валидаторы и проверяемый порядок фолбэков. Такой подход также упрощает сравнение одной и той же карты моделей между релизами.
Используйте CometAPI Auto, когда важнее сократить обслуживание маршрутизации. Установите model=auto для сбалансированного значения по умолчанию или model=auto-high, когда приоритет выше у качества. CometAPI динамически выбирает допустимую модель по характеристикам запроса и текущему пулу маршрутизации, поэтому базовая модель может меняться; это делает Auto менее подходящим, когда каждый запуск должен использовать одну и ту же модель или параметры, специфичные для модели.
Как запускать маршрутизацию LLM в продакшене?
Обновляйте реестр моделей. Вызывайте GET https://api.cometapi.com/api/models при деплое или старте и проваливайте релиз, если отсутствует настроенный ID или требуемая конечная точка. Идентификаторы моделей, цены и возможности могут меняться.
Держите настройки провайдеров вне маршрутизатора. Общая поверхность Chat Completions не делает каждый параметр идентичным. Например, поддержка logprobs, управляющих рассуждением параметров или нескольких кандидатов может отличаться. Помещайте эти различия в протестированные адаптеры.
Ограничивайте трафик и вывод. Ограничьте конкурренцию до отправки запросов из приложения, используйте экспоненциальную задержку с джиттером при 429 и установите предел выходных токенов. Руководство по лимитам CometAPI рекомендует те же ограничения на стороне приложения.
Логируйте решение. Записывайте тип задачи, версию политики, выбранный уровень, ID модели, задержку, использование токенов, результат валидации, число повторов, причину фолбэка и оценку стоимости. Избегайте логирования секретов или лишнего клиентского контента.
Продвигайте маршруты на основе доказательств. Держите размеченный набор для каждой задачи. Внедряйте изменения в сопоставлении постепенно, сравнивайте с предыдущей политикой и сохраняйте быстрый путь отката.
Часто задаваемые вопросы
Решает ли CometAPI автоматически, какая модель «дешевая», «быстрая» или «точная»?
В этом туториале политика остается в коде приложения. CometAPI предоставляет единый ключ, базовый URL, каталог моделей, интерфейс Chat Completions и документированные строительные блоки фолбэка. Ваша команда определяет, что означает каждый уровень и какая модель прошла ваши тесты.
Может ли один ключ CometAPI вызывать модели разных провайдеров?
Да. Для OpenAI-совместимых текстовых маршрутов используйте https://api.cometapi.com/v1 и меняйте значение model. Текущий каталог следует проверять перед деплоем.
Почему не отправлять каждый запрос в самую дешевую модель?
Низкая ставка за токен может стать дорогой, если выходы не проходят валидацию, требуют повторов или создают работу для человека. Сравнивайте стоимость за принятый результат и держите задачи с высоким влиянием за более строгими воротами качества.
Должен ли сбой по качеству запускать фолбэк?
Только когда сбой машинно детектируем и эскалация ограничена. Ошибка схемы, отсутствие обязательного поля или запрещенное обещание могут оправдать одну эскалацию. Размытое неудовлетворение стоит превращать в данные для оценки, а не в бесконечный цикл повторов.
Как часто менять карту моделей?
Меняйте ее, когда текущие данные каталога и повторяемая оценка показывают лучшую компромиссную точку. Не ротируйте модели лишь потому, что в каталоге появилось новое имя.
Могу ли я позже добавить модель OpenAI?
Да. Добавьте актуальный OpenAI-совместимый ID модели в MODELS, протестируйте тот же контракт запроса/ответа и расставьте ее в порядке маршрута. Клиент, ключ и базовый URL останутся прежними.
Как поддерживать политику маршрутизации LLM в рабочем состоянии?
Самый простой мульти-провайдерный маршрутизатор — не автономный «черный ящик». Это короткая, версионируемая политика задач, подкрепленная общим доступом к API, текущими метаданными моделей, валидатором качества и узкой цепочкой фолбэка. CometAPI сводит работу по подключению к одному ключу и одному OpenAI-совместимому базовому URL; ваше приложение сохраняет контроль над решениями по стоимости, задержке и качеству.
