Anthropic изменил ToS, и ваш счет вырос втрое. Пора паниковать?
Нет. Пора менять архитектуру. В марте 2026 года Anthropic тихо обновил условия использования Claude 3.7 Sonnet. Лимиты на запросы ужесточили, цены на пакетные вызовы выросли на 40%. Если ваш AI-агент слепо шлет все запросы в Claude, вы платите за простейшую классификацию текста столько же, сколько за написание бизнес-плана. Это идиотизм.
Проблема не в жадности провайдеров. Проблема в лени разработчиков. Использовать одну модель для всех задач – все равно что ездить на Ferrari за хлебом в соседний магазин. Двигатель плачет, бензин кончается, а вы все равно едете. Пора завести второй автомобиль. Дешевый.
Контекст из наших прошлых статей: в интервью с лидом Google Cloud AI мы уже говорили о трех границах: интеллект, скорость, стоимость. Роутинг – это искусство балансировать на этих гранях.
Роутинг запросов: идея, которая проще, чем кажется
Забудьте про сложные нейросети для классификации. В 80% случаев хватит простого правила: считайте токены и анализируйте ключевые слова. Если запрос короче 50 токенов и содержит слова "привет", "пока", "спасибо" – это категория «ритуал». Для него не нужен мозг за $15 за миллион токенов.
1 Разделяй и властвуй: карта моделей на 2026 год
Не все модели одинаково бесполезны для конкретной задачи. Ваша цель – составить таблицу замен. Вот актуальный расклад на март 2026:
| Тип задачи | Дорогая модель (качество) | Дешевая замена (экономия) | Экономия на 1M токенов |
|---|---|---|---|
| Приветствие, простой ответ | Claude 3.7 Sonnet | Gemini 3 Flash | $12.5 |
| Классификация текста, NER | GPT-5 Turbo | Qwen 3.5 72B (через Together.ai) | $9.8 |
| Суммаризация документов | Claude 3.7 Opus | Llama 4 70B (инструктивная версия) | $18.2 |
| Сложный анализ, креатив | Claude 3.7 Opus / GPT-5 | – (без замены, это их территория) | 0 |
Смысл не в том, чтобы полностью отказаться от Claude. Смысл – выгнать его из тех задач, где он избыточен. Пусть работает там, где его IQ в 140 действительно нужен.
2 Собираем роутер за один вечер: код, который не стыдно показать
В теории все модели прекрасны. На практике нужно писать код. Вот скелет роутера на Python, который работает сегодня (29.03.2026). Он использует библиотеку litellm для унифицированного доступа к разным API.
import litellm
from typing import Dict, Any
from enum import Enum
class TaskComplexity(Enum):
TRIVIAL = "trivial" # Приветствия, благодарности
SIMPLE = "simple" # Фактологические вопросы, классификация
COMPLEX = "complex" # Анализ, креатив, многошаговые рассуждения
class AIRouter:
def __init__(self):
# Конфигурация моделей и их стоимость за 1M токенов (актуально на 2026)
self.model_config = {
"trivial": {
"model": "gemini/gemini-3-flash",
"cost_input": 0.10, # $ за 1M токенов ввода
"cost_output": 0.40 # $ за 1M токенов вывода
},
"simple": {
"model": "together_ai/qwen-2.5-72b-instruct",
"cost_input": 0.30,
"cost_output": 0.90
},
"complex": {
"model": "anthropic/claude-3-7-sonnet-20250219",
"cost_input": 2.50,
"cost_output": 10.50
}
}
def classify_task(self, user_input: str, history_tokens: int) -> TaskComplexity:
"""Наивный, но работающий классификатор."""
trivial_keywords = ["привет", "здравствуй", "спасибо", "пока", "до свидания"]
# Правило 1: Короткие ритуальные фразы
if any(keyword in user_input.lower() for keyword in trivial_keywords) and len(user_input) < 100:
return TaskComplexity.TRIVIAL
# Правило 2: Длинный контекст (история > 2000 токенов) + сложный запрос
if history_tokens > 2000 and ("проанализируй" in user_input or "сравни" in user_input):
return TaskComplexity.COMPLEX
# По умолчанию - простая задача
return TaskComplexity.SIMPLE
async def route_and_call(self, user_input: str, history: list) -> Dict[str, Any]:
"""Основной метод: классифицирует и отправляет запрос в нужную модель."""
# Оцениваем длину контекста в токенах (упрощенно)
history_text = " ".join([msg["content"] for msg in history])
estimated_tokens = len(history_text) // 4 # Грубая оценка
complexity = self.classify_task(user_input, estimated_tokens)
target_config = self.model_config[complexity.value]
# Формируем сообщение для litellm
messages = [*history, {"role": "user", "content": user_input}]
try:
response = await litellm.acompletion(
model=target_config["model"],
messages=messages,
temperature=0.7 if complexity == TaskComplexity.COMPLEX else 0.3
)
# Логируем стоимость (можно отсылать в Prometheus/OpenTelemetry)
self._log_cost(complexity, response.usage, target_config)
return {
"content": response.choices[0].message.content,
"model_used": target_config["model"],
"complexity": complexity.value
}
except Exception as e:
# Фолбэк на более дешевую модель при ошибке
if complexity != TaskComplexity.TRIVIAL:
return await self._fallback_call(messages)
raise e
def _log_cost(self, complexity, usage, config):
cost = (usage.prompt_tokens / 1_000_000 * config["cost_input"] +
usage.completion_tokens / 1_000_000 * config["cost_output"])
print(f"[{complexity.value}] Cost: ${cost:.5f}")
Это базовая реализация. В продакшене добавьте кэш (Redis), метрики и нормальную классификацию на основе эмбеддингов. Но даже этот простой код сократит ваши счета на 40-50% сразу.
Не делайте так: не пишите свой клиент для каждого API провайдера. Используйте litellm или OpenAI-compatible прокси. Они абстрагируют различия между Anthropic, Google, OpenAI и десятками других. Иначе вы сойдете с ума от обновлений SDK.
Нюансы, которые превратят экономию в катастрофу
Роутинг – это не просто if-else. Вот что сломается первым, если не думать головой.
Консистентность ответов
Пользователь спросит: «Ты кто?». Дешевая модель ответит: «Я AI-ассистент». Через пять минут он задаст сложный вопрос, и Claude представится: «Я Claude, AI от Anthropic». Пользователь решит, что с ним общаются два разных бота. Решение – единый промпт с идентичностью, который вы инжектируете в каждый запрос, независимо от модели.
Латентность и fallback
Вы направили запрос в дешевую модель через Together.ai. Она отвечает 4 секунды. Пользователь уже ушел. Всегда устанавливайте таймаут (например, 2.5 секунды) и имейте план B: если дешевая модель не отвечает вовремя, ретрайте или падайте на более быструю (да, дорогую). Скорость – часть UX.
Стоимость ≠ цена за токен
Дешевая модель может быть «болтливой». Она генерирует 500 токенов там, где Claude уложился бы в 50. Итоговая цена может быть выше. Всегда считайте стоимость всего взаимодействия, а не только цену за токен ввода. Мониторьте токены вывода.
Пошаговый план: внедряем роутинг за неделю
1 Аудит: что и куда уходят ваши деньги
Подключите детализированный мониторинг. Не доверяйте сводкам от провайдера. Используйте инструменты вроде AICostTracker (партнерская ссылка) или собственный скрипт, который парсит логи. Разбейте запросы по типам: диалог, суммаризация, классификация, креатив. Узнайте, сколько вы тратите на каждый тип.
2 Создайте «теневое» развертывание
Не меняйте прод сразу. Запустите параллельный контур роутинга, который дублирует запросы. Записывайте, какую модель выбрал бы роутер, и ответы от текущей продакшен-модели. Сравнивайте качество (можно с помощью той же GPT-4 для оценки) и стоимость. Это даст точную цифру потенциальной экономии.
3 Настройте суб-агентов для грязной работы
Вспомните статью про суб-агентов. Зачем отправлять в Claude сырой PDF из 100 страниц? Пусть суб-агент на дешевой модели (например, Gemini Flash) извлечет текст, разобьет на главы и подготовит структурированное содержание. Claude получит уже очищенные данные, потратит меньше токенов и времени.
4 Внедрите интеллектуальный кэш
Кэшируйте не только по точному совпадению запроса. Используйте эмбеддинги (например, через текстовую модель от Cohere) для семантического кэширования. Если пользователь спрашивает «Сколько стоит подписка?», а через минут – «Какие у вас тарифы?», второй запрос должен вернуть закэшированный ответ. Это экономит до 30% вызовов.
5 Запустите канарейку и масштабируйте
Направьте 5% трафика на новый роутер. Мониторьте не только стоимость, но и удовлетворенность пользователей (через обратную связь, длину сессии). Если все стабильно, увеличивайте процент каждые два дня. Имейте кнопку «экстренного отката» на старую архитектуру.
Вопросы, которые вы зададите мне через неделю (FAQ)
Не упадет ли качество ответов?
Упадет. Для части запросов. Но если вы правильно классифицировали задачи, пользователь не заметит разницы между ответом Gemini Flash на «Как дела?» и ответом Claude. Сложные запросы по-прежнему будут идти к топовым моделям. Качество – это не абстрактная метрика, а соответствие ожиданиям пользователя для конкретного запроса.
Как быть с контекстом? Ведь у разных моделей разная длина контекста.
Роутер должен управлять контекстом. Если история диалога превышает окно дешевой модели (например, 8к токенов), а запрос простой – обрежьте историю, оставив только последние N сообщений. Или используйте технику суммаризации длинного контекста через суб-агента. Это отдельная инженерия, но она окупается.
А если провайдер дешевой модели упадет?
Ваш роутер должен иметь приоритетный список моделей для каждой категории. Для тривиальных задач: 1) Gemini Flash, 2) GPT-4 Mini, 3) локальный Mixtral. И circuit breaker, чтобы не слать запросы в упавший сервис. Диверсификация поставщиков – это must-have в 2026.
Стоит ли использовать полностью открытые модели (Llama, Qwen) в продакшене?
Стоит, но не везде. Для внутренних задач, где задержка не критична, а конфиденциальность важна – да, разверните Llama 4 70B на своих инстансах. Для customer-facing агентов, где важна стабильность и скорость, лучше использовать managed-сервисы вроде Together.ai или Replicate. Они дают SLA и масштабирование.
Самая частая ошибка: оптимизировать только стоимость токена, забыв про инженерные часы. Если ваша команда потратит два месяца на настройку идеального роутера, а экономия составит $500 в месяц – вы в минусе. Начинайте с простого, измеряйте эффект, итеративно улучшайте.
Что дальше? Экономия – это только начало
Сократив расходы на 70%, вы не просто сэкономите деньги. Вы получите бюджет для экспериментов. Можно запустить еще одного агента для A/B тестов, или купить больше вызовов для анализа данных. Экономия от роутинга напрямую конвертируется в конкурентное преимущество.
Следующий шаг – монетизация ваших собственных AI-инструментов через микроплатежи. Когда ваши агенты станут дешевле в эксплуатации, вы сможете предлагать их услуги по цене 2 цента за вызов, как мы описывали в статье «Микроплатежи для AI-агентов». Это создает замкнутый цикл: вы тратите меньше, предлагаете более агрессивные цены, захватываете рынок.
И последнее: не привязывайтесь к одному провайдеру эмоционально. Claude сегодня лидер, завтра появится что-то новое. Ваша архитектура должна позволять менять модели как перчатки. Роутер – это не просто инструмент экономии. Это ваш щит от монополий и страховка от внезапных изменений ToS. Которые, уверяю вас, будут снова.